Create java_defaults in api.go
combined_apis.bootclasspath lists java_sdk_library modules that
contribute to API surfaces. The api_contribution modules generated from
these sdk_library modules (more specifically, from droidstubs module
created from the sdk_library module) are used to generate full api
surface java_api_library modules. Currently, the java_defaults modules
are hardcoded, but this leads to a duplicate source of truth, adding
difficulty in scaling the api domains that contributes to api surfaces.
Generating the java_defaults dynamically in combined_apis instead of
hardcoding resolves this problem, as well as the discrepancy in the list
of api contributions in aosp and internal master.
Test: m android_<API_SURFACE_NAME>_stubs_current.from-text
Bug: 277378670
Change-Id: I987c2c1d89535d2347cf14d084c9c9a47e1db5e0
diff --git a/api/api.go b/api/api.go
index 09c2383..af817b5 100644
--- a/api/api.go
+++ b/api/api.go
@@ -15,7 +15,9 @@
package api
import (
+ "fmt"
"sort"
+ "strings"
"github.com/google/blueprint/proptools"
@@ -102,6 +104,13 @@
Visibility []string
}
+type defaultsProps struct {
+ Name *string
+ Api_surface *string
+ Api_contributions []string
+ Defaults_visibility []string
+}
+
type Bazel_module struct {
Bp2build_available *bool
}
@@ -164,26 +173,26 @@
}
func createMergedAnnotationsFilegroups(ctx android.LoadHookContext, modules, system_server_modules []string) {
- for _, i := range []struct{
+ for _, i := range []struct {
name string
tag string
modules []string
}{
{
- name: "all-modules-public-annotations",
- tag: "{.public.annotations.zip}",
+ name: "all-modules-public-annotations",
+ tag: "{.public.annotations.zip}",
modules: modules,
}, {
- name: "all-modules-system-annotations",
- tag: "{.system.annotations.zip}",
+ name: "all-modules-system-annotations",
+ tag: "{.system.annotations.zip}",
modules: modules,
}, {
- name: "all-modules-module-lib-annotations",
- tag: "{.module-lib.annotations.zip}",
+ name: "all-modules-module-lib-annotations",
+ tag: "{.module-lib.annotations.zip}",
modules: modules,
}, {
- name: "all-modules-system-server-annotations",
- tag: "{.system-server.annotations.zip}",
+ name: "all-modules-system-server-annotations",
+ tag: "{.system-server.annotations.zip}",
modules: system_server_modules,
},
} {
@@ -329,6 +338,30 @@
}
}
+func createApiContributionDefaults(ctx android.LoadHookContext, modules []string) {
+ defaultsSdkKinds := []android.SdkKind{
+ android.SdkPublic, android.SdkSystem, android.SdkModule,
+ }
+ for _, sdkKind := range defaultsSdkKinds {
+ props := defaultsProps{}
+ props.Name = proptools.StringPtr(
+ sdkKind.DefaultJavaLibraryName() + "_contributions")
+ if sdkKind == android.SdkModule {
+ props.Name = proptools.StringPtr(
+ sdkKind.DefaultJavaLibraryName() + "_contributions_full")
+ }
+ props.Api_surface = proptools.StringPtr(sdkKind.String())
+ apiSuffix := ""
+ if sdkKind != android.SdkPublic {
+ apiSuffix = "." + strings.ReplaceAll(sdkKind.String(), "-", "_")
+ }
+ props.Api_contributions = transformArray(
+ modules, "", fmt.Sprintf(".stubs.source%s.api.contribution", apiSuffix))
+ props.Defaults_visibility = []string{"//visibility:public"}
+ ctx.CreateModule(java.DefaultsFactory, &props)
+ }
+}
+
func (a *CombinedApis) createInternalModules(ctx android.LoadHookContext) {
bootclasspath := a.properties.Bootclasspath
system_server_classpath := a.properties.System_server_classpath
@@ -347,6 +380,8 @@
createMergedAnnotationsFilegroups(ctx, bootclasspath, system_server_classpath)
createPublicStubsSourceFilegroup(ctx, bootclasspath)
+
+ createApiContributionDefaults(ctx, bootclasspath)
}
func combinedApisModuleFactory() android.Module {
@@ -374,7 +409,7 @@
"system-server": "-system-server-current.txt",
}
- for scopeName, suffix := range scopeToSuffix{
+ for scopeName, suffix := range scopeToSuffix {
name := a.Name() + suffix
var scope bazel.StringAttribute