[KeepAnno] Disallow 'void' in type patterns and update test
Bug: b/248408342
Change-Id: I2664e647f47cbaf551d424191bd653f46187787b
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReaderUtils.java b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReaderUtils.java
index 78eddd6..6757c60 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReaderUtils.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReaderUtils.java
@@ -63,9 +63,6 @@
public static KeepTypePattern typePatternFromString(
String string, PropertyParsingContext property) {
- if (string.equals("<any>")) {
- return KeepTypePattern.any();
- }
return KeepTypePattern.fromDescriptor(internalDescriptorFromJavaType(string, property::error));
}
@@ -92,6 +89,8 @@
return "F";
case "double":
return "D";
+ case "void":
+ return "V";
default:
{
StringBuilder builder = new StringBuilder(type.length());
diff --git a/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcherPredicates.java b/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcherPredicates.java
index 0563128..b4ff8b8 100644
--- a/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcherPredicates.java
+++ b/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcherPredicates.java
@@ -252,8 +252,8 @@
if (returnTypePattern.isAny()) {
return true;
}
- if (returnTypePattern.isVoid() && returnType.isVoidType()) {
- return true;
+ if (returnTypePattern.isVoid()) {
+ return returnType.isVoidType();
}
return matchesType(returnType, returnTypePattern.asType());
}
diff --git a/src/test/java/com/android/tools/r8/keepanno/MethodPatternsTest.java b/src/test/java/com/android/tools/r8/keepanno/MethodPatternsTest.java
index 7654721..8f3d5f3 100644
--- a/src/test/java/com/android/tools/r8/keepanno/MethodPatternsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/MethodPatternsTest.java
@@ -41,6 +41,7 @@
@Test
public void test() throws Exception {
testForKeepAnno(parameters)
+ .enableNativeInterpretation()
.addProgramClasses(getInputClasses())
.setExcludedOuterClass(getClass())
.run(TestClass.class)
@@ -74,7 +75,7 @@
@KeepTarget(
classConstant = B.class,
methodName = "bar",
- methodReturnTypePattern = @TypePattern(name = "void"),
+ methodReturnTypePattern = @TypePattern(),
methodParameterTypePatterns = {@TypePattern(constant = int.class)}),
@KeepTarget(
classConstant = B.class,