From 3d1248ceb6d8c1ce7d2f3f2e62f98700f668e4dc Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Thu, 9 Apr 2020 00:10:17 +0100 Subject: [PATCH] Export stub sources as part of the java_sdk_library Minor refactoring of checkMergeZip(string) -> checkMergeZips(...string) to allow testing of multiple merge zips. Bug: 153443117 Test: m nothing Change-Id: I8db00f611ced15f8476ba16f2834a72e8c913596 --- java/droiddoc.go | 11 +++++++++++ java/sdk_library.go | 38 ++++++++++++++++++++++++++++++++++---- sdk/java_sdk_test.go | 14 ++++++++++++-- sdk/testing.go | 7 ++++--- 4 files changed, 61 insertions(+), 9 deletions(-) diff --git a/java/droiddoc.go b/java/droiddoc.go index b0efaa5bd..6c3c7ec84 100644 --- a/java/droiddoc.go +++ b/java/droiddoc.go @@ -370,10 +370,17 @@ func ignoreMissingModules(ctx android.BottomUpMutatorContext, apiToCheck *ApiToC apiToCheck.Removed_api_file = nil } +// Used by xsd_config type ApiFilePath interface { ApiFilePath() android.Path } +// Provider of information about API stubs, used by java_sdk_library. +type ApiStubsProvider interface { + ApiFilePath + StubsSrcJar() android.Path +} + // // Javadoc // @@ -1259,6 +1266,10 @@ func (d *Droidstubs) ApiFilePath() android.Path { return d.apiFilePath } +func (d *Droidstubs) StubsSrcJar() android.Path { + return d.stubsSrcJar +} + func (d *Droidstubs) DepsMutator(ctx android.BottomUpMutatorContext) { d.Javadoc.addDeps(ctx) diff --git a/java/sdk_library.go b/java/sdk_library.go index f9fd953cc..9b6d57557 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -239,6 +239,7 @@ type scopePaths struct { stubsHeaderPath android.Paths stubsImplPath android.Paths apiFilePath android.Path + stubsSrcJar android.Path } // Common code between sdk library and sdk library import @@ -325,11 +326,12 @@ func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) scopePaths.stubsImplPath = lib.ImplementationJars() } } - if doc, ok := to.(ApiFilePath); ok { + if doc, ok := to.(ApiStubsProvider); ok { if scopeTag, ok := tag.(scopeDependencyTag); ok { apiScope := scopeTag.apiScope scopePaths := module.getScopePaths(apiScope) scopePaths.apiFilePath = doc.ApiFilePath() + scopePaths.stubsSrcJar = doc.StubsSrcJar() } else { ctx.ModuleErrorf("depends on module %q of unknown tag %q", otherName, tag) } @@ -826,6 +828,9 @@ type sdkLibraryScopeProperties struct { // List of shared java libs that this module has dependencies to Libs []string + + // The stub sources. + Stub_srcs []string `android:"path"` } type sdkLibraryImportProperties struct { @@ -927,6 +932,8 @@ func (module *sdkLibraryImport) createInternalModules(mctx android.LoadHookConte } module.createJavaImportForStubs(mctx, apiScope, scopeProperties) + + module.createPrebuiltStubsSources(mctx, apiScope, scopeProperties) } javaSdkLibraries := javaSdkLibraries(mctx.Config()) @@ -971,6 +978,16 @@ func (module *sdkLibraryImport) createJavaImportForStubs(mctx android.LoadHookCo mctx.CreateModule(ImportFactory, &props) } +func (module *sdkLibraryImport) createPrebuiltStubsSources(mctx android.LoadHookContext, apiScope *apiScope, scopeProperties *sdkLibraryScopeProperties) { + props := struct { + Name *string + Srcs []string + }{} + props.Name = proptools.StringPtr(apiScope.docsModuleName(module.BaseModuleName())) + props.Srcs = scopeProperties.Stub_srcs + mctx.CreateModule(PrebuiltStubsSourcesFactory, &props) +} + func (module *sdkLibraryImport) DepsMutator(ctx android.BottomUpMutatorContext) { for apiScope, scopeProperties := range module.scopeProperties { if len(scopeProperties.Jars) == 0 { @@ -1169,11 +1186,15 @@ type sdkLibrarySdkMemberProperties struct { // Additional libraries that the exported stubs libraries depend upon. Libs []string + + // The Java stubs source files. + Stub_srcs []string } type scopeProperties struct { - Jars android.Paths - SdkVersion string + Jars android.Paths + StubsSrcJar android.Path + SdkVersion string } func (s *sdkLibrarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMemberContext, variant android.Module) { @@ -1187,6 +1208,7 @@ func (s *sdkLibrarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMembe properties := scopeProperties{} properties.Jars = jars properties.SdkVersion = apiScope.sdkVersion + properties.StubsSrcJar = paths.stubsSrcJar s.Scopes[apiScope] = properties } } @@ -1199,14 +1221,22 @@ func (s *sdkLibrarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberCo if properties, ok := s.Scopes[apiScope]; ok { scopeSet := propertySet.AddPropertySet(apiScope.name) + scopeDir := filepath.Join("sdk_library", s.OsPrefix(), apiScope.name) + var jars []string for _, p := range properties.Jars { - dest := filepath.Join("sdk_library", s.OsPrefix(), apiScope.name, ctx.Name()+"-stubs.jar") + dest := filepath.Join(scopeDir, ctx.Name()+"-stubs.jar") ctx.SnapshotBuilder().CopyToSnapshot(p, dest) jars = append(jars, dest) } scopeSet.AddProperty("jars", jars) + // Merge the stubs source jar into the snapshot zip so that when it is unpacked + // the source files are also unpacked. + snapshotRelativeDir := filepath.Join(scopeDir, ctx.Name()+"_stub_sources") + ctx.SnapshotBuilder().UnzipToSnapshot(properties.StubsSrcJar, snapshotRelativeDir) + scopeSet.AddProperty("stub_srcs", []string{snapshotRelativeDir}) + if properties.SdkVersion != "" { scopeSet.AddProperty("sdk_version", properties.SdkVersion) } diff --git a/sdk/java_sdk_test.go b/sdk/java_sdk_test.go index bce2ab390..0bac49f78 100644 --- a/sdk/java_sdk_test.go +++ b/sdk/java_sdk_test.go @@ -624,7 +624,7 @@ module_exports_snapshot { `), checkAllCopyRules(""), - checkMergeZip(".intermediates/myexports/common_os/tmp/java/myjavaapistubs_stubs_sources.zip"), + checkMergeZips(".intermediates/myexports/common_os/tmp/java/myjavaapistubs_stubs_sources.zip"), ) } @@ -678,7 +678,7 @@ module_exports_snapshot { } `), checkAllCopyRules(""), - checkMergeZip(".intermediates/myexports/common_os/tmp/java/myjavaapistubs_stubs_sources.zip"), + checkMergeZips(".intermediates/myexports/common_os/tmp/java/myjavaapistubs_stubs_sources.zip"), ) } @@ -997,14 +997,17 @@ java_sdk_library_import { apex_available: ["//apex_available:anyapex"], public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], sdk_version: "current", }, system: { jars: ["sdk_library/system/myjavalib-stubs.jar"], + stub_srcs: ["sdk_library/system/myjavalib_stub_sources"], sdk_version: "system_current", }, test: { jars: ["sdk_library/test/myjavalib-stubs.jar"], + stub_srcs: ["sdk_library/test/myjavalib_stub_sources"], sdk_version: "test_current", }, } @@ -1015,14 +1018,17 @@ java_sdk_library_import { apex_available: ["//apex_available:anyapex"], public: { jars: ["sdk_library/public/myjavalib-stubs.jar"], + stub_srcs: ["sdk_library/public/myjavalib_stub_sources"], sdk_version: "current", }, system: { jars: ["sdk_library/system/myjavalib-stubs.jar"], + stub_srcs: ["sdk_library/system/myjavalib_stub_sources"], sdk_version: "system_current", }, test: { jars: ["sdk_library/test/myjavalib-stubs.jar"], + stub_srcs: ["sdk_library/test/myjavalib_stub_sources"], sdk_version: "test_current", }, } @@ -1037,5 +1043,9 @@ sdk_snapshot { .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 `), + checkMergeZips( + ".intermediates/mysdk/common_os/tmp/sdk_library/public/myjavalib_stub_sources.zip", + ".intermediates/mysdk/common_os/tmp/sdk_library/system/myjavalib_stub_sources.zip", + ".intermediates/mysdk/common_os/tmp/sdk_library/test/myjavalib_stub_sources.zip"), ) } diff --git a/sdk/testing.go b/sdk/testing.go index 570ea0fb2..9e272019e 100644 --- a/sdk/testing.go +++ b/sdk/testing.go @@ -339,14 +339,15 @@ func checkAllOtherCopyRules(expected string) snapshotBuildInfoChecker { } } -// Check that the specified path is in the list of zips to merge with the intermediate zip. -func checkMergeZip(expected string) snapshotBuildInfoChecker { +// Check that the specified paths match the list of zips to merge with the intermediate zip. +func checkMergeZips(expected ...string) snapshotBuildInfoChecker { return func(info *snapshotBuildInfo) { info.r.t.Helper() if info.intermediateZip == "" { info.r.t.Errorf("No intermediate zip file was created") } - ensureListContains(info.r.t, info.mergeZips, expected) + + info.r.AssertDeepEquals("mismatching merge zip files", expected, info.mergeZips) } }