Hash :
2f808349
Author :
Date :
2021-04-16T19:21:15
Add standalone Android build. Includes necessary DEPS and GN build changes. Some folders are copied directly from Chromium because they don't exist as source mirrors or aren't available for other reasons. Bug: angleproject:2344 Change-Id: Ibb7f8a3e2288048b7aed2b0e277ca63b5a932c57 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2826480 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
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 ("<init>".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();