summaryrefslogtreecommitdiff
path: root/sources/scalac/ast/TreeInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/ast/TreeInfo.java')
-rw-r--r--sources/scalac/ast/TreeInfo.java25
1 files changed, 25 insertions, 0 deletions
diff --git a/sources/scalac/ast/TreeInfo.java b/sources/scalac/ast/TreeInfo.java
index 2aa95f401c..b66b7d2357 100644
--- a/sources/scalac/ast/TreeInfo.java
+++ b/sources/scalac/ast/TreeInfo.java
@@ -191,6 +191,31 @@ public class TreeInfo {
}
}
+ /** The symbol with name `name' imported from import clause `tree'.
+ */
+ public static Symbol importedSymbol(Tree tree, Name name) {
+ switch (tree) {
+ case Import(Tree expr, Name[] selectors):
+ Type pre = tree.symbol().type();
+ boolean renamed = false;
+ for (int i = 0; i < selectors.length; i = i + 2) {
+ if (i + 1 < selectors.length && name.toTermName() == selectors[i + 1]) {
+ if (name.isTypeName())
+ return pre.lookupNonPrivate(selectors[i].toTypeName());
+ else
+ return pre.lookupNonPrivate(selectors[i]);
+ } else if (name.toTermName() == selectors[i]) {
+ renamed = true;
+ } else if (selectors[i] == Names.IMPORT_WILDCARD && !renamed) {
+ return pre.lookupNonPrivate(name);
+ }
+ }
+ return Symbol.NONE;
+ default:
+ throw new ApplicationError();
+ }
+ }
+
/** returns true if the tree is a sequence-valued pattern.
* precondition: tree is a pattern.