Skip to content

Commit f5a08c8

Browse files
committed
Remove DropImports; add Java Enum test
1 parent 1d5b76b commit f5a08c8

File tree

7 files changed

+25
-36
lines changed

7 files changed

+25
-36
lines changed

compiler/src/dotty/tools/dotc/Compiler.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ class Compiler {
101101
new TupleOptimizations, // Optimize generic operations on tuples
102102
new LetOverApply, // Lift blocks from receivers of applications
103103
new ArrayConstructors) :: // Intercept creation of (non-generic) arrays and intrinsify.
104-
List(new DropImports) :: // Drop all (language-) imports
105104
List(new Erasure) :: // Rewrite types to JVM model, erasing all type parameters, abstract types and refinements.
106105
List(new ElimErasedValueType, // Expand erased value types to their underlying implmementation types
107106
new PureStats, // Remove pure stats from blocks

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

Lines changed: 0 additions & 30 deletions
This file was deleted.

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class Erasure extends Phase with DenotTransformer {
4343
override def description: String = Erasure.description
4444

4545
/** List of names of phases that should precede this phase */
46-
override def runsAfter: Set[String] = Set(InterceptedMethods.name, ElimRepeated.name, DropImports.name)
46+
override def runsAfter: Set[String] = Set(InterceptedMethods.name, ElimRepeated.name)
4747

4848
override def changesMembers: Boolean = true // the phase adds bridges
4949
override def changesParents: Boolean = true // the phase drops Any
@@ -1043,6 +1043,12 @@ object Erasure {
10431043
(stats2.filterConserve(!_.isEmpty), finalCtx)
10441044
}
10451045

1046+
/** Finally drops all (language-) imports in erasure.
1047+
* Since some of the language imports change the subtyping,
1048+
* we cannot check the trees before erasure.
1049+
*/
1050+
override def typedImport(tree: untpd.Import)(using Context) = EmptyTree
1051+
10461052
override def adapt(tree: Tree, pt: Type, locked: TypeVars, tryGadtHealing: Boolean)(using Context): Tree =
10471053
trace(i"adapting ${tree.showSummary()}: ${tree.tpe} to $pt", show = true) {
10481054
if ctx.phase != erasurePhase && ctx.phase != erasurePhase.next then

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
122122

123123
def nameRef: Tree =
124124
if isJavaEnumValue then
125-
Select(This(clazz), nme.name).ensureApplied
125+
val name = Select(This(clazz), nme.name).ensureApplied
126+
if ctx.explicitNulls then name.cast(defn.StringType) else name
126127
else
127128
identifierRef
128129

compiler/src/dotty/tools/dotc/typer/ReTyper.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class ReTyper(nestingLevel: Int = 0) extends Typer(nestingLevel) with ReChecking
5151
override def typedSuper(tree: untpd.Super, pt: Type)(using Context): Tree =
5252
promote(tree)
5353

54-
override def typedImport(tree: untpd.Import, sym: Symbol)(using Context): Tree =
54+
override def typedImport(tree: untpd.Import)(using Context): Tree =
5555
promote(tree)
5656

5757
override def typedTyped(tree: untpd.Typed, pt: Type)(using Context): Tree = {

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2613,7 +2613,8 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
26132613
|The selector is not a member of an object or package.""")
26142614
else typd(imp.expr, AnySelectionProto)
26152615

2616-
def typedImport(imp: untpd.Import, sym: Symbol)(using Context): Tree =
2616+
def typedImport(imp: untpd.Import)(using Context): Tree =
2617+
val sym = retrieveSym(imp)
26172618
val expr1 = typedImportQualifier(imp, typedExpr(_, _)(using ctx.withOwner(sym)))
26182619
checkLegalImportPath(expr1)
26192620
val selectors1 = typedSelectors(imp.selectors)
@@ -2879,7 +2880,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
28792880
case tree: untpd.If => typedIf(tree, pt)
28802881
case tree: untpd.Function => typedFunction(tree, pt)
28812882
case tree: untpd.Closure => typedClosure(tree, pt)
2882-
case tree: untpd.Import => typedImport(tree, retrieveSym(tree))
2883+
case tree: untpd.Import => typedImport(tree)
28832884
case tree: untpd.Export => typedExport(tree)
28842885
case tree: untpd.Match => typedMatch(tree, pt)
28852886
case tree: untpd.Return => typedReturn(tree)

tests/explicit-nulls/pos/enums.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
enum ErrorMessageID(val isActive: Boolean = true) extends java.lang.Enum[ErrorMessageID]:
2+
3+
case NoExplanationID // errorNumber: -1
4+
case EmptyCatchOrFinallyBlockID extends ErrorMessageID(isActive = false) // errorNumber: 0
5+
6+
def errorNumber = ordinal - 1
7+
8+
enum Color(val rgb: Int):
9+
case Red extends Color(0xFF0000)
10+
case Green extends Color(0x00FF00)
11+
case Blue extends Color(0x0000FF)
12+

0 commit comments

Comments
 (0)