diff options
4 files changed, 26 insertions, 28 deletions
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala index 52470ba87..5fbb395ba 100644 --- a/src/dotty/tools/dotc/typer/Typer.scala +++ b/src/dotty/tools/dotc/typer/Typer.scala @@ -72,6 +72,13 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit */ private var importedFromRoot: Set[Symbol] = Set() + /** Temporary data item for single call to typed ident: + * This symbol would be found under Scala2 mode, but is not + * in dotty (because dotty conforms to spec section 2 + * wrt to package member resolution but scalac doe not). + */ + private var foundUnderScala2: Type = _ + def newLikeThis: Typer = new Typer /** Attribute an identifier consisting of a simple name or wildcard @@ -228,10 +235,14 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit else curOwner.thisType.select(name, defDenot) if (!(curOwner is Package) || isDefinedInCurrentUnit(defDenot)) return checkNewOrShadowed(found, definition) // no need to go further out, we found highest prec entry - else if (defDenot.symbol is Package) - return checkNewOrShadowed(previous orElse found, packageClause) - else if (prevPrec < packageClause) - return findRef(found, packageClause, ctx)(outer) + else { + if (ctx.scala2Mode) + foundUnderScala2 = checkNewOrShadowed(found, definition) + if (defDenot.symbol is Package) + return checkNewOrShadowed(previous orElse found, packageClause) + else if (prevPrec < packageClause) + return findRef(found, packageClause, ctx)(outer) + } } } val curImport = ctx.importInfo @@ -267,10 +278,20 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit val saved = importedFromRoot importedFromRoot = Set.empty - val rawType = + foundUnderScala2 = NoType + + var rawType = try findRef(NoType, BindingPrec.nothingBound, NoContext) finally importedFromRoot = saved + if (foundUnderScala2.exists && (foundUnderScala2 ne rawType)) { + ctx.migrationWarning( + ex"""Name resolution will change. + | currently selected : $foundUnderScala2 + | in the future, without -language:Scala2: $rawType""", tree.pos) + rawType = foundUnderScala2 + } + val ownType = if (rawType.exists) ensureAccessible(rawType, superAccess = false, tree.pos) diff --git a/tests/disabled/not-representable/naming-resolution/callsite.scala b/tests/disabled/not-representable/naming-resolution/callsite.scala deleted file mode 100644 index 036803a26..000000000 --- a/tests/disabled/not-representable/naming-resolution/callsite.scala +++ /dev/null @@ -1,10 +0,0 @@ -// This one should be rejected according to spec. The import takes precedence -// over the type in the same package because the typeis declared in a -// different compilation unit. scalac does not conform to spec here. -package naming.resolution - -import java.nio.file._ // Imports `Files` - -object Resolution { - def gimmeFiles: Files = Files.list(Paths.get(".")) -} diff --git a/tests/disabled/not-representable/naming-resolution/compiler.error b/tests/disabled/not-representable/naming-resolution/compiler.error deleted file mode 100644 index 81d6b3cfa..000000000 --- a/tests/disabled/not-representable/naming-resolution/compiler.error +++ /dev/null @@ -1,8 +0,0 @@ -$ scalac tests/pending/naming-resolution/*.scala -$ ./bin/dotc tests/pending/naming-resolution/*.scala -tests/pending/naming-resolution/callsite.scala:6: error: type mismatch: - found : java.util.stream.Stream[java.nio.file.Path] - required: java.nio.file.Files - def gimmeFiles: Files = Files.list(Paths.get(".")) - ^ -one error found diff --git a/tests/disabled/not-representable/naming-resolution/package.scala b/tests/disabled/not-representable/naming-resolution/package.scala deleted file mode 100644 index f0e26ee95..000000000 --- a/tests/disabled/not-representable/naming-resolution/package.scala +++ /dev/null @@ -1,5 +0,0 @@ -package naming - -package object resolution { - type Files = java.util.stream.Stream[java.nio.file.Path] -} |