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) {}
 }