diff options
author | Chengnian Sun <cnsun@google.com> | 2017-03-16 22:38:28 +0000 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2017-03-22 09:55:48 -0700 |
commit | c1cd3d1d1c4893c58f97479af51b1fff180e9d82 (patch) | |
tree | a859421556e19cfd8613db6c7e9e38ab0a09f2ee | |
parent | 8264d43883171b6c0233ec9d2bdd17c614027e91 (diff) | |
download | desugar-c1cd3d1d1c4893c58f97479af51b1fff180e9d82.tar.gz |
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
GitOrigin-RevId: 5ab0ec5a285547749f51779530c0f75b857553ed
Change-Id: I3fe45f8ce4c5d2b7b66c2d9b2e6d9adbe812b1c5
-rw-r--r-- | java/com/google/devtools/build/android/desugar/Desugar.java | 47 | ||||
-rw-r--r-- | java/com/google/devtools/build/android/desugar/LambdaClassMaker.java | 2 |
2 files changed, 34 insertions, 15 deletions
diff --git a/java/com/google/devtools/build/android/desugar/Desugar.java b/java/com/google/devtools/build/android/desugar/Desugar.java index 6f9e0f0..1498782 100644 --- a/java/com/google/devtools/build/android/desugar/Desugar.java +++ b/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/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java b/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java index 2a9f9be..155e323 100644 --- a/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java +++ b/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; |