Add test inspection of program classes only

Bug: b/309743298
Change-Id: I03d407c6adc4f0fadc83a9987f17369db0ad370b
diff --git a/src/test/java/com/android/tools/r8/partial/ClassHierarchyInterleavedD8AndR8Test.java b/src/test/java/com/android/tools/r8/partial/ClassHierarchyInterleavedD8AndR8Test.java
index db45859..a44f2bb 100644
--- a/src/test/java/com/android/tools/r8/partial/ClassHierarchyInterleavedD8AndR8Test.java
+++ b/src/test/java/com/android/tools/r8/partial/ClassHierarchyInterleavedD8AndR8Test.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8.partial;
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -40,7 +41,9 @@
   }
 
   private void runTest(
-      Predicate<String> isR8, ThrowingConsumer<CodeInspector, RuntimeException> inspector)
+      Predicate<String> isR8,
+      ThrowingConsumer<CodeInspector, RuntimeException> d8Inspector,
+      ThrowingConsumer<CodeInspector, RuntimeException> inspector)
       throws Exception {
     // Path tempDir = temp.newFolder().toPath();
     testForR8Partial(parameters.getBackend())
@@ -49,6 +52,7 @@
         .addKeepMainRule(Main.class)
         .setR8PartialConfigurationPredicate(isR8)
         .compile()
+        .inspectD8Input(d8Inspector)
         .inspect(inspector)
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithEmptyOutput();
@@ -59,6 +63,11 @@
     runTest(
         name -> !name.equals(A.class.getTypeName()),
         inspector -> {
+          assertThat(inspector.programClass(A.class), isPresent());
+          assertThat(inspector.programClass(B.class), isAbsent());
+          assertThat(inspector.programClass(C.class), isAbsent());
+        },
+        inspector -> {
           assertThat(inspector.clazz(A.class), isPresentAndNotRenamed());
           assertThat(inspector.clazz(B.class), isAbsent()); // Merged into C.
           assertThat(inspector.clazz(C.class), isPresentAndRenamed());
@@ -70,6 +79,11 @@
     runTest(
         name -> !name.equals(B.class.getTypeName()),
         inspector -> {
+          assertThat(inspector.programClass(A.class), isPresent());
+          assertThat(inspector.programClass(B.class), isPresent());
+          assertThat(inspector.programClass(C.class), isAbsent());
+        },
+        inspector -> {
           assertThat(inspector.clazz(A.class), isPresentAndNotRenamed());
           assertThat(inspector.clazz(B.class), isPresentAndNotRenamed());
           assertThat(inspector.clazz(C.class), isPresentAndRenamed());
@@ -81,6 +95,11 @@
     runTest(
         name -> !name.equals(C.class.getTypeName()),
         inspector -> {
+          assertThat(inspector.programClass(A.class), isPresent());
+          assertThat(inspector.programClass(B.class), isPresent());
+          assertThat(inspector.programClass(C.class), isPresent());
+        },
+        inspector -> {
           assertThat(inspector.clazz(A.class), isPresentAndNotRenamed());
           assertThat(inspector.clazz(B.class), isPresentAndNotRenamed());
           assertThat(inspector.clazz(C.class), isPresentAndNotRenamed());
diff --git a/src/test/java/com/android/tools/r8/partial/PartialCompilationBasicTest.java b/src/test/java/com/android/tools/r8/partial/PartialCompilationBasicTest.java
index 4783aaa..6206e13 100644
--- a/src/test/java/com/android/tools/r8/partial/PartialCompilationBasicTest.java
+++ b/src/test/java/com/android/tools/r8/partial/PartialCompilationBasicTest.java
@@ -43,19 +43,15 @@
         .compile()
         .inspectR8Input(
             inspector -> {
-              // TODO(b/309743298): These are all present as inspection currently also look at
-              //  classpath.
-              assertThat(inspector.clazz(A.class), isPresent());
-              assertThat(inspector.clazz(B.class), isPresent());
-              assertThat(inspector.clazz(Main.class), isPresent());
+              assertThat(inspector.programClass(A.class), isAbsent());
+              assertThat(inspector.programClass(B.class), isPresent());
+              assertThat(inspector.programClass(Main.class), isPresent());
             })
         .inspectD8Input(
-            // TODO(b/309743298): These are all present as inspection currently also look at
-            //  classpath.
             inspector -> {
-              assertThat(inspector.clazz(A.class), isPresent());
-              assertThat(inspector.clazz(B.class), isPresent());
-              assertThat(inspector.clazz(Main.class), isPresent());
+              assertThat(inspector.programClass(A.class), isPresent());
+              assertThat(inspector.programClass(B.class), isAbsent());
+              assertThat(inspector.programClass(Main.class), isAbsent());
             })
         .inspectR8Output(
             inspector -> {
@@ -73,6 +69,7 @@
             inspector -> {
               assertThat(inspector.clazz(A.class), isPresent());
               assertThat(inspector.clazz(B.class), isAbsent());
+              assertThat(inspector.clazz(Main.class), isPresent());
             })
         .run(parameters.getRuntime(), Main.class, getClass().getTypeName())
         .assertSuccessWithOutputLines("Instantiated", "Not instantiated");
@@ -90,17 +87,17 @@
             inspector -> {
               // TODO(b/309743298): These are all present as inspection currently also look at
               //  classpath.
-              assertThat(inspector.clazz(A.class), isPresent());
-              assertThat(inspector.clazz(B.class), isPresent());
-              assertThat(inspector.clazz(Main.class), isPresent());
+              assertThat(inspector.programClass(A.class), isPresent());
+              assertThat(inspector.programClass(B.class), isAbsent());
+              assertThat(inspector.programClass(Main.class), isPresent());
             })
         .inspectD8Input(
             inspector -> {
               // TODO(b/309743298): These are all present as inspection currently also look at
               //  classpath.
-              assertThat(inspector.clazz(A.class), isPresent());
-              assertThat(inspector.clazz(B.class), isPresent());
-              assertThat(inspector.clazz(Main.class), isPresent());
+              assertThat(inspector.programClass(A.class), isAbsent());
+              assertThat(inspector.programClass(B.class), isPresent());
+              assertThat(inspector.programClass(Main.class), isAbsent());
             })
         .inspectR8Output(
             inspector -> {
@@ -118,6 +115,7 @@
             inspector -> {
               assertThat(inspector.clazz(A.class), isAbsent());
               assertThat(inspector.clazz(B.class), isPresent());
+              assertThat(inspector.clazz(Main.class), isPresent());
             })
         .run(parameters.getRuntime(), Main.class, getClass().getTypeName())
         .assertSuccessWithOutputLines("Not instantiated", "Instantiated");
diff --git a/src/test/testbase/java/com/android/tools/r8/R8PartialTestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/R8PartialTestCompileResult.java
index 8bdc393..2ff5569 100644
--- a/src/test/testbase/java/com/android/tools/r8/R8PartialTestCompileResult.java
+++ b/src/test/testbase/java/com/android/tools/r8/R8PartialTestCompileResult.java
@@ -96,7 +96,7 @@
 
   public <E extends Throwable> R8PartialTestCompileResult inspectD8Input(
       ThrowingConsumer<CodeInspector, E> consumer) throws IOException, E {
-    consumer.accept(inspectorR8Input());
+    consumer.accept(inspectorD8Input());
     return self();
   }
 
diff --git a/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
index 7c06d42..d055bdc 100644
--- a/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
+++ b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
@@ -4,6 +4,8 @@
 package com.android.tools.r8.utils.codeinspector;
 
 import static com.android.tools.r8.utils.ConsumerUtils.emptyConsumer;
+import static com.android.tools.r8.utils.codeinspector.CodeInspector.ClassType.ANY;
+import static com.android.tools.r8.utils.codeinspector.CodeInspector.ClassType.PROGRAM;
 
 import com.android.tools.r8.DexIndexedConsumer;
 import com.android.tools.r8.StringResource;
@@ -78,6 +80,11 @@
   final Map<String, String> obfuscatedToOriginalMapping;
   private Retracer lazyRetracer = null;
 
+  public enum ClassType {
+    PROGRAM,
+    ANY
+  }
+
   public static MethodSignature MAIN =
       new MethodSignature("main", "void", new String[] {"java.lang.String[]"});
 
@@ -293,6 +300,10 @@
     return rewriter.getSignature();
   }
 
+  public ClassSubject clazz(Class<?> clazz, ClassType classType) {
+    return clazz(Reference.classFromClass(clazz), classType);
+  }
+
   public ClassSubject clazz(Class<?> clazz) {
     return clazz(Reference.classFromClass(clazz));
   }
@@ -302,6 +313,10 @@
     return clazz(Reference.classFromTypeName(name));
   }
 
+  public ClassSubject programClass(Class<?> clazz) {
+    return clazz(Reference.classFromClass(clazz), PROGRAM);
+  }
+
   public ClassNameMapper getMapping() {
     return mapping;
   }
@@ -355,7 +370,7 @@
     }
   }
 
-  public ClassSubject clazz(ClassReference reference) {
+  public ClassSubject clazz(ClassReference reference, ClassType classType) {
     String descriptor = reference.getDescriptor();
     String name = DescriptorUtils.descriptorToJavaType(descriptor);
     ClassNamingForNameMapper naming = null;
@@ -374,13 +389,20 @@
         }
       }
     }
-    DexClass clazz = application.definitionFor(toDexTypeIgnorePrimitives(name));
+    DexClass clazz =
+        classType == ANY
+            ? application.definitionFor(toDexTypeIgnorePrimitives(name))
+            : application.programDefinitionFor(toDexTypeIgnorePrimitives(name));
     if (clazz == null) {
       return new AbsentClassSubject(this, reference);
     }
     return new FoundClassSubject(this, clazz, MappingWrapper.create(mapping, naming), reference);
   }
 
+  public ClassSubject clazz(ClassReference reference) {
+    return clazz(reference, ANY);
+  }
+
   public ClassSubject companionClassFor(Class<?> clazz) {
     return clazz(SyntheticItemsTestUtils.syntheticCompanionClass(clazz));
   }