1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Resolve.java Tue Mar 01 12:00:06 2011 -0800 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Resolve.java Wed Mar 02 10:56:39 2011 +0000 1.3 @@ -1736,24 +1736,26 @@ 1.4 */ 1.5 Symbol resolveSelfContaining(DiagnosticPosition pos, 1.6 Env<AttrContext> env, 1.7 - Symbol member) { 1.8 + Symbol member, 1.9 + boolean isSuperCall) { 1.10 Name name = names._this; 1.11 - Env<AttrContext> env1 = env; 1.12 + Env<AttrContext> env1 = isSuperCall ? env.outer : env; 1.13 boolean staticOnly = false; 1.14 - while (env1.outer != null) { 1.15 - if (isStatic(env1)) staticOnly = true; 1.16 - if (env1.enclClass.sym.isSubClass(member.owner, types) && 1.17 - isAccessible(env, env1.enclClass.sym.type, member)) { 1.18 - Symbol sym = env1.info.scope.lookup(name).sym; 1.19 - if (sym != null) { 1.20 - if (staticOnly) sym = new StaticError(sym); 1.21 - return access(sym, pos, env.enclClass.sym.type, 1.22 - name, true); 1.23 + if (env1 != null) { 1.24 + while (env1 != null && env1.outer != null) { 1.25 + if (isStatic(env1)) staticOnly = true; 1.26 + if (env1.enclClass.sym.isSubClass(member.owner, types)) { 1.27 + Symbol sym = env1.info.scope.lookup(name).sym; 1.28 + if (sym != null) { 1.29 + if (staticOnly) sym = new StaticError(sym); 1.30 + return access(sym, pos, env.enclClass.sym.type, 1.31 + name, true); 1.32 + } 1.33 } 1.34 + if ((env1.enclClass.sym.flags() & STATIC) != 0) 1.35 + staticOnly = true; 1.36 + env1 = env1.outer; 1.37 } 1.38 - if ((env1.enclClass.sym.flags() & STATIC) != 0) 1.39 - staticOnly = true; 1.40 - env1 = env1.outer; 1.41 } 1.42 log.error(pos, "encl.class.required", member); 1.43 return syms.errSymbol; 1.44 @@ -1764,9 +1766,13 @@ 1.45 * JLS2 8.8.5.1 and 15.9.2 1.46 */ 1.47 Type resolveImplicitThis(DiagnosticPosition pos, Env<AttrContext> env, Type t) { 1.48 + return resolveImplicitThis(pos, env, t, false); 1.49 + } 1.50 + 1.51 + Type resolveImplicitThis(DiagnosticPosition pos, Env<AttrContext> env, Type t, boolean isSuperCall) { 1.52 Type thisType = (((t.tsym.owner.kind & (MTH|VAR)) != 0) 1.53 ? resolveSelf(pos, env, t.getEnclosingType().tsym, names._this) 1.54 - : resolveSelfContaining(pos, env, t.tsym)).type; 1.55 + : resolveSelfContaining(pos, env, t.tsym, isSuperCall)).type; 1.56 if (env.info.isSelfCall && thisType.tsym == env.enclClass.sym) 1.57 log.error(pos, "cant.ref.before.ctor.called", "this"); 1.58 return thisType;