diff --git a/src/main/java/com/android/tools/r8/graph/AppInfo.java b/src/main/java/com/android/tools/r8/graph/AppInfo.java
index dcad411..7997cea 100644
--- a/src/main/java/com/android/tools/r8/graph/AppInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/AppInfo.java
@@ -278,30 +278,6 @@
   }
 
   /**
-   * Lookup super method following the super chain from the holder of {@code method}.
-   *
-   * <p>This method will resolve the method on the holder of {@code method} and only return a
-   * non-null value if the result of resolution was an instance (i.e. non-static) method.
-   *
-   * @param method the method to lookup
-   * @param invocationContext the class the invoke is contained in, i.e., the holder of the caller.
-   * @return The actual target for {@code method} or {@code null} if none found.
-   */
-  @Deprecated // TODO(b/147578480): Remove
-  public DexEncodedMethod lookupSuperTarget(DexMethod method, DexType invocationContext) {
-    assert checkIfObsolete();
-    assert invocationContext.isClassType();
-    DexClass context = definitionFor(invocationContext);
-    return context == null ? null : lookupSuperTarget(method, context);
-  }
-
-  @Deprecated // TODO(b/147578480): Remove
-  public DexEncodedMethod lookupSuperTarget(DexMethod method, DexClass invocationContext) {
-    assert checkIfObsolete();
-    return resolveMethod(method.holder, method).lookupInvokeSuperTarget(invocationContext, this);
-  }
-
-  /**
    * Lookup direct method following the super chain from the holder of {@code method}.
    *
    * <p>This method will lookup private and constructor methods.
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
index 1d9c597..584bfc4 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
@@ -141,6 +141,7 @@
         DexEncodedMethod dexEncodedMethod =
             appView
                 .appInfo()
+                .withClassHierarchy()
                 .lookupSuperTarget(invoke.getInvokedMethod(), code.method.method.holder);
         // Final methods can be rewritten as a normal invoke.
         if (dexEncodedMethod != null && !dexEncodedMethod.isFinal()) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
index bcae8e7..ab215b6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
@@ -280,6 +280,7 @@
               DexEncodedMethod dexEncodedMethod =
                   appView
                       .appInfo()
+                      .withClassHierarchy()
                       .lookupSuperTarget(invokeSuper.getInvokedMethod(), code.method.method.holder);
               if (dexEncodedMethod != null) {
                 DexClass dexClass = appView.definitionFor(dexEncodedMethod.method.holder);
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index ae8eb7e..69b77cd 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -864,15 +864,15 @@
 
     private static final String CONSTRUCTOR_NAME = "constructor";
 
-    private final DexClass source;
-    private final DexClass target;
+    private final DexProgramClass source;
+    private final DexProgramClass target;
     private final VerticalClassMergerGraphLense.Builder deferredRenamings =
         new VerticalClassMergerGraphLense.Builder(appView.dexItemFactory());
     private final List<SynthesizedBridgeCode> synthesizedBridges = new ArrayList<>();
 
     private boolean abortMerge = false;
 
-    private ClassMerger(DexClass source, DexClass target) {
+    private ClassMerger(DexProgramClass source, DexProgramClass target) {
       this.source = source;
       this.target = target;
     }
@@ -1122,7 +1122,7 @@
         // a superclass of B), which also needs to be rewritten to "invoke-direct C.m$B()".
         //
         // We handle this by adding a mapping for [target] and all of its supertypes.
-        DexClass holder = target;
+        DexProgramClass holder = target;
         while (holder != null && holder.isProgramClass()) {
           DexMethod signatureInHolder =
               application.dexItemFactory.createMethod(holder.type, oldTarget.proto, oldTarget.name);
@@ -1158,7 +1158,10 @@
               }
             }
           }
-          holder = holder.superType != null ? appInfo.definitionFor(holder.superType) : null;
+          holder =
+              holder.superType != null
+                  ? appInfo.definitionFor(holder.superType).asProgramClass()
+                  : null;
         }
       }
     }
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index 00d991a..203a07b 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -21,6 +21,7 @@
 import com.android.tools.r8.dex.ApplicationReader;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.AppInfo;
+import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
 import com.android.tools.r8.graph.AppInfoWithSubtyping;
 import com.android.tools.r8.graph.AppServices;
 import com.android.tools.r8.graph.AppView;
@@ -555,11 +556,11 @@
     return newJar;
   }
 
-  protected AppInfo getAppInfo(AndroidApp application) {
+  protected static AppInfo computeAppInfo(AndroidApp application) {
     try {
       DexApplication dexApplication =
           new ApplicationReader(
-                  application, new InternalOptions(), new Timing("TestBase.getAppInfo"))
+                  application, new InternalOptions(), new Timing("TestBase.computeAppInfo"))
               .read();
       return new AppInfo(dexApplication);
     } catch (IOException | ExecutionException e) {
@@ -567,6 +568,17 @@
     }
   }
 
+  protected static AppInfoWithClassHierarchy computeAppInfoWithClassHierarchy(
+      AndroidApp application) {
+    try {
+      DexApplication dexApplication =
+          new ApplicationReader(application, new InternalOptions(), new Timing()).read();
+      return new AppInfoWithClassHierarchy(dexApplication);
+    } catch (IOException | ExecutionException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
   protected static AppView<AppInfoWithSubtyping> computeAppViewWithSubtyping(AndroidApp app)
       throws Exception {
     Timing timing = new Timing();
diff --git a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
index 289a0ba..e49d9a5 100644
--- a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
+++ b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
@@ -77,7 +77,7 @@
     );
 
     AndroidApp application = buildApplication(builder);
-    AppInfo appInfo = getAppInfo(application);
+    AppInfo appInfo = computeAppInfo(application);
     CodeInspector inspector = new CodeInspector(appInfo.app());
     DexEncodedMethod method = getMethod(inspector, DEFAULT_CLASS_NAME, "int", "x",
         ImmutableList.of());
@@ -147,7 +147,7 @@
     );
 
     AndroidApp application = buildApplication(builder);
-    AppInfo appInfo = getAppInfo(application);
+    AppInfo appInfo = computeAppInfo(application);
     CodeInspector inspector = new CodeInspector(appInfo.app());
 
     DexMethod methodXOnTestSuper =
@@ -197,7 +197,7 @@
     );
 
     AndroidApp application = buildApplication(builder);
-    AppInfo appInfo = getAppInfo(application);
+    AppInfo appInfo = computeAppInfo(application);
     DexItemFactory factory = appInfo.dexItemFactory();
 
     DexField aFieldOnSubClass = factory
@@ -229,7 +229,7 @@
       builder.addLibraryFiles(ToolHelper.getDefaultAndroidJar());
     }
     AndroidApp application = builder.build();
-    AppInfo appInfo = getAppInfo(application);
+    AppInfoWithClassHierarchy appInfo = computeAppInfoWithClassHierarchy(application);
     DexItemFactory factory = appInfo.dexItemFactory();
 
     DexType i0 = factory.createType("L" + pkg + "/I0;");
