File tree Expand file tree Collapse file tree 4 files changed +26
-2
lines changed
test/dotty/tools/dotc/reporting Expand file tree Collapse file tree 4 files changed +26
-2
lines changed Original file line number Diff line number Diff line change @@ -112,6 +112,7 @@ public enum ErrorMessageID {
112
112
UndefinedNamedTypeParameterID ,
113
113
IllegalStartOfStatementID ,
114
114
TraitIsExpectedID ,
115
+ TraitRedefinedFinalMethodFromAnyRefID ,
115
116
;
116
117
117
118
public int errorNumber () {
Original file line number Diff line number Diff line change @@ -1916,4 +1916,10 @@ object messages {
1916
1916
| """
1917
1917
}
1918
1918
}
1919
+
1920
+ case class TraitRedefinedFinalMethodFromAnyRef (method : Symbol )(implicit ctx : Context ) extends Message (TraitRedefinedFinalMethodFromAnyRefID ) {
1921
+ val kind = " Syntax"
1922
+ val msg = hl " Traits cannot redefine final $method from ${" class AnyRef" }. "
1923
+ val explanation = " "
1924
+ }
1919
1925
}
Original file line number Diff line number Diff line change @@ -116,7 +116,7 @@ object RefChecks {
116
116
if (! cls.owner.is(ModuleClass )) {
117
117
def clashes (sym : Symbol ) =
118
118
sym.isClass &&
119
- sym.name.stripModuleClassSuffix == cls.name.stripModuleClassSuffix
119
+ sym.name.stripModuleClassSuffix == cls.name.stripModuleClassSuffix
120
120
121
121
val others = cls.owner.linkedClass.info.decls.filter(clashes)
122
122
others.foreach { other =>
@@ -606,7 +606,7 @@ object RefChecks {
606
606
// override a concrete method in Object. The jvm, however, does not.
607
607
val overridden = decl.matchingDecl(defn.ObjectClass , defn.ObjectType )
608
608
if (overridden.is(Final ))
609
- ctx.error(" trait cannot redefine final method from class AnyRef " , decl.pos)
609
+ ctx.error(TraitRedefinedFinalMethodFromAnyRef (overridden) , decl.pos)
610
610
}
611
611
}
612
612
Original file line number Diff line number Diff line change @@ -1172,4 +1172,21 @@ class ErrorMessagesTests extends ErrorMessagesTest {
1172
1172
val TraitIsExpected (symbol) :: Nil = messages
1173
1173
assertEquals(" class B" , symbol.show)
1174
1174
}
1175
+
1176
+ @ Test def traitRedefinedFinalMethodFromAnyRef =
1177
+ checkMessagesAfter(" refchecks" ) {
1178
+ """
1179
+ |trait C {
1180
+ | def wait (): Unit
1181
+ |}
1182
+ """ .stripMargin
1183
+ }
1184
+ .expect { (ictx, messages) =>
1185
+ implicit val ctx : Context = ictx
1186
+
1187
+ assertMessageCount(1 , messages)
1188
+ val TraitRedefinedFinalMethodFromAnyRef (method) = messages.head
1189
+ assertEquals(" method wait" , method.show)
1190
+ }
1191
+
1175
1192
}
You can’t perform that action at this time.
0 commit comments