Revert "[KeepAnno] Complete native string pattern interpretation"
Revert submission 89581
Reason for revert: Broke build, threading module when missing.
Reverted changes: /q/submissionid:89581
Change-Id: Iff143a8abbbfaa582f761a61c304d7e89daa319b
diff --git a/src/main/java/com/android/tools/r8/graph/DexString.java b/src/main/java/com/android/tools/r8/graph/DexString.java
index 3f3aa1e..4ec188f 100644
--- a/src/main/java/com/android/tools/r8/graph/DexString.java
+++ b/src/main/java/com/android/tools/r8/graph/DexString.java
@@ -468,19 +468,11 @@
}
public boolean endsWith(DexString suffix) {
- return endsWith(suffix.content);
- }
-
- public boolean endsWith(String suffix) {
- return endsWith(encodeToMutf8(suffix));
- }
-
- private boolean endsWith(byte[] suffixContent) {
- if (content.length < suffixContent.length) {
+ if (content.length < suffix.content.length) {
return false;
}
- for (int i = content.length - suffixContent.length, j = 0; i < content.length; i++, j++) {
- if (content[i] != suffixContent[j]) {
+ for (int i = content.length - suffix.content.length, j = 0; i < content.length; i++, j++) {
+ if (content[i] != suffix.content[j]) {
return false;
}
}
diff --git a/src/main/java/com/android/tools/r8/shaking/rules/ApplicableRulesEvaluatorImpl.java b/src/main/java/com/android/tools/r8/shaking/rules/ApplicableRulesEvaluatorImpl.java
index 5e65713..c182c24 100644
--- a/src/main/java/com/android/tools/r8/shaking/rules/ApplicableRulesEvaluatorImpl.java
+++ b/src/main/java/com/android/tools/r8/shaking/rules/ApplicableRulesEvaluatorImpl.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.shaking.Enqueuer;
import com.android.tools.r8.shaking.MinimumKeepInfoCollection;
-import com.google.common.collect.Iterables;
+import com.android.tools.r8.utils.ListUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -58,7 +58,7 @@
}
if (prunedCount == pendingConditionalRules.size()) {
- assert Iterables.all(pendingConditionalRules, Objects::isNull);
+ assert ListUtils.all(pendingConditionalRules, Objects::isNull);
prunedCount = 0;
pendingConditionalRules = Collections.emptyList();
return;
diff --git a/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcherPredicates.java b/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcherPredicates.java
index 0563128..05cd43c 100644
--- a/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcherPredicates.java
+++ b/src/main/java/com/android/tools/r8/shaking/rules/KeepAnnotationMatcherPredicates.java
@@ -90,7 +90,6 @@
if (pattern.isAny()) {
return true;
}
- // TODO(b/323816623): Consider a way to optimize instance matching to avoid repeated traversals.
if (pattern.isInclusive()) {
if (matchesClassName(clazz.getType(), pattern.getClassNamePattern())) {
return true;
@@ -121,7 +120,7 @@
if (pattern.isAnyMethod()) {
return true;
}
- return matchesString(method.getName(), pattern.getNamePattern().asStringPattern())
+ return matchesName(method.getName(), pattern.getNamePattern().asStringPattern())
&& matchesReturnType(method.getReturnType(), pattern.getReturnTypePattern())
&& matchesParameters(method.getParameters(), pattern.getParametersPattern())
&& matchesAnnotatedBy(method.annotations(), pattern.getAnnotatedByPattern())
@@ -132,7 +131,7 @@
if (pattern.isAnyField()) {
return true;
}
- return matchesString(field.getName(), pattern.getNamePattern().asStringPattern())
+ return matchesName(field.getName(), pattern.getNamePattern().asStringPattern())
&& matchesType(field.getType(), pattern.getTypePattern().asType())
&& matchesAnnotatedBy(field.annotations(), pattern.getAnnotatedByPattern())
&& matchesFieldAccess(field.getAccessFlags(), pattern.getAccessPattern());
@@ -230,21 +229,14 @@
return true;
}
- public boolean matchesString(DexString string, KeepStringPattern pattern) {
- if (pattern.isAny()) {
+ public boolean matchesName(DexString name, KeepStringPattern namePattern) {
+ if (namePattern.isAny()) {
return true;
}
- // TODO(b/323816623): Consider precompiling matches to avoid repeated string decoding.
- if (pattern.isExact()) {
- return string.isEqualTo(pattern.asExactString());
+ if (namePattern.isExact()) {
+ return namePattern.asExactString().equals(name.toString());
}
- if (pattern.hasPrefix() && !string.startsWith(pattern.getPrefixString())) {
- return false;
- }
- if (pattern.hasSuffix() && !string.endsWith(pattern.getSuffixString())) {
- return false;
- }
- return true;
+ throw new Unimplemented();
}
public boolean matchesReturnType(
diff --git a/src/main/java/com/android/tools/r8/utils/ListUtils.java b/src/main/java/com/android/tools/r8/utils/ListUtils.java
index a183511..26feadb 100644
--- a/src/main/java/com/android/tools/r8/utils/ListUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ListUtils.java
@@ -316,6 +316,24 @@
return existingMappedRanges == null ? null : last(existingMappedRanges);
}
+ public static <T> boolean all(List<T> items, Predicate<T> predicate) {
+ for (T item : items) {
+ if (!predicate.test(item)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static <T> boolean any(List<T> items, Predicate<T> predicate) {
+ for (T item : items) {
+ if (predicate.test(item)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public interface ReferenceAndIntConsumer<T> {
void accept(T item, int index);
}
diff --git a/src/test/java/com/android/tools/r8/keepanno/FieldNameStringPatternsTest.java b/src/test/java/com/android/tools/r8/keepanno/FieldNameStringPatternsTest.java
index 8a8b286..d6a6b90 100644
--- a/src/test/java/com/android/tools/r8/keepanno/FieldNameStringPatternsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/FieldNameStringPatternsTest.java
@@ -40,7 +40,6 @@
@Test
public void test() throws Exception {
testForKeepAnno(parameters)
- .enableNativeInterpretation()
.addProgramClasses(getInputClasses())
.setExcludedOuterClass(getClass())
.run(TestClass.class)
diff --git a/src/test/java/com/android/tools/r8/keepanno/MethodNameStringPatternsTest.java b/src/test/java/com/android/tools/r8/keepanno/MethodNameStringPatternsTest.java
index 05ea34d..9306ca4 100644
--- a/src/test/java/com/android/tools/r8/keepanno/MethodNameStringPatternsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/MethodNameStringPatternsTest.java
@@ -40,7 +40,6 @@
@Test
public void test() throws Exception {
testForKeepAnno(parameters)
- .enableNativeInterpretation()
.addProgramClasses(getInputClasses())
.setExcludedOuterClass(getClass())
.run(TestClass.class)