summaryrefslogtreecommitdiff
path: root/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java
diff options
context:
space:
mode:
authorKevin Bierhoff <kmb@google.com>2017-03-23 00:39:57 +0000
committerColin Cross <ccross@android.com>2017-03-27 13:16:03 -0700
commita0100199b92c84aee1d7b1e1cad1df62580f6420 (patch)
treeb126211add1767ae45523cb0129ce60b8420257b /java/com/google/devtools/build/android/desugar/LambdaClassFixer.java
parent172122c125f4b4b3eb402b0d5606a7862a28fd47 (diff)
downloaddesugar-a0100199b92c84aee1d7b1e1cad1df62580f6420.tar.gz
Avoid factory methods when desugaring lambda expressions and this:: method references for android
RELNOTES: no factory methods generated for lambda expressions on android -- PiperOrigin-RevId: 150952237 MOS_MIGRATED_REVID=150952237 GitOrigin-RevId: f4bcdc19d7f7156d059bee154f2d9dca8d729db7 Change-Id: I509b9af68b0a55f20d32c7133eacf4229c76467e
Diffstat (limited to 'java/com/google/devtools/build/android/desugar/LambdaClassFixer.java')
-rw-r--r--java/com/google/devtools/build/android/desugar/LambdaClassFixer.java6
1 files changed, 6 insertions, 0 deletions
diff --git a/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java b/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java
index e942c95..dea6339 100644
--- a/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java
+++ b/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java
@@ -117,10 +117,16 @@ class LambdaClassFixer extends ClassVisitor {
}
if (FACTORY_METHOD_NAME.equals(name)) {
hasFactory = true;
+ if (!lambdaInfo.needFactory()) {
+ return null; // drop generated factory method if we won't call it
+ }
access &= ~Opcodes.ACC_PRIVATE; // make factory method accessible
} else if ("<init>".equals(name)) {
this.desc = desc;
this.signature = signature;
+ if (!lambdaInfo.needFactory() && !desc.startsWith("()")) {
+ access &= ~Opcodes.ACC_PRIVATE; // make constructor accessible if we'll call it directly
+ }
}
MethodVisitor methodVisitor =
new LambdaClassMethodRewriter(super.visitMethod(access, name, desc, signature, exceptions));