Add an explicit Cf to Cf desugaring flag
Bug: 147485959
Change-Id: Ie15894b866127f031ddd74d8f96bbaa7e9049c55
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index 164c572..5c815bc 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -375,7 +375,7 @@
internal.debug = getMode() == CompilationMode.DEBUG;
internal.programConsumer = getProgramConsumer();
if (internal.programConsumer instanceof ClassFileConsumer) {
- internal.enableCfInterfaceMethodDesugaring = true;
+ internal.cfToCfDesugar = true;
}
internal.mainDexListConsumer = getMainDexListConsumer();
internal.minimalMainDex = internal.debug || minimalMainDex;
diff --git a/src/main/java/com/android/tools/r8/L8.java b/src/main/java/com/android/tools/r8/L8.java
index cf9684c..dea3bb8 100644
--- a/src/main/java/com/android/tools/r8/L8.java
+++ b/src/main/java/com/android/tools/r8/L8.java
@@ -87,11 +87,15 @@
ExecutorService executorService)
throws CompilationFailedException {
try {
+ assert !options.cfToCfDesugar;
ExceptionUtils.withD8CompilationHandler(
options.reporter,
() -> {
+ options.cfToCfDesugar = true;
desugar(app, options, executorService);
+ options.cfToCfDesugar = false;
});
+ assert !options.cfToCfDesugar;
if (shrink) {
R8.run(r8Command);
} else {
@@ -105,6 +109,7 @@
private static void desugar(
AndroidApp inputApp, InternalOptions options, ExecutorService executor) throws IOException {
Timing timing = Timing.create("L8 desugaring", options);
+ assert options.cfToCfDesugar;
try {
// Disable global optimizations.
options.disableGlobalOptimizations();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index 1d945d2..05c9c66 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -552,7 +552,7 @@
// The only case where we do Lambda desugaring with Cf to Cf is in L8.
// If the compilation is not coreLibraryCompilation, then the assertion
// implMethodHolder != null may fail, hence the assertion.
- assert options.isDesugaredLibraryCompilation() || options.enableCfInterfaceMethodDesugaring;
+ assert options.cfToCfDesugar;
DexMethod implMethod = descriptor.implHandle.asMethod();
DexClass implMethodHolder = definitionFor(implMethod.holder);
if (implMethodHolder == null) {
diff --git a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
index 9f51daa..c92c762 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
@@ -106,7 +106,7 @@
for (DexProgramClass clazz : application.classes()) {
if (clazz.getSynthesizedFrom().isEmpty()
|| options.isDesugaredLibraryCompilation()
- || options.enableCfInterfaceMethodDesugaring) {
+ || options.cfToCfDesugar) {
writeClass(clazz, consumer, markerString);
} else {
throw new Unimplemented("No support for synthetics in the Java bytecode backend.");
@@ -194,10 +194,10 @@
// which do not have class file version.
assert options.testing.enableForceNestBasedAccessDesugaringForTest
|| options.isDesugaredLibraryCompilation()
- || options.enableCfInterfaceMethodDesugaring;
+ || options.cfToCfDesugar;
// TODO(b/146424042): We may call static methods on interface classes so we have to go for
// version 52.
- return options.enableCfInterfaceMethodDesugaring ? 52 : 0;
+ return options.cfToCfDesugar ? 52 : 0;
}
return method.getClassFileVersion();
}
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index f83a673..266c4fe 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -255,7 +255,7 @@
public boolean enableKotlinMetadataRewritingForRenamedClasses = true;
public boolean encodeChecksums = false;
public BiPredicate<String, Long> dexClassChecksumFilter = (name, checksum) -> true;
- public boolean enableCfInterfaceMethodDesugaring = false;
+ public boolean cfToCfDesugar = false;
public int callGraphLikelySpuriousCallEdgeThreshold = 50;
@@ -1277,7 +1277,7 @@
}
return desugarState == DesugarState.ON
&& interfaceMethodDesugaring == OffOrAuto.Auto
- && (!canUseDefaultAndStaticInterfaceMethods() || enableCfInterfaceMethodDesugaring);
+ && (!canUseDefaultAndStaticInterfaceMethods() || cfToCfDesugar);
}
public boolean isStringSwitchConversionEnabled() {
diff --git a/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithUnderscoreThisTestRunner.java b/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithUnderscoreThisTestRunner.java
index 8769dc2..7cde792 100644
--- a/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithUnderscoreThisTestRunner.java
+++ b/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithUnderscoreThisTestRunner.java
@@ -120,7 +120,7 @@
internalOptions -> {
if (parameters.isCfRuntime()) {
internalOptions.desugarState = DesugarState.ON;
- internalOptions.enableCfInterfaceMethodDesugaring = true;
+ internalOptions.cfToCfDesugar = true;
}
});
if (parameters.isDexRuntime()) {