Skip to content

Commit 6ca9478

Browse files
authored
Merge pull request #3750 from dotty-staging/fix-#2994-v2
Fix #2994
2 parents e2cec18 + 614e5ca commit 6ca9478

File tree

4 files changed

+14
-45
lines changed

4 files changed

+14
-45
lines changed

compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,29 +1253,20 @@ object messages {
12531253
|""".stripMargin
12541254
}
12551255

1256-
case class OverloadedOrRecursiveMethodNeedsResultType private (termName: String)(implicit ctx: Context)
1256+
case class OverloadedOrRecursiveMethodNeedsResultType(tree: Names.TermName)(implicit ctx: Context)
12571257
extends Message(OverloadedOrRecursiveMethodNeedsResultTypeID) {
12581258
val kind = "Syntax"
1259-
val msg = hl"""overloaded or recursive method $termName needs return type"""
1259+
val msg = hl"""overloaded or recursive method ${tree} needs return type"""
12601260
val explanation =
1261-
hl"""Case 1: $termName is overloaded
1262-
|If there are multiple methods named `$termName` and at least one definition of
1261+
hl"""Case 1: ${tree} is overloaded
1262+
|If there are multiple methods named `${tree.name}` and at least one definition of
12631263
|it calls another, you need to specify the calling method's return type.
12641264
|
1265-
|Case 2: $termName is recursive
1266-
|If `$termName` calls itself on any path, you need to specify its return type.
1265+
|Case 2: ${tree} is recursive
1266+
|If `${tree.name}` calls itself on any path, you need to specify its return type.
12671267
|""".stripMargin
12681268
}
12691269

1270-
object OverloadedOrRecursiveMethodNeedsResultType {
1271-
def apply[T >: Trees.Untyped](tree: NameTree[T])(implicit ctx: Context)
1272-
: OverloadedOrRecursiveMethodNeedsResultType =
1273-
OverloadedOrRecursiveMethodNeedsResultType(tree.name.show)(ctx)
1274-
def apply(symbol: Symbol)(implicit ctx: Context)
1275-
: OverloadedOrRecursiveMethodNeedsResultType =
1276-
OverloadedOrRecursiveMethodNeedsResultType(symbol.name.show)(ctx)
1277-
}
1278-
12791270
case class RecursiveValueNeedsResultType(tree: Names.TermName)(implicit ctx: Context)
12801271
extends Message(RecursiveValueNeedsResultTypeID) {
12811272
val kind = "Syntax"
@@ -1373,8 +1364,7 @@ object messages {
13731364
|"""
13741365
}
13751366

1376-
case class MethodDoesNotTakeParameters(tree: tpd.Tree, methPartType: Types.Type)
1377-
(err: typer.ErrorReporting.Errors)(implicit ctx: Context)
1367+
case class MethodDoesNotTakeParameters(tree: tpd.Tree, methPartType: Types.Type)(err: typer.ErrorReporting.Errors)(implicit ctx: Context)
13781368
extends Message(MethodDoesNotTakeParametersId) {
13791369
private val more = tree match {
13801370
case Apply(_, _) => " more"

compiler/src/dotty/tools/dotc/typer/ErrorReporting.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ object ErrorReporting {
2929
if (cx.mode is Mode.InferringReturnType) {
3030
cx.tree match {
3131
case tree: untpd.DefDef if !tree.tpt.typeOpt.exists =>
32-
OverloadedOrRecursiveMethodNeedsResultType(tree)
32+
OverloadedOrRecursiveMethodNeedsResultType(tree.name)
3333
case tree: untpd.ValDef if !tree.tpt.typeOpt.exists =>
3434
RecursiveValueNeedsResultType(tree.name)
3535
case _ =>

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2056,13 +2056,7 @@ class Typer extends Namer
20562056
else
20572057
tree
20582058
case _ => tryInsertApplyOrImplicit(tree, pt) {
2059-
pt.resType match {
2060-
case IgnoredProto(WildcardType(optBounds))
2061-
if (optBounds == NoType) && (pt.args.size == tree.productArity) =>
2062-
errorTree(tree, OverloadedOrRecursiveMethodNeedsResultType(tree.symbol))
2063-
case resType =>
2064-
errorTree(tree, MethodDoesNotTakeParameters(tree, methPart(tree).tpe)(err))
2065-
}
2059+
errorTree(tree, MethodDoesNotTakeParameters(tree, methPart(tree).tpe)(err))
20662060
}
20672061
}
20682062

compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ class ErrorMessagesTests extends ErrorMessagesTest {
193193
assertTrue("expected trait", isTrait)
194194
}
195195

196-
@Test def overloadedMethodNeedsReturnType = {
196+
@Test def overloadedMethodNeedsReturnType =
197197
checkMessagesAfter("frontend") {
198198
"""
199199
|class Scope() {
@@ -206,25 +206,10 @@ class ErrorMessagesTests extends ErrorMessagesTest {
206206
implicit val ctx: Context = ictx
207207

208208
assertMessageCount(1, messages)
209-
val OverloadedOrRecursiveMethodNeedsResultType(treeName) :: Nil = messages
210-
assertEquals("foo", treeName)
209+
val OverloadedOrRecursiveMethodNeedsResultType(tree) :: Nil = messages
210+
assertEquals("foo", tree.show)
211211
}
212212

213-
214-
checkMessagesAfter("frontend") {
215-
"""
216-
|case class Foo[T](x: T)
217-
|object Foo { def apply[T]() = Foo(null.asInstanceOf[T]) }
218-
""".stripMargin
219-
}.expect { (ictx, messages) =>
220-
implicit val ctx: Context = ictx
221-
222-
assertMessageCount(1, messages)
223-
val OverloadedOrRecursiveMethodNeedsResultType(treeName2) :: Nil = messages
224-
assertEquals("Foo", treeName2)
225-
}
226-
}
227-
228213
@Test def recursiveMethodNeedsReturnType =
229214
checkMessagesAfter("frontend") {
230215
"""
@@ -237,8 +222,8 @@ class ErrorMessagesTests extends ErrorMessagesTest {
237222
implicit val ctx: Context = ictx
238223

239224
assertMessageCount(1, messages)
240-
val OverloadedOrRecursiveMethodNeedsResultType(treeName) :: Nil = messages
241-
assertEquals("i", treeName)
225+
val OverloadedOrRecursiveMethodNeedsResultType(tree) :: Nil = messages
226+
assertEquals("i", tree.show)
242227
}
243228

244229
@Test def recursiveValueNeedsReturnType =

0 commit comments

Comments
 (0)