diff options
author | Chengnian Sun <cnsun@google.com> | 2017-03-16 22:38:28 +0000 |
---|---|---|
committer | Yun Peng <pcloudy@google.com> | 2017-03-17 12:26:19 +0000 |
commit | 5ab0ec5a285547749f51779530c0f75b857553ed (patch) | |
tree | 63efa1ba43f73c61d74b1540b16a8e2c51b5921f | |
parent | 2b88f62f223318b30b8f7ba9afe46e39c2030272 (diff) |
Add a flag (--only_desugar_javac9_for_lint) to disable desugaring lambda expressions for Android Lint.
RELNOTES: n/a
--
PiperOrigin-RevId: 150378522
MOS_MIGRATED_REVID=150378522
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java | 47 | ||||
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java | 2 |
2 files changed, 34 insertions, 15 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java b/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java index 6f9e0f0167..1498782065 100644 --- a/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java +++ b/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java @@ -18,6 +18,7 @@ import static java.nio.charset.StandardCharsets.ISO_8859_1; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.io.ByteStreams; import com.google.devtools.build.android.Converters.ExistingPathConverter; @@ -96,6 +97,15 @@ class Desugar { public boolean allowEmptyBootclasspath; @Option( + name = "only_desugar_javac9_for_lint", + defaultValue = "false", + help = + "A temporary flag specifically for android lint, subject to removal anytime (DO NOT USE)", + category = "undocumented" + ) + public boolean onlyDesugarJavac9ForLint; + + @Option( name = "output", allowMultiple = true, defaultValue = "", @@ -217,15 +227,19 @@ class Desugar { CoreLibraryRewriter.UnprefixingClassWriter writer = rewriter.writer(ClassWriter.COMPUTE_MAXS /*for bridge methods*/); ClassVisitor visitor = writer; - if (!allowDefaultMethods) { - visitor = new Java7Compatibility(visitor, readerFactory); + if (!options.onlyDesugarJavac9ForLint) { + if (!allowDefaultMethods) { + visitor = new Java7Compatibility(visitor, readerFactory); + } + + visitor = + new LambdaDesugaring( + visitor, + loader, + lambdas, + interfaceLambdaMethodCollector, + allowDefaultMethods); } - - visitor = - new LambdaDesugaring( - visitor, loader, lambdas, interfaceLambdaMethodCollector, - allowDefaultMethods); - if (!allowCallsToObjectsNonNull) { visitor = new ObjectsRequireNonNullMethodInliner(visitor); } @@ -244,14 +258,19 @@ class Desugar { } ImmutableSet<String> interfaceLambdaMethods = interfaceLambdaMethodCollector.build(); - if (allowDefaultMethods) { - checkState( - interfaceLambdaMethods.isEmpty(), - "Desugaring with default methods enabled moved interface lambdas"); - } + + checkState( + !allowDefaultMethods || interfaceLambdaMethods.isEmpty(), + "Desugaring with default methods enabled moved interface lambdas"); // Write out the lambda classes we generated along the way - for (Map.Entry<Path, LambdaInfo> lambdaClass : lambdas.drain().entrySet()) { + ImmutableMap<Path, LambdaInfo> lambdaClasses = lambdas.drain(); + checkState( + !options.onlyDesugarJavac9ForLint || lambdaClasses.isEmpty(), + "There should be no lambda classes generated: %s", + lambdaClasses.keySet()); + + for (Map.Entry<Path, LambdaInfo> lambdaClass : lambdaClasses.entrySet()) { try (InputStream bytecode = Files.newInputStream(dumpDirectory.resolve(lambdaClass.getKey()))) { ClassReader reader = rewriter.reader(bytecode); diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java b/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java index 2a9f9beb80..155e3232fe 100644 --- a/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java +++ b/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java @@ -57,7 +57,7 @@ class LambdaClassMaker { * Returns absolute paths to .class files generated since the last call to this method together * with a string descriptor of the factory method. */ - public Map<Path, LambdaInfo> drain() { + public ImmutableMap<Path, LambdaInfo> drain() { ImmutableMap<Path, LambdaInfo> result = ImmutableMap.copyOf(generatedClasses); generatedClasses.clear(); return result; |