[KeepAnno] Inline and simplify most of the item reference uses

This mostly and IDE refactoring.

Bug: b/343389186
Change-Id: If1d812077aff128fa63e1a587cf3e6c0913d2f3a
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 641eb23..c714c89 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
@@ -765,9 +765,7 @@
     }
 
     public KeepClassItemPattern getClassItemForReference(KeepClassItemReference itemReference) {
-      return itemReference.isBindingReference()
-          ? getItem(itemReference.asBindingReference()).asClassItemPattern()
-          : itemReference.asClassItemPattern();
+      return getItem(itemReference.asBindingReference()).asClassItemPattern();
     }
 
     public KeepBindings build() {
@@ -1115,32 +1113,14 @@
       addContext.accept(metaInfoBuilder);
       KeepMemberItemPattern context = contextBuilder.apply(bindingsHelper);
       KeepClassItemReference classReference = context.getClassReference();
-      if (classReference.isBindingReference()) {
-        consequences.addTarget(
-            KeepTarget.builder()
-                .setItemBindingReference(bindingsHelper.defineFreshMemberBinding(context))
-                .build());
-        consequences.addTarget(
-            KeepTarget.builder()
-                .setItemBindingReference(classReference.asBindingReference())
-                .build());
-      } else {
-        // Create a binding for the context such that the class and member are shared.
-        KeepClassItemPattern classContext = classReference.asClassItemPattern();
-        KeepClassBindingReference classBindingReference =
-            bindingsHelper.defineFreshClassBinding(classContext);
-        consequences.addTarget(
-            KeepTarget.builder()
-                .setItemBindingReference(
-                    bindingsHelper.defineFreshMemberBinding(
-                        KeepMemberItemPattern.builder()
-                            .copyFrom(context)
-                            .setClassBindingReference(classBindingReference)
-                            .build()))
-                .build());
-        consequences.addTarget(
-            KeepTarget.builder().setItemBindingReference(classBindingReference).build());
-      }
+      consequences.addTarget(
+          KeepTarget.builder()
+              .setItemBindingReference(bindingsHelper.defineFreshMemberBinding(context))
+              .build());
+      consequences.addTarget(
+          KeepTarget.builder()
+              .setItemBindingReference(classReference.asBindingReference())
+              .build());
     }
 
     @Override
@@ -2165,12 +2145,9 @@
 
     private KeepClassBindingReference ensureCorrectBindingForMemberHolder(
         KeepClassItemReference holderReference) {
-      if (holderReference.isBindingReference()) {
-        KeepClassBindingReference bindingReference =
-            holderReference.asBindingReference().asClassBindingReference();
-        return ensureCorrectBindingForMemberHolder(bindingReference);
-      }
-      return getBindingsHelper().defineFreshClassBinding(holderReference.asClassItemPattern());
+      KeepClassBindingReference bindingReference =
+          holderReference.asBindingReference().asClassBindingReference();
+      return ensureCorrectBindingForMemberHolder(bindingReference);
     }
 
     private KeepClassBindingReference ensureCorrectBindingForMemberHolder(
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 9151b1b..93c4c17 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
@@ -263,15 +263,6 @@
     Set<KeepConstraint> typedConstraints;
     if (item.isClassItemReference()) {
       typedConstraints = constraints.getClassConstraints();
-    } else if (item.isMemberItemPattern()) {
-      KeepMemberPattern memberPattern = item.asMemberItemPattern().getMemberPattern();
-      if (memberPattern.isMethod()) {
-        typedConstraints = constraints.getMethodConstraints();
-      } else if (memberPattern.isField()) {
-        typedConstraints = constraints.getFieldConstraints();
-      } else {
-        typedConstraints = constraints.getMemberConstraints();
-      }
     } else {
       typedConstraints = constraints.getMemberConstraints();
     }
@@ -341,14 +332,10 @@
   }
 
   private void writeItemReference(AnnotationVisitor visitor, KeepItemReference itemReference) {
-    if (itemReference.isBindingReference()) {
-      KeepBindingReference bindingReference = itemReference.asBindingReference();
-      String bindingProperty =
-          bindingReference.isClassType() ? Item.classFromBinding : Item.memberFromBinding;
-      visitor.visit(bindingProperty, bindingReference.getName().toString());
-    } else {
-      writeItem(visitor, itemReference.asItemPattern());
-    }
+    KeepBindingReference bindingReference = itemReference.asBindingReference();
+    String bindingProperty =
+        bindingReference.isClassType() ? Item.classFromBinding : Item.memberFromBinding;
+    visitor.visit(bindingProperty, bindingReference.getName().toString());
   }
 
   private void writeItem(AnnotationVisitor itemVisitor, KeepItemPattern item) {
@@ -387,12 +374,8 @@
   private void writeMemberItem(
       KeepMemberItemPattern memberItemPattern, AnnotationVisitor itemVisitor) {
     KeepClassItemReference classReference = memberItemPattern.getClassReference();
-    if (classReference.isBindingReference()) {
-      KeepBindingReference bindingReference = classReference.asBindingReference();
-      itemVisitor.visit(Item.classFromBinding, bindingReference.getName().toString());
-    } else {
-      writeClassItem(classReference.asClassItemPattern(), itemVisitor);
-    }
+    KeepBindingReference bindingReference = classReference.asBindingReference();
+    itemVisitor.visit(Item.classFromBinding, bindingReference.getName().toString());
     writeMember(memberItemPattern.getMemberPattern(), itemVisitor);
   }
 
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 46ee664..0d61dd4 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
@@ -65,18 +65,9 @@
 
   public void verify(Collection<KeepItemReference> references) {
     for (KeepItemReference reference : references) {
-      if (reference.isBindingReference()) {
-        KeepBindingReference bindingReference = reference.asBindingReference();
-        if (!bindings.containsKey(bindingReference.getName())) {
-          throw new KeepEdgeException("Unbound reference to " + bindingReference);
-        }
-      } else {
-        KeepItemPattern itemPattern = reference.asItemPattern();
-        for (KeepBindingReference bindingReference : itemPattern.getBindingReferences()) {
-          if (!bindings.containsKey(bindingReference.getName())) {
-            throw new KeepEdgeException("Unbound reference to " + bindingReference);
-          }
-        }
+      KeepBindingReference bindingReference = reference.asBindingReference();
+      if (!bindings.containsKey(bindingReference.getName())) {
+        throw new KeepEdgeException("Unbound reference to " + bindingReference);
       }
     }
   }
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 4c21cad..af6f61d 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
@@ -37,11 +37,6 @@
       return this;
     }
 
-    public Builder setItemReference(KeepItemReference itemReference) {
-      this.itemReference = itemReference;
-      return this;
-    }
-
     public KeepCheck build() {
       if (itemReference == null) {
         throw new KeepEdgeException("KeepCheck must have an item pattern.");
@@ -88,15 +83,8 @@
     return bindings;
   }
 
-  public KeepItemReference getItemReference() {
-    return itemReference;
-  }
-
   public KeepItemPattern getItemPattern() {
-    if (itemReference.isBindingReference()) {
-      return bindings.get(itemReference.asBindingReference()).getItem();
-    }
-    return itemReference.asItemPattern();
+    return bindings.get(itemReference.asBindingReference()).getItem();
   }
 
   @Override
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
index b912471..93f5077 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepClassItemReference.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepClassItemReference.java
@@ -20,19 +20,6 @@
     return this;
   }
 
-  public final <T> T applyClassItemReference(
-      Function<KeepBindingReference, T> onBinding, Function<KeepClassItemPattern, T> onPattern) {
-    if (isBindingReference()) {
-      return onBinding.apply(asBindingReference());
-    }
-    return onPattern.apply(asClassItemPattern());
-  }
-
-  public final void matchClassItemReference(
-      Consumer<KeepBindingReference> onBinding, Consumer<KeepClassItemPattern> onPattern) {
-    applyClassItemReference(AstUtils.toVoidFunction(onBinding), AstUtils.toVoidFunction(onPattern));
-  }
-
   public abstract Collection<KeepBindingReference> getBindingReferences();
 
   private static class ClassBinding extends KeepClassItemReference {
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
index d17f6ee..8a1f1c4 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemReference.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemReference.java
@@ -3,13 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.keepanno.ast;
 
-import java.util.function.Consumer;
-import java.util.function.Function;
-
 /**
  * A reference to an item pattern.
  *
- * <p>A reference can either be a binding-reference to an item pattern or the item pattern itself.
+ * <p>A reference is always a binding-reference and will be replaced soon.
  */
 public abstract class KeepItemReference {
 
@@ -17,64 +14,9 @@
     return asClassItemReference() != null;
   }
 
-  public final boolean isMemberItemReference() {
-    return asMemberItemReference() != null;
-  }
-
   public KeepClassItemReference asClassItemReference() {
     return null;
   }
 
-  public KeepMemberItemReference asMemberItemReference() {
-    return null;
-  }
-
-  // Helpers below.
-
-  /* Returns true if the reference is a binding to a class or member. */
-  public final boolean isBindingReference() {
-    return asBindingReference() != null;
-  }
-
-  /* Returns true if the reference is an item pattern for a class or member. */
-  public final boolean isItemPattern() {
-    return asItemPattern() != null;
-  }
-
-  public final boolean isClassItemPattern() {
-    return asClassItemPattern() != null;
-  }
-
-  public final boolean isMemberItemPattern() {
-    return asMemberItemPattern() != null;
-  }
-
-  public KeepBindingReference asBindingReference() {
-    return null;
-  }
-
-  public KeepItemPattern asItemPattern() {
-    return null;
-  }
-
-  public KeepClassItemPattern asClassItemPattern() {
-    return null;
-  }
-
-  public KeepMemberItemPattern asMemberItemPattern() {
-    return null;
-  }
-
-  public <T> T apply(
-      Function<KeepBindingReference, T> onBinding, Function<KeepItemPattern, T> onItem) {
-    if (isBindingReference()) {
-      return onBinding.apply(asBindingReference());
-    }
-    assert isItemPattern();
-    return onItem.apply(asItemPattern());
-  }
-
-  public void match(Consumer<KeepBindingReference> onBinding, Consumer<KeepItemPattern> onItem) {
-    apply(AstUtils.toVoidFunction(onBinding), AstUtils.toVoidFunction(onItem));
-  }
+  public abstract KeepBindingReference asBindingReference();
 }
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
index aa71f27..3c1bd46 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberItemReference.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberItemReference.java
@@ -11,11 +11,6 @@
     return new MemberBinding(bindingReference);
   }
 
-  @Override
-  public final KeepMemberItemReference asMemberItemReference() {
-    return this;
-  }
-
   private static final class MemberBinding extends KeepMemberItemReference {
 
     private final KeepMemberBindingReference bindingReference;
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 9806026..089eeeb 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
@@ -6,7 +6,6 @@
 import com.android.tools.r8.keepanno.ast.KeepBindingReference;
 import com.android.tools.r8.keepanno.ast.KeepBindings;
 import com.android.tools.r8.keepanno.ast.KeepBindings.KeepBindingSymbol;
-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.KeepEdge;
@@ -77,32 +76,17 @@
         .build();
   }
 
-  private KeepBindingSymbol synthesizeFreshBindingSymbol(KeepItemPattern item) {
-    KeepBindingSymbol bindingName = bindingsBuilder.generateFreshSymbol(syntheticBindingPrefix);
-    bindingsBuilder.addBinding(bindingName, item);
-    return bindingName;
-  }
-
-  private KeepBindingReference synthesizeFreshBindingReference(KeepItemPattern item) {
-    KeepBindingSymbol bindingName = synthesizeFreshBindingSymbol(item);
-    return KeepBindingReference.forItem(bindingName, item);
-  }
-
   private KeepItemReference normalizeItemReference(KeepItemReference item) {
-    if (item.isBindingReference()) {
-      KeepBindingReference bindingReference = item.asBindingReference();
-      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.
-        KeepItemPattern boundItemPattern = normalizedUserBindings.get(bindingReference.getName());
-        if (boundItemPattern.isMemberItemPattern()) {
-          return boundItemPattern.asMemberItemPattern().getClassReference();
-        }
+    KeepBindingReference bindingReference = item.asBindingReference();
+    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.
+      KeepItemPattern boundItemPattern = normalizedUserBindings.get(bindingReference.getName());
+      if (boundItemPattern.isMemberItemPattern()) {
+        return boundItemPattern.asMemberItemPattern().getClassReference();
       }
-      return item;
     }
-    KeepItemPattern newItemPattern = normalizeItemPattern(item.asItemPattern());
-    return synthesizeFreshBindingReference(newItemPattern).toItemReference();
+    return item;
   }
 
   private KeepItemPattern normalizeItemPattern(KeepItemPattern pattern) {
@@ -115,17 +99,6 @@
 
   private KeepMemberItemPattern normalizeMemberItemPattern(
       KeepMemberItemPattern memberItemPattern) {
-    KeepClassItemReference classReference = memberItemPattern.getClassReference();
-    if (classReference.isBindingReference()) {
-      // If the class is already defined via a binding then no need to introduce a new one and
-      // change the member item pattern.
-      return memberItemPattern;
-    }
-    KeepBindingSymbol bindingName =
-        synthesizeFreshBindingSymbol(classReference.asClassItemPattern());
-    return KeepMemberItemPattern.builder()
-        .copyFrom(memberItemPattern)
-        .setClassReference(KeepBindingReference.forClass(bindingName).toClassItemReference())
-        .build();
+    return memberItemPattern;
   }
 }
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 3a618c9..c733157 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
@@ -102,15 +102,10 @@
     } else {
       KeepMemberItemPattern memberItemPattern = itemPattern.asMemberItemPattern();
       KeepClassItemReference classReference = memberItemPattern.getClassReference();
-      if (classReference.isClassItemPattern()) {
-        symbol = builder.generateFreshSymbol("CLASS");
-        builder.addBinding(symbol, classReference.asClassItemPattern());
-      } else {
-        KeepBindingReference bindingReference = classReference.asBindingReference();
-        Binding binding = check.getBindings().get(bindingReference);
-        symbol = bindingReference.getName();
-        builder.addBinding(symbol, binding.getItem());
-      }
+      KeepBindingReference bindingReference = classReference.asBindingReference();
+      Binding binding = check.getBindings().get(bindingReference);
+      symbol = bindingReference.getName();
+      builder.addBinding(symbol, binding.getItem());
       KeepMemberPattern memberPattern = memberItemPattern.getMemberPattern();
       // This does not actually allocate a binding as the mapping is maintained in 'memberPatterns'.
       KeepBindingSymbol memberSymbol = new KeepBindingSymbol("MEMBERS");
@@ -255,12 +250,12 @@
     }
 
     public void addCondition(KeepCondition condition) {
-      assert condition.getItem().isBindingReference();
+      assert true;
       conditionRefs.add(condition.getItem().asBindingReference().getName());
     }
 
     public void addTarget(KeepTarget target) {
-      assert target.getItem().isBindingReference();
+      assert true;
       KeepConstraints constraints = target.getConstraints();
       KeepOptions options = constraints.convertToKeepOptions(defaultOptions);
       targetRefs
@@ -616,10 +611,7 @@
 
   private static Collection<KeepBindingReference> getBindingReference(
       KeepItemReference itemReference) {
-    if (itemReference.isBindingReference()) {
-      return Collections.singletonList(itemReference.asBindingReference());
-    }
-    return getBindingReference(itemReference.asItemPattern());
+    return Collections.singletonList(itemReference.asBindingReference());
   }
 
   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 fb47d43..84378be 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
@@ -511,7 +511,7 @@
     }
 
     private int defineItemReference(KeepItemReference reference) {
-      return reference.apply(this::defineBindingReference, this::defineItemPattern);
+      return defineBindingReference(reference.asBindingReference());
     }
 
     private int defineBindingReference(KeepBindingReference reference) {