Unify predicates in class transformer
Change-Id: Ia5435fd9eb2f655b42078f8868de74f964a624f9
diff --git a/src/test/java/com/android/tools/r8/regress/b163264839/Regress163264839Test.java b/src/test/java/com/android/tools/r8/regress/b163264839/Regress163264839Test.java
index 0d2f1d5..541ca47 100644
--- a/src/test/java/com/android/tools/r8/regress/b163264839/Regress163264839Test.java
+++ b/src/test/java/com/android/tools/r8/regress/b163264839/Regress163264839Test.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRunResult;
import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.transformers.ClassFileTransformer.MethodPredicate;
import com.android.tools.r8.transformers.MethodTransformer;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
@@ -63,7 +64,7 @@
String oldLambdaName = "lambda$identity$0";
String newLambdaName = "lambda$identity$foo";
return transformer(Function.class)
- .renameMethod(oldLambdaName, newLambdaName)
+ .renameMethod(MethodPredicate.onName(oldLambdaName), newLambdaName)
.addMethodTransformer(
new MethodTransformer() {
@Override
diff --git a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
index 269c6c2..283c5af 100644
--- a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
+++ b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
@@ -483,11 +483,24 @@
@FunctionalInterface
public interface MethodPredicate {
boolean test(int access, String name, String descriptor, String signature, String[] exceptions);
+
+ static MethodPredicate onName(String name) {
+ return (access, otherName, descriptor, signature, exceptions) -> name.equals(otherName);
+ }
}
@FunctionalInterface
public interface FieldPredicate {
boolean test(int access, String name, String descriptor, String signature, Object value);
+
+ static FieldPredicate onNameAndSignature(String name, String descriptor) {
+ return (access, otherName, otherDescriptor, signature, value) ->
+ name.equals(otherName) && descriptor.equals(otherDescriptor);
+ }
+
+ static FieldPredicate onName(String name) {
+ return (access, otherName, descriptor, signature, value) -> name.equals(otherName);
+ }
}
@FunctionalInterface
@@ -518,14 +531,16 @@
});
}
- public ClassFileTransformer renameMethod(String oldName, String newName) {
+ public ClassFileTransformer renameMethod(MethodPredicate predicate, String newName) {
return addClassTransformer(
new ClassTransformer() {
@Override
public MethodVisitor visitMethod(
int access, String name, String descriptor, String signature, String[] exceptions) {
- return super.visitMethod(
- access, name.equals(oldName) ? newName : name, descriptor, signature, exceptions);
+ if (predicate.test(access, name, descriptor, signature, exceptions)) {
+ return super.visitMethod(access, newName, descriptor, signature, exceptions);
+ }
+ return super.visitMethod(access, name, descriptor, signature, exceptions);
}
});
}
@@ -558,13 +573,13 @@
});
}
- public ClassFileTransformer renameField(FieldSignaturePredicate predicate, String newName) {
+ public ClassFileTransformer renameField(FieldPredicate predicate, String newName) {
return addClassTransformer(
new ClassTransformer() {
@Override
public FieldVisitor visitField(
int access, String name, String descriptor, String signature, Object value) {
- if (predicate.test(name, descriptor)) {
+ if (predicate.test(access, name, descriptor, signature, value)) {
return super.visitField(access, newName, descriptor, signature, value);
} else {
return super.visitField(access, name, descriptor, signature, value);
@@ -576,7 +591,7 @@
public ClassFileTransformer renameAndRemapField(String oldName, String newName) {
FieldSignaturePredicate matchPredicate = (name, signature) -> oldName.equals(name);
remapField(matchPredicate, newName);
- return renameField(matchPredicate, newName);
+ return renameField(FieldPredicate.onName(oldName), newName);
}
/** Abstraction of the MethodVisitor.visitMethodInsn method with its sub visitor. */