@@ -207,8 +207,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
207
207
implicit val ctx : Context = ictx
208
208
209
209
assertMessageCount(1 , messages)
210
- val OverloadedOrRecursiveMethodNeedsResultType (tree) :: Nil = messages
211
- assertEquals(" foo" , tree.show)
210
+ val OverloadedOrRecursiveMethodNeedsResultType (methodName, cycleSym) :: Nil = messages
211
+ assertEquals(" foo" , methodName.show)
212
+ assertEquals(" foo" , cycleSym.name.show)
212
213
}
213
214
214
215
@ Test def recursiveMethodNeedsReturnType =
@@ -223,8 +224,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
223
224
implicit val ctx : Context = ictx
224
225
225
226
assertMessageCount(1 , messages)
226
- val OverloadedOrRecursiveMethodNeedsResultType (tree) :: Nil = messages
227
- assertEquals(" i" , tree.show)
227
+ val OverloadedOrRecursiveMethodNeedsResultType (methodName, cycleSym) :: Nil = messages
228
+ assertEquals(" i" , methodName.show)
229
+ assertEquals(" i" , cycleSym.name.show)
228
230
}
229
231
230
232
@ Test def recursiveValueNeedsReturnType =
@@ -239,10 +241,29 @@ class ErrorMessagesTests extends ErrorMessagesTest {
239
241
implicit val ctx : Context = ictx
240
242
241
243
assertMessageCount(1 , messages)
242
- val RecursiveValueNeedsResultType (tree) :: Nil = messages
243
- assertEquals(" i" , tree.show)
244
+ val RecursiveValueNeedsResultType (valName, cycleSym) :: Nil = messages
245
+ assertEquals(" i" , valName.show)
246
+ assertEquals(" i" , cycleSym.name.show)
244
247
}
245
248
249
+ @ Test def recursiveValueNeedsReturnType2 =
250
+ checkMessagesAfter(FrontEnd .name) {
251
+ """
252
+ |class Scope() {
253
+ | lazy val i = j + 5
254
+ | lazy val j = i
255
+ |}
256
+ """ .stripMargin
257
+ }
258
+ .expect { (ictx, messages) =>
259
+ implicit val ctx : Context = ictx
260
+
261
+ assertMessageCount(1 , messages)
262
+ val RecursiveValueNeedsResultType (valName, cycleSym) :: Nil = messages
263
+ assertEquals(" j" , valName.show)
264
+ assertEquals(" i" , cycleSym.name.show)
265
+ }
266
+
246
267
@ Test def cyclicReferenceInvolving =
247
268
checkMessagesAfter(FrontEnd .name) {
248
269
"""
@@ -290,8 +311,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
290
311
implicit val ctx : Context = ictx
291
312
292
313
assertMessageCount(1 , messages)
293
- val OverloadedOrRecursiveMethodNeedsResultType (name) :: Nil = messages
294
- assertEquals(" even" , name.show)
314
+ val OverloadedOrRecursiveMethodNeedsResultType (methodName, cycleSym) :: Nil = messages
315
+ assertEquals(" even" , methodName.show)
316
+ assertEquals(" odd" , cycleSym.name.show)
295
317
}
296
318
297
319
@ Test def mutualRecursion_i2001a =
@@ -312,13 +334,37 @@ class ErrorMessagesTests extends ErrorMessagesTest {
312
334
implicit val ctx : Context = ictx
313
335
314
336
assertMessageCount(1 , messages)
315
- val OverloadedOrRecursiveMethodNeedsResultType (denot ) :: Nil = messages
337
+ val OverloadedOrRecursiveMethodNeedsResultType (methodName, cycleSym ) :: Nil = messages
316
338
// Not ideal behavior
317
- assertEquals(" foo" , denot.show)
339
+ assertEquals(" foo" , methodName.show)
340
+ assertEquals(" odd" , cycleSym.name.show)
318
341
}
319
342
343
+ @ Test def mutualRecursion_i2001b =
344
+ checkMessagesAfter(FrontEnd .name) {
345
+ """
346
+ |class A {
347
+ | def odd(x: Int) = if (x == 0) false else !even(x-1)
348
+ | def even(x: Int) = {
349
+ | val foo = {
350
+ | if (x == 0) true else !odd(x-1) // error: overloaded or recursive method needs result type
351
+ | }
352
+ | false
353
+ | }
354
+ |}
355
+ """ .stripMargin
356
+ }
357
+ .expect { (ictx, messages) =>
358
+ implicit val ctx : Context = ictx
359
+
360
+ assertMessageCount(1 , messages)
361
+ val OverloadedOrRecursiveMethodNeedsResultType (methodName, cycleSym) :: Nil = messages
362
+ // Not ideal behavior
363
+ assertEquals(" foo" , methodName.show)
364
+ assertEquals(" odd" , cycleSym.name.show)
365
+ }
320
366
321
- @ Test def termMemberNeedsNeedsResultTypeForImplicitSearch =
367
+ @ Test def termMemberNeedsResultTypeForImplicitSearch =
322
368
checkMessagesAfter(FrontEnd .name) {
323
369
"""
324
370
|object implicitDefs {
@@ -334,8 +380,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
334
380
implicit val ctx : Context = ictx
335
381
336
382
assertMessageCount(1 , messages)
337
- val TermMemberNeedsResultTypeForImplicitSearch (tree) :: Nil = messages
338
- assertEquals(" x" , tree.name.show)
383
+ val TermMemberNeedsResultTypeForImplicitSearch (memberName, cycleSym) :: Nil = messages
384
+ assertEquals(" x" , cycleSym.name.show)
385
+ assertEquals(" x" , memberName.show)
339
386
}
340
387
341
388
@ Test def implicitSearchForcesImplicitRetType_i4709 =
@@ -359,8 +406,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
359
406
implicit val ctx : Context = ictx
360
407
361
408
assertMessageCount(1 , messages)
362
- val TermMemberNeedsResultTypeForImplicitSearch (tree) :: Nil = messages
363
- assertEquals(" ctx" , tree.name.show)
409
+ val TermMemberNeedsResultTypeForImplicitSearch (memberName, cycleSym) :: Nil = messages
410
+ assertEquals(" ctx" , memberName.show)
411
+ assertEquals(" ctx" , cycleSym.name.show)
364
412
}
365
413
366
414
@ Test def implicitSearchForcesNonImplicitRetTypeOnExplicitImport_i3253 =
@@ -377,8 +425,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
377
425
implicit val ctx : Context = ictx
378
426
379
427
assertMessageCount(1 , messages)
380
- val TermMemberNeedsResultTypeForImplicitSearch (tree) :: Nil = messages
381
- assertEquals(" test" , tree.name.show)
428
+ val TermMemberNeedsResultTypeForImplicitSearch (memberName, cycleSym) :: Nil = messages
429
+ assertEquals(" test" , memberName.show)
430
+ assertEquals(" test" , cycleSym.name.show)
382
431
}
383
432
384
433
@ Test def superQualMustBeParent =
0 commit comments