Remove api object database implementation
Bug: 199934316
Change-Id: I526c9b2e8ee0754b1390778088de67568d6e30d4
diff --git a/.gitignore b/.gitignore
index 470dd43..d1bacd1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,8 +41,6 @@
third_party/android_jar/lib.tar.gz
third_party/android_jar/api-versions.tar.gz
third_party/android_jar/api-versions
-third_party/android_jar/api-database.tar.gz
-third_party/android_jar/api-database
third_party/android_sdk
third_party/android_sdk.tar.gz
third_party/bazel
diff --git a/build.gradle b/build.gradle
index 0812f9b..007fe58 100644
--- a/build.gradle
+++ b/build.gradle
@@ -247,7 +247,6 @@
implementation group: 'org.ow2.asm', name: 'asm-tree', version: asmVersion
implementation group: 'org.ow2.asm', name: 'asm-analysis', version: asmVersion
implementation group: 'org.ow2.asm', name: 'asm-util', version: asmVersion
- implementation files('third_party/android_jar/api-database/api-database.jar')
main11Implementation "net.sf.jopt-simple:jopt-simple:$joptSimpleVersion"
main11Implementation "com.google.code.gson:gson:$gsonVersion"
@@ -267,7 +266,6 @@
main11Implementation group: 'org.ow2.asm', name: 'asm-tree', version: asmVersion
main11Implementation group: 'org.ow2.asm', name: 'asm-analysis', version: asmVersion
main11Implementation group: 'org.ow2.asm', name: 'asm-util', version: asmVersion
- main11Implementation files('third_party/android_jar/api-database/api-database.jar')
examplesTestNGRunnerCompile group: 'org.testng', name: 'testng', version: testngVersion
testCompile sourceSets.examples.output
@@ -331,7 +329,6 @@
"android_jar/lib-v31",
"android_jar/lib-v32",
"android_jar/api-versions",
- "android_jar/api-database",
"api-outlining/simple-app-dump",
"binary_compatibility_tests/compiler_api_tests",
"core-lambda-stubs",
diff --git a/src/main/java/com/android/tools/r8/androidapi/AndroidApiLevelObjectDatabaseImpl.java b/src/main/java/com/android/tools/r8/androidapi/AndroidApiLevelObjectDatabaseImpl.java
deleted file mode 100644
index e48b221..0000000
--- a/src/main/java/com/android/tools/r8/androidapi/AndroidApiLevelObjectDatabaseImpl.java
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.androidapi;
-
-import com.android.tools.r8.apimodel.AndroidApiDatabaseBuilder;
-import com.android.tools.r8.graph.DexField;
-import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.graph.DexReference;
-import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.references.ClassReference;
-import com.android.tools.r8.references.FieldReference;
-import com.android.tools.r8.references.MethodReference;
-import com.android.tools.r8.utils.AndroidApiLevel;
-import com.android.tools.r8.utils.Box;
-import com.android.tools.r8.utils.TraversalContinuation;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.function.BiFunction;
-
-public class AndroidApiLevelObjectDatabaseImpl implements AndroidApiLevelDatabase {
-
- private final Map<DexType, AndroidApiClass> predefinedApiTypeLookup;
-
- private final AndroidApiClass SENTINEL =
- new AndroidApiClass(null) {
-
- @Override
- public AndroidApiLevel getApiLevel() {
- return null;
- }
-
- @Override
- public int getMemberCount() {
- return 0;
- }
-
- @Override
- protected TraversalContinuation visitFields(
- BiFunction<FieldReference, AndroidApiLevel, TraversalContinuation> visitor,
- ClassReference holder,
- int minApiClass) {
- return null;
- }
-
- @Override
- protected TraversalContinuation visitMethods(
- BiFunction<MethodReference, AndroidApiLevel, TraversalContinuation> visitor,
- ClassReference holder,
- int minApiClass) {
- return null;
- }
- };
-
- public AndroidApiLevelObjectDatabaseImpl(
- List<AndroidApiForHashingClass> predefinedApiTypeLookupForHashing) {
- Map<DexType, AndroidApiClass> predefinedMap = new HashMap<>();
- for (AndroidApiForHashingClass androidApiClass : predefinedApiTypeLookupForHashing) {
- predefinedMap.put(
- androidApiClass.getType(),
- new AndroidApiClass(androidApiClass.getType().asClassReference()) {
- @Override
- public AndroidApiLevel getApiLevel() {
- return androidApiClass.getApiLevel();
- }
-
- @Override
- public int getMemberCount() {
- return 0;
- }
-
- @Override
- protected TraversalContinuation visitFields(
- BiFunction<FieldReference, AndroidApiLevel, TraversalContinuation> visitor,
- ClassReference holder,
- int minApiClass) {
- Box<TraversalContinuation> continuationBox =
- new Box<>(TraversalContinuation.CONTINUE);
- androidApiClass.visitFieldsWithApiLevels(
- (field, apiLevel) -> {
- if (continuationBox.get().shouldContinue()) {
- continuationBox.set(visitor.apply(field.asFieldReference(), apiLevel));
- }
- });
- return continuationBox.get();
- }
-
- @Override
- protected TraversalContinuation visitMethods(
- BiFunction<MethodReference, AndroidApiLevel, TraversalContinuation> visitor,
- ClassReference holder,
- int minApiClass) {
- Box<TraversalContinuation> continuationBox =
- new Box<>(TraversalContinuation.CONTINUE);
- androidApiClass.visitMethodsWithApiLevels(
- (method, apiLevel) -> {
- if (continuationBox.get().shouldContinue()) {
- continuationBox.set(visitor.apply(method.asMethodReference(), apiLevel));
- }
- });
- return continuationBox.get();
- }
- });
- }
- this.predefinedApiTypeLookup = predefinedMap;
- }
-
- @Override
- public AndroidApiLevel getTypeApiLevel(DexType type) {
- return lookupDefinedApiLevel(type);
- }
-
- @Override
- public AndroidApiLevel getMethodApiLevel(DexMethod method) {
- return lookupDefinedApiLevel(method);
- }
-
- @Override
- public AndroidApiLevel getFieldApiLevel(DexField field) {
- return lookupDefinedApiLevel(field);
- }
-
- private AndroidApiLevel lookupDefinedApiLevel(DexReference reference) {
- AndroidApiClass foundClass =
- predefinedApiTypeLookup.getOrDefault(reference.getContextType(), SENTINEL);
- if (foundClass == null) {
- return AndroidApiLevel.UNKNOWN;
- }
- AndroidApiClass androidApiClass;
- if (foundClass == SENTINEL) {
- androidApiClass =
- AndroidApiDatabaseBuilder.buildClass(reference.getContextType().asClassReference());
- if (androidApiClass == null) {
- predefinedApiTypeLookup.put(reference.getContextType(), null);
- return AndroidApiLevel.UNKNOWN;
- }
- } else {
- androidApiClass = foundClass;
- }
- return reference.apply(
- type -> androidApiClass.getApiLevel(),
- field -> {
- FieldReference fieldReference = field.asFieldReference();
- Box<AndroidApiLevel> apiLevelBox = new Box<>(AndroidApiLevel.UNKNOWN);
- androidApiClass.visitFields(
- (fieldRef, apiLevel) -> {
- if (fieldReference.equals(fieldRef)) {
- apiLevelBox.set(apiLevel);
- return TraversalContinuation.BREAK;
- }
- return TraversalContinuation.CONTINUE;
- });
- return apiLevelBox.get();
- },
- method -> {
- MethodReference methodReference = method.asMethodReference();
- Box<AndroidApiLevel> apiLevelBox = new Box<>(AndroidApiLevel.UNKNOWN);
- androidApiClass.visitMethods(
- (methodRef, apiLevel) -> {
- if (methodReference.equals(methodRef)) {
- apiLevelBox.set(apiLevel);
- return TraversalContinuation.BREAK;
- }
- return TraversalContinuation.CONTINUE;
- });
- return apiLevelBox.get();
- });
- }
-}
diff --git a/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java b/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java
index f4049a0..2eed210 100644
--- a/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java
+++ b/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java
@@ -26,15 +26,9 @@
private AndroidApiReferenceLevelCache(
AppView<?> appView, List<AndroidApiForHashingClass> predefinedApiTypeLookupForHashing) {
this.appView = appView;
- // TODO(b/199934316): When the implementation has been decided on, remove the others.
- if (appView.options().apiModelingOptions().useHashingDatabase) {
- androidApiLevelDatabase =
- new AndroidApiLevelHashingDatabaseImpl(
- appView.dexItemFactory(), predefinedApiTypeLookupForHashing);
- } else {
- androidApiLevelDatabase =
- new AndroidApiLevelObjectDatabaseImpl(predefinedApiTypeLookupForHashing);
- }
+ androidApiLevelDatabase =
+ new AndroidApiLevelHashingDatabaseImpl(
+ appView.dexItemFactory(), predefinedApiTypeLookupForHashing);
desugaredLibraryConfiguration = appView.options().desugaredLibraryConfiguration;
}
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 fca35a8..727f9c9 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1472,7 +1472,6 @@
public boolean enableApiCallerIdentification = true;
public boolean checkAllApiReferencesAreSet = true;
- public boolean useHashingDatabase = true;
public void visitMockedApiLevelsForReferences(
DexItemFactory factory, Consumer<AndroidApiForHashingClass> consumer) {
diff --git a/third_party/android_jar/api-database.tar.gz.sha1 b/third_party/android_jar/api-database.tar.gz.sha1
deleted file mode 100644
index 2bbe555..0000000
--- a/third_party/android_jar/api-database.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-829d7f32a482c16a2008a8878c33c58637c21a56
\ No newline at end of file