Temporarily add support for conditional modules

Some bootclasspath libraries are currently conditionally included
in the SDK. Add support for that in api.go.

Bug: 169103987
Test: mmm frameworks/base/api
Merged-In: I7704a884675eb58c429a59f99a663cf09807ecec
Change-Id: I7704a884675eb58c429a59f99a663cf09807ecec
diff --git a/api/api.go b/api/api.go
index a61d5c2..6cc129a 100644
--- a/api/api.go
+++ b/api/api.go
@@ -15,6 +15,8 @@
 package api
 
 import (
+	"sort"
+
 	"github.com/google/blueprint/proptools"
 
 	"android/soong/android"
@@ -32,6 +34,8 @@
 type CombinedApisProperties struct {
 	// Module libraries in the bootclasspath
 	Bootclasspath []string
+	// Module libraries on the bootclasspath if include_nonpublic_framework_api is true.
+	Conditional_bootclasspath []string
 	// Module libraries in system server
 	System_server_classpath []string
 }
@@ -169,10 +173,10 @@
 	return s2
 }
 
-func createMergedTxts(ctx android.LoadHookContext, props CombinedApisProperties) {
+func createMergedTxts(ctx android.LoadHookContext, bootclasspath, system_server_classpath []string) {
 	var textFiles []MergedTxtDefinition
 	// Two module libraries currently do not support @SystemApi so only have the public scope.
-	bcpWithSystemApi := props.Bootclasspath
+	bcpWithSystemApi := bootclasspath
 	bcpWithSystemApi = remove(bcpWithSystemApi, "conscrypt.module.public.api")
 	bcpWithSystemApi = remove(bcpWithSystemApi, "i18n.module.public.api")
 
@@ -181,7 +185,7 @@
 		textFiles = append(textFiles, MergedTxtDefinition{
 			TxtFilename: f,
 			BaseTxt:     ":non-updatable-" + f,
-			Modules:     props.Bootclasspath,
+			Modules:     bootclasspath,
 			ModuleTag:   "{.public" + tagSuffix[i],
 			Scope:       "public",
 		})
@@ -202,7 +206,7 @@
 		textFiles = append(textFiles, MergedTxtDefinition{
 			TxtFilename: f,
 			BaseTxt:     ":non-updatable-system-server-" + f,
-			Modules:     props.System_server_classpath,
+			Modules:     system_server_classpath,
 			ModuleTag:   "{.system-server" + tagSuffix[i],
 			Scope:       "system-server",
 		})
@@ -213,12 +217,17 @@
 }
 
 func (a *CombinedApis) createInternalModules(ctx android.LoadHookContext) {
-	createMergedTxts(ctx, a.properties)
+	bootclasspath := a.properties.Bootclasspath
+	if ctx.Config().VendorConfig("ANDROID").Bool("include_nonpublic_framework_api") {
+		bootclasspath = append(bootclasspath, a.properties.Conditional_bootclasspath...)
+		sort.Strings(bootclasspath)
+	}
+	createMergedTxts(ctx, bootclasspath, a.properties.System_server_classpath)
 
-	createMergedStubsSrcjar(ctx, a.properties.Bootclasspath)
+	createMergedStubsSrcjar(ctx, bootclasspath)
 
 	// Conscrypt and i18n currently do not enable annotations
-	annotationModules := a.properties.Bootclasspath
+	annotationModules := bootclasspath
 	annotationModules = remove(annotationModules, "conscrypt.module.public.api")
 	annotationModules = remove(annotationModules, "i18n.module.public.api")
 	createMergedAnnotations(ctx, annotationModules)
@@ -230,7 +239,7 @@
 	// 3) It's a compromise. Ideally we wouldn't be filtering out any module APIs, and have
 	//    per-module lint databases that excludes just that module's APIs. Alas, that's more
 	//    difficult to achieve.
-	filteredModules := a.properties.Bootclasspath
+	filteredModules := bootclasspath
 	filteredModules = remove(filteredModules, "art.module.public.api")
 	createFilteredApiVersions(ctx, filteredModules)
 }