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