1*8975f5c5SAndroid Build Coastguard Workerdiff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java b/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java 2*8975f5c5SAndroid Build Coastguard Workerindex ff3e351996..f857e61d1e 100644 3*8975f5c5SAndroid Build Coastguard Worker--- a/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java 4*8975f5c5SAndroid Build Coastguard Worker+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java 5*8975f5c5SAndroid Build Coastguard Worker@@ -93,7 +93,7 @@ class LambdaClassFixer extends ClassVisitor { 6*8975f5c5SAndroid Build Coastguard Worker checkArgument(BitFlags.noneSet(access, Opcodes.ACC_INTERFACE), "Not a class: %s", name); 7*8975f5c5SAndroid Build Coastguard Worker checkState(this.originalInternalName == null, "not intended for reuse but reused for %s", name); 8*8975f5c5SAndroid Build Coastguard Worker originalInternalName = name; 9*8975f5c5SAndroid Build Coastguard Worker- hasState = false; 10*8975f5c5SAndroid Build Coastguard Worker+ hasState = true; 11*8975f5c5SAndroid Build Coastguard Worker hasFactory = false; 12*8975f5c5SAndroid Build Coastguard Worker desc = null; 13*8975f5c5SAndroid Build Coastguard Worker this.signature = null; 14*8975f5c5SAndroid Build Coastguard Worker@@ -136,7 +136,7 @@ class LambdaClassFixer extends ClassVisitor { 15*8975f5c5SAndroid Build Coastguard Worker } else if ("<init>".equals(name)) { 16*8975f5c5SAndroid Build Coastguard Worker this.desc = desc; 17*8975f5c5SAndroid Build Coastguard Worker this.signature = signature; 18*8975f5c5SAndroid Build Coastguard Worker- if (!lambdaInfo.needFactory() && !desc.startsWith("()")) { 19*8975f5c5SAndroid Build Coastguard Worker+ if (!lambdaInfo.needFactory()) { 20*8975f5c5SAndroid Build Coastguard Worker access &= ~Opcodes.ACC_PRIVATE; // make constructor accessible if we'll call it directly 21*8975f5c5SAndroid Build Coastguard Worker } 22*8975f5c5SAndroid Build Coastguard Worker } 23*8975f5c5SAndroid Build Coastguard Worker@@ -156,10 +156,6 @@ class LambdaClassFixer extends ClassVisitor { 24*8975f5c5SAndroid Build Coastguard Worker 25*8975f5c5SAndroid Build Coastguard Worker @Override 26*8975f5c5SAndroid Build Coastguard Worker public void visitEnd() { 27*8975f5c5SAndroid Build Coastguard Worker- checkState( 28*8975f5c5SAndroid Build Coastguard Worker- !hasState || hasFactory, 29*8975f5c5SAndroid Build Coastguard Worker- "Expected factory method for capturing lambda %s", 30*8975f5c5SAndroid Build Coastguard Worker- getInternalName()); 31*8975f5c5SAndroid Build Coastguard Worker if (!hasState) { 32*8975f5c5SAndroid Build Coastguard Worker checkState( 33*8975f5c5SAndroid Build Coastguard Worker signature == null, 34*8975f5c5SAndroid Build Coastguard Workerdiff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java b/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java 35*8975f5c5SAndroid Build Coastguard Workerindex 8f90d25ff5..f5ed6d524a 100644 36*8975f5c5SAndroid Build Coastguard Worker--- a/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java 37*8975f5c5SAndroid Build Coastguard Worker+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java 38*8975f5c5SAndroid Build Coastguard Worker@@ -423,8 +423,7 @@ class LambdaDesugaring extends ClassVisitor { 39*8975f5c5SAndroid Build Coastguard Worker String lambdaClassName = internalName + "$$Lambda$" + (lambdaCount++); 40*8975f5c5SAndroid Build Coastguard Worker Type[] capturedTypes = Type.getArgumentTypes(desc); 41*8975f5c5SAndroid Build Coastguard Worker boolean needFactory = 42*8975f5c5SAndroid Build Coastguard Worker- capturedTypes.length != 0 43*8975f5c5SAndroid Build Coastguard Worker- && !attemptAllocationBeforeArgumentLoads(lambdaClassName, capturedTypes); 44*8975f5c5SAndroid Build Coastguard Worker+ !attemptAllocationBeforeArgumentLoads(lambdaClassName, capturedTypes); 45*8975f5c5SAndroid Build Coastguard Worker lambdas.generateLambdaClass( 46*8975f5c5SAndroid Build Coastguard Worker internalName, 47*8975f5c5SAndroid Build Coastguard Worker LambdaInfo.create( 48*8975f5c5SAndroid Build Coastguard Worker@@ -435,7 +434,7 @@ class LambdaDesugaring extends ClassVisitor { 49*8975f5c5SAndroid Build Coastguard Worker bridgeInfo.bridgeMethod()), 50*8975f5c5SAndroid Build Coastguard Worker bsmMethod, 51*8975f5c5SAndroid Build Coastguard Worker args); 52*8975f5c5SAndroid Build Coastguard Worker- if (desc.startsWith("()")) { 53*8975f5c5SAndroid Build Coastguard Worker+ if (false) { 54*8975f5c5SAndroid Build Coastguard Worker // For stateless lambda classes we'll generate a singleton instance that we can just load 55*8975f5c5SAndroid Build Coastguard Worker checkState(capturedTypes.length == 0); 56*8975f5c5SAndroid Build Coastguard Worker super.visitFieldInsn( 57*8975f5c5SAndroid Build Coastguard Worker@@ -493,7 +492,6 @@ class LambdaDesugaring extends ClassVisitor { 58*8975f5c5SAndroid Build Coastguard Worker * @return {@code true} if we were able to insert a new/dup, {@code false} otherwise 59*8975f5c5SAndroid Build Coastguard Worker */ 60*8975f5c5SAndroid Build Coastguard Worker private boolean attemptAllocationBeforeArgumentLoads(String internalName, Type[] paramTypes) { 61*8975f5c5SAndroid Build Coastguard Worker- checkArgument(paramTypes.length > 0, "Expected at least one param for %s", internalName); 62*8975f5c5SAndroid Build Coastguard Worker // Walk backwards past loads corresponding to constructor arguments to find the instruction 63*8975f5c5SAndroid Build Coastguard Worker // after which we need to insert our NEW/DUP pair 64*8975f5c5SAndroid Build Coastguard Worker AbstractInsnNode insn = instructions.getLast(); 65