Change desugar configuration from boolean to enum
Bug: 147139686
Bug: 147472279
Bug: 147485959
Change-Id: I246c0f3f25afad1e6c09ae2e696af13041e1c6c0
diff --git a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
index fd2ecb3..5f65f6a 100644
--- a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.InternalOptions.DesugarState;
import com.android.tools.r8.utils.Reporter;
import java.nio.file.Path;
import java.util.ArrayList;
@@ -35,7 +36,7 @@
private final StringConsumer mainDexListConsumer;
private final int minApiLevel;
private final Reporter reporter;
- private final boolean enableDesugaring;
+ private final DesugarState desugarState;
private final boolean includeClassesChecksum;
private final boolean optimizeMultidexForLinearAlloc;
private final BiPredicate<String, Long> dexClassChecksumFilter;
@@ -48,7 +49,7 @@
mode = null;
minApiLevel = 0;
reporter = new Reporter();
- enableDesugaring = true;
+ desugarState = DesugarState.ON;
includeClassesChecksum = false;
optimizeMultidexForLinearAlloc = false;
dexClassChecksumFilter = (name, checksum) -> true;
@@ -62,7 +63,7 @@
StringConsumer mainDexListConsumer,
int minApiLevel,
Reporter reporter,
- boolean enableDesugaring,
+ DesugarState desugarState,
boolean optimizeMultidexForLinearAlloc,
boolean includeClassesChecksum,
BiPredicate<String, Long> dexClassChecksumFilter,
@@ -75,7 +76,7 @@
this.mainDexListConsumer = mainDexListConsumer;
this.minApiLevel = minApiLevel;
this.reporter = reporter;
- this.enableDesugaring = enableDesugaring;
+ this.desugarState = desugarState;
this.optimizeMultidexForLinearAlloc = optimizeMultidexForLinearAlloc;
this.includeClassesChecksum = includeClassesChecksum;
this.dexClassChecksumFilter = dexClassChecksumFilter;
@@ -113,7 +114,11 @@
/** Get the use-desugaring state. True if enabled, false otherwise. */
public boolean getEnableDesugaring() {
- return enableDesugaring;
+ return desugarState == DesugarState.ON;
+ }
+
+ DesugarState getDesugarState() {
+ return desugarState;
}
/** True if the output dex files has checksum information encoded in it. False otherwise. */
@@ -161,7 +166,7 @@
private CompilationMode mode;
private int minApiLevel = 0;
- private boolean disableDesugaring = false;
+ private DesugarState desugarState = DesugarState.ON;
private List<StringResource> desugaredLibraryConfigurationResources = new ArrayList<>();
private boolean includeClassesChecksum = false;
private boolean lookupLibraryBeforeProgram = true;
@@ -411,7 +416,7 @@
@Deprecated
public B setEnableDesugaring(boolean enableDesugaring) {
- this.disableDesugaring = !enableDesugaring;
+ this.desugarState = enableDesugaring ? DesugarState.ON : DesugarState.OFF;
return self();
}
@@ -427,13 +432,17 @@
* <p>Note that even for API 27, desugaring is still required for closures support on ART.
*/
public B setDisableDesugaring(boolean disableDesugaring) {
- this.disableDesugaring = disableDesugaring;
+ this.desugarState = disableDesugaring ? DesugarState.OFF : DesugarState.ON;
return self();
}
/** Is desugaring forcefully disabled. */
public boolean getDisableDesugaring() {
- return disableDesugaring;
+ return desugarState == DesugarState.OFF;
+ }
+
+ DesugarState getDesugaringState() {
+ return desugarState;
}
@Deprecated
diff --git a/src/main/java/com/android/tools/r8/CompatDxHelper.java b/src/main/java/com/android/tools/r8/CompatDxHelper.java
index a84bab5..fb186f4 100644
--- a/src/main/java/com/android/tools/r8/CompatDxHelper.java
+++ b/src/main/java/com/android/tools/r8/CompatDxHelper.java
@@ -6,6 +6,7 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.InternalOptions.DesugarState;
public class CompatDxHelper {
public static void run(D8Command command, Boolean minimalMainDex)
@@ -13,7 +14,7 @@
AndroidApp app = command.getInputApp();
InternalOptions options = command.getInternalOptions();
// DX does not desugar.
- options.enableDesugaring = false;
+ options.desugarState = DesugarState.OFF;
// DX allows --multi-dex without specifying a main dex list for legacy devices.
// That is broken, but for CompatDX we do the same to not break existing builds
// that are trying to transition.
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index b76e6a7..467570f 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.AssertionConfigurationWithDefault;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.InternalOptions.DesugarState;
import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.StringDiagnostic;
import java.nio.file.Path;
@@ -213,7 +214,7 @@
getMainDexListConsumer(),
getMinApiLevel(),
getReporter(),
- !getDisableDesugaring(),
+ getDesugaringState(),
intermediate,
isOptimizeMultidexForLinearAlloc(),
getIncludeClassesChecksum(),
@@ -281,7 +282,7 @@
StringConsumer mainDexListConsumer,
int minApiLevel,
Reporter diagnosticsHandler,
- boolean enableDesugaring,
+ DesugarState enableDesugaring,
boolean intermediate,
boolean optimizeMultidexForLinearAlloc,
boolean encodeChecksum,
@@ -354,7 +355,7 @@
// TODO(b/137168535) Disable non-null tracking for now.
internal.enableNonNullTracking = false;
- internal.enableDesugaring = getEnableDesugaring();
+ internal.desugarState = getDesugarState();
internal.encodeChecksums = getIncludeClassesChecksum();
internal.dexClassChecksumFilter = getDexClassChecksumFilter();
internal.enableInheritanceClassInDexDistributor = isOptimizeMultidexForLinearAlloc();
diff --git a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
index 1ed8cac..2509e12 100644
--- a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
+++ b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
@@ -17,6 +17,7 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.ExceptionUtils;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.InternalOptions.DesugarState;
import com.android.tools.r8.utils.ThreadUtils;
import com.android.tools.r8.utils.Timing;
import java.io.IOException;
@@ -71,7 +72,7 @@
Boolean minimalMainDex,
Map<String, Integer> inputOrdering)
throws IOException {
- options.enableDesugaring = false;
+ options.desugarState = DesugarState.OFF;
options.enableMainDexListCheck = false;
options.minimalMainDex = minimalMainDex;
assert !options.isMinifying();
diff --git a/src/main/java/com/android/tools/r8/DexSplitterHelper.java b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
index 2dee6ef..7ec9143 100644
--- a/src/main/java/com/android/tools/r8/DexSplitterHelper.java
+++ b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
@@ -21,6 +21,7 @@
import com.android.tools.r8.utils.FeatureClassMapping;
import com.android.tools.r8.utils.FeatureClassMapping.FeatureMappingException;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.InternalOptions.DesugarState;
import com.android.tools.r8.utils.ThreadUtils;
import com.android.tools.r8.utils.Timing;
import java.io.IOException;
@@ -58,7 +59,7 @@
ExecutorService executor)
throws IOException {
InternalOptions options = command.getInternalOptions();
- options.enableDesugaring = false;
+ options.desugarState = DesugarState.OFF;
options.enableMainDexListCheck = false;
options.ignoreMainDexMissingClasses = true;
options.minimalMainDex = false;
diff --git a/src/main/java/com/android/tools/r8/L8Command.java b/src/main/java/com/android/tools/r8/L8Command.java
index d190d6c..9db1c33 100644
--- a/src/main/java/com/android/tools/r8/L8Command.java
+++ b/src/main/java/com/android/tools/r8/L8Command.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.AssertionConfigurationWithDefault;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.InternalOptions.DesugarState;
import com.android.tools.r8.utils.Pair;
import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.StringDiagnostic;
@@ -90,7 +91,7 @@
mainDexListConsumer,
minApiLevel,
diagnosticsHandler,
- true,
+ DesugarState.ON,
false,
false,
(name, checksum) -> true,
@@ -166,7 +167,7 @@
// TODO(b/137168535) Disable non-null tracking for now.
internal.enableNonNullTracking = false;
- assert internal.enableDesugaring;
+ assert internal.desugarState == DesugarState.ON;
assert internal.enableInheritanceClassInDexDistributor;
internal.enableInheritanceClassInDexDistributor = false;
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 187e095..4051f9c 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -25,6 +25,7 @@
import com.android.tools.r8.utils.ExceptionDiagnostic;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.InternalOptions.DesugarState;
import com.android.tools.r8.utils.InternalOptions.LineNumberOptimization;
import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.StringDiagnostic;
@@ -530,8 +531,10 @@
assert getProgramConsumer() != null;
- boolean desugaring =
- (getProgramConsumer() instanceof ClassFileConsumer) ? false : !getDisableDesugaring();
+ DesugarState desugaring =
+ (getProgramConsumer() instanceof ClassFileConsumer)
+ ? DesugarState.OFF
+ : getDesugaringState();
FeatureSplitConfiguration featureSplitConfiguration =
!featureSplits.isEmpty() ? new FeatureSplitConfiguration(featureSplits, reporter) : null;
@@ -703,7 +706,7 @@
CompilationMode mode,
int minApiLevel,
Reporter reporter,
- boolean enableDesugaring,
+ DesugarState enableDesugaring,
boolean enableTreeShaking,
boolean enableMinification,
boolean disableVerticalClassMerging,
@@ -792,7 +795,7 @@
internal.debug = getMode() == CompilationMode.DEBUG;
internal.programConsumer = getProgramConsumer();
internal.minApiLevel = getMinApiLevel();
- internal.enableDesugaring = getEnableDesugaring();
+ internal.desugarState = getDesugarState();
assert internal.isShrinking() == getEnableTreeShaking();
assert internal.isMinifying() == getEnableMinification();
// In current implementation we only enable lambda merger if the tree
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 477925a..b40b925 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
@@ -90,6 +90,7 @@
import com.android.tools.r8.utils.CfgPrinter;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.InternalOptions.DesugarState;
import com.android.tools.r8.utils.InternalOptions.OutlineOptions;
import com.android.tools.r8.utils.StringDiagnostic;
import com.android.tools.r8.utils.ThreadUtils;
@@ -244,17 +245,18 @@
this.methodOptimizationInfoCollector = null;
return;
}
- this.lambdaRewriter = options.enableDesugaring ? new LambdaRewriter(appView) : null;
+ this.lambdaRewriter =
+ options.desugarState == DesugarState.ON ? new LambdaRewriter(appView) : null;
this.interfaceMethodRewriter =
options.isInterfaceMethodDesugaringEnabled()
? new InterfaceMethodRewriter(appView, this)
: null;
this.twrCloseResourceRewriter =
- (options.enableDesugaring && enableTwrCloseResourceDesugaring())
+ ((options.desugarState == DesugarState.ON) && enableTwrCloseResourceDesugaring())
? new TwrCloseResourceRewriter(appView, this)
: null;
this.backportedMethodRewriter =
- options.enableDesugaring
+ options.desugarState == DesugarState.ON
? new BackportedMethodRewriter(appView, this)
: null;
this.covariantReturnTypeAnnotationTransformer =
@@ -1290,7 +1292,7 @@
deadCodeRemover.run(code);
assert code.isConsistentSSA();
- if (options.enableDesugaring && enableTryWithResourcesDesugaring()) {
+ if (options.desugarState == DesugarState.ON && enableTryWithResourcesDesugaring()) {
codeRewriter.rewriteThrowableAddAndGetSuppressed(code);
}
if (backportedMethodRewriter != null) {
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 9ed931c..c233df4 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -74,6 +74,11 @@
ON
}
+ public enum DesugarState {
+ OFF,
+ ON
+ }
+
public static final int SUPPORTED_CF_MAJOR_VERSION = Opcodes.V11;
public static final int SUPPORTED_DEX_VERSION =
AndroidApiLevel.LATEST.getDexVersion().getIntValue();
@@ -398,7 +403,7 @@
// Flag to turn on/off lambda class merging in R8.
public boolean enableLambdaMerging = false;
// Flag to turn on/off desugaring in D8/R8.
- public boolean enableDesugaring = true;
+ public DesugarState desugarState = DesugarState.ON;
// Flag to turn on/off JDK11+ nest-access control
public boolean enableNestBasedAccessDesugaring = true;
// Flag to turn on/off reduction of nest to improve class merging optimizations.
@@ -1135,7 +1140,7 @@
if (!hasConsumer()) {
return false;
}
- return enableDesugaring
+ return desugarState == DesugarState.ON
&& interfaceMethodDesugaring == OffOrAuto.Auto
&& (!canUseDefaultAndStaticInterfaceMethods() || enableCfInterfaceMethodDesugaring);
}
diff --git a/src/test/java/com/android/tools/r8/BaseCompilerCommandTest.java b/src/test/java/com/android/tools/r8/BaseCompilerCommandTest.java
index bc9ec14..21c3272 100644
--- a/src/test/java/com/android/tools/r8/BaseCompilerCommandTest.java
+++ b/src/test/java/com/android/tools/r8/BaseCompilerCommandTest.java
@@ -3,14 +3,16 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;
-import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertEquals;
+
+import com.android.tools.r8.utils.InternalOptions.DesugarState;
// Utilities common to all compiler command tests.
public class BaseCompilerCommandTest {
public static void assertDesugaringDisabled(BaseCompilerCommand command) {
- assertFalse(command.getEnableDesugaring());
- assertFalse(command.getInternalOptions().enableDesugaring);
+ assertEquals(DesugarState.OFF, command.getDesugarState());
+ assertEquals(DesugarState.OFF, command.getInternalOptions().desugarState);
}
}
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 feda70f..8769dc2 100644
--- a/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithUnderscoreThisTestRunner.java
+++ b/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithUnderscoreThisTestRunner.java
@@ -19,6 +19,7 @@
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.Reference;
import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.InternalOptions.DesugarState;
import com.android.tools.r8.utils.StringUtils;
import com.google.common.collect.ImmutableList;
import java.util.Collections;
@@ -118,7 +119,7 @@
.addOptionsModification(
internalOptions -> {
if (parameters.isCfRuntime()) {
- internalOptions.enableDesugaring = true;
+ internalOptions.desugarState = DesugarState.ON;
internalOptions.enableCfInterfaceMethodDesugaring = true;
}
});