[KeepAnno] Clean up a few places after checks have bindings
Change-Id: Idd1f6615f412dac946af4546c95c877bdd5c54b8
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 c7d6d84..1a39181 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
@@ -118,8 +118,8 @@
return bindings;
}
- public KeepItemPattern getItemPattern() {
- return bindings.get(itemReference).getItem();
+ public KeepBindingReference getItemReference() {
+ return itemReference;
}
@Override
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 585eee6..168ff22 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
@@ -6,7 +6,6 @@
import com.android.tools.r8.keepanno.ast.KeepAttribute;
import com.android.tools.r8.keepanno.ast.KeepBindingReference;
import com.android.tools.r8.keepanno.ast.KeepBindings;
-import com.android.tools.r8.keepanno.ast.KeepBindings.Binding;
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;
@@ -81,32 +80,31 @@
if (!extractorOptions.hasCheckDiscardSupport()) {
return Collections.emptyList();
}
- KeepItemPattern itemPattern = check.getItemPattern();
+ KeepBindingReference itemReference = check.getItemReference();
+ KeepBindings bindings = check.getBindings();
+
boolean isRemovedPattern = check.getKind() == KeepCheckKind.REMOVED;
List<PgRule> rules = new ArrayList<>(isRemovedPattern ? 2 : 1);
Holder holder;
Map<KeepBindingSymbol, KeepMemberPattern> memberPatterns;
List<KeepBindingSymbol> targetMembers;
- KeepBindings.Builder builder = KeepBindings.builder();
KeepBindingSymbol symbol;
- if (itemPattern.isClassItemPattern()) {
- symbol = builder.generateFreshSymbol("CLASS");
- builder.addBinding(symbol, itemPattern);
+ if (itemReference.isClassType()) {
+ symbol = itemReference.getName();
memberPatterns = Collections.emptyMap();
targetMembers = Collections.emptyList();
} else {
- KeepMemberItemPattern memberItemPattern = itemPattern.asMemberItemPattern();
+ KeepMemberItemPattern memberItemPattern =
+ bindings.getMemberItem(itemReference.asMemberBindingReference());
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'.
- KeepBindingSymbol memberSymbol = new KeepBindingSymbol("MEMBERS");
+ KeepBindingSymbol memberSymbol = itemReference.getName();
memberPatterns = Collections.singletonMap(memberSymbol, memberPattern);
targetMembers = Collections.singletonList(memberSymbol);
}
- holder = Holder.create(symbol, builder.build());
+ holder = Holder.create(symbol, bindings);
// Add a -checkdiscard rule for the class or members.
rules.add(
new PgUnconditionalRule(
@@ -121,7 +119,7 @@
// moving/inlining the items.
if (isRemovedPattern) {
KeepOptions allowShrinking = KeepOptions.allow(KeepOption.SHRINKING);
- if (itemPattern.isClassItemPattern()) {
+ if (itemReference.isClassType()) {
// A check removal on a class means that the entire class is removed, thus soft-pin the
// class and *all* of its members.
KeepBindingSymbol memberSymbol = new KeepBindingSymbol("MEMBERS");
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 052c9ad..c45a64d 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
@@ -472,7 +472,7 @@
check -> {
preconditionClassesCount = 0;
preconditionMembersCount = 0;
- consequences.add(defineItemPattern(check.getItemPattern()));
+ consequences.add(defineBindingReference(check.getItemReference()));
});
}