[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) {