Only keep once in R8 partial use of trace references
Change-Id: I2fcfa76fc84af91d3235b6249d5c708dc1c5ca53
diff --git a/src/main/java/com/android/tools/r8/partial/R8PartialUseCollector.java b/src/main/java/com/android/tools/r8/partial/R8PartialUseCollector.java
index 5fe7e73..670eafe 100644
--- a/src/main/java/com/android/tools/r8/partial/R8PartialUseCollector.java
+++ b/src/main/java/com/android/tools/r8/partial/R8PartialUseCollector.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexClassAndField;
import com.android.tools.r8.graph.DexClassAndMethod;
+import com.android.tools.r8.graph.DexReference;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.partial.R8PartialSubCompilationConfiguration.R8PartialR8SubCompilationConfiguration;
import com.android.tools.r8.references.PackageReference;
@@ -34,6 +35,7 @@
public abstract class R8PartialUseCollector extends UseCollector {
+ private final Set<DexReference> seen = ConcurrentHashMap.newKeySet();
private final Set<String> packagesToKeep = ConcurrentHashMap.newKeySet();
public R8PartialUseCollector(AppView<? extends AppInfoWithClassHierarchy> appView) {
@@ -81,17 +83,23 @@
@Override
protected void notifyPresentClass(DexClass clazz, DefinitionContext referencedFrom) {
- keep(clazz);
+ notifyPresentItem(clazz);
}
@Override
protected void notifyPresentField(DexClassAndField field, DefinitionContext referencedFrom) {
- keep(field);
+ notifyPresentItem(field);
}
@Override
protected void notifyPresentMethod(DexClassAndMethod method, DefinitionContext referencedFrom) {
- keep(method);
+ notifyPresentItem(method);
+ }
+
+ private void notifyPresentItem(Definition definition) {
+ if (seen.add(definition.getReference())) {
+ keep(definition);
+ }
}
@Override