aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/typer/Typer.scala31
-rw-r--r--tests/disabled/not-representable/naming-resolution/callsite.scala10
-rw-r--r--tests/disabled/not-representable/naming-resolution/compiler.error8
-rw-r--r--tests/disabled/not-representable/naming-resolution/package.scala5
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]
-}