Add a test for removing MethodToInvoke accesses after proto builder inlining
Change-Id: I24cba174f819582ec9a13b6e78f80dd75d0d010c
diff --git a/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java b/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java
index 82362aa..c29f3cb 100644
--- a/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java
+++ b/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java
@@ -7,12 +7,16 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.util.List;
@@ -26,6 +30,8 @@
public class Proto2BuilderShrinkingTest extends ProtoShrinkingTestBase {
private static final String LITE_BUILDER = "com.google.protobuf.GeneratedMessageLite$Builder";
+ private static final String METHOD_TO_INVOKE_ENUM =
+ "com.google.protobuf.GeneratedMessageLite$MethodToInvoke";
private static List<Path> PROGRAM_FILES =
ImmutableList.of(PROTO2_EXAMPLES_JAR, PROTO2_PROTO_JAR, PROTOBUF_LITE_JAR);
@@ -155,6 +161,11 @@
}
private void inspect(CodeInspector outputInspector) {
+ verifyBuildersAreAbsent(outputInspector);
+ verifyMethodToInvokeValuesAreAbsent(outputInspector);
+ }
+
+ private void verifyBuildersAreAbsent(CodeInspector outputInspector) {
boolean primitivesBuilderShouldBeLive =
mains.contains("proto2.BuilderWithReusedSettersTestClass");
assertThat(
@@ -170,4 +181,19 @@
outputInspector.clazz("com.android.tools.r8.proto2.TestProto$NestedMessage$Builder"),
not(isPresent()));
}
+
+ private void verifyMethodToInvokeValuesAreAbsent(CodeInspector outputInspector) {
+ DexType methodToInvokeType = outputInspector.clazz(METHOD_TO_INVOKE_ENUM).getDexClass().type;
+ for (String main : mains) {
+ MethodSubject mainMethodSubject = outputInspector.clazz(main).mainMethod();
+ assertThat(mainMethodSubject, isPresent());
+ // TODO(christofferqa): Should be true.
+ assertFalse(
+ mainMethodSubject
+ .streamInstructions()
+ .filter(InstructionSubject::isStaticGet)
+ .map(instruction -> instruction.getField().type)
+ .noneMatch(methodToInvokeType::equals));
+ }
+ }
}