From dd46f7149389808f62573cef4ad21c4fc3ca4099 Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Mon, 10 Feb 2020 13:37:10 +0000 Subject: [PATCH] Support java_sdk_library as member of sdk Bug: 153443117 Test: m nothing Change-Id: I9d8089b2555038e3f10ad5939a6a7b01839c67ea --- java/sdk_library.go | 90 ++++++++++++++++++++++++++++++++++ sdk/java_sdk_test.go | 112 +++++++++++++++++++++++++++++++++++++++++++ sdk/testing.go | 1 + 3 files changed, 203 insertions(+) diff --git a/java/sdk_library.go b/java/sdk_library.go index 19697c17f..ce3ddcd49 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -171,6 +171,14 @@ func init() { sort.Strings(*javaSdkLibraries) ctx.Strict("JAVA_SDK_LIBRARIES", strings.Join(*javaSdkLibraries, " ")) }) + + // Register sdk member types. + android.RegisterSdkMemberType(&sdkLibrarySdkMemberType{ + android.SdkMemberTypeBase{ + PropertyName: "java_sdk_libs", + SupportsSdk: true, + }, + }) } func RegisterSdkLibraryBuildComponents(ctx android.RegistrationContext) { @@ -830,6 +838,8 @@ type sdkLibraryImport struct { android.ModuleBase android.DefaultableModuleBase prebuilt android.Prebuilt + android.ApexModuleBase + android.SdkBase properties sdkLibraryImportProperties @@ -888,6 +898,8 @@ func sdkLibraryImportFactory() android.Module { module.AddProperties(&module.properties, allScopeProperties) android.InitPrebuiltModule(module, &[]string{""}) + android.InitApexModule(module) + android.InitSdkAwareModule(module) InitJavaModule(module, android.HostAndDeviceSupported) android.AddLoadHook(module, func(mctx android.LoadHookContext) { module.createInternalModules(mctx) }) @@ -1127,3 +1139,81 @@ func (module *sdkLibraryXml) AndroidMkEntries() []android.AndroidMkEntries { }, }} } + +type sdkLibrarySdkMemberType struct { + android.SdkMemberTypeBase +} + +func (s *sdkLibrarySdkMemberType) AddDependencies(mctx android.BottomUpMutatorContext, dependencyTag blueprint.DependencyTag, names []string) { + mctx.AddVariationDependencies(nil, dependencyTag, names...) +} + +func (s *sdkLibrarySdkMemberType) IsInstance(module android.Module) bool { + _, ok := module.(*SdkLibrary) + return ok +} + +func (s *sdkLibrarySdkMemberType) AddPrebuiltModule(ctx android.SdkMemberContext, member android.SdkMember) android.BpModule { + return ctx.SnapshotBuilder().AddPrebuiltModule(member, "java_sdk_library_import") +} + +func (s *sdkLibrarySdkMemberType) CreateVariantPropertiesStruct() android.SdkMemberProperties { + return &sdkLibrarySdkMemberProperties{} +} + +type sdkLibrarySdkMemberProperties struct { + android.SdkMemberPropertiesBase + + // Scope to per scope properties. + Scopes map[*apiScope]scopeProperties + + // Additional libraries that the exported stubs libraries depend upon. + Libs []string +} + +type scopeProperties struct { + Jars android.Paths + SdkVersion string +} + +func (s *sdkLibrarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMemberContext, variant android.Module) { + sdk := variant.(*SdkLibrary) + + s.Scopes = make(map[*apiScope]scopeProperties) + for _, apiScope := range allApiScopes { + paths := sdk.getScopePaths(apiScope) + jars := paths.stubsImplPath + if len(jars) > 0 { + properties := scopeProperties{} + properties.Jars = jars + properties.SdkVersion = apiScope.sdkVersion + s.Scopes[apiScope] = properties + } + } + + s.Libs = sdk.properties.Libs +} + +func (s *sdkLibrarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) { + for _, apiScope := range allApiScopes { + if properties, ok := s.Scopes[apiScope]; ok { + scopeSet := propertySet.AddPropertySet(apiScope.name) + + var jars []string + for _, p := range properties.Jars { + dest := filepath.Join("sdk_library", s.OsPrefix(), apiScope.name, ctx.Name()+"-stubs.jar") + ctx.SnapshotBuilder().CopyToSnapshot(p, dest) + jars = append(jars, dest) + } + scopeSet.AddProperty("jars", jars) + + if properties.SdkVersion != "" { + scopeSet.AddProperty("sdk_version", properties.SdkVersion) + } + } + } + + if len(s.Libs) > 0 { + propertySet.AddPropertyWithTag("libs", s.Libs, ctx.SnapshotBuilder().SdkMemberReferencePropertyTag(false)) + } +} diff --git a/sdk/java_sdk_test.go b/sdk/java_sdk_test.go index 4a2c05387..bce2ab390 100644 --- a/sdk/java_sdk_test.go +++ b/sdk/java_sdk_test.go @@ -24,7 +24,51 @@ func testSdkWithJava(t *testing.T, bp string) *testSdkResult { fs := map[string][]byte{ "Test.java": nil, "aidl/foo/bar/Test.aidl": nil, + + // For java_sdk_library + "api/current.txt": nil, + "api/removed.txt": nil, + "api/system-current.txt": nil, + "api/system-removed.txt": nil, + "api/test-current.txt": nil, + "api/test-removed.txt": nil, + "build/soong/scripts/gen-java-current-api-files.sh": nil, } + + // for java_sdk_library tests + bp = ` +java_system_modules_import { + name: "core-current-stubs-system-modules", +} +java_system_modules_import { + name: "core-platform-api-stubs-system-modules", +} +java_import { + name: "core.platform.api.stubs", +} +java_sdk_library_import { + name: "android_stubs_current", +} +java_sdk_library_import { + name: "android_system_stubs_current", +} +java_sdk_library_import { + name: "android_test_stubs_current", +} +java_import { + name: "core-lambda-stubs", + sdk_version: "none", +} +java_import { + name: "ext", + sdk_version: "none", +} +java_import { + name: "framework", + sdk_version: "none", +} +` + bp + return testSdkWithFs(t, bp, fs) } @@ -927,3 +971,71 @@ module_exports_snapshot { `), ) } + +func TestSnapshotWithJavaSdkLibrary(t *testing.T) { + result := testSdkWithJava(t, ` + sdk { + name: "mysdk", + java_sdk_libs: ["myjavalib"], + } + + java_sdk_library { + name: "myjavalib", + apex_available: ["//apex_available:anyapex"], + srcs: ["Test.java"], + sdk_version: "current", + } + `) + + result.CheckSnapshot("mysdk", "", + checkAndroidBpContents(` +// This is auto-generated. DO NOT EDIT. + +java_sdk_library_import { + name: "mysdk_myjavalib@current", + sdk_member_name: "myjavalib", + apex_available: ["//apex_available:anyapex"], + public: { + jars: ["sdk_library/public/myjavalib-stubs.jar"], + sdk_version: "current", + }, + system: { + jars: ["sdk_library/system/myjavalib-stubs.jar"], + sdk_version: "system_current", + }, + test: { + jars: ["sdk_library/test/myjavalib-stubs.jar"], + sdk_version: "test_current", + }, +} + +java_sdk_library_import { + name: "myjavalib", + prefer: false, + apex_available: ["//apex_available:anyapex"], + public: { + jars: ["sdk_library/public/myjavalib-stubs.jar"], + sdk_version: "current", + }, + system: { + jars: ["sdk_library/system/myjavalib-stubs.jar"], + sdk_version: "system_current", + }, + test: { + jars: ["sdk_library/test/myjavalib-stubs.jar"], + sdk_version: "test_current", + }, +} + +sdk_snapshot { + name: "mysdk@current", + java_sdk_libs: ["mysdk_myjavalib@current"], +} +`), + checkAllCopyRules(` +.intermediates/myjavalib.stubs/android_common/javac/myjavalib.stubs.jar -> sdk_library/public/myjavalib-stubs.jar +.intermediates/myjavalib.stubs.system/android_common/javac/myjavalib.stubs.system.jar -> sdk_library/system/myjavalib-stubs.jar +.intermediates/myjavalib.stubs.test/android_common/javac/myjavalib.stubs.test.jar -> sdk_library/test/myjavalib-stubs.jar +`), + ) +} diff --git a/sdk/testing.go b/sdk/testing.go index 00245cef4..570ea0fb2 100644 --- a/sdk/testing.go +++ b/sdk/testing.go @@ -90,6 +90,7 @@ func testSdkContext(bp string, fs map[string][]byte) (*android.TestContext, andr // from java package java.RegisterJavaBuildComponents(ctx) java.RegisterAppBuildComponents(ctx) + java.RegisterSdkLibraryBuildComponents(ctx) java.RegisterStubsBuildComponents(ctx) java.RegisterSystemModulesBuildComponents(ctx)