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