summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2012-12-06 11:51:27 -0800
committerAdriaan Moors <adriaan.moors@typesafe.com>2012-12-06 11:51:27 -0800
commitb1cb6578bdbdfaa66d3cf09f40dfc1511f7e9711 (patch)
tree3db1756fa8f6f6d482ea08ff4e36a7c568fa478a
parentd64f99f7aaa988cd3e975993f88e6a96e1c16c21 (diff)
parentff9cfd9eb7f47be69d302f73de08a00303249a0d (diff)
downloadscala-b1cb6578bdbdfaa66d3cf09f40dfc1511f7e9711.tar.gz
scala-b1cb6578bdbdfaa66d3cf09f40dfc1511f7e9711.tar.bz2
scala-b1cb6578bdbdfaa66d3cf09f40dfc1511f7e9711.zip
Merge pull request #1697 from retronym/ticket/6745-2
Don't return unimportables from importedSymbol.
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Contexts.scala9
-rw-r--r--test/files/run/t6745-2.scala22
2 files changed, 30 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
index 1af61d31ec..c0d2f44c7b 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
@@ -996,7 +996,14 @@ trait Contexts { self: Analyzer =>
if (settings.lint.value && selectors.nonEmpty && result != NoSymbol && pos != NoPosition)
recordUsage(current, result)
- result
+ // Harden against the fallout from bugs like SI-6745
+ //
+ // [JZ] I considered issuing a devWarning and moving the
+ // check inside the above loop, as I believe that
+ // this always represents a mistake on the part of
+ // the caller.
+ if (definitions isImportable result) result
+ else NoSymbol
}
private def selectorString(s: ImportSelector): String = {
if (s.name == nme.WILDCARD && s.rename == null) "_"
diff --git a/test/files/run/t6745-2.scala b/test/files/run/t6745-2.scala
new file mode 100644
index 0000000000..31ecd42bd1
--- /dev/null
+++ b/test/files/run/t6745-2.scala
@@ -0,0 +1,22 @@
+import scala.tools.nsc._
+import scala.tools.partest.CompilerTest
+import scala.collection.{ mutable, immutable, generic }
+
+object Test extends CompilerTest {
+ import global._
+ import rootMirror._
+ import definitions._
+ import global.analyzer.{Context, ImportInfo}
+
+ override def code = """
+package context {
+}
+ """
+
+ def check(source: String, unit: global.CompilationUnit) = {
+ val context: Context = global.analyzer.rootContext(unit)
+ val importInfo: ImportInfo = context.imports.head // Predef._
+ val importedSym = importInfo.importedSymbol(nme.CONSTRUCTOR)
+ assert(importedSym == NoSymbol, importedSym) // was "constructor Predef"
+ }
+}