Turn off desugaring in CompatDx.
R=zerny@google.com
Bug: 65436255
Change-Id: I245a80a71a31798edf30e6cf8172df08760a8342
diff --git a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
index 72cfbab..426197b 100644
--- a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
@@ -22,6 +22,7 @@
private final CompilationMode mode;
private final int minApiLevel;
private final DiagnosticsHandler diagnosticsHandler;
+ private final boolean enableDesugaring;
BaseCompilerCommand(boolean printHelp, boolean printVersion) {
super(printHelp, printVersion);
@@ -30,6 +31,7 @@
mode = null;
minApiLevel = 0;
diagnosticsHandler = new DefaultDiagnosticsHandler();
+ enableDesugaring = true;
}
BaseCompilerCommand(
@@ -38,7 +40,8 @@
OutputMode outputMode,
CompilationMode mode,
int minApiLevel,
- DiagnosticsHandler diagnosticsHandler) {
+ DiagnosticsHandler diagnosticsHandler,
+ boolean enableDesugaring) {
super(app);
assert mode != null;
assert minApiLevel > 0;
@@ -47,6 +50,7 @@
this.mode = mode;
this.minApiLevel = minApiLevel;
this.diagnosticsHandler = diagnosticsHandler;
+ this.enableDesugaring = enableDesugaring;
}
public Path getOutputPath() {
@@ -69,6 +73,10 @@
return diagnosticsHandler;
}
+ boolean getEnableDesugaring() {
+ return enableDesugaring;
+ }
+
abstract public static class Builder<C extends BaseCompilerCommand, B extends Builder<C, B>>
extends BaseCommand.Builder<C, B> {
@@ -152,6 +160,10 @@
return self();
}
+ protected boolean getEnableDesugaring() {
+ return true;
+ }
+
protected void validate() throws CompilationException {
super.validate();
if (getAppBuilder().hasMainDexList() && outputMode == OutputMode.FilePerInputClass) {
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index ac86781..3ce1ea1 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -99,6 +99,7 @@
getMode(),
getMinApiLevel(),
getDiagnosticsHandler(),
+ getEnableDesugaring(),
intermediate);
}
}
@@ -196,8 +197,10 @@
CompilationMode mode,
int minApiLevel,
DiagnosticsHandler diagnosticsHandler,
+ boolean enableDesugaring,
boolean intermediate) {
- super(inputApp, outputPath, outputMode, mode, minApiLevel, diagnosticsHandler);
+ super(inputApp, outputPath, outputMode, mode, minApiLevel, diagnosticsHandler,
+ enableDesugaring);
this.intermediate = intermediate;
}
@@ -226,6 +229,7 @@
internal.outline.enabled = false;
internal.outputMode = getOutputMode();
internal.diagnosticsHandler = getDiagnosticsHandler();
+ internal.enableDesugaring = getEnableDesugaring();
return internal;
}
}
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 6185825..502dd3c 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -238,6 +238,7 @@
getMode(),
getMinApiLevel(),
getDiagnosticsHandler(),
+ getEnableDesugaring(),
useTreeShaking,
useDiscardedChecker,
useMinification,
@@ -394,12 +395,14 @@
CompilationMode mode,
int minApiLevel,
DiagnosticsHandler diagnosticsHandler,
+ boolean enableDesugaring,
boolean useTreeShaking,
boolean useDiscardedChecker,
boolean useMinification,
boolean ignoreMissingClasses,
Path proguardMapOutput) {
- super(inputApp, outputPath, outputMode, mode, minApiLevel, diagnosticsHandler);
+ super(inputApp, outputPath, outputMode, mode, minApiLevel, diagnosticsHandler,
+ enableDesugaring);
assert proguardConfiguration != null;
assert mainDexKeepRules != null;
assert getOutputMode() == OutputMode.Indexed : "Only regular mode is supported in R8";
diff --git a/src/main/java/com/android/tools/r8/compatdx/CompatDxCommandBuilder.java b/src/main/java/com/android/tools/r8/compatdx/CompatDxCommandBuilder.java
index 55206a4..3e8a006 100644
--- a/src/main/java/com/android/tools/r8/compatdx/CompatDxCommandBuilder.java
+++ b/src/main/java/com/android/tools/r8/compatdx/CompatDxCommandBuilder.java
@@ -10,4 +10,9 @@
CompatDxCommandBuilder() {
super(true);
}
+
+ @Override
+ protected boolean getEnableDesugaring() {
+ return false;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 9e49eab..184087a 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -87,7 +87,6 @@
GraphLense graphLense,
InternalOptions options,
CfgPrinter printer,
- boolean enableDesugaring,
boolean enableWholeProgramOptimizations) {
assert application != null;
assert appInfo != null;
@@ -99,9 +98,9 @@
this.options = options;
this.printer = printer;
this.codeRewriter = new CodeRewriter(appInfo, libraryMethodsReturningReceiver());
- this.lambdaRewriter = enableDesugaring ? new LambdaRewriter(this) : null;
+ this.lambdaRewriter = options.enableDesugaring ? new LambdaRewriter(this) : null;
this.interfaceMethodRewriter =
- (enableDesugaring && enableInterfaceMethodDesugaring())
+ (options.enableDesugaring && enableInterfaceMethodDesugaring())
? new InterfaceMethodRewriter(this, options) : null;
if (enableWholeProgramOptimizations) {
assert appInfo.hasSubtyping();
@@ -130,20 +129,7 @@
DexApplication application,
AppInfo appInfo,
InternalOptions options) {
- this(null, application, appInfo, null, options, null, true, false);
- }
-
- /**
- * Create an IR converter for processing methods with full program optimization disabled.
- *
- * The argument <code>enableDesugaring</code> if desugaring is enabled.
- */
- public IRConverter(
- DexApplication application,
- AppInfo appInfo,
- InternalOptions options,
- boolean enableDesugaring) {
- this(null, application, appInfo, null, options, null, enableDesugaring, false);
+ this(null, application, appInfo, null, options, null, false);
}
/**
@@ -155,7 +141,7 @@
AppInfo appInfo,
InternalOptions options,
CfgPrinter printer) {
- this(timing, application, appInfo, null, options, printer, true, false);
+ this(timing, application, appInfo, null, options, printer, false);
}
/**
@@ -168,7 +154,7 @@
InternalOptions options,
CfgPrinter printer,
GraphLense graphLense) {
- this(timing, application, appInfo, graphLense, options, printer, true, true);
+ this(timing, application, appInfo, graphLense, options, printer, true);
}
private boolean enableInterfaceMethodDesugaring() {
@@ -566,7 +552,7 @@
DeadCodeRemover.removeDeadCode(code, codeRewriter, options);
assert code.isConsistentSSA();
- if (enableTryWithResourcesDesugaring()) {
+ if (options.enableDesugaring && enableTryWithResourcesDesugaring()) {
codeRewriter.rewriteThrowableAddAndGetSuppressed(code);
}
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 5c4909a..c8308a9 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -86,6 +86,8 @@
public boolean intermediate = false;
public List<String> logArgumentsFilter = ImmutableList.of();
+ // Flag to turn on/off desugaring in D8/R8.
+ public boolean enableDesugaring = true;
// Defines interface method rewriter behavior.
public OffOrAuto interfaceMethodDesugaring = OffOrAuto.Auto;
// Defines try-with-resources rewriter behavior.