Allow using committed items in definitionsFor lookup.
Change-Id: Ia96c49832e3b611aa1679e9d764fe4f535cd3f5f
diff --git a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
index 08e5190..d803a42 100644
--- a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
@@ -73,12 +73,13 @@
return classpathClasses;
}
- public DexDefinitionSupplier getDefinitionsSupplier(SyntheticItems syntheticItems) {
+ public DexDefinitionSupplier getDefinitionsSupplier(
+ SyntheticDefinitionsProvider syntheticDefinitionsProvider) {
DirectMappedDexApplication self = this;
return new DexDefinitionSupplier() {
@Override
public DexClass definitionFor(DexType type) {
- return syntheticItems.definitionFor(type, self::definitionFor);
+ return syntheticDefinitionsProvider.definitionFor(type, self::definitionFor);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/SyntheticDefinitionsProvider.java b/src/main/java/com/android/tools/r8/graph/SyntheticDefinitionsProvider.java
new file mode 100644
index 0000000..82e37ab
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/graph/SyntheticDefinitionsProvider.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.graph;
+
+import java.util.function.Function;
+
+public interface SyntheticDefinitionsProvider {
+ DexClass definitionFor(DexType type, Function<DexType, DexClass> baseDefinitionFor);
+}
diff --git a/src/main/java/com/android/tools/r8/graph/SyntheticItems.java b/src/main/java/com/android/tools/r8/graph/SyntheticItems.java
index 20c073a..3df048f 100644
--- a/src/main/java/com/android/tools/r8/graph/SyntheticItems.java
+++ b/src/main/java/com/android/tools/r8/graph/SyntheticItems.java
@@ -11,9 +11,9 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
-public class SyntheticItems {
+public class SyntheticItems implements SyntheticDefinitionsProvider {
- public static class CommittedItems {
+ public static class CommittedItems implements SyntheticDefinitionsProvider {
// Set of all types that represent synthesized items.
private final ImmutableSet<DexType> syntheticTypes;
@@ -24,6 +24,11 @@
SyntheticItems toSyntheticItems() {
return new SyntheticItems(syntheticTypes);
}
+
+ @Override
+ public DexClass definitionFor(DexType type, Function<DexType, DexClass> baseDefinitionFor) {
+ return baseDefinitionFor.apply(type);
+ }
}
// Thread safe collection of synthesized classes that are not yet committed to the application.
@@ -48,6 +53,7 @@
return Collections.unmodifiableCollection(pendingClasses.values());
}
+ @Override
public DexClass definitionFor(DexType type, Function<DexType, DexClass> baseDefinitionFor) {
DexProgramClass pending = pendingClasses.get(type);
if (pending != null) {
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index 167d577..05c6f6c 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -42,6 +42,7 @@
import com.android.tools.r8.graph.ResolutionResult.SingleResolutionResult;
import com.android.tools.r8.graph.SubtypingInfo;
import com.android.tools.r8.graph.SyntheticItems;
+import com.android.tools.r8.graph.SyntheticItems.CommittedItems;
import com.android.tools.r8.ir.analysis.type.ClassTypeElement;
import com.android.tools.r8.ir.code.Invoke.Type;
import com.android.tools.r8.ir.desugar.DesugaredLibraryAPIConverter;
@@ -999,11 +1000,11 @@
.map(FieldResolutionResult::getResolvedField)
.collect(Collectors.toList()));
- DexDefinitionSupplier definitionSupplier =
- application.getDefinitionsSupplier(SyntheticItems.createInitialSyntheticItems());
+ CommittedItems committedItems = getSyntheticItems().commit(application, lens);
+ DexDefinitionSupplier definitionSupplier = application.getDefinitionsSupplier(committedItems);
return new AppInfoWithLiveness(
application,
- getSyntheticItems().commit(application, lens),
+ committedItems,
deadProtoTypes,
missingTypes,
lens.rewriteTypes(liveTypes),