[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());
}