diff options
author | Miles Sabin <miles@milessabin.com> | 2010-02-09 10:15:16 +0000 |
---|---|---|
committer | Miles Sabin <miles@milessabin.com> | 2010-02-09 10:15:16 +0000 |
commit | 1b99b4b148b04d0eafd6bd3fb55309c29f60eb2d (patch) | |
tree | 367454c46ffb8a4be3cfb536bea97be7646df507 /src/compiler/scala/tools/nsc/typechecker/Typers.scala | |
parent | 68bcaee6c1c23e8dbf319e6dd71710b7da4f5d2d (diff) | |
download | scala-1b99b4b148b04d0eafd6bd3fb55309c29f60eb2d.tar.gz scala-1b99b4b148b04d0eafd6bd3fb55309c29f60eb2d.tar.bz2 scala-1b99b4b148b04d0eafd6bd3fb55309c29f60eb2d.zip |
Compiler part of fix for #2767: provide hooks t...
Compiler part of fix for #2767: provide hooks to allow the presentation
compiler to add sources to the run to resolve top-level symbols which
cannot be found via the Java naming convention. Review by odersky.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index d2cb896cbf..a2c0616889 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -3494,6 +3494,11 @@ trait Typers { self: Analyzer => val qual1 = adaptToName(qual, name) if (qual1 ne qual) return typed(treeCopy.Select(tree, qual1, name), mode, pt) } + + if (!reallyExists(sym) && currentRun.compileSourceFor(qual, name)) { + return typedSelect(qual, name) + } + if (!reallyExists(sym)) { 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) if (!qual.tpe.widen.isErroneous) { @@ -3657,7 +3662,9 @@ trait Typers { self: Analyzer => if (!(shortenImports && qual0.symbol.isPackage)) // optimization: don't write out package prefixes qual = atPos(tree.pos.focusStart)(resetPos(qual0.duplicate)) pre = qual.tpe - } else { + } else if (currentRun.compileSourceFor(context.asInstanceOf[analyzer.Context], name)) + typedIdent(name) + else { if (settings.debug.value) { log(context.imports)//debug } |