[KeepAnno] Merge reference and binding-reference types

The reference types where a simple wrapping of the bindings.

Bug: b/343389186
Change-Id: I6d71a17da9ad2869667d7bde0008e36649ce3712
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/asm/ContextDescriptor.java b/src/keepanno/java/com/android/tools/r8/keepanno/asm/ContextDescriptor.java
index eceec17..fee72cc 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/asm/ContextDescriptor.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/asm/ContextDescriptor.java
@@ -123,7 +123,7 @@
     }
     KeepMemberItemPattern memberItem =
         KeepMemberItemPattern.builder()
-            .setClassBindingReference(classBinding)
+            .setClassReference(classBinding)
             .setMemberPattern(memberPattern)
             .build();
     return bindingsHelper.defineFreshMemberBinding(memberItem);
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
index c714c89..ad230d1 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
@@ -31,7 +31,6 @@
 import com.android.tools.r8.keepanno.ast.KeepCheck.KeepCheckKind;
 import com.android.tools.r8.keepanno.ast.KeepClassBindingReference;
 import com.android.tools.r8.keepanno.ast.KeepClassItemPattern;
-import com.android.tools.r8.keepanno.ast.KeepClassItemReference;
 import com.android.tools.r8.keepanno.ast.KeepCondition;
 import com.android.tools.r8.keepanno.ast.KeepConsequences;
 import com.android.tools.r8.keepanno.ast.KeepConstraint;
@@ -471,7 +470,7 @@
                   KeepTypePattern.fromDescriptor(returnTypeDescriptor));
 
       return KeepMemberItemPattern.builder()
-          .setClassBindingReference(classReferenceFromName(className, bindingsHelper))
+          .setClassReference(classReferenceFromName(className, bindingsHelper))
           .setMemberPattern(
               KeepMethodPattern.builder()
                   .setNamePattern(KeepMethodNamePattern.exact(methodName))
@@ -608,7 +607,7 @@
       KeepFieldTypePattern typePattern =
           KeepFieldTypePattern.fromType(KeepTypePattern.fromDescriptor(fieldTypeDescriptor));
       return KeepMemberItemPattern.builder()
-          .setClassBindingReference(classReferenceFromName(className, bindingsHelper))
+          .setClassReference(classReferenceFromName(className, bindingsHelper))
           .setMemberPattern(
               KeepFieldPattern.builder()
                   .setNamePattern(KeepFieldNamePattern.exact(fieldName))
@@ -764,8 +763,8 @@
       return item.asMemberItemPattern();
     }
 
-    public KeepClassItemPattern getClassItemForReference(KeepClassItemReference itemReference) {
-      return getItem(itemReference.asBindingReference()).asClassItemPattern();
+    public KeepClassItemPattern getClassItemForReference(KeepClassBindingReference itemReference) {
+      return getItem(itemReference).asClassItemPattern();
     }
 
     public KeepBindings build() {
@@ -918,7 +917,7 @@
           .setMetaInfo(metaInfo)
           .setKind(kind)
           .setBindings(bindingsHelper.build())
-          .setItemBindingReference(itemReference)
+          .setItemReference(itemReference)
           .build();
     }
   }
@@ -1059,7 +1058,7 @@
         KeepClassItemPattern classItemPattern = item.asClassItemPattern();
         if (classItemPattern == null) {
           assert item.isMemberItemPattern();
-          KeepClassItemReference classReference = item.asMemberItemPattern().getClassReference();
+          KeepClassBindingReference classReference = item.asMemberItemPattern().getClassReference();
           classItemPattern = bindingsHelper.getClassItemForReference(classReference);
         }
         String descriptor = KeepEdgeReaderUtils.getDescriptorFromClassTypeName(className);
@@ -1075,7 +1074,7 @@
         }
         consequences.addTarget(
             KeepTarget.builder()
-                .setItemBindingReference(bindingReference)
+                .setItemReference(bindingReference)
                 .setConstraints(defaultForApiConstraints)
                 .build());
       }
@@ -1112,15 +1111,12 @@
       this.parent = parent;
       addContext.accept(metaInfoBuilder);
       KeepMemberItemPattern context = contextBuilder.apply(bindingsHelper);
-      KeepClassItemReference classReference = context.getClassReference();
+      KeepClassBindingReference classReference = context.getClassReference();
       consequences.addTarget(
           KeepTarget.builder()
-              .setItemBindingReference(bindingsHelper.defineFreshMemberBinding(context))
+              .setItemReference(bindingsHelper.defineFreshMemberBinding(context))
               .build());
-      consequences.addTarget(
-          KeepTarget.builder()
-              .setItemBindingReference(classReference.asBindingReference())
-              .build());
+      consequences.addTarget(KeepTarget.builder().setItemReference(classReference).build());
     }
 
     @Override
@@ -1301,7 +1297,7 @@
         verifyItemStructure(bindingReference);
         consequences.addTarget(
             KeepTarget.builder()
-                .setItemBindingReference(bindingReference)
+                .setItemReference(bindingReference)
                 .setConstraints(
                     constraintsParser.getValueOrDefault(KeepConstraints.defaultConstraints()))
                 .build());
@@ -1423,7 +1419,7 @@
           KeepTarget.builder()
               .setConstraints(
                   constraintsParser.getValueOrDefault(KeepConstraints.defaultConstraints()))
-              .setItemBindingReference(contextBinding)
+              .setItemReference(contextBinding)
               .build());
       parent.accept(
           builder
@@ -1466,8 +1462,7 @@
       KeepItemPattern context = contextBuilder.apply(bindingsHelper);
       KeepBindingReference contextBinding =
           bindingsHelper.defineFreshItemBinding("CONTEXT", context);
-      preconditions.addCondition(
-          KeepCondition.builder().setItemBindingReference(contextBinding).build());
+      preconditions.addCondition(KeepCondition.builder().setItemReference(contextBinding).build());
       addContext.accept(metaInfoBuilder);
     }
 
@@ -1642,7 +1637,7 @@
               .setMetaInfo(metaInfoBuilder.build())
               .setKind(kind)
               .setBindings(itemVisitor.getBindingsHelper().build())
-              .setItemBindingReference(itemVisitor.getItemReference())
+              .setItemReference(itemVisitor.getItemReference())
               .build());
     }
   }
@@ -2137,20 +2132,13 @@
         return;
       }
 
-      KeepClassItemReference holderReference =
+      KeepClassBindingReference holderReference =
           getBindingsHelper().getItem(memberBinding).asMemberItemPattern().getClassReference();
       itemReferences =
           ImmutableList.of(ensureCorrectBindingForMemberHolder(holderReference), memberBinding);
     }
 
     private KeepClassBindingReference ensureCorrectBindingForMemberHolder(
-        KeepClassItemReference holderReference) {
-      KeepClassBindingReference bindingReference =
-          holderReference.asBindingReference().asClassBindingReference();
-      return ensureCorrectBindingForMemberHolder(bindingReference);
-    }
-
-    private KeepClassBindingReference ensureCorrectBindingForMemberHolder(
         KeepClassBindingReference bindingReference) {
       return useBindingForClassAndMembers()
           ? bindingReference
@@ -2223,7 +2211,7 @@
           getBindingsHelper()
               .defineFreshMemberBinding(
                   KeepMemberItemPattern.builder()
-                      .setClassBindingReference(classReference)
+                      .setClassReference(classReference)
                       .setMemberPattern(memberPattern)
                       .build()));
       if (kind.includesClass()) {
@@ -2311,7 +2299,7 @@
       builder.setConstraints(
           constraintsParser.getValueOrDefault(KeepConstraints.defaultConstraints()));
       for (KeepBindingReference item : getItems()) {
-        parent.accept(builder.setItemBindingReference(item).build());
+        parent.accept(builder.setItemReference(item).build());
       }
     }
   }
@@ -2338,7 +2326,7 @@
     @Override
     public void visitEnd() {
       super.visitEnd();
-      parent.accept(KeepCondition.builder().setItemBindingReference(getItemReference()).build());
+      parent.accept(KeepCondition.builder().setItemReference(getItemReference()).build());
     }
   }
 
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 93c4c17..c1f8c13 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
@@ -25,8 +25,8 @@
 import com.android.tools.r8.keepanno.ast.KeepAnnotationPattern;
 import com.android.tools.r8.keepanno.ast.KeepBindingReference;
 import com.android.tools.r8.keepanno.ast.KeepBindings;
+import com.android.tools.r8.keepanno.ast.KeepClassBindingReference;
 import com.android.tools.r8.keepanno.ast.KeepClassItemPattern;
-import com.android.tools.r8.keepanno.ast.KeepClassItemReference;
 import com.android.tools.r8.keepanno.ast.KeepConsequences;
 import com.android.tools.r8.keepanno.ast.KeepConstraint;
 import com.android.tools.r8.keepanno.ast.KeepConstraints;
@@ -38,7 +38,6 @@
 import com.android.tools.r8.keepanno.ast.KeepFieldPattern;
 import com.android.tools.r8.keepanno.ast.KeepInstanceOfPattern;
 import com.android.tools.r8.keepanno.ast.KeepItemPattern;
-import com.android.tools.r8.keepanno.ast.KeepItemReference;
 import com.android.tools.r8.keepanno.ast.KeepMemberAccessPattern;
 import com.android.tools.r8.keepanno.ast.KeepMemberItemPattern;
 import com.android.tools.r8.keepanno.ast.KeepMemberPattern;
@@ -259,9 +258,9 @@
   }
 
   private void writeConstraints(
-      AnnotationVisitor visitor, KeepConstraints constraints, KeepItemReference item) {
+      AnnotationVisitor visitor, KeepConstraints constraints, KeepBindingReference item) {
     Set<KeepConstraint> typedConstraints;
-    if (item.isClassItemReference()) {
+    if (item.isClassType()) {
       typedConstraints = constraints.getClassConstraints();
     } else {
       typedConstraints = constraints.getMemberConstraints();
@@ -331,8 +330,8 @@
     }
   }
 
-  private void writeItemReference(AnnotationVisitor visitor, KeepItemReference itemReference) {
-    KeepBindingReference bindingReference = itemReference.asBindingReference();
+  private void writeItemReference(
+      AnnotationVisitor visitor, KeepBindingReference bindingReference) {
     String bindingProperty =
         bindingReference.isClassType() ? Item.classFromBinding : Item.memberFromBinding;
     visitor.visit(bindingProperty, bindingReference.getName().toString());
@@ -373,8 +372,7 @@
 
   private void writeMemberItem(
       KeepMemberItemPattern memberItemPattern, AnnotationVisitor itemVisitor) {
-    KeepClassItemReference classReference = memberItemPattern.getClassReference();
-    KeepBindingReference bindingReference = classReference.asBindingReference();
+    KeepClassBindingReference bindingReference = memberItemPattern.getClassReference();
     itemVisitor.visit(Item.classFromBinding, bindingReference.getName().toString());
     writeMember(memberItemPattern.getMemberPattern(), itemVisitor);
   }
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindingReference.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindingReference.java
index 6097e39..a5e9eda 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindingReference.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindingReference.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.keepanno.ast;
 
 import com.android.tools.r8.keepanno.ast.KeepBindings.KeepBindingSymbol;
+import java.util.Objects;
 
 public abstract class KeepBindingReference {
 
@@ -26,8 +27,6 @@
     this.name = name;
   }
 
-  public abstract KeepItemReference toItemReference();
-
   public KeepBindingSymbol getName() {
     return name;
   }
@@ -52,4 +51,21 @@
   public String toString() {
     return name.toString();
   }
+
+  @Override
+  public final boolean equals(Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof KeepBindingReference)) {
+      return false;
+    }
+    KeepBindingReference other = (KeepBindingReference) obj;
+    return isClassType() == other.isClassType() && name.equals(other.name);
+  }
+
+  @Override
+  public final int hashCode() {
+    return Objects.hash(isClassType(), name);
+  }
 }
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java
index 0d61dd4..1c135ba 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java
@@ -59,15 +59,14 @@
             .collect(Collectors.joining(", "));
   }
 
-  public void verify(KeepItemReference... references) {
+  public void verify(KeepBindingReference... references) {
     verify(Arrays.asList(references));
   }
 
-  public void verify(Collection<KeepItemReference> references) {
-    for (KeepItemReference reference : references) {
-      KeepBindingReference bindingReference = reference.asBindingReference();
-      if (!bindings.containsKey(bindingReference.getName())) {
-        throw new KeepEdgeException("Unbound reference to " + bindingReference);
+  public void verify(Collection<KeepBindingReference> references) {
+    for (KeepBindingReference reference : references) {
+      if (!bindings.containsKey(reference.getName())) {
+        throw new KeepEdgeException("Unbound reference to " + reference);
       }
     }
   }
@@ -214,7 +213,6 @@
       return bindings.get(symbol);
     }
 
-    @SuppressWarnings("ReferenceEquality")
     public KeepBindings build() {
       if (bindings.isEmpty()) {
         return NONE_INSTANCE;
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCheck.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCheck.java
index af6f61d..caf8ec1 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCheck.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCheck.java
@@ -15,7 +15,7 @@
     private KeepEdgeMetaInfo metaInfo = KeepEdgeMetaInfo.none();
     private KeepCheckKind kind = KeepCheckKind.REMOVED;
     private KeepBindings bindings = KeepBindings.none();
-    private KeepItemReference itemReference;
+    private KeepBindingReference itemReference;
 
     public Builder setMetaInfo(KeepEdgeMetaInfo metaInfo) {
       this.metaInfo = metaInfo;
@@ -32,8 +32,8 @@
       return this;
     }
 
-    public Builder setItemBindingReference(KeepBindingReference bindingReference) {
-      this.itemReference = bindingReference.toItemReference();
+    public Builder setItemReference(KeepBindingReference itemReference) {
+      this.itemReference = itemReference;
       return this;
     }
 
@@ -53,13 +53,13 @@
   private final KeepEdgeMetaInfo metaInfo;
   private final KeepCheckKind kind;
   private final KeepBindings bindings;
-  private final KeepItemReference itemReference;
+  private final KeepBindingReference itemReference;
 
   private KeepCheck(
       KeepEdgeMetaInfo metaInfo,
       KeepCheckKind kind,
       KeepBindings bindings,
-      KeepItemReference itemReference) {
+      KeepBindingReference itemReference) {
     this.metaInfo = metaInfo;
     this.kind = kind;
     this.bindings = bindings;
@@ -84,7 +84,7 @@
   }
 
   public KeepItemPattern getItemPattern() {
-    return bindings.get(itemReference.asBindingReference()).getItem();
+    return bindings.get(itemReference).getItem();
   }
 
   @Override
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepClassBindingReference.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepClassBindingReference.java
index 19fc080..3760b3a 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepClassBindingReference.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepClassBindingReference.java
@@ -17,15 +17,6 @@
     return this;
   }
 
-  public KeepClassItemReference toClassItemReference() {
-    return KeepClassItemReference.fromBindingReference(this);
-  }
-
-  @Override
-  public KeepItemReference toItemReference() {
-    return toClassItemReference();
-  }
-
   @Override
   public String toString() {
     return "class-ref(" + super.toString() + ")";
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepClassItemReference.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepClassItemReference.java
deleted file mode 100644
index 93f5077..0000000
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepClassItemReference.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.keepanno.ast;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.function.Consumer;
-import java.util.function.Function;
-
-public abstract class KeepClassItemReference extends KeepItemReference {
-
-  public static KeepClassItemReference fromBindingReference(
-      KeepClassBindingReference bindingReference) {
-    return new ClassBinding(bindingReference);
-  }
-
-  @Override
-  public final KeepClassItemReference asClassItemReference() {
-    return this;
-  }
-
-  public abstract Collection<KeepBindingReference> getBindingReferences();
-
-  private static class ClassBinding extends KeepClassItemReference {
-    private final KeepClassBindingReference bindingReference;
-
-    private ClassBinding(KeepClassBindingReference bindingReference) {
-      assert bindingReference != null;
-      this.bindingReference = bindingReference;
-    }
-
-    @Override
-    public KeepClassBindingReference asBindingReference() {
-      return bindingReference;
-    }
-
-    @Override
-    public Collection<KeepBindingReference> getBindingReferences() {
-      return Collections.singletonList(bindingReference);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-      if (this == o) {
-        return true;
-      }
-      if (!(o instanceof ClassBinding)) {
-        return false;
-      }
-      ClassBinding that = (ClassBinding) o;
-      return bindingReference.equals(that.bindingReference);
-    }
-
-    @Override
-    public int hashCode() {
-      return bindingReference.hashCode();
-    }
-
-    @Override
-    public String toString() {
-      return bindingReference.toString();
-    }
-  }
-}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCondition.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCondition.java
index b4aa28a..96c0f4d 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCondition.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCondition.java
@@ -19,16 +19,11 @@
 
   public static class Builder {
 
-    private KeepItemReference item;
+    private KeepBindingReference item;
 
     private Builder() {}
 
-    public Builder setItemBindingReference(KeepBindingReference item) {
-      this.item = item.toItemReference();
-      return this;
-    }
-
-    public Builder setItemReference(KeepItemReference item) {
+    public Builder setItemReference(KeepBindingReference item) {
       this.item = item;
       return this;
     }
@@ -38,14 +33,14 @@
     }
   }
 
-  private final KeepItemReference item;
+  private final KeepBindingReference item;
 
-  private KeepCondition(KeepItemReference item) {
+  private KeepCondition(KeepBindingReference item) {
     assert item != null;
     this.item = item;
   }
 
-  public KeepItemReference getItem() {
+  public KeepBindingReference getItem() {
     return item;
   }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemReference.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemReference.java
deleted file mode 100644
index 8a1f1c4..0000000
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemReference.java
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.keepanno.ast;
-
-/**
- * A reference to an item pattern.
- *
- * <p>A reference is always a binding-reference and will be replaced soon.
- */
-public abstract class KeepItemReference {
-
-  public final boolean isClassItemReference() {
-    return asClassItemReference() != null;
-  }
-
-  public KeepClassItemReference asClassItemReference() {
-    return null;
-  }
-
-  public abstract KeepBindingReference asBindingReference();
-}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberBindingReference.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberBindingReference.java
index a79578f..1fb3ea1 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberBindingReference.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberBindingReference.java
@@ -18,15 +18,6 @@
   }
 
   @Override
-  public KeepItemReference toItemReference() {
-    return KeepMemberItemReference.fromBindingReference(this);
-  }
-
-  public KeepMemberItemReference toMemberItemReference() {
-    return KeepMemberItemReference.fromBindingReference(this);
-  }
-
-  @Override
   public String toString() {
     return "member-ref(" + super.toString() + ")";
   }
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberItemPattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberItemPattern.java
index 3fbe013..0c22c66 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberItemPattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberItemPattern.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.keepanno.ast;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Objects;
 
 public class KeepMemberItemPattern extends KeepItemPattern {
@@ -15,7 +16,7 @@
 
   public static class Builder {
 
-    private KeepClassItemReference classReference = null;
+    private KeepClassBindingReference classReference = null;
     private KeepMemberPattern memberPattern = KeepMemberPattern.allMembers();
 
     private Builder() {}
@@ -25,12 +26,7 @@
           .setMemberPattern(pattern.getMemberPattern());
     }
 
-    public Builder setClassBindingReference(KeepClassBindingReference classReference) {
-      this.classReference = classReference.toClassItemReference();
-      return this;
-    }
-
-    public Builder setClassReference(KeepClassItemReference classReference) {
+    public Builder setClassReference(KeepClassBindingReference classReference) {
       this.classReference = classReference;
       return this;
     }
@@ -49,11 +45,11 @@
     }
   }
 
-  private final KeepClassItemReference classReference;
+  private final KeepClassBindingReference classReference;
   private final KeepMemberPattern memberPattern;
 
   private KeepMemberItemPattern(
-      KeepClassItemReference classReference, KeepMemberPattern memberPattern) {
+      KeepClassBindingReference classReference, KeepMemberPattern memberPattern) {
     assert classReference != null;
     assert memberPattern != null;
     this.classReference = classReference;
@@ -65,7 +61,7 @@
     return this;
   }
 
-  public KeepClassItemReference getClassReference() {
+  public KeepClassBindingReference getClassReference() {
     return classReference;
   }
 
@@ -74,7 +70,7 @@
   }
 
   public Collection<KeepBindingReference> getBindingReferences() {
-    return classReference.getBindingReferences();
+    return Collections.singletonList(classReference);
   }
 
   @Override
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberItemReference.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberItemReference.java
deleted file mode 100644
index 3c1bd46..0000000
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberItemReference.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.keepanno.ast;
-
-public abstract class KeepMemberItemReference extends KeepItemReference {
-
-  public static KeepMemberItemReference fromBindingReference(
-      KeepMemberBindingReference bindingReference) {
-    return new MemberBinding(bindingReference);
-  }
-
-  private static final class MemberBinding extends KeepMemberItemReference {
-
-    private final KeepMemberBindingReference bindingReference;
-
-    private MemberBinding(KeepMemberBindingReference bindingReference) {
-      this.bindingReference = bindingReference;
-    }
-
-    @Override
-    public KeepBindingReference asBindingReference() {
-      return bindingReference;
-    }
-
-    @Override
-    public String toString() {
-      return bindingReference.toString();
-    }
-  }
-}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepTarget.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepTarget.java
index cbf039e..0d7dc03 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepTarget.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepTarget.java
@@ -9,18 +9,13 @@
 
   public static class Builder {
 
-    private KeepItemReference item;
+    private KeepBindingReference item;
     private KeepConstraints constraints = KeepConstraints.defaultConstraints();
 
     private Builder() {}
 
-    public Builder setItemBindingReference(KeepBindingReference reference) {
-      this.item = reference.toItemReference();
-      return this;
-    }
-
-    public Builder setItemReference(KeepItemReference item) {
-      this.item = item;
+    public Builder setItemReference(KeepBindingReference itemReference) {
+      this.item = itemReference;
       return this;
     }
 
@@ -37,10 +32,10 @@
     }
   }
 
-  private final KeepItemReference item;
+  private final KeepBindingReference item;
   private final KeepConstraints constraints;
 
-  private KeepTarget(KeepItemReference item, KeepConstraints constraints) {
+  private KeepTarget(KeepBindingReference item, KeepConstraints constraints) {
     assert item != null;
     assert constraints != null;
     this.item = item;
@@ -51,7 +46,7 @@
     return new Builder();
   }
 
-  public KeepItemReference getItem() {
+  public KeepBindingReference getItem() {
     return item;
   }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
index 089eeeb..4ff39c1 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.keepanno.ast.KeepConsequences;
 import com.android.tools.r8.keepanno.ast.KeepEdge;
 import com.android.tools.r8.keepanno.ast.KeepItemPattern;
-import com.android.tools.r8.keepanno.ast.KeepItemReference;
 import com.android.tools.r8.keepanno.ast.KeepMemberItemPattern;
 import com.android.tools.r8.keepanno.ast.KeepPreconditions;
 import com.android.tools.r8.keepanno.ast.KeepTarget;
@@ -76,8 +75,7 @@
         .build();
   }
 
-  private KeepItemReference normalizeItemReference(KeepItemReference item) {
-    KeepBindingReference bindingReference = item.asBindingReference();
+  private KeepBindingReference normalizeItemReference(KeepBindingReference bindingReference) {
     if (bindingReference.isClassType()) {
       // A class-type reference is allowed to reference a member-typed binding.
       // In this case, the normalized reference is to the class of the member.
@@ -86,7 +84,7 @@
         return boundItemPattern.asMemberItemPattern().getClassReference();
       }
     }
-    return item;
+    return bindingReference;
   }
 
   private KeepItemPattern normalizeItemPattern(KeepItemPattern pattern) {
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 c733157..3e5a221 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
@@ -10,8 +10,8 @@
 import com.android.tools.r8.keepanno.ast.KeepBindings.KeepBindingSymbol;
 import com.android.tools.r8.keepanno.ast.KeepCheck;
 import com.android.tools.r8.keepanno.ast.KeepCheck.KeepCheckKind;
+import com.android.tools.r8.keepanno.ast.KeepClassBindingReference;
 import com.android.tools.r8.keepanno.ast.KeepClassItemPattern;
-import com.android.tools.r8.keepanno.ast.KeepClassItemReference;
 import com.android.tools.r8.keepanno.ast.KeepCondition;
 import com.android.tools.r8.keepanno.ast.KeepConstraints;
 import com.android.tools.r8.keepanno.ast.KeepDeclaration;
@@ -22,7 +22,6 @@
 import com.android.tools.r8.keepanno.ast.KeepFieldPattern;
 import com.android.tools.r8.keepanno.ast.KeepInstanceOfPattern;
 import com.android.tools.r8.keepanno.ast.KeepItemPattern;
-import com.android.tools.r8.keepanno.ast.KeepItemReference;
 import com.android.tools.r8.keepanno.ast.KeepMemberItemPattern;
 import com.android.tools.r8.keepanno.ast.KeepMemberPattern;
 import com.android.tools.r8.keepanno.ast.KeepMethodAccessPattern;
@@ -101,10 +100,9 @@
       targetMembers = Collections.emptyList();
     } else {
       KeepMemberItemPattern memberItemPattern = itemPattern.asMemberItemPattern();
-      KeepClassItemReference classReference = memberItemPattern.getClassReference();
-      KeepBindingReference bindingReference = classReference.asBindingReference();
-      Binding binding = check.getBindings().get(bindingReference);
-      symbol = bindingReference.getName();
+      KeepClassBindingReference classReference = memberItemPattern.getClassReference();
+      Binding binding = check.getBindings().get(classReference);
+      symbol = classReference.getName();
       builder.addBinding(symbol, binding.getItem());
       KeepMemberPattern memberPattern = memberItemPattern.getMemberPattern();
       // This does not actually allocate a binding as the mapping is maintained in 'memberPatterns'.
@@ -251,16 +249,15 @@
 
     public void addCondition(KeepCondition condition) {
       assert true;
-      conditionRefs.add(condition.getItem().asBindingReference().getName());
+      conditionRefs.add(condition.getItem().getName());
     }
 
     public void addTarget(KeepTarget target) {
       assert true;
       KeepConstraints constraints = target.getConstraints();
       KeepOptions options = constraints.convertToKeepOptions(defaultOptions);
-      targetRefs
-          .computeIfAbsent(options, k -> new HashSet<>())
-          .add(target.getItem().asBindingReference().getName());
+      KeepBindingReference bindingReference = target.getItem();
+      targetRefs.computeIfAbsent(options, k -> new HashSet<>()).add(bindingReference.getName());
     }
   }
 
@@ -582,7 +579,7 @@
   }
 
   private static KeepBindingSymbol getClassItemBindingReference(
-      KeepItemReference itemReference, KeepBindings bindings) {
+      KeepBindingReference itemReference, KeepBindings bindings) {
     KeepBindingSymbol classReference = null;
     for (KeepBindingSymbol reference : getTransitiveBindingReferences(itemReference, bindings)) {
       if (bindings.get(reference).getItem().isClassItemPattern()) {
@@ -596,7 +593,7 @@
   }
 
   private static Set<KeepBindingSymbol> getTransitiveBindingReferences(
-      KeepItemReference itemReference, KeepBindings bindings) {
+      KeepBindingReference itemReference, KeepBindings bindings) {
     Set<KeepBindingSymbol> symbols = new HashSet<>(2);
     Deque<KeepBindingReference> worklist = new ArrayDeque<>();
     worklist.addAll(getBindingReference(itemReference));
@@ -610,8 +607,8 @@
   }
 
   private static Collection<KeepBindingReference> getBindingReference(
-      KeepItemReference itemReference) {
-    return Collections.singletonList(itemReference.asBindingReference());
+      KeepBindingReference itemReference) {
+    return Collections.singletonList(itemReference);
   }
 
   private static Collection<KeepBindingReference> getBindingReference(KeepItemPattern itemPattern) {
diff --git a/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcher.java b/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcher.java
index 84378be..dea79c9 100644
--- a/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcher.java
+++ b/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcher.java
@@ -37,7 +37,6 @@
 import com.android.tools.r8.keepanno.ast.KeepDeclaration;
 import com.android.tools.r8.keepanno.ast.KeepEdge;
 import com.android.tools.r8.keepanno.ast.KeepItemPattern;
-import com.android.tools.r8.keepanno.ast.KeepItemReference;
 import com.android.tools.r8.keepanno.ast.KeepMemberItemPattern;
 import com.android.tools.r8.keepanno.ast.KeepTarget;
 import com.android.tools.r8.shaking.KeepAnnotationCollectionInfo.RetentionInfo;
@@ -510,10 +509,6 @@
       return -(key + 1);
     }
 
-    private int defineItemReference(KeepItemReference reference) {
-      return defineBindingReference(reference.asBindingReference());
-    }
-
     private int defineBindingReference(KeepBindingReference reference) {
       return symbolToKey.computeIfAbsent(
           reference.getName(), symbol -> defineItemPattern(getItemForBinding(symbol)));
@@ -526,7 +521,8 @@
         classMembers.add(new IntArrayList());
         return encodeClassKey(classIndex);
       } else {
-        int classIndex = defineItemReference(item.asMemberItemPattern().getClassReference());
+        KeepBindingReference reference = item.asMemberItemPattern().getClassReference();
+        int classIndex = defineBindingReference(reference);
         int memberIndex = members.size();
         members.add(item.asMemberItemPattern());
         classMembers.get(classIndex).add(memberIndex);
@@ -535,11 +531,12 @@
     }
 
     public void addPrecondition(KeepCondition condition) {
-      preconditions.add(defineItemReference(condition.getItem()));
+      preconditions.add(defineBindingReference(condition.getItem()));
     }
 
     private void addConsequence(KeepTarget target) {
-      consequences.add(defineItemReference(target.getItem()));
+      KeepBindingReference reference = target.getItem();
+      consequences.add(defineBindingReference(reference));
       constraints.add(target.getConstraints());
     }
   }
diff --git a/src/test/java/com/android/tools/r8/keepanno/ast/KeepEdgeAstTest.java b/src/test/java/com/android/tools/r8/keepanno/ast/KeepEdgeAstTest.java
index e0727be..b2beb2e 100644
--- a/src/test/java/com/android/tools/r8/keepanno/ast/KeepEdgeAstTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/ast/KeepEdgeAstTest.java
@@ -46,13 +46,9 @@
             .setConsequences(
                 KeepConsequences.builder()
                     .addTarget(
-                        KeepTarget.builder()
-                            .setItemBindingReference(helper.freshAnyClass())
-                            .build())
+                        KeepTarget.builder().setItemReference(helper.freshAnyClass()).build())
                     .addTarget(
-                        KeepTarget.builder()
-                            .setItemBindingReference(helper.freshAnyMember())
-                            .build())
+                        KeepTarget.builder().setItemReference(helper.freshAnyMember()).build())
                     .build())
             .setBindings(helper.build())
             .build();
@@ -79,12 +75,12 @@
                 KeepConsequences.builder()
                     .addTarget(
                         KeepTarget.builder()
-                            .setItemBindingReference(helper.freshAnyClass())
+                            .setItemReference(helper.freshAnyClass())
                             .setConstraints(constraints)
                             .build())
                     .addTarget(
                         KeepTarget.builder()
-                            .setItemBindingReference(helper.freshAnyMember())
+                            .setItemReference(helper.freshAnyMember())
                             .setConstraints(constraints)
                             .build())
                     .build())
@@ -150,7 +146,7 @@
                 KeepPreconditions.builder()
                     .addCondition(
                         KeepCondition.builder()
-                            .setItemBindingReference(helper.freshClassBinding(classItem(CLASS)))
+                            .setItemReference(helper.freshClassBinding(classItem(CLASS)))
                             .build())
                     .build())
             .setConsequences(
@@ -207,7 +203,7 @@
         KeepEdge.builder()
             .setPreconditions(
                 KeepPreconditions.builder()
-                    .addCondition(KeepCondition.builder().setItemBindingReference(clazz).build())
+                    .addCondition(KeepCondition.builder().setItemReference(clazz).build())
                     .build())
             .setConsequences(
                 KeepConsequences.builder()
@@ -215,7 +211,7 @@
                     .addTarget(
                         target(
                             KeepMemberItemPattern.builder()
-                                .setClassBindingReference(clazz)
+                                .setClassReference(clazz)
                                 .setMemberPattern(defaultInitializerPattern())
                                 .build(),
                             helper))
@@ -241,7 +237,7 @@
   }
 
   private KeepTarget target(KeepBindingReference item) {
-    return KeepTarget.builder().setItemBindingReference(item).build();
+    return KeepTarget.builder().setItemReference(item).build();
   }
 
   private KeepCondition condition(KeepItemPattern item, BindingsHelper helper) {
@@ -249,7 +245,7 @@
   }
 
   private KeepCondition condition(KeepBindingReference item) {
-    return KeepCondition.builder().setItemBindingReference(item).build();
+    return KeepCondition.builder().setItemReference(item).build();
   }
 
   private KeepClassItemPattern classItem(String typeName) {
@@ -267,7 +263,7 @@
 
   private static KeepMemberItemPattern.Builder buildMemberItem(KeepClassBindingReference holder) {
     return KeepMemberItemPattern.builder()
-        .setClassBindingReference(holder)
+        .setClassReference(holder)
         .setMemberPattern(KeepMemberPattern.allMembers());
   }