diff --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 index ff3e351996..f857e61d1e 100644 --- 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 @@ -93,7 +93,7 @@ class LambdaClassFixer extends ClassVisitor { checkArgument(BitFlags.noneSet(access, Opcodes.ACC_INTERFACE), "Not a class: %s", name); checkState(this.originalInternalName == null, "not intended for reuse but reused for %s", name); originalInternalName = name; - hasState = false; + hasState = true; hasFactory = false; desc = null; this.signature = null; @@ -136,7 +136,7 @@ class LambdaClassFixer extends ClassVisitor { } else if ("".equals(name)) { this.desc = desc; this.signature = signature; - if (!lambdaInfo.needFactory() && !desc.startsWith("()")) { + if (!lambdaInfo.needFactory()) { access &= ~Opcodes.ACC_PRIVATE; // make constructor accessible if we'll call it directly } } @@ -156,10 +156,6 @@ class LambdaClassFixer extends ClassVisitor { @Override public void visitEnd() { - checkState( - !hasState || hasFactory, - "Expected factory method for capturing lambda %s", - getInternalName()); if (!hasState) { checkState( signature == null, diff --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 index 8f90d25ff5..f5ed6d524a 100644 --- 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 @@ -423,8 +423,7 @@ class LambdaDesugaring extends ClassVisitor { String lambdaClassName = internalName + "$$Lambda$" + (lambdaCount++); Type[] capturedTypes = Type.getArgumentTypes(desc); boolean needFactory = - capturedTypes.length != 0 - && !attemptAllocationBeforeArgumentLoads(lambdaClassName, capturedTypes); + !attemptAllocationBeforeArgumentLoads(lambdaClassName, capturedTypes); lambdas.generateLambdaClass( internalName, LambdaInfo.create( @@ -435,7 +434,7 @@ class LambdaDesugaring extends ClassVisitor { bridgeInfo.bridgeMethod()), bsmMethod, args); - if (desc.startsWith("()")) { + if (false) { // For stateless lambda classes we'll generate a singleton instance that we can just load checkState(capturedTypes.length == 0); super.visitFieldInsn( @@ -493,7 +492,6 @@ class LambdaDesugaring extends ClassVisitor { * @return {@code true} if we were able to insert a new/dup, {@code false} otherwise */ private boolean attemptAllocationBeforeArgumentLoads(String internalName, Type[] paramTypes) { - checkArgument(paramTypes.length > 0, "Expected at least one param for %s", internalName); // Walk backwards past loads corresponding to constructor arguments to find the instruction // after which we need to insert our NEW/DUP pair AbstractInsnNode insn = instructions.getLast();