Improve is-present-check using api database

Fixes: b/177637521
Change-Id: Iad8b907364ec19d8c6ee81dca2dd1a745ce311e7
diff --git a/src/main/java/com/android/tools/r8/graph/DexClass.java b/src/main/java/com/android/tools/r8/graph/DexClass.java
index 265fc65..3069a60 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClass.java
@@ -18,6 +18,7 @@
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.Reference;
+import com.android.tools.r8.utils.AndroidApiLevelUtils;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.IterableUtils;
 import com.android.tools.r8.utils.OptionalBool;
@@ -856,8 +857,8 @@
   public boolean isResolvable(AppView<?> appView) {
     if (isResolvable.isUnknown()) {
       boolean resolvable;
-      if (!isProgramClass()) {
-        resolvable = appView.dexItemFactory().libraryTypesAssumedToBePresent.contains(type);
+      if (isLibraryClass()) {
+        resolvable = AndroidApiLevelUtils.isApiSafeForReference(asLibraryClass(), appView);
       } else {
         resolvable = true;
         for (DexType supertype : allImmediateSupertypes()) {
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApiLevelUtils.java b/src/main/java/com/android/tools/r8/utils/AndroidApiLevelUtils.java
index 189d9f9..da8353b 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApiLevelUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApiLevelUtils.java
@@ -106,7 +106,7 @@
     return apiLevelOfOriginal.max(apiLevel).isLessThanOrEqualTo(options.getMinApiLevel()).isTrue();
   }
 
-  private static boolean isApiSafeForReference(LibraryDefinition definition, AppView<?> appView) {
+  public static boolean isApiSafeForReference(LibraryDefinition definition, AppView<?> appView) {
     return isApiSafeForReference(definition, appView.apiLevelCompute(), appView.options());
   }