[KeepAnno] Replace 'match' functions with is/as methods.
Bug: b/248408342
Change-Id: Iaac18e27426f0f87e093a32143b8f67614dca702
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeWriter.java b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeWriter.java
index 373853f..0e96364 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeWriter.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeWriter.java
@@ -9,7 +9,7 @@
import com.android.tools.r8.keepanno.ast.KeepEdge;
import com.android.tools.r8.keepanno.ast.KeepItemPattern;
import com.android.tools.r8.keepanno.ast.KeepMembersPattern;
-import com.android.tools.r8.keepanno.ast.KeepMethodNamePattern;
+import com.android.tools.r8.keepanno.ast.KeepMethodNamePattern.KeepMethodNameExactPattern;
import com.android.tools.r8.keepanno.ast.KeepMethodPattern;
import com.android.tools.r8.keepanno.ast.KeepPreconditions;
import com.android.tools.r8.keepanno.ast.KeepQualifiedClassNamePattern;
@@ -85,15 +85,12 @@
throw new Unimplemented();
}
KeepMethodPattern method = membersPattern.asMethod();
- KeepMethodNamePattern methodNamePattern = method.getNamePattern();
- methodNamePattern.match(
- () -> {
- throw new Unimplemented();
- },
- exactMethodName -> {
- targetVisitor.visit(Target.methodName, exactMethodName);
- return null;
- });
+ KeepMethodNameExactPattern exactMethodName = method.getNamePattern().asExact();
+ if (exactMethodName != null) {
+ targetVisitor.visit(Target.methodName, exactMethodName.getName());
+ } else {
+ throw new Unimplemented();
+ }
if (!method.getAccessPattern().isAny()) {
throw new Unimplemented();
}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodNamePattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodNamePattern.java
index 1a637de..8203d56 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodNamePattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodNamePattern.java
@@ -3,8 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.keepanno.ast;
-import java.util.function.Function;
-import java.util.function.Supplier;
public abstract class KeepMethodNamePattern {
@@ -23,15 +21,16 @@
private KeepMethodNamePattern() {}
public boolean isAny() {
- return match(() -> true, ignore -> false);
+ return false;
}
- public boolean isExact() {
- return match(() -> false, ignore -> true);
+ public final boolean isExact() {
+ return asExact() != null;
}
- ;
- public abstract <T> T match(Supplier<T> onAny, Function<String, T> onExact);
+ public KeepMethodNameExactPattern asExact() {
+ return null;
+ }
private static class Any extends KeepMethodNamePattern {
private static final Any INSTANCE = new Any();
@@ -41,8 +40,8 @@
}
@Override
- public <T> T match(Supplier<T> onAny, Function<String, T> onExact) {
- return onAny.get();
+ public boolean isAny() {
+ return true;
}
@Override
@@ -61,7 +60,7 @@
}
}
- private static class KeepMethodNameExactPattern extends KeepMethodNamePattern {
+ public static class KeepMethodNameExactPattern extends KeepMethodNamePattern {
private final String name;
public KeepMethodNameExactPattern(String name) {
@@ -70,8 +69,12 @@
}
@Override
- public <T> T match(Supplier<T> onAny, Function<String, T> onExact) {
- return onExact.apply(name);
+ public KeepMethodNameExactPattern asExact() {
+ return this;
+ }
+
+ public String getName() {
+ return name;
}
@Override
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodParametersPattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodParametersPattern.java
index cd850e6..29442ff 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodParametersPattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodParametersPattern.java
@@ -5,8 +5,6 @@
import java.util.Collections;
import java.util.List;
-import java.util.function.Function;
-import java.util.function.Supplier;
public abstract class KeepMethodParametersPattern {
@@ -15,42 +13,55 @@
}
public static KeepMethodParametersPattern none() {
- return None.getInstance();
+ return Some.EMPTY_INSTANCE;
}
private KeepMethodParametersPattern() {}
- public abstract <T> T match(Supplier<T> onAny, Function<List<KeepTypePattern>, T> onList);
-
public boolean isAny() {
- return match(() -> true, params -> false);
+ return false;
}
- private static class None extends KeepMethodParametersPattern {
- private static final None INSTANCE = new None();
+ public boolean isList() {
+ return asList() != null;
+ }
- public static None getInstance() {
- return INSTANCE;
+ public List<KeepTypePattern> asList() {
+ return null;
+ }
+
+ private static class Some extends KeepMethodParametersPattern {
+
+ private static final Some EMPTY_INSTANCE = new Some(Collections.emptyList());
+
+ private final List<KeepTypePattern> parameterPatterns;
+
+ private Some(List<KeepTypePattern> parameterPatterns) {
+ assert parameterPatterns != null;
+ this.parameterPatterns = parameterPatterns;
}
@Override
- public <T> T match(Supplier<T> onAny, Function<List<KeepTypePattern>, T> onList) {
- return onList.apply(Collections.emptyList());
+ public List<KeepTypePattern> asList() {
+ return parameterPatterns;
}
@Override
- public boolean equals(Object obj) {
- return this == obj;
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ Some that = (Some) o;
+ return parameterPatterns.equals(that.parameterPatterns);
}
@Override
public int hashCode() {
- return System.identityHashCode(this);
- }
-
- @Override
- public String toString() {
- return "()";
+ return parameterPatterns.hashCode();
}
}
@@ -62,8 +73,8 @@
}
@Override
- public <T> T match(Supplier<T> onAny, Function<List<KeepTypePattern>, T> onList) {
- return onAny.get();
+ public boolean isAny() {
+ return true;
}
@Override
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodReturnTypePattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodReturnTypePattern.java
index 2786945..ccfc183 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodReturnTypePattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodReturnTypePattern.java
@@ -3,25 +3,31 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.keepanno.ast;
-import java.util.function.Function;
-import java.util.function.Supplier;
public abstract class KeepMethodReturnTypePattern {
- private static final SomeType ANY_TYPE_INSTANCE = new SomeType(KeepTypePattern.any());
-
public static KeepMethodReturnTypePattern any() {
- return ANY_TYPE_INSTANCE;
+ return SomeType.ANY_TYPE_INSTANCE;
}
public static KeepMethodReturnTypePattern voidType() {
return VoidType.getInstance();
}
- public abstract <T> T match(Supplier<T> onVoid, Function<KeepTypePattern, T> onType);
-
public boolean isAny() {
- return match(() -> false, KeepTypePattern::isAny);
+ return isType() && asType().isAny();
+ }
+
+ public boolean isVoid() {
+ return false;
+ }
+
+ public boolean isType() {
+ return asType() != null;
+ }
+
+ public KeepTypePattern asType() {
+ return null;
}
private static class VoidType extends KeepMethodReturnTypePattern {
@@ -32,8 +38,8 @@
}
@Override
- public <T> T match(Supplier<T> onVoid, Function<KeepTypePattern, T> onType) {
- return onVoid.get();
+ public boolean isVoid() {
+ return true;
}
@Override
@@ -54,6 +60,8 @@
private static class SomeType extends KeepMethodReturnTypePattern {
+ private static final SomeType ANY_TYPE_INSTANCE = new SomeType(KeepTypePattern.any());
+
private final KeepTypePattern typePattern;
private SomeType(KeepTypePattern typePattern) {
@@ -62,8 +70,8 @@
}
@Override
- public <T> T match(Supplier<T> onVoid, Function<KeepTypePattern, T> onType) {
- return onType.apply(typePattern);
+ public KeepTypePattern asType() {
+ return typePattern;
}
@Override
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
index 2d0df1b..3ab882f 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
@@ -131,24 +131,31 @@
private static StringBuilder printParameters(
StringBuilder builder, KeepMethodParametersPattern parametersPattern) {
- return parametersPattern.match(
- () -> builder.append("(***)"),
- list ->
- builder
- .append('(')
- .append(list.stream().map(Object::toString).collect(Collectors.joining(", ")))
- .append(')'));
+ if (parametersPattern.isAny()) {
+ return builder.append("(***)");
+ }
+ return builder
+ .append('(')
+ .append(
+ parametersPattern.asList().stream()
+ .map(Object::toString)
+ .collect(Collectors.joining(", ")))
+ .append(')');
}
private static StringBuilder printMethodName(
StringBuilder builder, KeepMethodNamePattern namePattern) {
- return namePattern.match(() -> builder.append("*"), builder::append);
+ return namePattern.isAny()
+ ? builder.append("*")
+ : builder.append(namePattern.asExact().getName());
}
private static StringBuilder printReturnType(
StringBuilder builder, KeepMethodReturnTypePattern returnTypePattern) {
- return returnTypePattern.match(
- () -> builder.append("void"), typePattern -> printType(builder, typePattern));
+ if (returnTypePattern.isVoid()) {
+ return builder.append("void");
+ }
+ return printType(builder, returnTypePattern.asType());
}
private static StringBuilder printType(StringBuilder builder, KeepTypePattern typePattern) {