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)