File tree Expand file tree Collapse file tree 4 files changed +43
-1
lines changed
test/dotty/tools/dotc/reporting Expand file tree Collapse file tree 4 files changed +43
-1
lines changed Original file line number Diff line number Diff line change @@ -55,6 +55,7 @@ public enum ErrorMessageID {
55
55
RecursiveValueNeedsResultTypeID ,
56
56
CyclicReferenceInvolvingID ,
57
57
CyclicReferenceInvolvingImplicitID ,
58
+ SuperQualMustBeParentID ,
58
59
;
59
60
60
61
public int errorNumber () {
Original file line number Diff line number Diff line change @@ -1192,4 +1192,21 @@ object messages {
1192
1192
| """ .stripMargin
1193
1193
}
1194
1194
1195
+ case class SuperQualMustBeParent (qual : untpd.Ident , cls : Symbols .ClassSymbol )(implicit ctx : Context )
1196
+ extends Message (SuperQualMustBeParentID ) {
1197
+
1198
+ val msg = hl """ | $qual does not name a parent of $cls"""
1199
+
1200
+ val kind = " Reference"
1201
+
1202
+ private val parents : Seq [String ] = (cls.info.parents map (_.name.show)).sorted
1203
+
1204
+ val explanation =
1205
+ hl """ |When a qualifier ${" T" } is used in a ${" super" } prefix of the form ${" C.super[T]" },
1206
+ | ${" T" } must be a parent type of ${" C" }.
1207
+ |
1208
+ |In this case, the parents of $cls are:
1209
+ | ${parents.mkString(" - " , " \n - " , " " )}
1210
+ | """ .stripMargin
1211
+ }
1195
1212
}
Original file line number Diff line number Diff line change @@ -298,7 +298,7 @@ trait TypeAssigner {
298
298
case p :: Nil =>
299
299
p
300
300
case Nil =>
301
- errorType(em " $ mix does not name a parent class of $ cls" , tree.pos)
301
+ errorType(SuperQualMustBeParent ( mix, cls) , tree.pos)
302
302
case p :: q :: _ =>
303
303
errorType(" ambiguous parent class qualifier" , tree.pos)
304
304
}
Original file line number Diff line number Diff line change @@ -304,5 +304,29 @@ class ErrorMessagesTests extends ErrorMessagesTest {
304
304
assertEquals(" x" , tree.name.show)
305
305
}
306
306
307
+ @ Test def superQualMustBeParent =
308
+ checkMessagesAfter(" frontend" ) {
309
+ """
310
+ |class A {
311
+ | def foo(): Unit = ()
312
+ |}
313
+ |
314
+ |class B {
315
+ |}
316
+ |
317
+ |class C extends A {
318
+ | super[B].foo
319
+ |}
320
+ """ .stripMargin
321
+ }
322
+ .expect { (ictx, messages) =>
323
+ implicit val ctx : Context = ictx
324
+ val defn = ictx.definitions
307
325
326
+ assertMessageCount(1 , messages)
327
+ val SuperQualMustBeParent (qual, cls) :: Nil = messages
328
+
329
+ assertEquals(" B" , qual.show)
330
+ assertEquals(" class C" , cls.show)
331
+ }
308
332
}
You can’t perform that action at this time.
0 commit comments