diff --git a/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java b/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java
index 4864e0b..c6d8571 100644
--- a/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java
+++ b/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java
@@ -226,21 +226,7 @@
       DexLibraryClass libraryClass,
       ThrowExceptionCode throwExceptionCode) {
     DexItemFactory factory = appView.dexItemFactory();
-    if (libraryClass.getType() == factory.objectType
-        || libraryClass.getType().toDescriptorString().startsWith("Ljava/")) {
-      return;
-    }
-    // We cannot reliably create a stub that will have the same throwing
-    // behavior for all VMs. We only create stubs for exceptions to allow them being present in
-    // catch handlers. See b/b/258270051 for more information.
-    if (!isThrowable(libraryClass)
-        || appView.options().apiModelingOptions().stubNonThrowableClasses) {
-      return;
-    }
-    if (appView
-        .options()
-        .machineDesugaredLibrarySpecification
-        .isSupported(libraryClass.getType())) {
+    if (!appView.options().apiModelingOptions().stubbingEnabledFor(appView, libraryClass)) {
       return;
     }
     Set<ProgramDefinition> contexts = referencingContexts.get(libraryClass);
@@ -277,16 +263,4 @@
             },
             ignored -> {});
   }
-
-  private boolean isThrowable(DexLibraryClass libraryClass) {
-    DexClass current = libraryClass;
-    while (current.getSuperType() != null) {
-      DexType superType = current.getSuperType();
-      if (superType == factory.throwableType) {
-        return true;
-      }
-      current = appView.definitionFor(current.getSuperType());
-    }
-    return false;
-  }
 }
diff --git a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
index d838596..411e5ee 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -142,6 +142,7 @@
   public final DexString shortDescriptor = createString("S");
   public final DexString voidDescriptor = createString("V");
   public final DexString descriptorSeparator = createString("/");
+  public final DexString javaDescriptorPrefix = createString("Ljava/");
 
   private final DexString booleanArrayDescriptor = createString("[Z");
   private final DexString byteArrayDescriptor = createString("[B");
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index b726531..c7370be 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -828,7 +828,8 @@
   private final ProtoShrinkingOptions protoShrinking = new ProtoShrinkingOptions();
   private final KotlinOptimizationOptions kotlinOptimizationOptions =
       new KotlinOptimizationOptions();
-  private final ApiModelTestingOptions apiModelTestingOptions = new ApiModelTestingOptions();
+  private final ApiModelTestingOptions apiModelTestingOptions =
+      new ApiModelTestingOptions(dexItemFactory());
   private final DesugarSpecificOptions desugarSpecificOptions = new DesugarSpecificOptions();
   private final MappingComposeOptions mappingComposeOptions = new MappingComposeOptions();
   private final ArtProfileOptions artProfileOptions = new ArtProfileOptions();
@@ -1832,6 +1833,40 @@
     public void disableStubbingOfClasses() {
       enableStubbingOfClasses = false;
     }
+
+    public boolean stubbingEnabledFor(AppView<?> appView, DexLibraryClass libraryClass) {
+      if (libraryClass.getType() == appView.dexItemFactory().objectType
+          || libraryClass
+              .getType()
+              .getDescriptor()
+              .startsWith(appView.dexItemFactory().javaDescriptorPrefix)) {
+        return false;
+      }
+      // Check if desugared library will bridge the type.
+      if (appView
+          .options()
+          .machineDesugaredLibrarySpecification
+          .isSupported(libraryClass.getType())) {
+        return false;
+      }
+      // We cannot reliably create a stub that will have the same throwing behavior for all VMs. We
+      // only create stubs for exceptions to allow them being present in catch handlers. See
+      // b/258270051 for more information. Note that throwables in the java namespace are not
+      // stubbed (bailout above).
+      return isThrowable(appView, libraryClass) || stubNonThrowableClasses;
+    }
+
+    private boolean isThrowable(AppView<?> appView, DexLibraryClass libraryClass) {
+      DexClass current = libraryClass;
+      while (current.getSuperType() != null) {
+        DexType superType = current.getSuperType();
+        if (superType == appView.dexItemFactory().throwableType) {
+          return true;
+        }
+        current = appView.definitionFor(current.getSuperType());
+      }
+      return false;
+    }
   }
 
   public static class ProtoShrinkingOptions {
