Rename ClassSubject.getDexClass() to getDexProgramClass()

Change-Id: I08f94b7ae17f46485128a896e2131792762a4de7
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/ConstructorRelaxationTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/ConstructorRelaxationTest.java
index 11c5285..972d058 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/ConstructorRelaxationTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/ConstructorRelaxationTest.java
@@ -205,9 +205,12 @@
     for (Class clazz : CLASSES) {
       ClassSubject classSubject = codeInspector.clazz(clazz);
       assertThat(classSubject, isPresent());
-      classSubject.getDexClass().forEachMethod(m -> {
-        assertTrue(!m.isInstanceInitializer() || m.isPublicMethod());
-      });
+      classSubject
+          .getDexProgramClass()
+          .forEachMethod(
+              m -> {
+                assertTrue(!m.isInstanceInitializer() || m.isPublicMethod());
+              });
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/InnerClassAttributePublicizerTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/InnerClassAttributePublicizerTest.java
index 9322844..24ba1cd 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/InnerClassAttributePublicizerTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/InnerClassAttributePublicizerTest.java
@@ -54,7 +54,7 @@
     assertThat(classSubject, isPresent());
 
     InnerClassAttribute innerClassAttribute =
-        classSubject.getDexClass().getInnerClassAttributeForThisClass();
+        classSubject.getDexProgramClass().getInnerClassAttributeForThisClass();
     assertNotNull(innerClassAttribute);
 
     ClassAccessFlags accessFlags =
diff --git a/src/test/java/com/android/tools/r8/androidapi/GenerateAvailableApiExceptions.java b/src/test/java/com/android/tools/r8/androidapi/GenerateAvailableApiExceptions.java
index 83821f8..b6a1c72 100644
--- a/src/test/java/com/android/tools/r8/androidapi/GenerateAvailableApiExceptions.java
+++ b/src/test/java/com/android/tools/r8/androidapi/GenerateAvailableApiExceptions.java
@@ -92,14 +92,14 @@
     if (!clazz.isPresent()) {
       return false;
     }
-    if (clazz.getDexClass().type == inspector.getFactory().objectType) {
+    if (clazz.getDexProgramClass().type == inspector.getFactory().objectType) {
       return false;
     }
-    if (clazz.getDexClass().type == inspector.getFactory().throwableType) {
+    if (clazz.getDexProgramClass().type == inspector.getFactory().throwableType) {
       return true;
     }
     return cache.computeIfAbsent(
-        clazz.getDexClass(),
+        clazz.getDexProgramClass(),
         c -> {
           return c.superType != null
               && isThrowable(inspector.clazz(c.superType.toSourceString()), cache, inspector);
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java b/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
index 2c46b40..6a0cf4d 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
@@ -151,7 +151,7 @@
     DexCode code = fooFromCls2InAbsCls.getMethod().getCode().asDexCode();
     checkInstructions(code, ImmutableList.of(InvokeVirtual.class, ReturnVoid.class));
     InvokeVirtual invoke = (InvokeVirtual) code.instructions[0];
-    assertEquals(absSubject.getDexClass().type, invoke.getMethod().holder);
+    assertEquals(absSubject.getDexProgramClass().type, invoke.getMethod().holder);
 
     // Cls1#foo has been moved to AbsCls#foo as a result of bridge hoisting.
     MethodSubject fooInCls1 = cls1Subject.method("void", "foo", "java.lang.String");
@@ -162,7 +162,7 @@
     code = fooFromCls1InAbsCls.getMethod().getCode().asDexCode();
     checkInstructions(code, ImmutableList.of(InvokeVirtual.class, ReturnVoid.class));
     invoke = (InvokeVirtual) code.instructions[0];
-    assertEquals(absSubject.getDexClass().type, invoke.getMethod().holder);
+    assertEquals(absSubject.getDexProgramClass().type, invoke.getMethod().holder);
   }
 
   /**
@@ -259,7 +259,7 @@
     DexCode code = barInCls2.getMethod().getCode().asDexCode();
     checkInstructions(code, ImmutableList.of(InvokeVirtual.class, ReturnVoid.class));
     InvokeVirtual invoke = (InvokeVirtual) code.instructions[0];
-    assertEquals(baseSubject.getDexClass().type, invoke.getMethod().holder);
+    assertEquals(baseSubject.getDexProgramClass().type, invoke.getMethod().holder);
 
     // Cls1#foo has been moved to Base#foo as a result of bridge hoisting.
     MethodSubject fooInCls1 = cls1Subject.method("void", "foo", "java.lang.Integer");
@@ -270,7 +270,7 @@
     code = fooInBase.getMethod().getCode().asDexCode();
     checkInstructions(code, ImmutableList.of(InvokeVirtual.class, ReturnVoid.class));
     invoke = (InvokeVirtual) code.instructions[0];
-    assertEquals(baseSubject.getDexClass().type, invoke.getMethod().holder);
+    assertEquals(baseSubject.getDexProgramClass().type, invoke.getMethod().holder);
   }
 
   /**
@@ -355,7 +355,7 @@
     DexCode code = barInSub.getMethod().getCode().asDexCode();
     checkInstructions(code, ImmutableList.of(InvokeVirtual.class, ReturnVoid.class));
     InvokeVirtual invoke = (InvokeVirtual) code.instructions[0];
-    assertEquals(baseSubject.getDexClass().type, invoke.getMethod().holder);
+    assertEquals(baseSubject.getDexProgramClass().type, invoke.getMethod().holder);
   }
 
   /*
@@ -428,7 +428,7 @@
     DexCode code = barInSub.getMethod().getCode().asDexCode();
     checkInstructions(code, ImmutableList.of(InvokeVirtual.class, ReturnVoid.class));
     InvokeVirtual invoke = (InvokeVirtual) code.instructions[0];
-    assertEquals(baseSubject.getDexClass().type, invoke.getMethod().holder);
+    assertEquals(baseSubject.getDexProgramClass().type, invoke.getMethod().holder);
   }
 
   private AndroidApp runAndVerifyOnJvmAndArt(
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java
index 353a9b9..9c4a0d6 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java
@@ -55,7 +55,7 @@
   private void inspect(CodeInspector inspector) {
     ClassSubject aClassSubject = inspector.clazz(A.class);
     assertThat(aClassSubject, isPresent());
-    assertEquals(0, aClassSubject.getDexClass().virtualMethods().size());
+    assertEquals(0, aClassSubject.getDexProgramClass().virtualMethods().size());
 
     ClassSubject b1ClassSubject = inspector.clazz(B.class);
     assertThat(b1ClassSubject, isPresent());
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmulatedInterfacesTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmulatedInterfacesTest.java
index 451a255..d767975 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmulatedInterfacesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmulatedInterfacesTest.java
@@ -84,7 +84,7 @@
   }
 
   private void assertCollectionMethodsPresentWithCorrectDispatch(CodeInspector inspector) {
-    DexClass collectionDispatch = inspector.clazz("j$.util.Collection$-EL").getDexClass();
+    DexClass collectionDispatch = inspector.clazz("j$.util.Collection$-EL").getDexProgramClass();
     for (DexEncodedMethod method : collectionDispatch.methods()) {
       int numCheckCast =
           (int)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
index 835d1cb..83dc73e 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
@@ -10,7 +10,6 @@
 
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
-import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
@@ -99,12 +98,12 @@
                                 "com.android.tools.r8.desugar.desugaredlibrary.conversiontests")
                         && !c.getOriginalName().contains("Executor")
                         && !c.getOriginalName().contains("$-CC")
-                        && !c.getDexClass().isInterface())
+                        && !c.getDexProgramClass().isInterface())
             .collect(toSingle());
     assertEquals(
         "Missing duplicated forEach",
         2,
-        myCollection.getDexClass().virtualMethods().stream()
+        myCollection.getDexProgramClass().virtualMethods().stream()
             .filter(m -> m.method.name.toString().equals("forEach"))
             .count());
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
index 55f40c4..e4447b53 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
@@ -168,7 +168,7 @@
         ImmutableList.of("NeverInline", "OutsideInliningNoAccess", "OutsideInliningWithAccess");
     inspector.forAllClasses(
         classSubject -> {
-          DexClass dexClass = classSubject.getDexClass();
+          DexClass dexClass = classSubject.getDexProgramClass();
           if (!nonNestClasses.contains(dexClass.type.getName())) {
             assertTrue(dexClass.isInANest());
             if (outerClassNames.contains(dexClass.type.getName())) {
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11D8CompilationTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11D8CompilationTest.java
index adbaddc..6fdfe97 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11D8CompilationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11D8CompilationTest.java
@@ -32,7 +32,8 @@
   }
 
   private static void assertNoNests(CodeInspector inspector) {
-    assertTrue(inspector.allClasses().stream().noneMatch(subj -> subj.getDexClass().isInANest()));
+    assertTrue(
+        inspector.allClasses().stream().noneMatch(subj -> subj.getDexProgramClass().isInANest()));
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
index a4cc603..5a788bf 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
@@ -75,9 +75,11 @@
 
   private static void assertNests(CodeInspector inspector, boolean desugar) {
     if (desugar) {
-      assertTrue(inspector.allClasses().stream().noneMatch(subj -> subj.getDexClass().isInANest()));
+      assertTrue(
+          inspector.allClasses().stream().noneMatch(subj -> subj.getDexProgramClass().isInANest()));
     } else {
-      assertTrue(inspector.allClasses().stream().anyMatch(subj -> subj.getDexClass().isInANest()));
+      assertTrue(
+          inspector.allClasses().stream().anyMatch(subj -> subj.getDexProgramClass().isInANest()));
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
index 06112f5..762916e 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
@@ -41,7 +41,8 @@
   private static final Path MAIN_KEEP = Paths.get("src/main/keep.txt");
 
   private static void assertNoNests(CodeInspector inspector) {
-    assertTrue(inspector.allClasses().stream().noneMatch(subj -> subj.getDexClass().isInANest()));
+    assertTrue(
+        inspector.allClasses().stream().noneMatch(subj -> subj.getDexProgramClass().isInANest()));
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
index e0c7e12..816a233 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
@@ -107,7 +107,7 @@
   public static void assertNestAttributesCorrect(CodeInspector inspector) {
     assertTrue(inspector.allClasses().size() > 0);
     for (FoundClassSubject classSubject : inspector.allClasses()) {
-      DexClass clazz = classSubject.getDexClass();
+      DexClass clazz = classSubject.getDexProgramClass();
       if (clazz.isInANest()) {
         if (clazz.isNestHost()) {
           // All members are present with the clazz as host
@@ -116,8 +116,8 @@
             ClassSubject inner = inspector.clazz(PACKAGE_NAME + memberName);
             assertNotNull(
                 "The nest member " + memberName + " of " + clazz.type.getName() + " is missing",
-                inner.getDexClass());
-            assertSame(inner.getDexClass().getNestHost(), clazz.type);
+                inner.getDexProgramClass());
+            assertSame(inner.getDexProgramClass().getNestHost(), clazz.type);
           }
         } else {
           // Nest host is present and with the clazz as member
@@ -125,9 +125,9 @@
           ClassSubject host = inspector.clazz(PACKAGE_NAME + hostName);
           assertNotNull(
               "The nest host " + hostName + " of " + clazz.type.getName() + " is missing",
-              host.getDexClass());
+              host.getDexProgramClass());
           assertTrue(
-              host.getDexClass().getNestMembersClassAttributes().stream()
+              host.getDexProgramClass().getNestMembersClassAttributes().stream()
                   .anyMatch(attr -> attr.getNestMember() == clazz.type));
         }
       }
diff --git a/src/test/java/com/android/tools/r8/dexfilemerger/DexMergeChecksumsFileWithNoClassesTest.java b/src/test/java/com/android/tools/r8/dexfilemerger/DexMergeChecksumsFileWithNoClassesTest.java
index 57fe4b3..c987370 100644
--- a/src/test/java/com/android/tools/r8/dexfilemerger/DexMergeChecksumsFileWithNoClassesTest.java
+++ b/src/test/java/com/android/tools/r8/dexfilemerger/DexMergeChecksumsFileWithNoClassesTest.java
@@ -65,7 +65,7 @@
     inspector.getMarkers().forEach(m -> assertTrue(m.getHasChecksums()));
     // It may be prudent to check that the dex file also has the encoding string, but that is
     // not easily accessed.
-    inspector.allClasses().forEach(c -> c.getDexClass().asProgramClass().getChecksum());
+    inspector.allClasses().forEach(c -> c.getDexProgramClass().asProgramClass().getChecksum());
   }
 
   public static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/dexfilemerger/NonAsciiClassNameChecksumTest.java b/src/test/java/com/android/tools/r8/dexfilemerger/NonAsciiClassNameChecksumTest.java
index 8e4700b..b91a645 100644
--- a/src/test/java/com/android/tools/r8/dexfilemerger/NonAsciiClassNameChecksumTest.java
+++ b/src/test/java/com/android/tools/r8/dexfilemerger/NonAsciiClassNameChecksumTest.java
@@ -83,7 +83,7 @@
   private void checkIncludesChecksum(CodeInspector inspector, Class<?> clazz) {
     ClassSubject classSubject = inspector.clazz(getTransformedName(clazz));
     assertThat(classSubject, isPresent());
-    assertTrue(classSubject.getDexClass().asProgramClass().getChecksum() > 0);
+    assertTrue(classSubject.getDexProgramClass().asProgramClass().getChecksum() > 0);
   }
 
   static class TaestClass {
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/FailingEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/FailingEnumUnboxingTest.java
index ad16ee1..0441cbf 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/FailingEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/FailingEnumUnboxingTest.java
@@ -82,12 +82,13 @@
   }
 
   private void assertEnumsAsExpected(CodeInspector inspector) {
-    assertEquals(1, inspector.clazz(EnumInterface.class).getDexClass().interfaces.size());
+    assertEquals(1, inspector.clazz(EnumInterface.class).getDexProgramClass().interfaces.size());
 
     assertTrue(inspector.clazz(EnumStaticField.class).uniqueFieldWithName("X").isPresent());
     assertTrue(inspector.clazz(EnumInstanceField.class).uniqueFieldWithName("a").isPresent());
 
-    assertEquals(5, inspector.clazz(EnumStaticMethod.class).getDexClass().directMethods().size());
+    assertEquals(
+        5, inspector.clazz(EnumStaticMethod.class).getDexProgramClass().directMethods().size());
     assertEquals(1, inspector.clazz(EnumVirtualMethod.class).virtualMethods().size());
   }
 
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/FailingMethodEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/FailingMethodEnumUnboxingTest.java
index 8e7be57..411a747 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/FailingMethodEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/FailingMethodEnumUnboxingTest.java
@@ -85,9 +85,10 @@
     // Check all as expected (else we test nothing)
 
     assertEquals(
-        1, inspector.clazz(InstanceFieldPutObject.class).getDexClass().instanceFields().size());
+        1,
+        inspector.clazz(InstanceFieldPutObject.class).getDexProgramClass().instanceFields().size());
     assertEquals(
-        1, inspector.clazz(StaticFieldPutObject.class).getDexClass().staticFields().size());
+        1, inspector.clazz(StaticFieldPutObject.class).getDexProgramClass().staticFields().size());
 
     assertTrue(inspector.clazz(FailingPhi.class).uniqueMethodWithName("switchOn").isPresent());
   }
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/FieldPutEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/FieldPutEnumUnboxingTest.java
index eedc8f1..8ab4bcf 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/FieldPutEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/FieldPutEnumUnboxingTest.java
@@ -56,9 +56,10 @@
             .inspect(
                 i -> {
                   assertEquals(
-                      1, i.clazz(InstanceFieldPut.class).getDexClass().instanceFields().size());
+                      1,
+                      i.clazz(InstanceFieldPut.class).getDexProgramClass().instanceFields().size());
                   assertEquals(
-                      1, i.clazz(StaticFieldPut.class).getDexClass().staticFields().size());
+                      1, i.clazz(StaticFieldPut.class).getDexProgramClass().staticFields().size());
                 });
 
     for (Class<?> input : INPUTS) {
diff --git a/src/test/java/com/android/tools/r8/graph/GenericSignatureTest.java b/src/test/java/com/android/tools/r8/graph/GenericSignatureTest.java
index 088b075..5001645 100644
--- a/src/test/java/com/android/tools/r8/graph/GenericSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/graph/GenericSignatureTest.java
@@ -101,7 +101,7 @@
     //
 
     // class <T:GenericSignatureTestClassA<T>.Y>CYY<T extends A<T>.Y> extends CY<T>
-    DexClass clazz = cyy.getDexClass();
+    DexClass clazz = cyy.getDexProgramClass();
     assertNotNull(clazz);
     classSignature = Parser.toClassSignature(clazz, appView);
     assertNotNull(classSignature);
@@ -112,14 +112,14 @@
     assertNull(formalTypeParameter.interfaceBounds);
     assertTrue(formalTypeParameter.classBound.isClassTypeSignature());
     ClassTypeSignature classBoundSignature = formalTypeParameter.classBound.asClassTypeSignature();
-    assertEquals(y.getDexClass().type, classBoundSignature.innerTypeSignature.type);
+    assertEquals(y.getDexProgramClass().type, classBoundSignature.innerTypeSignature.type);
     assertEquals(1, classBoundSignature.typeArguments.size());
     assertEquals(
         "T", classBoundSignature.typeArguments.get(0).asTypeVariableSignature().typeVariable);
 
     assertTrue(classSignature.superInterfaceSignatures.isEmpty());
     classTypeSignature = classSignature.superClassSignature;
-    assertEquals(cy.getDexClass().type, classTypeSignature.type);
+    assertEquals(cy.getDexProgramClass().type, classTypeSignature.type);
     typeArguments = classTypeSignature.typeArguments;
     assertEquals(1, typeArguments.size());
     typeArgument = typeArguments.get(0);
@@ -159,13 +159,13 @@
     FormalTypeParameter methodFormalParameter = methodTypeSignature.formalTypeParameters.get(0);
     assertTrue(methodFormalParameter.classBound.isClassTypeSignature());
     assertEquals(
-        y.getDexClass().getType(),
+        y.getDexProgramClass().getType(),
         methodFormalParameter.classBound.asClassTypeSignature().innerTypeSignature.type);
     assertNotNull(methodFormalParameter.interfaceBounds);
     assertEquals(1, methodFormalParameter.interfaceBounds.size());
     FieldTypeSignature interfaceBound = methodFormalParameter.interfaceBounds.get(0);
     assertTrue(interfaceBound.isClassTypeSignature());
-    assertEquals(i.getDexClass().getType(), interfaceBound.asClassTypeSignature().type);
+    assertEquals(i.getDexProgramClass().getType(), interfaceBound.asClassTypeSignature().type);
 
     // return type: A$Y$YY
     returnType = methodTypeSignature.returnType();
@@ -186,7 +186,7 @@
     assertTrue(elementSignature.isFieldTypeSignature());
     assertTrue(elementSignature.asFieldTypeSignature().isClassTypeSignature());
     classTypeSignature = elementSignature.asFieldTypeSignature().asClassTypeSignature();
-    assertEquals(b.getDexClass().type, classTypeSignature.type);
+    assertEquals(b.getDexProgramClass().type, classTypeSignature.type);
 
     // Function<A$Y$ZZ<TT>, A$Y$YY> convertToYY(Supplier<A$Y$ZZ<TT>>
     MethodSubject convertToYY = zz.uniqueMethodWithName("convertToYY");
@@ -246,26 +246,27 @@
   }
 
   private void check_A_Y(ClassSubject a, ClassSubject y, ClassTypeSignature signature) {
-    assertEquals(a.getDexClass().type, signature.type);
+    assertEquals(a.getDexProgramClass().type, signature.type);
     List<FieldTypeSignature> typeArguments = signature.typeArguments;
     assertEquals(1, typeArguments.size());
     FieldTypeSignature typeArgument = typeArguments.get(0);
     assertTrue(typeArgument.isTypeVariableSignature());
     assertEquals("T", typeArgument.asTypeVariableSignature().typeVariable);
-    assertEquals(y.getDexClass().type, signature.innerTypeSignature.type);
+    assertEquals(y.getDexProgramClass().type, signature.innerTypeSignature.type);
   }
 
   private void check_A_Y_YY(
       ClassSubject a, ClassSubject y, ClassSubject yy, ClassTypeSignature signature) {
     check_A_Y(a, y, signature);
-    assertEquals(yy.getDexClass().type, signature.innerTypeSignature.innerTypeSignature.type);
+    assertEquals(
+        yy.getDexProgramClass().type, signature.innerTypeSignature.innerTypeSignature.type);
   }
 
   private void check_A_Y_ZZ(
       ClassSubject a, ClassSubject y, ClassSubject zz, ClassTypeSignature signature) {
     check_A_Y(a, y, signature);
     ClassTypeSignature innerMost = signature.innerTypeSignature.innerTypeSignature;
-    assertEquals(zz.getDexClass().type, innerMost.type);
+    assertEquals(zz.getDexProgramClass().type, innerMost.type);
     List<FieldTypeSignature> typeArguments = innerMost.typeArguments;
     assertEquals(1, typeArguments.size());
     FieldTypeSignature typeArgument = typeArguments.get(0);
diff --git a/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java b/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java
index 23dc574..8c98b46 100644
--- a/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java
+++ b/src/test/java/com/android/tools/r8/internal/proto/Proto2BuilderShrinkingTest.java
@@ -186,7 +186,8 @@
   }
 
   private void verifyMethodToInvokeValuesAreAbsent(CodeInspector outputInspector) {
-    DexType methodToInvokeType = outputInspector.clazz(METHOD_TO_INVOKE_ENUM).getDexClass().type;
+    DexType methodToInvokeType =
+        outputInspector.clazz(METHOD_TO_INVOKE_ENUM).getDexProgramClass().type;
     for (String main : mains) {
       MethodSubject mainMethodSubject = outputInspector.clazz(main).mainMethod();
       assertThat(mainMethodSubject, isPresent());
diff --git a/src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java b/src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java
index 60975b5..3c3aee6 100644
--- a/src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java
+++ b/src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java
@@ -59,11 +59,11 @@
     assertThat(clazz, isPresent());
 
     // There are two direct methods, but only because one is <init>.
-    assertEquals(2, clazz.getDexClass().directMethods().size());
+    assertEquals(2, clazz.getDexProgramClass().directMethods().size());
     assertThat(clazz.method("void", "<init>", ImmutableList.of()), isPresent());
 
     // There is only one virtual method.
-    assertEquals(1, clazz.getDexClass().virtualMethods().size());
+    assertEquals(1, clazz.getDexProgramClass().virtualMethods().size());
   }
 
   @Test
@@ -94,7 +94,7 @@
     assertThat(clazz, isPresent());
 
     // Redundant fields have been removed.
-    assertEquals(1, clazz.getDexClass().instanceFields().size());
-    assertEquals(1, clazz.getDexClass().staticFields().size());
+    assertEquals(1, clazz.getDexProgramClass().instanceFields().size());
+    assertEquals(1, clazz.getDexProgramClass().staticFields().size());
   }
 }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/b111893131/B111893131.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/b111893131/B111893131.java
index cebcd05..ed54024 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/b111893131/B111893131.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/b111893131/B111893131.java
@@ -89,7 +89,7 @@
     CodeInspector inspector = new CodeInspector(app);
     ClassSubject classSubject = inspector.clazz(TestClass.class);
     assertThat(classSubject, isPresent());
-    DexClass clazz = classSubject.getDexClass();
+    DexClass clazz = classSubject.getDexProgramClass();
     clazz.forEachMethod(encodedMethod -> {
       Code code = encodedMethod.getCode();
       assertTrue(code.isDexCode());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
index b5ad06f..fc87e9b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
@@ -346,7 +346,7 @@
   private List<String> instanceMethods(ClassSubject clazz) {
     assertNotNull(clazz);
     assertThat(clazz, isPresent());
-    return Streams.stream(clazz.getDexClass().methods())
+    return Streams.stream(clazz.getDexProgramClass().methods())
         .filter(method -> !method.isStatic())
         .map(method -> method.method.toSourceString())
         .sorted()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceRemovalTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceRemovalTest.java
index d2fa3f8..8b2c2a1 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceRemovalTest.java
@@ -59,11 +59,13 @@
 
     ClassSubject aClassSubject = inspector.clazz(A.class);
     assertThat(aClassSubject, isPresent());
-    assertEquals(2, aClassSubject.getDexClass().interfaces.size());
+    assertEquals(2, aClassSubject.getDexProgramClass().interfaces.size());
     assertEquals(
-        aClassSubject.getDexClass().interfaces.values[0], iClassSubject.getDexClass().type);
+        aClassSubject.getDexProgramClass().interfaces.values[0],
+        iClassSubject.getDexProgramClass().type);
     assertEquals(
-        aClassSubject.getDexClass().interfaces.values[1], jClassSubject.getDexClass().type);
+        aClassSubject.getDexProgramClass().interfaces.values[1],
+        jClassSubject.getDexProgramClass().type);
   }
 
   static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceWithDefaultMethodTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceWithDefaultMethodTest.java
index 90761db..9a342e1 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceWithDefaultMethodTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceWithDefaultMethodTest.java
@@ -60,9 +60,10 @@
 
     // Verify that J is not considered an unused interface, since it provides an implementation of
     // m() that happens to be used.
-    assertEquals(1, aClassSubject.getDexClass().interfaces.size());
+    assertEquals(1, aClassSubject.getDexProgramClass().interfaces.size());
     assertEquals(
-        jClassSubject.getDexClass().type, aClassSubject.getDexClass().interfaces.values[0]);
+        jClassSubject.getDexProgramClass().type,
+        aClassSubject.getDexProgramClass().interfaces.values[0]);
   }
 
   static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
index 5d55ba2..d8419ca 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
@@ -66,10 +66,11 @@
   }
 
   private static Predicate<DexType> createLambdaCheck(CodeInspector inspector) {
-    Set<DexType> lambdaClasses = inspector.allClasses().stream()
-        .filter(clazz -> isLambda(clazz.getDexClass()))
-        .map(clazz -> clazz.getDexClass().type)
-        .collect(Collectors.toSet());
+    Set<DexType> lambdaClasses =
+        inspector.allClasses().stream()
+            .filter(clazz -> isLambda(clazz.getDexProgramClass()))
+            .map(clazz -> clazz.getDexProgramClass().type)
+            .collect(Collectors.toSet());
     return lambdaClasses::contains;
   }
 
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTest.java
index 031163f..6aac431 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTest.java
@@ -182,16 +182,17 @@
     }
 
     private void initGroupsAndLambdas() {
-      codeInspector.forAllClasses(clazz -> {
-        DexClass dexClass = clazz.getDexClass();
-        if (isLambdaOrGroup(dexClass)) {
-          if (isLambdaGroupClass(dexClass)) {
-            groups.add(dexClass);
-          } else {
-            lambdas.add(dexClass);
-          }
-        }
-      });
+      codeInspector.forAllClasses(
+          clazz -> {
+            DexClass dexClass = clazz.getDexProgramClass();
+            if (isLambdaOrGroup(dexClass)) {
+              if (isLambdaGroupClass(dexClass)) {
+                groups.add(dexClass);
+              } else {
+                lambdas.add(dexClass);
+              }
+            }
+          });
     }
 
     void assertLambdaGroups(Group... groups) {
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
index 51854f7..26ea8de 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
@@ -185,8 +185,8 @@
     // Check that typealias API = Itf has been rewritten correctly.
     KmTypeAliasSubject api = kmPackage.kmTypeAliasWithUniqueName("API");
     assertThat(api, isPresent());
-    assertThat(api.expandedType(), isDexClass(itf.getDexClass()));
-    assertThat(api.underlyingType(), isDexClass(itf.getDexClass()));
+    assertThat(api.expandedType(), isDexClass(itf.getDexProgramClass()));
+    assertThat(api.underlyingType(), isDexClass(itf.getDexProgramClass()));
 
     // Check that the type-alias APIs exist and that the expanded type is renamed.
     KmTypeAliasSubject apIs = kmPackage.kmTypeAliasWithUniqueName("APIs");
@@ -194,7 +194,7 @@
     assertEquals(arrayDescriptor, apIs.expandedType().descriptor());
     assertEquals(1, apIs.expandedType().typeArguments().size());
     KmTypeProjectionSubject expandedArgument = apIs.expandedType().typeArguments().get(0);
-    assertThat(expandedArgument.type(), isDexClass(itf.getDexClass()));
+    assertThat(expandedArgument.type(), isDexClass(itf.getDexProgramClass()));
 
     assertEquals(myAliasedArray.descriptor(packageName), apIs.underlyingType().descriptor());
     assertEquals(1, apIs.underlyingType().typeArguments().size());
@@ -219,15 +219,15 @@
     // typealias Arr1D<K> = Arr<K>
     KmTypeAliasSubject arr1D = kmPackage.kmTypeAliasWithUniqueName("Arr1D");
     assertThat(arr1D, isPresent());
-    assertThat(arr1D.expandedType(), isDexClass(arr.getDexClass()));
+    assertThat(arr1D.expandedType(), isDexClass(arr.getDexProgramClass()));
 
     // typealias Arr2D<K> = Arr1D<Arr1D<K>>
     KmTypeAliasSubject arr2D = kmPackage.kmTypeAliasWithUniqueName("Arr2D");
     assertThat(arr2D, isPresent());
-    assertThat(arr2D.expandedType(), isDexClass(arr.getDexClass()));
+    assertThat(arr2D.expandedType(), isDexClass(arr.getDexProgramClass()));
     assertEquals(1, arr2D.expandedType().typeArguments().size());
     KmTypeProjectionSubject arr2DexpandedArg = arr2D.expandedType().typeArguments().get(0);
-    assertThat(arr2DexpandedArg.type(), isDexClass(arr.getDexClass()));
+    assertThat(arr2DexpandedArg.type(), isDexClass(arr.getDexProgramClass()));
 
     assertEquals(arr1D.descriptor(packageName), arr2D.underlyingType().descriptor());
     assertEquals(1, arr2D.underlyingType().typeArguments().size());
@@ -282,6 +282,6 @@
     assertThat(classWithCompanionC, isPresent());
 
     ClassSubject companionClazz = inspector.clazz(packageName + ".ClassWithCompanion$Companion");
-    assertThat(classWithCompanionC.expandedType(), isDexClass(companionClazz.getDexClass()));
+    assertThat(classWithCompanionC.expandedType(), isDexClass(companionClazz.getDexProgramClass()));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
index a158b99..2e3dd21 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
@@ -213,12 +213,13 @@
     KmTypeParameterSubject methodTypeParameter = funGenericsWithUpperBounds.typeParameters().get(0);
     List<KmTypeSubject> upperBounds = methodTypeParameter.upperBounds();
     assertEquals(2, upperBounds.size());
-    assertThat(upperBounds.get(0), isDexClass(someClass.getDexClass()));
+    assertThat(upperBounds.get(0), isDexClass(someClass.getDexProgramClass()));
     assertEquals(KT_COMPARABLE, upperBounds.get(1).descriptor());
     // Check that the upper bound has a type argument.
     assertEquals(1, upperBounds.get(1).typeArguments().size());
     assertThat(
-        upperBounds.get(1).typeArguments().get(0).type(), isDexClass(someClass.getDexClass()));
+        upperBounds.get(1).typeArguments().get(0).type(),
+        isDexClass(someClass.getDexProgramClass()));
   }
 
   private void inspectCoVariant(CodeInspector inspector) {
diff --git a/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java b/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
index 627a059..ad8c526 100644
--- a/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
+++ b/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
@@ -148,7 +148,7 @@
     assertEquals(countInABar, renamedYetFoundIdentifierCount);
 
     renamedYetFoundIdentifierCount =
-        countRenamedClassIdentifier(inspector, aClass.getDexClass().staticFields());
+        countRenamedClassIdentifier(inspector, aClass.getDexProgramClass().staticFields());
     assertEquals(countInAFields, renamedYetFoundIdentifierCount);
   }
 
@@ -208,7 +208,7 @@
     assertEquals(0, renamedYetFoundIdentifierCount);
 
     renamedYetFoundIdentifierCount =
-        countRenamedClassIdentifier(inspector, aClass.getDexClass().staticFields());
+        countRenamedClassIdentifier(inspector, aClass.getDexProgramClass().staticFields());
     assertEquals(0, renamedYetFoundIdentifierCount);
   }
 
@@ -229,7 +229,7 @@
     assertEquals(1, renamedYetFoundIdentifierCount);
 
     renamedYetFoundIdentifierCount =
-        countRenamedClassIdentifier(inspector, aClass.getDexClass().staticFields());
+        countRenamedClassIdentifier(inspector, aClass.getDexProgramClass().staticFields());
     assertEquals(2, renamedYetFoundIdentifierCount);
   }
 
diff --git a/src/test/java/com/android/tools/r8/naming/NonMemberClassTest.java b/src/test/java/com/android/tools/r8/naming/NonMemberClassTest.java
index 04c39b4..f777cda 100644
--- a/src/test/java/com/android/tools/r8/naming/NonMemberClassTest.java
+++ b/src/test/java/com/android/tools/r8/naming/NonMemberClassTest.java
@@ -117,9 +117,12 @@
       }
       assertEquals(
           expectedNumberOfNonMemberInnerClasses,
-          inspector.allClasses().stream().filter(classSubject ->
-              classSubject.getDexClass().isLocalClass()
-                  || classSubject.getDexClass().isAnonymousClass()).count());
+          inspector.allClasses().stream()
+              .filter(
+                  classSubject ->
+                      classSubject.getDexProgramClass().isLocalClass()
+                          || classSubject.getDexProgramClass().isAnonymousClass())
+              .count());
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/naming/RenameSourceFileRetraceTest.java b/src/test/java/com/android/tools/r8/naming/RenameSourceFileRetraceTest.java
index 4de8e4b..6f5aade 100644
--- a/src/test/java/com/android/tools/r8/naming/RenameSourceFileRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/RenameSourceFileRetraceTest.java
@@ -125,7 +125,7 @@
   private void inspectSourceFileForClass(CodeInspector inspector, Class<?> clazz, String expected) {
     ClassSubject classToBeMinifiedSubject = inspector.clazz(clazz);
     assertThat(classToBeMinifiedSubject, isPresent());
-    DexClass dexClass = classToBeMinifiedSubject.getDexClass();
+    DexClass dexClass = classToBeMinifiedSubject.getDexProgramClass();
     String actualString = dexClass.sourceFile == null ? null : dexClass.sourceFile.toString();
     assertEquals(expected, actualString);
   }
diff --git a/src/test/java/com/android/tools/r8/regress/B76025099.java b/src/test/java/com/android/tools/r8/regress/B76025099.java
index 5c5f494..59cfbe8 100644
--- a/src/test/java/com/android/tools/r8/regress/B76025099.java
+++ b/src/test/java/com/android/tools/r8/regress/B76025099.java
@@ -143,7 +143,7 @@
     FieldAccessInstructionSubject fieldAccessInstruction =
         (FieldAccessInstructionSubject) instruction;
     assertEquals("name", fieldAccessInstruction.name());
-    assertTrue(fieldAccessInstruction.holder().is(impl.getDexClass().type.toString()));
+    assertTrue(fieldAccessInstruction.holder().is(impl.getDexProgramClass().type.toString()));
 
     assertNotNull(findInstructionOrNull(iterator, InstructionSubject::isReturnVoid));
 
diff --git a/src/test/java/com/android/tools/r8/regress/Regress37740372.java b/src/test/java/com/android/tools/r8/regress/Regress37740372.java
index 34e4f3e..8047716 100644
--- a/src/test/java/com/android/tools/r8/regress/Regress37740372.java
+++ b/src/test/java/com/android/tools/r8/regress/Regress37740372.java
@@ -126,7 +126,7 @@
 
   private void assertIsJavaLangObjet(ClassSubject clazz) {
     assertTrue(clazz.getOriginalDescriptor().equals("Ljava/lang/Object;"));
-    assertNull(clazz.getDexClass().superType);
+    assertNull(clazz.getDexProgramClass().superType);
   }
 
   private void checkApplicationOnlyHasJavaLangObject(AndroidApp app) throws Throwable {
diff --git a/src/test/java/com/android/tools/r8/relocator/RelocatorTest.java b/src/test/java/com/android/tools/r8/relocator/RelocatorTest.java
index b47b279..9690ea6 100644
--- a/src/test/java/com/android/tools/r8/relocator/RelocatorTest.java
+++ b/src/test/java/com/android/tools/r8/relocator/RelocatorTest.java
@@ -110,7 +110,8 @@
     for (FoundClassSubject clazz : originalInspector.allClasses()) {
       ClassSubject relocatedClass = relocatedInspector.clazz(clazz.getFinalName());
       assertThat(relocatedClass, isPresent());
-      assertEquals(clazz.getDexClass().sourceFile, relocatedClass.getDexClass().sourceFile);
+      assertEquals(
+          clazz.getDexProgramClass().sourceFile, relocatedClass.getDexProgramClass().sourceFile);
       for (FoundMethodSubject originalMethod : clazz.allMethods()) {
         MethodSubject relocatedMethod = relocatedClass.method(originalMethod.asMethodReference());
         assertThat(relocatedMethod, isPresent());
@@ -195,7 +196,7 @@
     int packageNameCounter = 0;
     // Generate a mapping for each package name directly below com.android.tools.r8.
     for (FoundClassSubject clazz : inspector.allClasses()) {
-      String packageName = clazz.getDexClass().getType().getPackageName();
+      String packageName = clazz.getDexProgramClass().getType().getPackageName();
       String prefix = "com.android.tools.r8.";
       if (!packageName.startsWith(prefix)) {
         continue;
@@ -280,8 +281,8 @@
     for (FoundClassSubject originalSubject : originalInspector.allClasses()) {
       ClassSubject relocatedSubject = relocatedInspector.clazz(originalSubject.getFinalName());
       assertThat(relocatedSubject, isPresent());
-      DexClass originalClass = originalSubject.getDexClass();
-      DexClass relocatedClass = relocatedSubject.getDexClass();
+      DexClass originalClass = originalSubject.getDexProgramClass();
+      DexClass relocatedClass = relocatedSubject.getDexProgramClass();
       assertEquals(originalClass.isNestHost(), relocatedClass.isNestHost());
       assertEquals(originalClass.isNestMember(), relocatedClass.isNestMember());
       if (originalClass.isInANest()) {
diff --git a/src/test/java/com/android/tools/r8/shaking/AsterisksTest.java b/src/test/java/com/android/tools/r8/shaking/AsterisksTest.java
index 795ec4d..7261198 100644
--- a/src/test/java/com/android/tools/r8/shaking/AsterisksTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/AsterisksTest.java
@@ -99,7 +99,7 @@
     ClassSubject classSubject = codeInspector.clazz(B111974287.class);
     assertThat(classSubject, isPresent());
     assertThat(classSubject, not(isRenamed()));
-    DexClass clazz = classSubject.getDexClass();
+    DexClass clazz = classSubject.getDexProgramClass();
     assertEquals(3, clazz.virtualMethods().size());
     for (DexEncodedMethod encodedMethod : clazz.virtualMethods()) {
       assertTrue(encodedMethod.method.name.toString().startsWith("foo"));
@@ -140,7 +140,7 @@
     ClassSubject classSubject = codeInspector.clazz(B111974287.class);
     assertThat(classSubject, isPresent());
     assertThat(classSubject, not(isRenamed()));
-    DexClass clazz = classSubject.getDexClass();
+    DexClass clazz = classSubject.getDexProgramClass();
     assertEquals(3, clazz.virtualMethods().size());
     for (DexEncodedMethod encodedMethod : clazz.virtualMethods()) {
       assertTrue(encodedMethod.method.name.toString().startsWith("foo"));
@@ -162,7 +162,7 @@
     ClassSubject classSubject = codeInspector.clazz(B111974287.class);
     assertThat(classSubject, isPresent());
     assertThat(classSubject, not(isRenamed()));
-    DexClass clazz = classSubject.getDexClass();
+    DexClass clazz = classSubject.getDexProgramClass();
     assertEquals(3, clazz.virtualMethods().size());
     for (DexEncodedMethod encodedMethod : clazz.virtualMethods()) {
       assertTrue(encodedMethod.method.name.toString().startsWith("foo"));
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
index 0b246a5..8365345 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
@@ -135,8 +135,10 @@
   }
 
   protected static void checkSameStructure(CodeInspector ref, CodeInspector inspector) {
-    ref.forAllClasses(refClazz -> checkSameStructure(refClazz,
-        inspector.clazz(refClazz.getDexClass().toSourceString())));
+    ref.forAllClasses(
+        refClazz ->
+            checkSameStructure(
+                refClazz, inspector.clazz(refClazz.getDexProgramClass().toSourceString())));
   }
 
   private static void checkSameStructure(ClassSubject refClazz, ClassSubject clazz) {
@@ -149,7 +151,10 @@
     MethodSignature signature = refMethod.getOriginalSignature();
     // Don't check for existence of class initializers, as the code optimization can remove them.
     if (!refMethod.isClassInitializer()) {
-      Assert.assertTrue("Missing Method: " + clazz.getDexClass().toSourceString() + "."
+      Assert.assertTrue(
+          "Missing Method: "
+              + clazz.getDexProgramClass().toSourceString()
+              + "."
               + signature.toString(),
           clazz.method(signature).isPresent());
     }
diff --git a/src/test/java/com/android/tools/r8/shaking/annotations/PrunedOrMergedAnnotationTest.java b/src/test/java/com/android/tools/r8/shaking/annotations/PrunedOrMergedAnnotationTest.java
index 9b11b86..16c7d4f 100644
--- a/src/test/java/com/android/tools/r8/shaking/annotations/PrunedOrMergedAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/annotations/PrunedOrMergedAnnotationTest.java
@@ -59,7 +59,7 @@
         .inspect(
             inspector -> {
               assertThat(inspector.clazz(A.class), not(isPresent()));
-              DexType mergedType = inspector.clazz(B.class).getDexClass().type;
+              DexType mergedType = inspector.clazz(B.class).getDexProgramClass().type;
               ClassSubject classC = inspector.clazz(C.class);
               assertThat(classC, isPresent());
               DexEncodedAnnotation annotation =
diff --git a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java
index 5a978c6..1caf4f2 100644
--- a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java
@@ -69,12 +69,14 @@
 
   private void inspect(CodeInspector inspector) {
     ClassSubject clazz = inspector.clazz(Main.class);
-    assertTrue(clazz.getDexClass().annotations().isEmpty());
+    assertTrue(clazz.getDexProgramClass().annotations().isEmpty());
     MethodSubject main = clazz.uniqueMethodWithName("main");
     assertTrue(main.getMethod().annotations().isEmpty());
     FieldSubject field = clazz.uniqueFieldWithName("field");
     assertTrue(field.getField().annotations().isEmpty());
-    assertTrue(clazz.getDexClass().sourceFile == null || clazz.getDexClass().sourceFile.size == 0);
+    assertTrue(
+        clazz.getDexProgramClass().sourceFile == null
+            || clazz.getDexProgramClass().sourceFile.size == 0);
     assertNull(main.getLineNumberTable());
     assertTrue(main.getLocalVariableTable().isEmpty());
   }
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
index 49af47a..2b5cd16 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
@@ -55,7 +55,7 @@
       ImmutableList.of("pqr", "vw$", "abc", "def", "stu", "ghi", "jkl", "ea", "xyz_", "mno");
 
   private static void checkClassAndMemberInDictionary(ClassSubject clazz) {
-    String name = clazz.getDexClass().type.getName();
+    String name = clazz.getDexProgramClass().type.getName();
     if (!names.contains(name) && !name.equals("Shaking")) {
       throw new AssertionError();
     }
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java
index 52a756b..198b253 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java
@@ -70,25 +70,25 @@
   private void annotationRemovalHasNoInnerClassAnnotations(CodeInspector inspector) {
     ClassSubject outer = inspector.clazz("annotationremoval.OuterClass");
     Assert.assertTrue(outer.isPresent());
-    Assert.assertTrue(outer.getDexClass().getInnerClasses().isEmpty());
+    Assert.assertTrue(outer.getDexProgramClass().getInnerClasses().isEmpty());
     ClassSubject inner = inspector.clazz("annotationremoval.OuterClass$InnerClass");
     Assert.assertTrue(inner.isPresent());
-    Assert.assertNull(inner.getDexClass().getEnclosingMethod());
-    Assert.assertTrue(inner.getDexClass().getInnerClasses().isEmpty());
+    Assert.assertNull(inner.getDexProgramClass().getEnclosingMethod());
+    Assert.assertTrue(inner.getDexProgramClass().getInnerClasses().isEmpty());
     ClassSubject anonymous = inspector.clazz("annotationremoval.OuterClass$1");
     Assert.assertTrue(anonymous.isPresent());
-    Assert.assertNull(anonymous.getDexClass().getEnclosingMethod());
-    Assert.assertTrue(anonymous.getDexClass().getInnerClasses().isEmpty());
+    Assert.assertNull(anonymous.getDexProgramClass().getEnclosingMethod());
+    Assert.assertTrue(anonymous.getDexProgramClass().getInnerClasses().isEmpty());
     ClassSubject local = inspector.clazz("annotationremoval.OuterClass$1LocalMagic");
     Assert.assertTrue(local.isPresent());
-    Assert.assertNull(local.getDexClass().getEnclosingMethod());
-    Assert.assertTrue(local.getDexClass().getInnerClasses().isEmpty());
+    Assert.assertNull(local.getDexProgramClass().getEnclosingMethod());
+    Assert.assertTrue(local.getDexProgramClass().getInnerClasses().isEmpty());
   }
 
   private void annotationRemovalHasAllInnerClassAnnotations(CodeInspector inspector) {
     ClassSubject outer = inspector.clazz("annotationremoval.OuterClass");
     Assert.assertTrue(outer.isPresent());
-    Assert.assertFalse(outer.getDexClass().getInnerClasses().isEmpty());
+    Assert.assertFalse(outer.getDexProgramClass().getInnerClasses().isEmpty());
     ClassSubject inner = inspector.clazz("annotationremoval.OuterClass$InnerClass");
     Assert.assertTrue(inner.isPresent());
     Assert.assertTrue(inner.isMemberClass());
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
index ee8629f..91cd90c 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
@@ -119,8 +119,7 @@
 
     // The test contains only a member class so the enclosing-method attribute will be null.
     assertEquals(
-        forceProguardCompatibility,
-        !clazz.getDexClass().getInnerClasses().isEmpty());
+        forceProguardCompatibility, !clazz.getDexProgramClass().getInnerClasses().isEmpty());
     assertEquals(forceProguardCompatibility || keepAnnotations,
         clazz.annotation(annotationClass.getCanonicalName()).isPresent());
   }
@@ -447,9 +446,9 @@
     ClassSubject clazz = inspector.clazz(TestKeepAttributes.class);
     assertThat(clazz, isPresent());
     if (innerClasses || enclosingMethod) {
-      assertFalse(clazz.getDexClass().getInnerClasses().isEmpty());
+      assertFalse(clazz.getDexProgramClass().getInnerClasses().isEmpty());
     } else {
-      assertTrue(clazz.getDexClass().getInnerClasses().isEmpty());
+      assertTrue(clazz.getDexProgramClass().getInnerClasses().isEmpty());
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/ConsequentRootSetWithSatisfiedDependentItemsTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/ConsequentRootSetWithSatisfiedDependentItemsTest.java
index f65d00b..040b2d4 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/ConsequentRootSetWithSatisfiedDependentItemsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/ConsequentRootSetWithSatisfiedDependentItemsTest.java
@@ -50,7 +50,7 @@
   private void inspect(CodeInspector inspector) {
     ClassSubject aClassSubject = inspector.clazz(A.class);
     assertThat(aClassSubject, isPresent());
-    assertFalse(aClassSubject.getDexClass().isAbstract());
+    assertFalse(aClassSubject.getDexProgramClass().isAbstract());
   }
 
   static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ExtendsMergedTypeDirectlyTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ExtendsMergedTypeDirectlyTest.java
index caa6f59..b6ab4b4 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ExtendsMergedTypeDirectlyTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ExtendsMergedTypeDirectlyTest.java
@@ -51,7 +51,8 @@
       // Check that TestClass no longer extends C.
       ClassSubject testClassSubject = inspector.clazz(TestClass.class);
       assertThat(testClassSubject, isPresent());
-      assertEquals("java.lang.Object", testClassSubject.getDexClass().superType.toSourceString());
+      assertEquals(
+          "java.lang.Object", testClassSubject.getDexProgramClass().superType.toSourceString());
 
       // Check that C is no longer present.
       assertThat(inspector.clazz(C.class), not(isPresent()));
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ExtendsMergedTypeIndirectlyTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ExtendsMergedTypeIndirectlyTest.java
index 7f6a1c6..ad6678c 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ExtendsMergedTypeIndirectlyTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ExtendsMergedTypeIndirectlyTest.java
@@ -47,6 +47,7 @@
 
     // Verify that TestClass still inherits from B.
     ClassSubject testClassSubject = inspector.clazz(TestClass.class);
-    assertEquals(B.class.getTypeName(), testClassSubject.getDexClass().superType.toSourceString());
+    assertEquals(
+        B.class.getTypeName(), testClassSubject.getDexProgramClass().superType.toSourceString());
   }
 }
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ImplementsMergedTypeDirectlyTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ImplementsMergedTypeDirectlyTest.java
index ec06ebc..5c23b99 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ImplementsMergedTypeDirectlyTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ImplementsMergedTypeDirectlyTest.java
@@ -62,7 +62,7 @@
       // Check that TestClass no longer implements K.
       ClassSubject testClassSubject = inspector.clazz(TestClass.class);
       assertThat(testClassSubject, isPresent());
-      assertTrue(testClassSubject.getDexClass().interfaces.isEmpty());
+      assertTrue(testClassSubject.getDexProgramClass().interfaces.isEmpty());
 
       // Check that K is no longer present.
       assertThat(inspector.clazz(K.class), not(isPresent()));
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ImplementsMergedTypeIndirectlyTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ImplementsMergedTypeIndirectlyTest.java
index 2b76994..2f59834 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ImplementsMergedTypeIndirectlyTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/ImplementsMergedTypeIndirectlyTest.java
@@ -63,6 +63,7 @@
 
     // Verify that TestClass still implements J.
     ClassSubject testClassSubject = inspector.clazz(TestClass.class);
-    assertEquals(J.class.getTypeName(), testClassSubject.getDexClass().interfaces.toSourceString());
+    assertEquals(
+        J.class.getTypeName(), testClassSubject.getDexProgramClass().interfaces.toSourceString());
   }
 }
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
index fd4a6a7..7ea419c 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
@@ -102,7 +102,8 @@
       if (enableVerticalClassMerging) {
         // Verify that SuperTestClass has been merged into TestClass.
         assertThat(inspector.clazz(SuperTestClass.class), not(isPresent()));
-        assertEquals("java.lang.Object", testClassSubject.getDexClass().superType.toSourceString());
+        assertEquals(
+            "java.lang.Object", testClassSubject.getDexProgramClass().superType.toSourceString());
 
         // Verify that TestClass.field has been removed.
         assertEquals(1, testClassSubject.allFields().size());
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
index 99897fc..3961905 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
@@ -104,7 +104,8 @@
       if (enableVerticalClassMerging) {
         // Verify that SuperTestClass has been merged into TestClass.
         assertThat(inspector.clazz(SuperTestClass.class), not(isPresent()));
-        assertEquals("java.lang.Object", testClassSubject.getDexClass().superType.toSourceString());
+        assertEquals(
+            "java.lang.Object", testClassSubject.getDexProgramClass().superType.toSourceString());
 
         // Verify that TestClass.method has been removed.
         List<FoundMethodSubject> methods =
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java
index 47f1c08..9173e66 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java
@@ -120,7 +120,8 @@
       if (enableVerticalClassMerging) {
         // Verify that SuperTestClass has been merged into TestClass.
         assertThat(inspector.clazz(SuperTestClass.class), not(isPresent()));
-        assertEquals("java.lang.Object", testClassSubject.getDexClass().superType.toSourceString());
+        assertEquals(
+            "java.lang.Object", testClassSubject.getDexProgramClass().superType.toSourceString());
 
         // Verify that TestClass.method has been removed.
         List<FoundMethodSubject> methods =
diff --git a/src/test/java/com/android/tools/r8/smali/OutlineTest.java b/src/test/java/com/android/tools/r8/smali/OutlineTest.java
index e736ea7..09c1356 100644
--- a/src/test/java/com/android/tools/r8/smali/OutlineTest.java
+++ b/src/test/java/com/android/tools/r8/smali/OutlineTest.java
@@ -865,13 +865,13 @@
     CodeInspector inspector = new CodeInspector(processedApplication);
     ClassSubject clazz = inspector.clazz(OutlineOptions.CLASS_NAME);
     assertTrue(clazz.isPresent());
-    assertEquals(3, clazz.getDexClass().directMethods().size());
+    assertEquals(3, clazz.getDexProgramClass().directMethods().size());
     // Collect the return types of the putlines for the body of method1 and method2.
     List<DexType> r = new ArrayList<>();
-    for (int i = 0; i < clazz.getDexClass().directMethods().size(); i++) {
-      if (clazz.getDexClass().directMethods().get(i).getCode().asDexCode().instructions[0]
+    for (int i = 0; i < clazz.getDexProgramClass().directMethods().size(); i++) {
+      if (clazz.getDexProgramClass().directMethods().get(i).getCode().asDexCode().instructions[0]
           instanceof InvokeVirtual) {
-        r.add(clazz.getDexClass().directMethods().get(i).method.proto.returnType);
+        r.add(clazz.getDexProgramClass().directMethods().get(i).method.proto.returnType);
       }
     }
     assert r.size() == 2;
diff --git a/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java b/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
index 6aad725..36c7766 100644
--- a/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
+++ b/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
@@ -112,7 +112,7 @@
     CodeInspector inspector = new CodeInspector(application);
     ClassSubject clazz = inspector.clazz(className);
     assertTrue(clazz.isPresent());
-    return clazz.getDexClass();
+    return clazz.getDexProgramClass();
   }
 
   protected DexClass getClass(DexApplication application, MethodSignature signature) {
@@ -124,7 +124,7 @@
       CodeInspector inspector = new CodeInspector(appPath);
       ClassSubject clazz = inspector.clazz(className);
       assertTrue(clazz.isPresent());
-      return clazz.getDexClass();
+      return clazz.getDexProgramClass();
     } catch (IOException | ExecutionException e) {
       throw new RuntimeException(e);
     }
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
index 8786f30..92e0e10 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
@@ -5,7 +5,7 @@
 package com.android.tools.r8.utils.codeinspector;
 
 import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.DexClass;
+import com.android.tools.r8.graph.DexProgramClass;
 import java.util.List;
 import java.util.function.Consumer;
 import kotlinx.metadata.jvm.KotlinClassMetadata;
@@ -73,7 +73,7 @@
   }
 
   @Override
-  public DexClass getDexClass() {
+  public DexProgramClass getDexProgramClass() {
     return null;
   }
 
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
index c8c6142..a234c36 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.utils.codeinspector;
 
-import com.android.tools.r8.graph.DexClass;
+import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.references.TypeReference;
@@ -156,7 +156,7 @@
     return dump.toString();
   }
 
-  public abstract DexClass getDexClass();
+  public abstract DexProgramClass getDexProgramClass();
 
   public abstract AnnotationSubject annotation(String name);
 
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
index fc5c38f..00d00ca 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.naming.ClassNamingForNameMapper;
@@ -221,8 +222,9 @@
   }
 
   @Override
-  public DexClass getDexClass() {
-    return dexClass;
+  public DexProgramClass getDexProgramClass() {
+    assert dexClass.isProgramClass();
+    return dexClass.asProgramClass();
   }
 
   public ClassSubject getSuperClass() {
@@ -334,7 +336,7 @@
   }
 
   public TypeSubject asTypeSubject() {
-    return new TypeSubject(codeInspector, getDexClass().type);
+    return new TypeSubject(codeInspector, getDexProgramClass().type);
   }
 
   @Override
@@ -348,7 +350,7 @@
             codeInspector.getFactory().kotlin, annotationSubject.getAnnotation());
     assertTrue(metadata instanceof KotlinClassMetadata.Class);
     KotlinClassMetadata.Class kClass = (KotlinClassMetadata.Class) metadata;
-    return new FoundKmClassSubject(codeInspector, getDexClass(), kClass.toKmClass());
+    return new FoundKmClassSubject(codeInspector, getDexProgramClass(), kClass.toKmClass());
   }
 
   @Override
@@ -364,11 +366,11 @@
         || metadata instanceof KotlinClassMetadata.MultiFileClassPart);
     if (metadata instanceof KotlinClassMetadata.FileFacade) {
       KotlinClassMetadata.FileFacade kFile = (KotlinClassMetadata.FileFacade) metadata;
-      return new FoundKmPackageSubject(codeInspector, getDexClass(), kFile.toKmPackage());
+      return new FoundKmPackageSubject(codeInspector, getDexProgramClass(), kFile.toKmPackage());
     } else {
       KotlinClassMetadata.MultiFileClassPart kPart =
           (KotlinClassMetadata.MultiFileClassPart) metadata;
-      return new FoundKmPackageSubject(codeInspector, getDexClass(), kPart.toKmPackage());
+      return new FoundKmPackageSubject(codeInspector, getDexProgramClass(), kPart.toKmPackage());
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
index ae59c47..357c777 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
@@ -41,7 +41,7 @@
   }
 
   public boolean is(ClassSubject type) {
-    return dexType == type.getDexClass().type;
+    return dexType == type.getDexProgramClass().type;
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java b/src/test/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java
index 28075e6..4d4c84b 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java
@@ -147,7 +147,7 @@
   private void computeStats() {
     for (FoundClassSubject classSubject : inspector.allClasses()) {
       DexType originalType = classSubject.getOriginalDexType(dexItemFactory);
-      if (classSubject.getDexClass().isEnum()) {
+      if (classSubject.getDexProgramClass().isEnum()) {
         enumStats.enums.add(originalType);
       }