Remove Codebase.apiLevel

The api level is only used within the lint database generation. The
primary purpose of this change is to move the two places that do
arithmetic on the api level together, so that it's more obvious where
the values in the lint database come from.

Bug: 265782189
Test: ./gradlew test
Change-Id: I314d53dd9339f626dba8c032b31e153ceac7d924
diff --git a/src/main/java/com/android/tools/metalava/Driver.kt b/src/main/java/com/android/tools/metalava/Driver.kt
index 55803dc..6280d9e 100644
--- a/src/main/java/com/android/tools/metalava/Driver.kt
+++ b/src/main/java/com/android/tools/metalava/Driver.kt
@@ -250,7 +250,6 @@
         } else {
             return
         }
-    codebase.apiLevel = options.currentApiLevel + if (options.isDeveloperPreviewBuild()) 1 else 0
     options.manifest?.let { codebase.manifest = it }
 
     if (options.verbose) {
@@ -265,20 +264,12 @@
     val androidApiLevelXml = options.generateApiLevelXml
     val apiLevelJars = options.apiLevelJars
     if (androidApiLevelXml != null && apiLevelJars != null) {
-        assert(codebase.apiLevel != -1)
-        val suffix = "${codebase.apiLevel}/public/android.jar"
-        val isCurrentApiFinalized = apiLevelJars.any {
-            it.endsWith(suffix)
-        }
+        assert(options.currentApiLevel != -1)
 
         progress("Generating API levels XML descriptor file, ${androidApiLevelXml.name}: ")
         ApiGenerator.generate(
-            apiLevelJars, options.firstApiLevel, options.currentApiLevel, androidApiLevelXml,
-            // codebase represents the files in the Android source tree (as opposed to the snapshots
-            // in prebuilts/sdk): do not include codebase if building api-versions.xml for a
-            // finalized SDK
-            if (isCurrentApiFinalized) null else codebase,
-            options.sdkJarRoot, options.sdkInfoFile
+            apiLevelJars, options.firstApiLevel, options.currentApiLevel, options.isDeveloperPreviewBuild(),
+            androidApiLevelXml, codebase, options.sdkJarRoot, options.sdkInfoFile
         )
     }
 
diff --git a/src/main/java/com/android/tools/metalava/apilevels/ApiGenerator.java b/src/main/java/com/android/tools/metalava/apilevels/ApiGenerator.java
index 15aad28..6797fe3 100644
--- a/src/main/java/com/android/tools/metalava/apilevels/ApiGenerator.java
+++ b/src/main/java/com/android/tools/metalava/apilevels/ApiGenerator.java
@@ -43,23 +43,27 @@
     public static boolean generate(@NotNull File[] apiLevels,
                                    int firstApiLevel,
                                    int currentApiLevel,
+                                   boolean isDeveloperPreviewBuild,
                                    @NotNull File outputFile,
-                                   @Nullable Codebase codebase,
+                                   @NotNull Codebase codebase,
                                    @Nullable File sdkJarRoot,
                                    @Nullable File sdkFilterFile) throws IOException, IllegalArgumentException {
         if ((sdkJarRoot == null) != (sdkFilterFile == null)) {
             throw new IllegalArgumentException("sdkJarRoot and sdkFilterFile must both be null, or non-null");
         }
 
+        int notFinalizedApiLevel = currentApiLevel + 1;
         Api api = readAndroidJars(apiLevels, firstApiLevel);
-        if (codebase != null) {
-            AddApisFromCodebaseKt.addApisFromCodebase(api, codebase.getApiLevel(), codebase);
+        if (isDeveloperPreviewBuild || apiLevels.length - 1 < currentApiLevel) {
+            // Only include codebase if we don't have a prebuilt, finalized jar for it.
+            int apiLevel = isDeveloperPreviewBuild ? notFinalizedApiLevel : currentApiLevel;
+            AddApisFromCodebaseKt.addApisFromCodebase(api, apiLevel, codebase);
         }
         api.backfillHistoricalFixes();
 
         Set<SdkIdentifier> sdkIdentifiers = Collections.emptySet();
         if (sdkJarRoot != null && sdkFilterFile != null) {
-            sdkIdentifiers = processExtensionSdkApis(api, currentApiLevel + 1, sdkJarRoot, sdkFilterFile);
+            sdkIdentifiers = processExtensionSdkApis(api, notFinalizedApiLevel, sdkJarRoot, sdkFilterFile);
         }
         api.inlineFromHiddenSuperClasses();
         api.removeImplicitInterfaces();
diff --git a/src/main/java/com/android/tools/metalava/model/Codebase.kt b/src/main/java/com/android/tools/metalava/model/Codebase.kt
index e8a9a58..2ba461e 100644
--- a/src/main/java/com/android/tools/metalava/model/Codebase.kt
+++ b/src/main/java/com/android/tools/metalava/model/Codebase.kt
@@ -57,9 +57,6 @@
      */
     var location: File
 
-    /** The API level of this codebase, or -1 if not known */
-    var apiLevel: Int
-
     /** The packages in the codebase (may include packages that are not included in the API) */
     fun getPackages(): PackageList
 
@@ -269,7 +266,6 @@
     private var minSdkVersion: MinSdkVersion? = null
     override var original: Codebase? = null
     override var units: List<PsiFile> = emptyList()
-    override var apiLevel: Int = -1
     @Suppress("LeakingThis")
     override val printer = CodePrinter(this)
     @Suppress("LeakingThis")