@@ -207,8 +207,8 @@ 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 (cycleSym ) :: Nil = messages
211
+ assertEquals(" foo" , cycleSym.name .show)
212
212
}
213
213
214
214
@ Test def recursiveMethodNeedsReturnType =
@@ -223,8 +223,8 @@ class ErrorMessagesTests extends ErrorMessagesTest {
223
223
implicit val ctx : Context = ictx
224
224
225
225
assertMessageCount(1 , messages)
226
- val OverloadedOrRecursiveMethodNeedsResultType (tree ) :: Nil = messages
227
- assertEquals(" i" , tree .show)
226
+ val OverloadedOrRecursiveMethodNeedsResultType (cycleSym ) :: Nil = messages
227
+ assertEquals(" i" , cycleSym.name .show)
228
228
}
229
229
230
230
@ Test def recursiveValueNeedsReturnType =
@@ -239,10 +239,27 @@ class ErrorMessagesTests extends ErrorMessagesTest {
239
239
implicit val ctx : Context = ictx
240
240
241
241
assertMessageCount(1 , messages)
242
- val RecursiveValueNeedsResultType (tree ) :: Nil = messages
243
- assertEquals(" i" , tree .show)
242
+ val RecursiveValueNeedsResultType (cycleSym ) :: Nil = messages
243
+ assertEquals(" i" , cycleSym.name .show)
244
244
}
245
245
246
+ @ Test def recursiveValueNeedsReturnType2 =
247
+ checkMessagesAfter(FrontEnd .name) {
248
+ """
249
+ |class Scope() {
250
+ | lazy val i = j + 5
251
+ | lazy val j = i
252
+ |}
253
+ """ .stripMargin
254
+ }
255
+ .expect { (ictx, messages) =>
256
+ implicit val ctx : Context = ictx
257
+
258
+ assertMessageCount(1 , messages)
259
+ val RecursiveValueNeedsResultType (cycleSym) :: Nil = messages
260
+ assertEquals(" i" , cycleSym.name.show)
261
+ }
262
+
246
263
@ Test def cyclicReferenceInvolving =
247
264
checkMessagesAfter(FrontEnd .name) {
248
265
"""
@@ -260,7 +277,85 @@ class ErrorMessagesTests extends ErrorMessagesTest {
260
277
assertEquals(" value x" , denot.show)
261
278
}
262
279
263
- @ Test def cyclicReferenceInvolvingImplicit =
280
+ @ Test def cyclicReferenceInvolving2 =
281
+ checkMessagesAfter(FrontEnd .name) {
282
+ """
283
+ |class A {
284
+ | implicit val x: T = ???
285
+ | type T <: x.type // error: cyclic reference involving value x
286
+ |}
287
+ """ .stripMargin
288
+ }
289
+ .expect { (ictx, messages) =>
290
+ implicit val ctx : Context = ictx
291
+
292
+ assertMessageCount(1 , messages)
293
+ val CyclicReferenceInvolving (denot) :: Nil = messages
294
+ assertEquals(" value x" , denot.show)
295
+ }
296
+
297
+ @ Test def mutualRecursionre_i2001 =
298
+ checkMessagesAfter(FrontEnd .name) {
299
+ """
300
+ |class A {
301
+ | def odd(x: Int) = if (x == 0) false else !even(x-1)
302
+ | def even(x: Int) = if (x == 0) true else !odd(x-1) // error: overloaded or recursive method needs result type
303
+ |}
304
+ """ .stripMargin
305
+ }
306
+ .expect { (ictx, messages) =>
307
+ implicit val ctx : Context = ictx
308
+
309
+ assertMessageCount(1 , messages)
310
+ val OverloadedOrRecursiveMethodNeedsResultType (cycleSym) :: Nil = messages
311
+ assertEquals(" odd" , cycleSym.name.show)
312
+ }
313
+
314
+ @ Test def mutualRecursion_i2001a =
315
+ checkMessagesAfter(FrontEnd .name) {
316
+ """
317
+ |class A {
318
+ | def odd(x: Int) = if (x == 0) false else !even(x-1)
319
+ | def even(x: Int) = {
320
+ | def foo = {
321
+ | if (x == 0) true else !odd(x-1) // error: overloaded or recursive method needs result type
322
+ | }
323
+ | false
324
+ | }
325
+ |}
326
+ """ .stripMargin
327
+ }
328
+ .expect { (ictx, messages) =>
329
+ implicit val ctx : Context = ictx
330
+
331
+ assertMessageCount(1 , messages)
332
+ val OverloadedOrRecursiveMethodNeedsResultType (cycleSym) :: Nil = messages
333
+ assertEquals(" odd" , cycleSym.name.show)
334
+ }
335
+
336
+ @ Test def mutualRecursion_i2001b =
337
+ checkMessagesAfter(FrontEnd .name) {
338
+ """
339
+ |class A {
340
+ | def odd(x: Int) = if (x == 0) false else !even(x-1)
341
+ | def even(x: Int) = {
342
+ | val foo = {
343
+ | if (x == 0) true else !odd(x-1) // error: overloaded or recursive method needs result type
344
+ | }
345
+ | false
346
+ | }
347
+ |}
348
+ """ .stripMargin
349
+ }
350
+ .expect { (ictx, messages) =>
351
+ implicit val ctx : Context = ictx
352
+
353
+ assertMessageCount(1 , messages)
354
+ val OverloadedOrRecursiveMethodNeedsResultType (cycleSym) :: Nil = messages
355
+ assertEquals(" odd" , cycleSym.name.show)
356
+ }
357
+
358
+ @ Test def termMemberNeedsResultTypeForImplicitSearch =
264
359
checkMessagesAfter(FrontEnd .name) {
265
360
"""
266
361
|object implicitDefs {
@@ -276,10 +371,53 @@ class ErrorMessagesTests extends ErrorMessagesTest {
276
371
implicit val ctx : Context = ictx
277
372
278
373
assertMessageCount(1 , messages)
279
- val CyclicReferenceInvolvingImplicit (tree ) :: Nil = messages
280
- assertEquals(" x" , tree .name.show)
374
+ val TermMemberNeedsResultTypeForImplicitSearch (cycleSym ) :: Nil = messages
375
+ assertEquals(" x" , cycleSym .name.show)
281
376
}
282
377
378
+ @ Test def implicitSearchForcesImplicitRetType_i4709 =
379
+ checkMessagesAfter(FrontEnd .name) {
380
+ """
381
+ |import scala.language.implicitConversions
382
+ |
383
+ |class Context
384
+ |class ContextBase { def settings = 1 }
385
+ |
386
+ |class Test {
387
+ | implicit def toBase(ctx: Context): ContextBase = ???
388
+ |
389
+ | def test(ctx0: Context) = {
390
+ | implicit val ctx = { ctx0.settings; ??? }
391
+ | }
392
+ |}
393
+ """ .stripMargin
394
+ }
395
+ .expect{ (ictx, messages) =>
396
+ implicit val ctx : Context = ictx
397
+
398
+ assertMessageCount(1 , messages)
399
+ val TermMemberNeedsResultTypeForImplicitSearch (cycleSym) :: Nil = messages
400
+ assertEquals(" ctx" , cycleSym.name.show)
401
+ }
402
+
403
+ @ Test def implicitSearchForcesNonImplicitRetTypeOnExplicitImport_i3253 =
404
+ checkMessagesAfter(FrontEnd .name) {
405
+ """
406
+ |import Test.test
407
+ |
408
+ |object Test {
409
+ | def test = " " * 10
410
+ |}
411
+ """ .stripMargin
412
+ }
413
+ .expect{ (ictx, messages) =>
414
+ implicit val ctx : Context = ictx
415
+
416
+ assertMessageCount(1 , messages)
417
+ val TermMemberNeedsResultTypeForImplicitSearch (cycleSym) :: Nil = messages
418
+ assertEquals(" test" , cycleSym.name.show)
419
+ }
420
+
283
421
@ Test def superQualMustBeParent =
284
422
checkMessagesAfter(FrontEnd .name) {
285
423
"""
@@ -334,7 +472,7 @@ class ErrorMessagesTests extends ErrorMessagesTest {
334
472
assertEquals(namedImport, prevPrec)
335
473
}
336
474
337
- @ Test def methodDoesNotTakePrameters =
475
+ @ Test def methodDoesNotTakeParameters =
338
476
checkMessagesAfter(FrontEnd .name) {
339
477
"""
340
478
|object Scope {
@@ -353,7 +491,7 @@ class ErrorMessagesTests extends ErrorMessagesTest {
353
491
assertEquals(" method foo" , msg.methodSymbol.show)
354
492
}
355
493
356
- @ Test def methodDoesNotTakeMorePrameters =
494
+ @ Test def methodDoesNotTakeMoreParameters =
357
495
checkMessagesAfter(FrontEnd .name) {
358
496
"""
359
497
|object Scope{
0 commit comments