diff -r a31c511db424 -r c655e0280bdc src/share/classes/com/sun/tools/javac/code/Types.java --- a/src/share/classes/com/sun/tools/javac/code/Types.java Mon Aug 16 14:59:21 2010 -0700 +++ b/src/share/classes/com/sun/tools/javac/code/Types.java Thu Aug 19 11:50:50 2010 +0100 @@ -2945,6 +2945,13 @@ public Type capture(Type t) { if (t.tag != CLASS) return t; + if (t.getEnclosingType() != Type.noType) { + Type capturedEncl = capture(t.getEnclosingType()); + if (capturedEncl != t.getEnclosingType()) { + Type type1 = memberType(capturedEncl, t.tsym); + t = subst(type1, t.tsym.type.getTypeArguments(), t.getTypeArguments()); + } + } ClassType cls = (ClassType)t; if (cls.isRaw() || !cls.isParameterized()) return cls;