@@ -207,8 +207,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
207207 implicit val ctx : Context = ictx
208208
209209 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)
212213 }
213214
214215 @ Test def recursiveMethodNeedsReturnType =
@@ -223,8 +224,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
223224 implicit val ctx : Context = ictx
224225
225226 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)
228230 }
229231
230232 @ Test def recursiveValueNeedsReturnType =
@@ -239,10 +241,29 @@ class ErrorMessagesTests extends ErrorMessagesTest {
239241 implicit val ctx : Context = ictx
240242
241243 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)
244247 }
245248
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+
246267 @ Test def cyclicReferenceInvolving =
247268 checkMessagesAfter(FrontEnd .name) {
248269 """
@@ -290,8 +311,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
290311 implicit val ctx : Context = ictx
291312
292313 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)
295317 }
296318
297319 @ Test def mutualRecursion_i2001a =
@@ -312,11 +334,35 @@ class ErrorMessagesTests extends ErrorMessagesTest {
312334 implicit val ctx : Context = ictx
313335
314336 assertMessageCount(1 , messages)
315- val OverloadedOrRecursiveMethodNeedsResultType (denot ) :: Nil = messages
337+ val OverloadedOrRecursiveMethodNeedsResultType (methodName, cycleSym ) :: Nil = messages
316338 // Not ideal behavior
317- assertEquals(" foo" , denot.show)
339+ assertEquals(" foo" , methodName.show)
340+ assertEquals(" odd" , cycleSym.name.show)
318341 }
319342
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+ }
320366
321367 @ Test def termMemberNeedsNeedsResultTypeForImplicitSearch =
322368 checkMessagesAfter(FrontEnd .name) {
@@ -334,8 +380,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
334380 implicit val ctx : Context = ictx
335381
336382 assertMessageCount(1 , messages)
337- val TermMemberNeedsNeedsResultTypeForImplicitSearch (tree) :: Nil = messages
338- assertEquals(" x" , tree.name.show)
383+ val TermMemberNeedsNeedsResultTypeForImplicitSearch (memberName, cycleSym) :: Nil = messages
384+ assertEquals(" x" , cycleSym.name.show)
385+ assertEquals(" x" , memberName.show)
339386 }
340387
341388 @ Test def implicitSearchForcesImplicitRetType_i4709 =
@@ -359,8 +406,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
359406 implicit val ctx : Context = ictx
360407
361408 assertMessageCount(1 , messages)
362- val TermMemberNeedsNeedsResultTypeForImplicitSearch (tree) :: Nil = messages
363- assertEquals(" ctx" , tree.name.show)
409+ val TermMemberNeedsNeedsResultTypeForImplicitSearch (memberName, cycleSym) :: Nil = messages
410+ assertEquals(" ctx" , memberName.show)
411+ assertEquals(" ctx" , cycleSym.name.show)
364412 }
365413
366414 @ Test def implicitSearchForcesNonImplicitRetTypeOnExplicitImport_i3253 =
@@ -377,8 +425,9 @@ class ErrorMessagesTests extends ErrorMessagesTest {
377425 implicit val ctx : Context = ictx
378426
379427 assertMessageCount(1 , messages)
380- val TermMemberNeedsNeedsResultTypeForImplicitSearch (tree) :: Nil = messages
381- assertEquals(" test" , tree.name.show)
428+ val TermMemberNeedsNeedsResultTypeForImplicitSearch (memberName, cycleSym) :: Nil = messages
429+ assertEquals(" test" , memberName.show)
430+ assertEquals(" test" , cycleSym.name.show)
382431 }
383432
384433 @ Test def superQualMustBeParent =
0 commit comments