Use resource tracing api directly
Prepare for switching to DexProgramClass entries
Bug: b/389575762
Change-Id: I336bb264778ac1b75c7cb257be9bd4c1bd80f83c
diff --git a/src/main/java/com/android/tools/r8/R8Partial.java b/src/main/java/com/android/tools/r8/R8Partial.java
index ea253eb..1a21bec 100644
--- a/src/main/java/com/android/tools/r8/R8Partial.java
+++ b/src/main/java/com/android/tools/r8/R8Partial.java
@@ -5,7 +5,6 @@
import static com.android.tools.r8.graph.DexProgramClass.asProgramClassOrNull;
-import com.android.build.shrinker.usages.R8ResourceShrinker;
import com.android.tools.r8.DexIndexedConsumer.ArchiveConsumer;
import com.android.tools.r8.DexIndexedConsumer.ForwardingConsumer;
import com.android.tools.r8.StringConsumer.FileConsumer;
@@ -31,8 +30,8 @@
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.AndroidAppConsumers;
+import com.android.tools.r8.utils.ExceptionDiagnostic;
import com.android.tools.r8.utils.ExceptionUtils;
-import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.ForwardingDiagnosticsHandler;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.ThreadUtils;
@@ -42,9 +41,9 @@
import com.google.common.io.ByteStreams;
import java.io.IOException;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.HashSet;
import java.util.Set;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@@ -104,14 +103,12 @@
throws IOException {
// TODO(b/390135529): Consider tracing these in the enqueuer of R8.
ResourceTracingCallback resourceTracingCallback = new ResourceTracingCallback();
- ZipUtils.iter(
- d8DexResult.getOutputPath(),
- (entry, input) -> {
- if (FileUtils.isDexFile(Paths.get(entry.getName()))) {
- R8ResourceShrinker.runResourceShrinkerAnalysis(
- input.readAllBytes(), d8DexResult.getOutputPath(), resourceTracingCallback);
- }
- });
+ AndroidApp app = AndroidApp.builder().addProgramFile(d8DexResult.getOutputPath()).build();
+ try {
+ ResourceShrinker.runForTesting(app, options, resourceTracingCallback);
+ } catch (ExecutionException e) {
+ throw options.reporter.fatalError(new ExceptionDiagnostic(e));
+ }
return new R8PartialTraceResourcesResult(resourceTracingCallback.getPotentialIds());
}
diff --git a/src/main/java/com/android/tools/r8/ResourceShrinker.java b/src/main/java/com/android/tools/r8/ResourceShrinker.java
index cbedb8f..dd9a7d0 100644
--- a/src/main/java/com/android/tools/r8/ResourceShrinker.java
+++ b/src/main/java/com/android/tools/r8/ResourceShrinker.java
@@ -57,6 +57,7 @@
import com.google.common.collect.Sets;
import com.google.common.collect.Streams;
import java.io.IOException;
+import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.Set;
@@ -486,7 +487,12 @@
throws IOException, ExecutionException {
Timing timing = new Timing("resource shrinker analyzer");
DexApplication dexApplication = new ApplicationReader(inputApp, options, timing).read();
- for (DexProgramClass programClass : dexApplication.classes()) {
+ runForTesting(dexApplication.classes(), callback);
+ }
+
+ public static void runForTesting(
+ Collection<DexProgramClass> programClasses, ReferenceChecker callback) {
+ for (DexProgramClass programClass : programClasses) {
new DexClassUsageVisitor(programClass, callback).visit();
}
}
diff --git a/src/main/java/com/android/tools/r8/partial/ResourceTracingCallback.java b/src/main/java/com/android/tools/r8/partial/ResourceTracingCallback.java
index d5db2c7..fd3812f 100644
--- a/src/main/java/com/android/tools/r8/partial/ResourceTracingCallback.java
+++ b/src/main/java/com/android/tools/r8/partial/ResourceTracingCallback.java
@@ -3,13 +3,12 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.partial;
-import com.android.build.shrinker.usages.AnalysisCallback;
-import com.android.tools.r8.references.MethodReference;
+import com.android.tools.r8.ResourceShrinker.ReferenceChecker;
import com.android.tools.r8.utils.DescriptorUtils;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
-public class ResourceTracingCallback implements AnalysisCallback {
+public class ResourceTracingCallback implements ReferenceChecker {
private final IntSet potentialIds = new IntOpenHashSet();
@@ -37,10 +36,4 @@
@Override
public void referencedMethod(String internalName, String methodName, String methodDescriptor) {}
-
- @Override
- public void startMethodVisit(MethodReference methodReference) {}
-
- @Override
- public void endMethodVisit(MethodReference methodReference) {}
}