diff -r 558fe98d1ac0 -r 2fbe77c38802 src/share/classes/com/sun/tools/javac/api/JavacTrees.java --- a/src/share/classes/com/sun/tools/javac/api/JavacTrees.java Tue Jul 23 20:42:54 2013 -0400 +++ b/src/share/classes/com/sun/tools/javac/api/JavacTrees.java Wed Jul 24 17:35:42 2013 -0700 @@ -69,7 +69,6 @@ import com.sun.tools.javac.code.Type.ErrorType; import com.sun.tools.javac.code.Type.UnionClassType; import com.sun.tools.javac.code.Types; -import com.sun.tools.javac.code.TypeTag; import com.sun.tools.javac.code.Types.TypeRelation; import com.sun.tools.javac.comp.Attr; import com.sun.tools.javac.comp.AttrContext; @@ -358,7 +357,7 @@ Log.DeferredDiagnosticHandler deferredDiagnosticHandler = new Log.DeferredDiagnosticHandler(log); try { - final ClassSymbol tsym; + final TypeSymbol tsym; final Name memberName; if (ref.qualifierExpression == null) { tsym = env.enclClass.sym; @@ -387,7 +386,7 @@ return null; } } else { - tsym = (ClassSymbol) t.tsym; + tsym = t.tsym; memberName = ref.memberName; } } @@ -408,15 +407,17 @@ paramTypes = lb.toList(); } - Symbol msym = (memberName == tsym.name) - ? findConstructor(tsym, paramTypes) - : findMethod(tsym, memberName, paramTypes); + ClassSymbol sym = (ClassSymbol) types.upperBound(tsym.type).tsym; + + Symbol msym = (memberName == sym.name) + ? findConstructor(sym, paramTypes) + : findMethod(sym, memberName, paramTypes); if (paramTypes != null) { // explicit (possibly empty) arg list given, so cannot be a field return msym; } - VarSymbol vsym = (ref.paramTypes != null) ? null : findField(tsym, memberName); + VarSymbol vsym = (ref.paramTypes != null) ? null : findField(sym, memberName); // prefer a field over a method with no parameters if (vsym != null && (msym == null || @@ -789,6 +790,7 @@ case METHOD: // System.err.println("METHOD: " + ((JCMethodDecl)tree).sym.getSimpleName()); method = (JCMethodDecl)tree; + env = memberEnter.getMethodEnv(method, env); break; case VARIABLE: // System.err.println("FIELD: " + ((JCVariableDecl)tree).sym.getSimpleName()); @@ -800,7 +802,6 @@ try { Assert.check(method.body == tree); method.body = copier.copy((JCBlock)tree, (JCTree) path.getLeaf()); - env = memberEnter.getMethodEnv(method, env); env = attribStatToTree(method.body, env, copier.leafCopy); } finally { method.body = (JCBlock) tree;