summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2010-03-13 17:33:33 +0000
committerMartin Odersky <odersky@gmail.com>2010-03-13 17:33:33 +0000
commit3ff77430de3805fe0691c76c8cceb49575b24705 (patch)
tree4e767b51a44abc5126647762f6e1a7c4d46d8d0a /src
parent56dc3ded65b6ec73f1b863c3e3fc05fb58438cdb (diff)
downloadscala-3ff77430de3805fe0691c76c8cceb49575b24705.tar.gz
scala-3ff77430de3805fe0691c76c8cceb49575b24705.tar.bz2
scala-3ff77430de3805fe0691c76c8cceb49575b24705.zip
Closes #3120. Review by extempore.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/ast/TreeGen.scala11
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala5
2 files changed, 16 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/TreeGen.scala b/src/compiler/scala/tools/nsc/ast/TreeGen.scala
index ccb60bc886..13f26412a3 100644
--- a/src/compiler/scala/tools/nsc/ast/TreeGen.scala
+++ b/src/compiler/scala/tools/nsc/ast/TreeGen.scala
@@ -331,6 +331,17 @@ abstract class TreeGen
Apply(meth, List(tree))
}
+ /** Try to convert Select(qual, name) to a SelectFromTypeTree.
+ */
+ def convertToSelectFromType(qual: Tree, name: Name): Tree = {
+ def selFromType(qual1: Tree) = SelectFromTypeTree(qual1 setPos qual.pos, name)
+ qual match {
+ case Select(qual1, name) => selFromType(Select(qual1, name.toTypeName))
+ case Ident(name) => selFromType(Ident(name.toTypeName))
+ case _ => EmptyTree
+ }
+ }
+
/** Used in situations where you need to access value of an expression several times
*/
def evalOnce(expr: Tree, owner: Symbol, unit: CompilationUnit)(within: (() => Tree) => Tree): Tree = {
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 4a29491cde..720994dff3 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -3521,6 +3521,11 @@ trait Typers { self: Analyzer =>
}
if (!reallyExists(sym)) {
+ if (context.owner.toplevelClass.hasFlag(JAVA) && name.isTypeName) {
+ val tree1 = atPos(tree.pos) { gen.convertToSelectFromType(qual, name) }
+ if (tree1 != EmptyTree) return typed1(tree1, mode, pt)
+ }
+
if (settings.debug.value) Console.err.println("qual = "+qual+":"+qual.tpe+"\nSymbol="+qual.tpe.termSymbol+"\nsymbol-info = "+qual.tpe.termSymbol.info+"\nscope-id = "+qual.tpe.termSymbol.info.decls.hashCode()+"\nmembers = "+qual.tpe.members+"\nname = "+name+"\nfound = "+sym+"\nowner = "+context.enclClass.owner)
def makeErrorTree = {