1.1 --- a/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Tue Jan 22 16:23:35 2013 +0000 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Tue Jan 22 16:39:51 2013 +0000 1.3 @@ -859,8 +859,8 @@ 1.4 finally { 1.5 frameStack = prevStack; 1.6 } 1.7 - if (frameStack.nonEmpty() && enclosingLambda() != null) { 1.8 - // Any class defined within a lambda is an implicit 'this' reference 1.9 + if (!tree.sym.isStatic() && frameStack.nonEmpty() && enclosingLambda() != null) { 1.10 + // Any (non-static) class defined within a lambda is an implicit 'this' reference 1.11 // because its constructor will reference the enclosing class 1.12 ((LambdaTranslationContext) context()).addSymbol(tree.sym.type.getEnclosingType().tsym, CAPTURED_THIS); 1.13 } 1.14 @@ -994,6 +994,11 @@ 1.15 * (required to skip synthetic lambda symbols) 1.16 */ 1.17 private Symbol owner() { 1.18 + return owner(false); 1.19 + } 1.20 + 1.21 + @SuppressWarnings("fallthrough") 1.22 + private Symbol owner(boolean skipLambda) { 1.23 List<Frame> frameStack2 = frameStack; 1.24 while (frameStack2.nonEmpty()) { 1.25 switch (frameStack2.head.tree.getTag()) { 1.26 @@ -1012,7 +1017,8 @@ 1.27 case METHODDEF: 1.28 return ((JCMethodDecl)frameStack2.head.tree).sym; 1.29 case LAMBDA: 1.30 - return ((LambdaTranslationContext)contextMap.get(frameStack2.head.tree)).translatedSym; 1.31 + if (!skipLambda) 1.32 + return ((LambdaTranslationContext)contextMap.get(frameStack2.head.tree)).translatedSym; 1.33 default: 1.34 frameStack2 = frameStack2.tail; 1.35 } 1.36 @@ -1311,8 +1317,9 @@ 1.37 } 1.38 1.39 Type enclosingType() { 1.40 - //local inner classes defined inside a lambda are always non-static 1.41 - return owner.enclClass().type; 1.42 + return owner.isStatic() ? 1.43 + Type.noType : 1.44 + owner.enclClass().type; 1.45 } 1.46 1.47 Type generatedLambdaSig() {