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());
}