< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java

Print this page
rev 58565 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: duke
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com
rev 58568 : [mq]: hidden-class-4

*** 34,44 **** import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.tree.JCTree.JCMemberReference.ReferenceKind; import com.sun.tools.javac.tree.TreeMaker; import com.sun.tools.javac.tree.TreeTranslator; import com.sun.tools.javac.code.Attribute; - import com.sun.tools.javac.code.Scope.WriteableScope; import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.code.Symbol.ClassSymbol; import com.sun.tools.javac.code.Symbol.DynamicMethodSymbol; import com.sun.tools.javac.code.Symbol.MethodSymbol; import com.sun.tools.javac.code.Symbol.TypeSymbol; --- 34,43 ----
*** 125,134 **** --- 124,136 ---- private final boolean verboseDeduplication; /** deduplicate lambda implementation methods */ private final boolean deduplicateLambdas; + /** lambda proxy is a dynamic nestmate */ + private final boolean nestmateLambdas; + /** Flag for alternate metafactories indicating the lambda object is intended to be serializable */ public static final int FLAG_SERIALIZABLE = 1 << 0; /** Flag for alternate metafactories indicating the lambda object has multiple targets */ public static final int FLAG_MARKERS = 1 << 1;
*** 166,175 **** --- 168,178 ---- debugLinesOrVars = options.isSet(Option.G) || options.isSet(Option.G_CUSTOM, "lines") || options.isSet(Option.G_CUSTOM, "vars"); verboseDeduplication = options.isSet("debug.dumpLambdaToMethodDeduplication"); deduplicateLambdas = options.getBoolean("deduplicateLambdas", true); + nestmateLambdas = Target.instance(context).runtimeUseNestAccess(); } // </editor-fold> class DedupedLambda { private final MethodSymbol symbol;
*** 2252,2265 **** //code to always generate a method handle to an accessible method return tree.ownerAccessible; } /** ! * The VM does not support access across nested classes (8010319). ! * Were that ever to change, this should be removed. */ boolean isPrivateInOtherClass() { return (tree.sym.flags() & PRIVATE) != 0 && !types.isSameType( types.erasure(tree.sym.enclClass().asType()), types.erasure(owner.enclClass().asType())); } --- 2255,2271 ---- //code to always generate a method handle to an accessible method return tree.ownerAccessible; } /** ! * This method should be called only when target release <= 14 ! * where LambdaMetaFactory does not spin nestmate classes. ! * ! * This method should be removed when --release 14 is not supported. */ boolean isPrivateInOtherClass() { + assert !nestmateLambdas; return (tree.sym.flags() & PRIVATE) != 0 && !types.isSameType( types.erasure(tree.sym.enclClass().asType()), types.erasure(owner.enclClass().asType())); }
*** 2302,2312 **** final boolean needsConversionToLambda() { return interfaceParameterIsIntersectionOrUnionType() || isSuper || needsVarArgsConversion() || isArrayOp() || ! isPrivateInOtherClass() || isProtectedInSuperClassOfEnclosingClassInOtherPackage() || !receiverAccessible() || (tree.getMode() == ReferenceMode.NEW && tree.kind != ReferenceKind.ARRAY_CTOR && (tree.sym.owner.isLocal() || tree.sym.owner.isInner())); --- 2308,2318 ---- final boolean needsConversionToLambda() { return interfaceParameterIsIntersectionOrUnionType() || isSuper || needsVarArgsConversion() || isArrayOp() || ! (!nestmateLambdas && isPrivateInOtherClass()) || isProtectedInSuperClassOfEnclosingClassInOtherPackage() || !receiverAccessible() || (tree.getMode() == ReferenceMode.NEW && tree.kind != ReferenceKind.ARRAY_CTOR && (tree.sym.owner.isLocal() || tree.sym.owner.isInner()));
< prev index next >