File tree 4 files changed +28
-3
lines changed
test/dotty/tools/dotc/reporting
4 files changed +28
-3
lines changed Original file line number Diff line number Diff line change @@ -110,7 +110,8 @@ public enum ErrorMessageID {
110
110
MissingEmptyArgumentListID ,
111
111
DuplicateNamedTypeParameterID ,
112
112
UndefinedNamedTypeParameterID ,
113
- IllegalStartOfStatementID
113
+ IllegalStartOfStatementID ,
114
+ TraitRedefinedFinalMethodFromAnyRefID
114
115
;
115
116
116
117
public int errorNumber () {
Original file line number Diff line number Diff line change @@ -1888,4 +1888,11 @@ object messages {
1888
1888
}
1889
1889
val explanation = " A statement is either an import, a definition or an expression."
1890
1890
}
1891
+
1892
+ case class TraitRedefinedFinalMethodFromAnyRef ()(implicit ctx : Context ) extends Message (TraitRedefinedFinalMethodFromAnyRefID ) {
1893
+ val kind = " Syntax"
1894
+ val msg = " Trait cannot redefine final method from class AnyRef"
1895
+ val explanation = hl """ A method was defined in a trait trying to redefine a method declared in class AnyRef.
1896
+ All classes inherit from AnyRef and should not redefine its methods """
1897
+ }
1891
1898
}
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 () , decl.pos)
610
610
}
611
611
}
612
612
Original file line number Diff line number Diff line change @@ -1151,4 +1151,21 @@ class ErrorMessagesTests extends ErrorMessagesTest {
1151
1151
assertEquals(IllegalStartOfStatement (isModifier = false ), err)
1152
1152
assertEquals(IllegalStartOfStatement (isModifier = true ), errWithModifier)
1153
1153
}
1154
+
1155
+ @ Test def traitRedefinedFinalMethodFromAnyRef =
1156
+ checkMessagesAfter(" refchecks" ) {
1157
+ """
1158
+ |trait C {
1159
+ | def wait (): Unit
1160
+ |}
1161
+ """ .stripMargin
1162
+ }
1163
+ .expect { (ictx, messages) =>
1164
+ implicit val ctx : Context = ictx
1165
+
1166
+ assertMessageCount(1 , messages)
1167
+ val err :: Nil = messages
1168
+
1169
+ assertEquals(TraitRedefinedFinalMethodFromAnyRef (), err)
1170
+ }
1154
1171
}
You can’t perform that action at this time.
0 commit comments