Skip to content

Commit fef6455

Browse files
committed
implement requested changes
1 parent afdfb6a commit fef6455

File tree

4 files changed

+10
-13
lines changed

4 files changed

+10
-13
lines changed

compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public enum ErrorMessageID {
104104
EnumCaseDefinitionInNonEnumOwnerID,
105105
ExpectedTypeBoundOrEqualsID,
106106
ClassAndCompanionNameClashID,
107-
TailrecNotApplicableNeitherPrivateNorFinalID,
107+
TailrecNotApplicableID,
108108
;
109109

110110
public int errorNumber() {

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1819,13 +1819,11 @@ object messages {
18191819
}
18201820
}
18211821

1822-
case class TailrecNotApplicableNeitherPrivateNorFinal(owner: Symbol)(implicit ctx: Context)
1823-
extends Message(TailrecNotApplicableNeitherPrivateNorFinalID) {
1822+
case class TailrecNotApplicable(method: Symbol)(implicit ctx: Context)
1823+
extends Message(TailrecNotApplicableID) {
18241824
val kind = "Syntax"
1825-
val msg = hl"TailRec optimisation not applicable, ${owner} is neither `private` nor `final` so can be overridden"
1825+
val msg = hl"TailRec optimisation not applicable, $method is neither ${"private"} nor ${"final"}."
18261826
val explanation =
1827-
hl"""
1828-
|The `@tailrec` annotation can only be used on methods that are either `private` or `final`.
1829-
"""
1827+
hl"A method annotated ${"@tailrec"} must be declared ${"private"} or ${"final"} so it can't be overridden."
18301828
}
18311829
}

compiler/src/dotty/tools/dotc/transform/TailRec.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Symbols._
1212
import Types._
1313
import NameKinds.TailLabelName
1414
import TreeTransforms.{MiniPhaseTransform, TransformerInfo}
15-
import reporting.diagnostic.messages.TailrecNotApplicableNeitherPrivateNorFinal
15+
import reporting.diagnostic.messages.TailrecNotApplicable
1616

1717
/**
1818
* A Tail Rec Transformer
@@ -162,7 +162,7 @@ class TailRec extends MiniPhaseTransform with DenotTransformer with FullParamete
162162
})
163163
}
164164
case d: DefDef if d.symbol.hasAnnotation(defn.TailrecAnnot) || methodsWithInnerAnnots.contains(d.symbol) =>
165-
ctx.error(TailrecNotApplicableNeitherPrivateNorFinal(sym), sym.pos)
165+
ctx.error(TailrecNotApplicable(sym), sym.pos)
166166
d
167167
case d if d.symbol.hasAnnotation(defn.TailrecAnnot) || methodsWithInnerAnnots.contains(d.symbol) =>
168168
ctx.error("TailRec optimisation not applicable, not a method", sym.pos)

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,22 +1023,21 @@ class ErrorMessagesTests extends ErrorMessagesTest {
10231023
assertMessageCount(1, messages)
10241024
val EnumCaseDefinitionInNonEnumOwner(owner) :: Nil = messages
10251025
assertEquals("object Qux", owner.show)
1026+
}
10261027

10271028
@Test def tailrecNotApplicableNeitherPrivateNorFinal =
10281029
checkMessagesAfter("tailrec") {
10291030
"""
10301031
|class Foo {
1031-
|
10321032
| @scala.annotation.tailrec
10331033
| def foo: Unit = foo
1034-
|
10351034
|}
10361035
""".stripMargin
10371036
}.expect { (ictx, messages) =>
10381037
implicit val ctx: Context = ictx
10391038
assertMessageCount(1, messages)
1040-
val TailrecNotApplicableNeitherPrivateNorFinal(symbol) :: Nil = messages
1041-
assertEquals(symbol.show, "method foo")
1039+
val TailrecNotApplicable(method) :: Nil = messages
1040+
assertEquals(method.show, "method foo")
10421041
}
10431042

10441043
@Test def expectedTypeBoundOrEquals =

0 commit comments

Comments
 (0)