Create full API surface java_library in combined_apis

This change renames the full api surface stub jar generating
java_library modules by adding ".from-source" suffix and creating the
modules in combined_apis. Either the ".from-source" module or the
".from-text" module is added as static libs based on the build config.

Bug: 284150060
Bug: 284995489
Bug: 285410821
Test: m && m --build-from-text-stub and verify no ninja path between android_stubs_current and android_stubs_current.from-source
Change-Id: I1419af0cd0ca2199e82e3337717b6391a51267c4
diff --git a/api/StubLibraries.bp b/api/StubLibraries.bp
index 93d20dd..ed5a8f2 100644
--- a/api/StubLibraries.bp
+++ b/api/StubLibraries.bp
@@ -341,7 +341,7 @@
 }
 
 java_library {
-    name: "android_stubs_current",
+    name: "android_stubs_current.from-source",
     static_libs: [
         "all-modules-public-stubs",
         "android-non-updatable.stubs",
@@ -351,7 +351,7 @@
 }
 
 java_library {
-    name: "android_system_stubs_current",
+    name: "android_system_stubs_current.from-source",
     static_libs: [
         "all-modules-system-stubs",
         "android-non-updatable.stubs.system",
@@ -375,7 +375,7 @@
 }
 
 java_library {
-    name: "android_test_stubs_current",
+    name: "android_test_stubs_current.from-source",
     static_libs: [
         // Updatable modules do not have test APIs, but we want to include their SystemApis, like we
         // include the SystemApi of framework-non-updatable-sources.
@@ -395,7 +395,7 @@
 }
 
 java_library {
-    name: "android_module_lib_stubs_current",
+    name: "android_module_lib_stubs_current.from-source",
     defaults: [
         "android.jar_defaults",
         "android_stubs_dists_default",
@@ -411,7 +411,7 @@
 }
 
 java_library {
-    name: "android_system_server_stubs_current",
+    name: "android_system_server_stubs_current.from-source",
     defaults: [
         "android.jar_defaults",
         "android_stubs_dists_default",
@@ -419,7 +419,7 @@
     srcs: [":services-non-updatable-stubs"],
     installable: false,
     static_libs: [
-        "android_module_lib_stubs_current",
+        "android_module_lib_stubs_current.from-source",
     ],
     dist: {
         dir: "apistubs/android/system-server",
diff --git a/api/api.go b/api/api.go
index af817b5..c568a45 100644
--- a/api/api.go
+++ b/api/api.go
@@ -96,6 +96,7 @@
 	Sdk_version *string
 	Static_libs []string
 	Visibility  []string
+	Defaults    []string
 }
 
 type fgProps struct {
@@ -362,6 +363,30 @@
 	}
 }
 
+func createFullApiLibraries(ctx android.LoadHookContext) {
+	javaLibraryNames := []string{
+		"android_stubs_current",
+		"android_system_stubs_current",
+		"android_test_stubs_current",
+		"android_module_lib_stubs_current",
+		"android_system_server_stubs_current",
+	}
+
+	for _, libraryName := range javaLibraryNames {
+		props := libraryProps{}
+		props.Name = proptools.StringPtr(libraryName)
+		staticLib := libraryName + ".from-source"
+		if ctx.Config().BuildFromTextStub() {
+			staticLib = libraryName + ".from-text"
+		}
+		props.Static_libs = []string{staticLib}
+		props.Defaults = []string{"android.jar_defaults"}
+		props.Visibility = []string{"//visibility:public"}
+
+		ctx.CreateModule(java.LibraryFactory, &props)
+	}
+}
+
 func (a *CombinedApis) createInternalModules(ctx android.LoadHookContext) {
 	bootclasspath := a.properties.Bootclasspath
 	system_server_classpath := a.properties.System_server_classpath
@@ -382,6 +407,8 @@
 	createPublicStubsSourceFilegroup(ctx, bootclasspath)
 
 	createApiContributionDefaults(ctx, bootclasspath)
+
+	createFullApiLibraries(ctx)
 }
 
 func combinedApisModuleFactory() android.Module {
diff --git a/api/api_test.go b/api/api_test.go
index 15b695c..1f4c2af 100644
--- a/api/api_test.go
+++ b/api/api_test.go
@@ -19,6 +19,7 @@
 
 	"android/soong/android"
 	"android/soong/bp2build"
+	"android/soong/java"
 )
 
 func runCombinedApisTestCaseWithRegistrationCtxFunc(t *testing.T, tc bp2build.Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) {
@@ -30,7 +31,9 @@
 
 func runCombinedApisTestCase(t *testing.T, tc bp2build.Bp2buildTestCase) {
 	t.Helper()
-	runCombinedApisTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {})
+	runCombinedApisTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {
+		ctx.RegisterModuleType("java_defaults", java.DefaultsFactory)
+	})
 }
 
 func TestCombinedApisGeneral(t *testing.T) {
@@ -42,6 +45,13 @@
     system_server_classpath: ["ssc"],
 }
 `,
+		Filesystem: map[string]string{
+			"a/Android.bp": `
+			java_defaults {
+				name: "android.jar_defaults",
+			}
+			`,
+		},
 		ExpectedBazelTargets: []string{
 			bp2build.MakeBazelTargetNoRestrictions("merged_txts", "foo-current.txt", bp2build.AttrNameToString{
 				"scope": `"public"`,