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. */