Use Machine desugared library flag where obvious
Hide internal structure of the machine specification to D8/R8.
Bug: 184026720
Change-Id: I2c822452c897c420fad5b502738ac85a63ccbf32
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index b96eaef..e57f3e1 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -310,7 +310,7 @@
if (!options.mainDexKeepRules.isEmpty()) {
MainDexListBuilder.checkForAssumedLibraryTypes(appView.appInfo());
}
- if (!options.desugaredLibrarySpecification.getRetargetCoreLibMember().isEmpty()) {
+ if (options.machineDesugaredLibrarySpecification.hasRetargeting()) {
DesugaredLibraryRetargeterLibraryTypeSynthesizer.checkForAssumedLibraryTypes(appView);
DesugaredLibraryRetargeterLibraryTypeSynthesizer.amendLibraryWithRetargetedMembers(appView);
}
diff --git a/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java b/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java
index a720021..8bdf5a1 100644
--- a/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java
+++ b/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java
@@ -71,7 +71,7 @@
return false;
}
return namingLens.hasPrefixRewritingLogic()
- || options.desugaredLibrarySpecification.hasEmulatedLibraryInterfaces();
+ || options.machineDesugaredLibrarySpecification.hasEmulatedInterfaces();
}
private void run() {
diff --git a/src/main/java/com/android/tools/r8/dex/CodeToKeep.java b/src/main/java/com/android/tools/r8/dex/CodeToKeep.java
index cc05c31..3adc951 100644
--- a/src/main/java/com/android/tools/r8/dex/CodeToKeep.java
+++ b/src/main/java/com/android/tools/r8/dex/CodeToKeep.java
@@ -25,7 +25,7 @@
static CodeToKeep createCodeToKeep(InternalOptions options, NamingLens namingLens) {
if ((!namingLens.hasPrefixRewritingLogic()
- && !options.desugaredLibrarySpecification.hasEmulatedLibraryInterfaces())
+ && !options.machineDesugaredLibrarySpecification.hasEmulatedInterfaces())
|| options.isDesugaredLibraryCompilation()
|| options.testing.enableExperimentalDesugaredLibraryKeepRuleGenerator) {
return new NopCodeToKeep();
@@ -65,7 +65,7 @@
this.namingLens = namingLens;
this.options = options;
potentialTypesToKeep.addAll(
- options.desugaredLibrarySpecification.getEmulateLibraryInterface().values());
+ options.machineDesugaredLibrarySpecification.getEmulatedInterfaceRewrittenTypes());
potentialTypesToKeep.addAll(
options.desugaredLibrarySpecification.getCustomConversions().values());
}
@@ -77,7 +77,7 @@
|| type.toDescriptorString()
.startsWith(
"L"
- + options.desugaredLibrarySpecification
+ + options.machineDesugaredLibrarySpecification
.getSynthesizedLibraryClassesPackagePrefix());
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
index 49ad698..0606d2d 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
@@ -128,24 +128,16 @@
DexMethod original = appView.graphLens().getOriginalMethodSignature(method);
assert original != null;
MethodProvider provider = rewritableMethods.getProvider(original);
- // TODO(b/150693139): Since the DesugarLibraryRetargeter is run during IR processing while the
- // backported method rewriter is run in cf to cf, we need here to compute if the method is
- // actually going to be retargeted through desugared library backports, and compute the
- // corresponding backported method if so. This can be removed once the DesugarLibraryRetargeter
- // has been moved as a cf to cf transformation.
+ // Old versions of desugared library have in the jar file pre-desugared code. This is used
+ // to undesugar pre-desugared code, then the code is re-desugared with D8/R8. This is
+ // maintained for legacy only, recent desugared library should not be shipped with
+ // pre-desugared code.
+ Map<DexType, DexType> legacyBackport =
+ appView.options().machineDesugaredLibrarySpecification.getLegacyBackport();
if (provider == null
&& appView.options().isDesugaredLibraryCompilation()
- && appView
- .options()
- .desugaredLibrarySpecification
- .getBackportCoreLibraryMember()
- .containsKey(method.holder)) {
- DexType newHolder =
- appView
- .options()
- .desugaredLibrarySpecification
- .getBackportCoreLibraryMember()
- .get(method.holder);
+ && legacyBackport.containsKey(method.holder)) {
+ DexType newHolder = legacyBackport.get(method.holder);
DexMethod backportedMethod =
appView.dexItemFactory().createMethod(newHolder, method.proto, method.name);
provider = rewritableMethods.getProvider(backportedMethod);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CfPostProcessingDesugaringCollection.java b/src/main/java/com/android/tools/r8/ir/desugar/CfPostProcessingDesugaringCollection.java
index 1fd0ad0..1243435 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CfPostProcessingDesugaringCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CfPostProcessingDesugaringCollection.java
@@ -57,7 +57,7 @@
InterfaceMethodProcessorFacade interfaceMethodProcessorFacade,
RetargetingInfo retargetingInfo) {
ArrayList<CfPostProcessingDesugaring> desugarings = new ArrayList<>();
- if (!appView.options().desugaredLibrarySpecification.getRetargetCoreLibMember().isEmpty()
+ if (appView.options().machineDesugaredLibrarySpecification.hasRetargeting()
&& !appView.options().isDesugaredLibraryCompilation()) {
desugarings.add(new DesugaredLibraryRetargeterPostProcessor(appView, retargetingInfo));
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java b/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java
index 33c69ac..e55c246 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java
@@ -82,9 +82,9 @@
this.nestBasedAccessDesugaring = NestBasedAccessDesugaring.create(appView);
BackportedMethodRewriter backportedMethodRewriter = null;
desugaredLibraryRetargeter =
- appView.options().desugaredLibrarySpecification.getRetargetCoreLibMember().isEmpty()
- ? null
- : new DesugaredLibraryRetargeter(appView);
+ appView.options().machineDesugaredLibrarySpecification.hasRetargeting()
+ ? new DesugaredLibraryRetargeter(appView)
+ : null;
if (desugaredLibraryRetargeter != null) {
desugarings.add(desugaredLibraryRetargeter);
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/PrefixRewritingMapper.java b/src/main/java/com/android/tools/r8/ir/desugar/PrefixRewritingMapper.java
index 7e1b479..f8cf00e 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/PrefixRewritingMapper.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/PrefixRewritingMapper.java
@@ -12,7 +12,7 @@
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyDesugaredLibrarySpecification;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.MachineRewritingFlags;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.MachineDesugaredLibrarySpecification;
import com.android.tools.r8.utils.DescriptorUtils;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
@@ -228,10 +228,10 @@
private final Map<DexType, DexType> rewriteDerivedTypeOnly;
public MachineDesugarPrefixRewritingMapper(
- PrefixRewritingMapper mapper, MachineRewritingFlags flags) {
+ PrefixRewritingMapper mapper, MachineDesugaredLibrarySpecification specification) {
this.mapper = mapper;
- this.rewriteType = new ConcurrentHashMap<>(flags.getRewriteType());
- rewriteDerivedTypeOnly = flags.getRewriteDerivedTypeOnly();
+ this.rewriteType = new ConcurrentHashMap<>(specification.getRewriteType());
+ rewriteDerivedTypeOnly = specification.getRewriteDerivedTypeOnly();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPICallbackSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPICallbackSynthesizer.java
index 150e6c4..9b07615 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPICallbackSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPICallbackSynthesizer.java
@@ -109,8 +109,8 @@
if (!appView.rewritePrefix.hasRewrittenTypeInSignature(definition.getProto(), appView)
|| appView
.options()
- .desugaredLibrarySpecification
- .getEmulateLibraryInterface()
+ .machineDesugaredLibrarySpecification
+ .getEmulatedInterfaces()
.containsKey(method.getHolderType())) {
return false;
}
@@ -127,7 +127,7 @@
return false;
}
}
- if (!appView.options().desugaredLibrarySpecification.supportAllCallbacksFromLibrary()
+ if (!appView.options().machineDesugaredLibrarySpecification.supportAllCallbacksFromLibrary()
&& appView.options().isDesugaredLibraryCompilation()) {
return false;
}
@@ -178,7 +178,7 @@
}
private boolean shouldGenerateCallbacksForEmulateInterfaceAPIs(DexClass dexClass) {
- if (appView.options().desugaredLibrarySpecification.supportAllCallbacksFromLibrary()) {
+ if (appView.options().machineDesugaredLibrarySpecification.supportAllCallbacksFromLibrary()) {
return true;
}
Map<DexType, DexType> emulateLibraryInterfaces =
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPIConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPIConverter.java
index 987dc8d..f234a1b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPIConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPIConverter.java
@@ -181,8 +181,8 @@
return interfaceResult != null
&& appView
.options()
- .desugaredLibrarySpecification
- .getEmulateLibraryInterface()
+ .machineDesugaredLibrarySpecification
+ .getEmulatedInterfaces()
.containsKey(interfaceResult.getHolderType());
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryWrapperSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryWrapperSynthesizer.java
index 725d1e9..1e62da6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryWrapperSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryWrapperSynthesizer.java
@@ -185,7 +185,11 @@
}
private boolean canConvert(DexType type) {
- return appView.options().desugaredLibrarySpecification.getCustomConversions().containsKey(type)
+ return appView
+ .options()
+ .machineDesugaredLibrarySpecification
+ .getCustomConversions()
+ .containsKey(type)
|| canGenerateWrapper(type);
}
@@ -546,7 +550,6 @@
return appView
.options()
.machineDesugaredLibrarySpecification
- .getRewritingFlags()
.getWrappers()
.get(clazz.type);
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java
index 9e65398..3f6ab19 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java
@@ -4,8 +4,15 @@
package com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification;
+import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.Pair;
+import java.util.List;
import java.util.Map;
+import java.util.Set;
+import java.util.function.Consumer;
public class MachineDesugaredLibrarySpecification {
@@ -13,6 +20,11 @@
private final MachineTopLevelFlags topLevelFlags;
private final MachineRewritingFlags rewritingFlags;
+ public static MachineDesugaredLibrarySpecification empty() {
+ return new MachineDesugaredLibrarySpecification(
+ false, MachineTopLevelFlags.empty(), MachineRewritingFlags.builder().build());
+ }
+
public static MachineDesugaredLibrarySpecification withOnlyRewriteTypeForTesting(
Map<DexType, DexType> rewriteTypeForTesting) {
MachineRewritingFlags.Builder builder = MachineRewritingFlags.builder();
@@ -34,11 +46,83 @@
return libraryCompilation;
}
- public MachineTopLevelFlags getTopLevelFlags() {
- return topLevelFlags;
+ public AndroidApiLevel getRequiredCompilationAPILevel() {
+ return topLevelFlags.getRequiredCompilationAPILevel();
}
- public MachineRewritingFlags getRewritingFlags() {
- return rewritingFlags;
+ public String getSynthesizedLibraryClassesPackagePrefix() {
+ return topLevelFlags.getSynthesizedLibraryClassesPackagePrefix();
+ }
+
+ public String getIdentifier() {
+ return topLevelFlags.getIdentifier();
+ }
+
+ public String getJsonSource() {
+ return topLevelFlags.getJsonSource();
+ }
+
+ public boolean supportAllCallbacksFromLibrary() {
+ return topLevelFlags.supportAllCallbacksFromLibrary();
+ }
+
+ public List<String> getExtraKeepRules() {
+ return topLevelFlags.getExtraKeepRules();
+ }
+
+ public Map<DexType, DexType> getRewriteType() {
+ return rewritingFlags.getRewriteType();
+ }
+
+ public Map<DexType, DexType> getRewriteDerivedTypeOnly() {
+ return rewritingFlags.getRewriteDerivedTypeOnly();
+ }
+
+ public Map<DexMethod, DexMethod> getStaticRetarget() {
+ return rewritingFlags.getStaticRetarget();
+ }
+
+ public Map<DexMethod, DexMethod> getNonEmulatedVirtualRetarget() {
+ return rewritingFlags.getNonEmulatedVirtualRetarget();
+ }
+
+ public Map<DexMethod, EmulatedDispatchMethodDescriptor> getEmulatedVirtualRetarget() {
+ return rewritingFlags.getEmulatedVirtualRetarget();
+ }
+
+ public void forEachRetargetHolder(Consumer<DexType> consumer) {
+ rewritingFlags.forEachRetargetHolder(consumer);
+ }
+
+ public Map<DexType, EmulatedInterfaceDescriptor> getEmulatedInterfaces() {
+ return rewritingFlags.getEmulatedInterfaces();
+ }
+
+ public Set<DexType> getEmulatedInterfaceRewrittenTypes() {
+ return rewritingFlags.getEmulatedInterfaceRewrittenTypes();
+ }
+
+ public Map<DexType, List<DexMethod>> getWrappers() {
+ return rewritingFlags.getWrappers();
+ }
+
+ public Map<DexType, DexType> getLegacyBackport() {
+ return rewritingFlags.getLegacyBackport();
+ }
+
+ public Set<DexType> getDontRetarget() {
+ return rewritingFlags.getDontRetarget();
+ }
+
+ public Map<DexType, Pair<DexType, DexString>> getCustomConversions() {
+ return rewritingFlags.getCustomConversions();
+ }
+
+ public boolean hasRetargeting() {
+ return rewritingFlags.hasRetargeting();
+ }
+
+ public boolean hasEmulatedInterfaces() {
+ return rewritingFlags.hasEmulatedInterfaces();
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java
index a28fdaa..c2c281f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java
@@ -11,10 +11,12 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.function.Consumer;
public class MachineRewritingFlags {
@@ -94,10 +96,24 @@
return emulatedVirtualRetarget;
}
+ public void forEachRetargetHolder(Consumer<DexType> consumer) {
+ staticRetarget.keySet().forEach(m -> consumer.accept(m.getHolderType()));
+ nonEmulatedVirtualRetarget.keySet().forEach(m -> consumer.accept(m.getHolderType()));
+ emulatedVirtualRetarget.keySet().forEach(m -> consumer.accept(m.getHolderType()));
+ }
+
public Map<DexType, EmulatedInterfaceDescriptor> getEmulatedInterfaces() {
return emulatedInterfaces;
}
+ public Set<DexType> getEmulatedInterfaceRewrittenTypes() {
+ Set<DexType> rewrittenTypes = Sets.newIdentityHashSet();
+ emulatedInterfaces
+ .values()
+ .forEach(descriptor -> rewrittenTypes.add(descriptor.getRewrittenType()));
+ return rewrittenTypes;
+ }
+
public Map<DexType, List<DexMethod>> getWrappers() {
return wrappers;
}
@@ -114,6 +130,16 @@
return customConversions;
}
+ public boolean hasRetargeting() {
+ return !staticRetarget.isEmpty()
+ || !nonEmulatedVirtualRetarget.isEmpty()
+ || !emulatedVirtualRetarget.isEmpty();
+ }
+
+ public boolean hasEmulatedInterfaces() {
+ return !emulatedInterfaces.isEmpty();
+ }
+
public static class Builder {
Builder() {}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineTopLevelFlags.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineTopLevelFlags.java
index 57b79fe..0c6a88a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineTopLevelFlags.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineTopLevelFlags.java
@@ -60,7 +60,7 @@
return jsonSource;
}
- public boolean isSupportAllCallbacksFromLibrary() {
+ public boolean supportAllCallbacksFromLibrary() {
return supportAllCallbacksFromLibrary;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeter.java
index a54cd8d..5fcf037 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeter.java
@@ -129,8 +129,8 @@
}
if (appView
.options()
- .desugaredLibrarySpecification
- .getDontRetargetLibMember()
+ .machineDesugaredLibrarySpecification
+ .getDontRetarget()
.contains(context.getContextType())) {
return NO_REWRITING;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterL8Synthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterL8Synthesizer.java
index 11fcfb7..eb28d20 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterL8Synthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterL8Synthesizer.java
@@ -20,7 +20,7 @@
AppView<?> appView, RetargetingInfo retargetingInfo) {
assert appView.options().isDesugaredLibraryCompilation();
if (retargetingInfo == null || retargetingInfo.getEmulatedVirtualRetarget().isEmpty()) {
- assert appView.options().desugaredLibrarySpecification.getRetargetCoreLibMember().isEmpty();
+ assert !appView.options().machineDesugaredLibrarySpecification.hasRetargeting();
return null;
}
return new DesugaredLibraryRetargeterL8Synthesizer(appView, retargetingInfo);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterLibraryTypeSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterLibraryTypeSynthesizer.java
index bbaa4cf..bfb423a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterLibraryTypeSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterLibraryTypeSynthesizer.java
@@ -39,16 +39,16 @@
public class DesugaredLibraryRetargeterLibraryTypeSynthesizer {
public static void checkForAssumedLibraryTypes(AppView<?> appView) {
- Map<DexString, Map<DexType, DexType>> retargetCoreLibMember =
- appView.options().desugaredLibrarySpecification.getRetargetCoreLibMember();
- for (DexString methodName : retargetCoreLibMember.keySet()) {
- for (DexType inType : retargetCoreLibMember.get(methodName).keySet()) {
- DexClass typeClass = appView.definitionFor(inType);
- if (typeClass == null) {
- warnMissingRetargetCoreLibraryMember(inType, appView);
- }
- }
- }
+ appView
+ .options()
+ .machineDesugaredLibrarySpecification
+ .forEachRetargetHolder(
+ inType -> {
+ DexClass typeClass = appView.definitionFor(inType);
+ if (typeClass == null) {
+ warnMissingRetargetCoreLibraryMember(inType, appView);
+ }
+ });
}
public static void amendLibraryWithRetargetedMembers(AppView<AppInfoWithClassHierarchy> appView) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/RetargetingInfo.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/RetargetingInfo.java
index 88a3104..b7ac366 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/RetargetingInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/RetargetingInfo.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.EmulatedDispatchMethodDescriptor;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.MachineRewritingFlags;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.MachineDesugaredLibrarySpecification;
import java.util.Map;
public class RetargetingInfo {
@@ -25,12 +25,12 @@
}
public static RetargetingInfo get(AppView<?> appView) {
- MachineRewritingFlags rewritingFlags =
- appView.options().machineDesugaredLibrarySpecification.getRewritingFlags();
- return new RetargetingInfo(
- rewritingFlags.getStaticRetarget(),
- rewritingFlags.getNonEmulatedVirtualRetarget(),
- rewritingFlags.getEmulatedVirtualRetarget());
+ MachineDesugaredLibrarySpecification specification =
+ appView.options().machineDesugaredLibrarySpecification;
+ return new RetargetingInfo(
+ specification.getStaticRetarget(),
+ specification.getNonEmulatedVirtualRetarget(),
+ specification.getEmulatedVirtualRetarget());
}
public Map<DexMethod, DexMethod> getStaticRetarget() {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
index 758812e..9543f58 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
@@ -376,11 +376,11 @@
this.dexItemFactory = appView.dexItemFactory();
this.helper = new InterfaceDesugaringSyntheticHelper(appView);
needsLibraryInfo =
- !appView.options().desugaredLibrarySpecification.getEmulateLibraryInterface().isEmpty()
+ appView.options().machineDesugaredLibrarySpecification.hasEmulatedInterfaces()
|| !appView
.options()
- .desugaredLibrarySpecification
- .getRetargetCoreLibMember()
+ .machineDesugaredLibrarySpecification
+ .getEmulatedVirtualRetarget()
.isEmpty();
this.isLiveMethod = isLiveMethod;
}
@@ -510,7 +510,7 @@
DexClass iface = appView.definitionFor(emulatedInterface);
if (iface != null) {
assert iface.isLibraryClass()
- || appView.options().desugaredLibrarySpecification.isLibraryCompilation();
+ || appView.options().machineDesugaredLibrarySpecification.isLibraryCompilation();
workList.addIfNotSeen(iface.getInterfaces());
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
index 6740441..e769b3a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
@@ -156,9 +156,9 @@
}
private void initializeEmulatedInterfaceVariables() {
- Map<DexType, DexType> emulateLibraryInterface =
- options.desugaredLibrarySpecification.getEmulateLibraryInterface();
- for (DexType interfaceType : emulateLibraryInterface.keySet()) {
+ Set<DexType> emulateLibraryInterface =
+ options.machineDesugaredLibrarySpecification.getEmulatedInterfaces().keySet();
+ for (DexType interfaceType : emulateLibraryInterface) {
DexClass emulatedInterfaceClass = appView.definitionFor(interfaceType);
if (emulatedInterfaceClass != null) {
for (DexEncodedMethod encodedMethod :
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/ProgramEmulatedInterfaceSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/ProgramEmulatedInterfaceSynthesizer.java
index 1cb43ef..a4249a5 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/ProgramEmulatedInterfaceSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/ProgramEmulatedInterfaceSynthesizer.java
@@ -65,7 +65,6 @@
appView
.options()
.machineDesugaredLibrarySpecification
- .getRewritingFlags()
.getEmulatedInterfaces()
.get(emulatedInterface.type);
emulatedInterface.forEachProgramVirtualMethodMatching(
diff --git a/src/main/java/com/android/tools/r8/shaking/L8TreePruner.java b/src/main/java/com/android/tools/r8/shaking/L8TreePruner.java
index 960ccd5..ab0a04d 100644
--- a/src/main/java/com/android/tools/r8/shaking/L8TreePruner.java
+++ b/src/main/java/com/android/tools/r8/shaking/L8TreePruner.java
@@ -28,9 +28,9 @@
public L8TreePruner(InternalOptions options) {
this.options = options;
- backports.addAll(options.desugaredLibrarySpecification.getBackportCoreLibraryMember().keySet());
+ backports.addAll(options.machineDesugaredLibrarySpecification.getLegacyBackport().keySet());
emulatedInterfaces.addAll(
- options.desugaredLibrarySpecification.getEmulateLibraryInterface().keySet());
+ options.machineDesugaredLibrarySpecification.getEmulatedInterfaces().keySet());
}
public DexApplication prune(DexApplication app, PrefixRewritingMapper rewritePrefix) {
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 762c2e0..610708f 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -397,8 +397,8 @@
if (isGeneratingDex() || desugarState == DesugarState.ON) {
marker.setMinApi(getMinApiLevel().getLevel());
}
- if (desugaredLibrarySpecification.getIdentifier() != null) {
- marker.setDesugaredLibraryIdentifiers(desugaredLibrarySpecification.getIdentifier());
+ if (machineDesugaredLibrarySpecification.getIdentifier() != null) {
+ marker.setDesugaredLibraryIdentifiers(machineDesugaredLibrarySpecification.getIdentifier());
}
if (Version.isDevelopmentVersion()) {
marker.setSha1(VersionProperties.INSTANCE.getSha());
@@ -445,7 +445,7 @@
}
public boolean isDesugaredLibraryCompilation() {
- return desugaredLibrarySpecification.isLibraryCompilation();
+ return machineDesugaredLibrarySpecification.isLibraryCompilation();
}
public boolean isRelocatorCompilation() {
@@ -934,19 +934,20 @@
}
// Meant to replace desugaredLibrarySpecification, set only from tests at the moment.
- public MachineDesugaredLibrarySpecification machineDesugaredLibrarySpecification;
+ public MachineDesugaredLibrarySpecification machineDesugaredLibrarySpecification =
+ MachineDesugaredLibrarySpecification.empty();
public PrefixRewritingMapper getPrefixRewritingMapper() {
if (machineDesugaredLibrarySpecification != null) {
if (desugaredLibrarySpecification.getRewritePrefix().isEmpty()) {
- assert machineDesugaredLibrarySpecification.getRewritingFlags().getRewriteType().isEmpty();
+ assert machineDesugaredLibrarySpecification.getRewriteType().isEmpty();
return PrefixRewritingMapper.empty();
}
return new MachineDesugarPrefixRewritingMapper(
// This mapper is used for assertions only (prior behavior is identical to the new one).
new DesugarPrefixRewritingMapper(
desugaredLibrarySpecification.getRewritePrefix(), dexItemFactory(), true),
- machineDesugaredLibrarySpecification.getRewritingFlags());
+ machineDesugaredLibrarySpecification);
}
return desugaredLibrarySpecification.getPrefixRewritingMapper();
}