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
Merged-In: I8db00f611ced15f8476ba16f2834a72e8c913596
Change-Id: I8db00f611ced15f8476ba16f2834a72e8c913596
(cherry picked from commit 3d1248ceb6)
This commit is contained in:
Paul Duffin
2020-04-09 00:10:17 +01:00
parent 40cd500f07
commit f488ef2a3c
4 changed files with 61 additions and 9 deletions

View File

@@ -331,10 +331,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
//
@@ -1180,6 +1187,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)

View File

@@ -243,6 +243,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
@@ -329,11 +330,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)
}
@@ -821,6 +823,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 {
@@ -922,6 +927,8 @@ func (module *sdkLibraryImport) createInternalModules(mctx android.LoadHookConte
}
module.createJavaImportForStubs(mctx, apiScope, scopeProperties)
module.createPrebuiltStubsSources(mctx, apiScope, scopeProperties)
}
javaSdkLibraries := javaSdkLibraries(mctx.Config())
@@ -966,6 +973,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 {
@@ -1164,10 +1181,14 @@ 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
StubsSrcJar android.Path
SdkVersion string
}
@@ -1182,6 +1203,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
}
}
@@ -1194,14 +1216,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)
}

View File

@@ -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"),
)
}

View File

@@ -348,14 +348,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)
}
}