diff options
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/ast/TreeInfo.java | 28 | ||||
-rw-r--r-- | sources/scalac/typechecker/RefCheck.java | 4 |
2 files changed, 18 insertions, 14 deletions
diff --git a/sources/scalac/ast/TreeInfo.java b/sources/scalac/ast/TreeInfo.java index ed442bdf5d..caeb7d72c0 100644 --- a/sources/scalac/ast/TreeInfo.java +++ b/sources/scalac/ast/TreeInfo.java @@ -200,19 +200,21 @@ public class TreeInfo { 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); - } - } + if (pre != Type.ErrorType) { + 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(); diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java index 797d38fc08..dc383e5067 100644 --- a/sources/scalac/typechecker/RefCheck.java +++ b/sources/scalac/typechecker/RefCheck.java @@ -849,10 +849,12 @@ public class RefCheck extends Transformer implements Modifiers, Kinds { Tree[] body1; if (sym.isCaseClass()) { body1 = addCaseMethods(templ.body, sym); - } else { + } else if ((sym.flags & ABSTRACT) == 0) { body1 = new Tree[templ.body.length + 1]; System.arraycopy(templ.body, 0, body1, 0, templ.body.length); body1[templ.body.length] = tagMethod(sym); + } else { + body1 = templ.body; } return copy.Template(templ, templ.parents, body1); } |