File tree 4 files changed +23
-12
lines changed
compiler/src/dotty/tools/dotc
4 files changed +23
-12
lines changed Original file line number Diff line number Diff line change @@ -876,7 +876,7 @@ extends Message(PatternMatchExhaustivityID) {
876
876
877
877
val pathes = List (
878
878
ActionPatch (
879
- srcPos = endPos,
879
+ srcPos = endPos,
880
880
replacement = uncoveredCases.map(c => indent(s " case $c => ??? " , startColumn))
881
881
.mkString(" \n " , " \n " , " " )
882
882
),
@@ -1678,10 +1678,15 @@ class CannotExtendAnyVal(sym: Symbol)(using Context)
1678
1678
extends SyntaxMsg (CannotExtendAnyValID ) {
1679
1679
def msg (using Context ) = i """ $sym cannot extend ${hl(" AnyVal" )}"""
1680
1680
def explain (using Context ) =
1681
- i """ Only classes (not traits) are allowed to extend ${hl(" AnyVal" )}, but traits may extend
1682
- | ${hl(" Any" )} to become ${Green (" \" universal traits\" " )} which may only have ${hl(" def" )} members.
1683
- |Universal traits can be mixed into classes that extend ${hl(" AnyVal" )}.
1684
- | """
1681
+ if sym.is(Trait ) then
1682
+ i """ Only classes (not traits) are allowed to extend ${hl(" AnyVal" )}, but traits may extend
1683
+ | ${hl(" Any" )} to become ${Green (" \" universal traits\" " )} which may only have ${hl(" def" )} members.
1684
+ |Universal traits can be mixed into classes that extend ${hl(" AnyVal" )}.
1685
+ | """
1686
+ else if sym.is(Module ) then
1687
+ i """ Only classes (not objects) are allowed to extend ${hl(" AnyVal" )}.
1688
+ | """
1689
+ else " "
1685
1690
}
1686
1691
1687
1692
class CannotExtendJavaEnum (sym : Symbol )(using Context )
Original file line number Diff line number Diff line change @@ -716,6 +716,8 @@ object Checking {
716
716
if (isDerivedValueClass(clazz)) {
717
717
if (clazz.is(Trait ))
718
718
report.error(CannotExtendAnyVal (clazz), clazz.srcPos)
719
+ if clazz.is(Module ) then
720
+ report.error(CannotExtendAnyVal (clazz), clazz.srcPos)
719
721
if (clazz.is(Abstract ))
720
722
report.error(ValueClassesMayNotBeAbstract (clazz), clazz.srcPos)
721
723
if (! clazz.isStatic)
@@ -738,10 +740,7 @@ object Checking {
738
740
for (p <- params if ! p.is(Erased ))
739
741
report.error(" value class can only have one non `erased` parameter" , p.srcPos)
740
742
case Nil =>
741
- if clazz.is(Module ) then
742
- report.error(" A module cannot extends AnyVal" ,clazz.srcPos)
743
- else
744
- report.error(ValueClassNeedsOneValParam (clazz), clazz.srcPos)
743
+ report.error(ValueClassNeedsOneValParam (clazz), clazz.srcPos)
745
744
}
746
745
}
747
746
stats.foreach(checkValueClassMember)
Original file line number Diff line number Diff line change 1
- -- Error: tests/neg/i18274.scala:1 :7 -------------- ---------------------------------------------------------------------
2
- 1 |object Foo extends AnyVal // error
1
+ -- [E068] Syntax Error: tests/neg/i18274.scala:3 :7 ---------------------------------------------------------------------
2
+ 3 |object Foo extends AnyVal // error
3
3
| ^
4
- | A module cannot extends AnyVal
4
+ | object Foo cannot extend AnyVal
5
+ |---------------------------------------------------------------------------------------------------------------------
6
+ | Explanation (enabled by `-explain`)
7
+ |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
8
+ | Only classes (not objects) are allowed to extend AnyVal.
9
+ ---------------------------------------------------------------------------------------------------------------------
Original file line number Diff line number Diff line change
1
+ //> using options -explain
2
+
1
3
object Foo extends AnyVal // error
You can’t perform that action at this time.
0 commit comments