diff options
author | Hubert Plociniczak <hubert.plociniczak@epfl.ch> | 2010-03-19 09:09:00 +0000 |
---|---|---|
committer | Hubert Plociniczak <hubert.plociniczak@epfl.ch> | 2010-03-19 09:09:00 +0000 |
commit | bf2da77cefaed778008a2ede6b129a58adc86913 (patch) | |
tree | 1b682c39ff93610c631de3139dd0c8c83ff20ad0 /src/compiler/scala/tools/nsc/typechecker/Namers.scala | |
parent | 46ddf14b459ff18f7fd1904249c6916384030546 (diff) | |
download | scala-bf2da77cefaed778008a2ede6b129a58adc86913.tar.gz scala-bf2da77cefaed778008a2ede6b129a58adc86913.tar.bz2 scala-bf2da77cefaed778008a2ede6b129a58adc86913.zip |
Fixes #3054. No review.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Namers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Namers.scala | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index 0ddd838303..9edc245327 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -1201,26 +1201,38 @@ trait Namers { self: Analyzer => } true } + + def isValidSelector(from: Name)(fun : => Unit) { + if (base.nonLocalMember(from) == NoSymbol && + base.nonLocalMember(from.toTypeName) == NoSymbol) fun + } + def checkSelectors(selectors: List[ImportSelector]): Unit = selectors match { case ImportSelector(from, _, to, _) :: rest => if (from != nme.WILDCARD && base != ErrorType) { - if (base.nonLocalMember(from) == NoSymbol && - base.nonLocalMember(from.toTypeName) == NoSymbol) { + isValidSelector(from) { if (currentRun.compileSourceFor(expr, from)) return typeSig(tree) - context.error(tree.pos, from.decode + " is not a member of " + expr) + // for Java code importing Scala objects + if (from.endsWith(nme.DOLLARraw)) + isValidSelector(from.subName(0, from.length -1)) { + context.error(tree.pos, from.decode + " is not a member of " + expr) + } + else + context.error(tree.pos, from.decode + " is not a member of " + expr) } if (checkNotRedundant(tree.pos, from, to)) checkNotRedundant(tree.pos, from.toTypeName, to.toTypeName) } if (from != nme.WILDCARD && (rest.exists (sel => sel.name == from))) - context.error(tree.pos, from.decode + " is renamed twice"); + context.error(tree.pos, from.decode + " is renamed twice") if ((to ne null) && to != nme.WILDCARD && (rest exists (sel => sel.rename == to))) - context.error(tree.pos, to.decode + " appears twice as a target of a renaming"); + context.error(tree.pos, to.decode + " appears twice as a target of a renaming") checkSelectors(rest) case Nil => } + checkSelectors(selectors) ImportType(expr1) } |