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 13b1b4f..0d7e1b2 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
@@ -249,7 +249,7 @@
           // No valid match, so the rule is discarded. This should likely be a diagnostics info.
           return;
         }
-        if (!predicates.matchesClass(clazz, classPattern, appInfo)) {
+        if (!predicates.matchesClass(clazz, classPattern)) {
           // Invalid match for this class.
           return;
         }
@@ -257,7 +257,7 @@
       } else {
         // TODO(b/323816623): This repeated iteration on all classes must be avoided.
         for (DexProgramClass clazz : appInfo.classes()) {
-          if (predicates.matchesClass(clazz, classPattern, appInfo)) {
+          if (predicates.matchesClass(clazz, classPattern)) {
             continueWithClass(classIndex, clazz);
           }
         }
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 05cd43c..364a17f 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
@@ -6,7 +6,6 @@
 
 import com.android.tools.r8.errors.Unimplemented;
 import com.android.tools.r8.graph.AccessFlags;
-import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
 import com.android.tools.r8.graph.DexAnnotation;
 import com.android.tools.r8.graph.DexAnnotationSet;
 import com.android.tools.r8.graph.DexEncodedField;
@@ -39,7 +38,6 @@
 import com.android.tools.r8.keepanno.ast.KeepUnqualfiedClassNamePattern;
 import com.android.tools.r8.keepanno.ast.ModifierPattern;
 import com.android.tools.r8.keepanno.ast.OptionalPattern;
-import com.android.tools.r8.utils.TraversalContinuation;
 import java.util.List;
 
 public class KeepAnnotationMatcherPredicates {
@@ -50,11 +48,10 @@
     this.factory = factory;
   }
 
-  public boolean matchesClass(
-      DexProgramClass clazz, KeepClassItemPattern classPattern, AppInfoWithClassHierarchy appInfo) {
+  public boolean matchesClass(DexProgramClass clazz, KeepClassItemPattern classPattern) {
     return matchesClassName(clazz.getType(), classPattern.getClassNamePattern())
-        && matchesAnnotatedBy(clazz.annotations(), classPattern.getAnnotatedByPattern())
-        && matchesInstanceOfPattern(clazz, classPattern.getInstanceOfPattern(), appInfo);
+        && matchesInstanceOfPattern(clazz, classPattern.getInstanceOfPattern())
+        && matchesAnnotatedBy(clazz.annotations(), classPattern.getAnnotatedByPattern());
   }
 
   public boolean matchesClassName(DexType type, KeepQualifiedClassNamePattern pattern) {
@@ -86,25 +83,11 @@
   }
 
   private boolean matchesInstanceOfPattern(
-      DexProgramClass clazz, KeepInstanceOfPattern pattern, AppInfoWithClassHierarchy appInfo) {
+      DexProgramClass unusedClazz, KeepInstanceOfPattern pattern) {
     if (pattern.isAny()) {
       return true;
     }
-    if (pattern.isInclusive()) {
-      if (matchesClassName(clazz.getType(), pattern.getClassNamePattern())) {
-        return true;
-      }
-    }
-    return appInfo
-        .traverseSuperTypes(
-            clazz,
-            (superType, unusedSubClass, unusedIsInterface) -> {
-              if (matchesClassName(superType, pattern.getClassNamePattern())) {
-                return TraversalContinuation.doBreak();
-              }
-              return TraversalContinuation.doContinue();
-            })
-        .isBreak();
+    throw new Unimplemented();
   }
 
   public boolean matchesGeneralMember(DexEncodedMember<?, ?> member, KeepMemberPattern pattern) {
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepInclusiveInstanceOfTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepInclusiveInstanceOfTest.java
index 6643f76..85809df 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepInclusiveInstanceOfTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepInclusiveInstanceOfTest.java
@@ -30,7 +30,6 @@
   @Test
   public void test() throws Exception {
     testForKeepAnno(parameters)
-        .enableNativeInterpretation()
         .addProgramClasses(getInputClasses())
         .addKeepMainRule(TestClass.class)
         .setExcludedOuterClass(getClass())
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepNameAndInstanceOfTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepNameAndInstanceOfTest.java
index 27b12cf..b36cca3 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepNameAndInstanceOfTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepNameAndInstanceOfTest.java
@@ -31,7 +31,6 @@
   @Test
   public void test() throws Exception {
     testForKeepAnno(parameters)
-        .enableNativeInterpretation()
         .addProgramClasses(getInputClasses())
         .addKeepMainRule(TestClass.class)
         .setExcludedOuterClass(getClass())
