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