Replace FutureApiLevel with an ApiLevel.

Keeping the int constant around for now as FutureApiLevelInt because
it's still useful in places that haven't adopted ApiLevel yet for
testing if their non-ApiLevel API level is current or not.

Test: treehugger
Bug: http://b/154667674
Change-Id: I47a7012703f41fdeb56f91edf9c83afa93042deb
diff --git a/android/api_levels.go b/android/api_levels.go
index 81f5db0..cba13ee 100644
--- a/android/api_levels.go
+++ b/android/api_levels.go
@@ -51,7 +51,7 @@
 
 func (this ApiLevel) FinalOrFutureInt() int {
 	if this.IsPreview() {
-		return FutureApiLevel
+		return FutureApiLevelInt
 	} else {
 		return this.number
 	}
@@ -127,13 +127,6 @@
 	}
 }
 
-// TODO: Merge with FutureApiLevel
-var CurrentApiLevel = ApiLevel{
-	value:     "current",
-	number:    10000,
-	isPreview: true,
-}
-
 var NoneApiLevel = ApiLevel{
 	value: "(no version)",
 	// Not 0 because we don't want this to compare equal with the first preview.
@@ -188,7 +181,7 @@
 	}
 
 	if raw == "current" {
-		return CurrentApiLevel, nil
+		return FutureApiLevel, nil
 	}
 
 	for _, preview := range ctx.Config().PreviewApiLevels() {
diff --git a/android/config.go b/android/config.go
index 1c06e8c..34f1580 100644
--- a/android/config.go
+++ b/android/config.go
@@ -37,7 +37,13 @@
 var String = proptools.String
 var StringDefault = proptools.StringDefault
 
-const FutureApiLevel = 10000
+const FutureApiLevelInt = 10000
+
+var FutureApiLevel = ApiLevel{
+	value:     "current",
+	number:    FutureApiLevelInt,
+	isPreview: true,
+}
 
 // The configuration file name
 const configFileName = "soong.config"
@@ -672,11 +678,12 @@
 	return append(levels, c.PreviewApiLevels()...)
 }
 
+// TODO: Merge this and DefaultAppTargetSdk to just return an ApiLevel.
 func (c *config) DefaultAppTargetSdkInt() int {
 	if Bool(c.productVariables.Platform_sdk_final) {
 		return c.PlatformSdkVersionInt()
 	} else {
-		return FutureApiLevel
+		return FutureApiLevelInt
 	}
 }
 
diff --git a/apex/apex.go b/apex/apex.go
index d2973c2..e8294a8 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -1955,7 +1955,7 @@
 func (a *apexBundle) minSdkVersion(ctx android.BaseModuleContext) android.ApiLevel {
 	ver := proptools.String(a.properties.Min_sdk_version)
 	if ver == "" {
-		return android.CurrentApiLevel
+		return android.FutureApiLevel
 	}
 	apiLevel, err := android.ApiLevelFromUser(ctx, ver)
 	if err != nil {
@@ -1964,7 +1964,7 @@
 	}
 	if apiLevel.IsPreview() {
 		// All codenames should build against "current".
-		return android.CurrentApiLevel
+		return android.FutureApiLevel
 	}
 	return apiLevel
 }
diff --git a/cc/cc.go b/cc/cc.go
index e0e6a2f..aad1ac9 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -2291,7 +2291,7 @@
 	}
 
 	// For the dependency from platform to apex, use the latest stubs
-	c.apexSdkVersion = android.CurrentApiLevel
+	c.apexSdkVersion = android.FutureApiLevel
 	if !c.IsForPlatform() {
 		c.apexSdkVersion = c.ApexProperties.Info.MinSdkVersion(ctx)
 	}
@@ -2300,7 +2300,7 @@
 		// In hwasan build, we override apexSdkVersion to the FutureApiLevel(10000)
 		// so that even Q(29/Android10) apexes could use the dynamic unwinder by linking the newer stubs(e.g libc(R+)).
 		// (b/144430859)
-		c.apexSdkVersion = android.CurrentApiLevel
+		c.apexSdkVersion = android.FutureApiLevel
 	}
 
 	ctx.VisitDirectDeps(func(dep android.Module) {
diff --git a/cc/compiler.go b/cc/compiler.go
index 18a2f62..bb5c7bf 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -392,7 +392,7 @@
 	if ctx.Os().Class == android.Device {
 		version := ctx.sdkVersion()
 		if version == "" || version == "current" {
-			target += strconv.Itoa(android.FutureApiLevel)
+			target += strconv.Itoa(android.FutureApiLevelInt)
 		} else {
 			target += version
 		}
diff --git a/cc/ndk_library.go b/cc/ndk_library.go
index 4c6d98c..5682d1c 100644
--- a/cc/ndk_library.go
+++ b/cc/ndk_library.go
@@ -118,8 +118,8 @@
 			versionStrs = append(versionStrs, version.String())
 		}
 	}
-	versions = append(versions, android.CurrentApiLevel)
-	versionStrs = append(versionStrs, android.CurrentApiLevel.String())
+	versions = append(versions, android.FutureApiLevel)
+	versionStrs = append(versionStrs, android.FutureApiLevel.String())
 
 	modules := ctx.CreateVariations(versionStrs...)
 	for i, module := range modules {
diff --git a/java/sdk.go b/java/sdk.go
index 5f8cb24..0d7341e 100644
--- a/java/sdk.go
+++ b/java/sdk.go
@@ -107,7 +107,7 @@
 
 const (
 	// special version number for a not-yet-frozen SDK
-	sdkVersionCurrent sdkVersion = sdkVersion(android.FutureApiLevel)
+	sdkVersionCurrent sdkVersion = sdkVersion(android.FutureApiLevelInt)
 	// special version number to be used for SDK specs where version number doesn't
 	// make sense, e.g. "none", "", etc.
 	sdkVersionNone sdkVersion = sdkVersion(0)