Merge "java_sdk_library_import: Copy all prebuilt properties to child modules" into tm-mainline-prod
This commit is contained in:
commit
46c6139932
3 changed files with 91 additions and 10 deletions
|
@ -56,7 +56,9 @@ func (t prebuiltDependencyTag) ExcludeFromApexContents() {}
|
|||
var _ ExcludeFromVisibilityEnforcementTag = PrebuiltDepTag
|
||||
var _ ExcludeFromApexContentsTag = PrebuiltDepTag
|
||||
|
||||
type PrebuiltProperties struct {
|
||||
// UserSuppliedPrebuiltProperties contains the prebuilt properties that can be specified in an
|
||||
// Android.bp file.
|
||||
type UserSuppliedPrebuiltProperties struct {
|
||||
// When prefer is set to true the prebuilt will be used instead of any source module with
|
||||
// a matching name.
|
||||
Prefer *bool `android:"arch_variant"`
|
||||
|
@ -70,6 +72,16 @@ type PrebuiltProperties struct {
|
|||
// If specified then the prefer property is ignored in favor of the value of the Soong config
|
||||
// variable.
|
||||
Use_source_config_var *ConfigVarProperties
|
||||
}
|
||||
|
||||
// CopyUserSuppliedPropertiesFromPrebuilt copies the user supplied prebuilt properties from the
|
||||
// prebuilt properties.
|
||||
func (u *UserSuppliedPrebuiltProperties) CopyUserSuppliedPropertiesFromPrebuilt(p *Prebuilt) {
|
||||
*u = p.properties.UserSuppliedPrebuiltProperties
|
||||
}
|
||||
|
||||
type PrebuiltProperties struct {
|
||||
UserSuppliedPrebuiltProperties
|
||||
|
||||
SourceExists bool `blueprint:"mutated"`
|
||||
UsePrebuilt bool `blueprint:"mutated"`
|
||||
|
|
|
@ -2235,8 +2235,9 @@ func (module *SdkLibraryImport) createJavaImportForStubs(mctx android.Defaultabl
|
|||
Sdk_version *string
|
||||
Libs []string
|
||||
Jars []string
|
||||
Prefer *bool
|
||||
Compile_dex *bool
|
||||
|
||||
android.UserSuppliedPrebuiltProperties
|
||||
}{}
|
||||
props.Name = proptools.StringPtr(module.stubsLibraryModuleName(apiScope))
|
||||
props.Sdk_version = scopeProperties.Sdk_version
|
||||
|
@ -2246,7 +2247,7 @@ func (module *SdkLibraryImport) createJavaImportForStubs(mctx android.Defaultabl
|
|||
props.Jars = scopeProperties.Jars
|
||||
|
||||
// The imports are preferred if the java_sdk_library_import is preferred.
|
||||
props.Prefer = proptools.BoolPtr(module.prebuilt.Prefer())
|
||||
props.CopyUserSuppliedPropertiesFromPrebuilt(&module.prebuilt)
|
||||
|
||||
// The imports need to be compiled to dex if the java_sdk_library_import requests it.
|
||||
compileDex := module.properties.Compile_dex
|
||||
|
@ -2260,16 +2261,18 @@ func (module *SdkLibraryImport) createJavaImportForStubs(mctx android.Defaultabl
|
|||
|
||||
func (module *SdkLibraryImport) createPrebuiltStubsSources(mctx android.DefaultableHookContext, apiScope *apiScope, scopeProperties *sdkLibraryScopeProperties) {
|
||||
props := struct {
|
||||
Name *string
|
||||
Srcs []string
|
||||
Prefer *bool
|
||||
Name *string
|
||||
Srcs []string
|
||||
|
||||
android.UserSuppliedPrebuiltProperties
|
||||
}{}
|
||||
props.Name = proptools.StringPtr(module.stubsSourceModuleName(apiScope))
|
||||
props.Srcs = scopeProperties.Stub_srcs
|
||||
mctx.CreateModule(PrebuiltStubsSourcesFactory, &props)
|
||||
|
||||
// The stubs source is preferred if the java_sdk_library_import is preferred.
|
||||
props.Prefer = proptools.BoolPtr(module.prebuilt.Prefer())
|
||||
props.CopyUserSuppliedPropertiesFromPrebuilt(&module.prebuilt)
|
||||
|
||||
mctx.CreateModule(PrebuiltStubsSourcesFactory, &props)
|
||||
}
|
||||
|
||||
// Add the dependencies on the child module in the component deps mutator so that it
|
||||
|
|
|
@ -875,11 +875,12 @@ func TestJavaSdkLibraryImport_WithSource(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestJavaSdkLibraryImport_Preferred(t *testing.T) {
|
||||
func testJavaSdkLibraryImport_Preferred(t *testing.T, prefer string, preparer android.FixturePreparer) {
|
||||
result := android.GroupFixturePreparers(
|
||||
prepareForJavaTest,
|
||||
PrepareForTestWithJavaSdkLibraryFiles,
|
||||
FixtureWithLastReleaseApis("sdklib"),
|
||||
preparer,
|
||||
).RunTestWithBp(t, `
|
||||
java_sdk_library {
|
||||
name: "sdklib",
|
||||
|
@ -893,11 +894,37 @@ func TestJavaSdkLibraryImport_Preferred(t *testing.T) {
|
|||
|
||||
java_sdk_library_import {
|
||||
name: "sdklib",
|
||||
prefer: true,
|
||||
`+prefer+`
|
||||
public: {
|
||||
jars: ["a.jar"],
|
||||
stub_srcs: ["a.java"],
|
||||
current_api: "current.txt",
|
||||
removed_api: "removed.txt",
|
||||
annotations: "annotations.zip",
|
||||
},
|
||||
}
|
||||
|
||||
java_library {
|
||||
name: "combined",
|
||||
static_libs: [
|
||||
"sdklib.stubs",
|
||||
],
|
||||
java_resources: [
|
||||
":sdklib.stubs.source",
|
||||
":sdklib{.public.api.txt}",
|
||||
":sdklib{.public.removed-api.txt}",
|
||||
":sdklib{.public.annotations.zip}",
|
||||
],
|
||||
sdk_version: "none",
|
||||
system_modules: "none",
|
||||
}
|
||||
|
||||
java_library {
|
||||
name: "public",
|
||||
srcs: ["a.java"],
|
||||
libs: ["sdklib"],
|
||||
sdk_version: "current",
|
||||
}
|
||||
`)
|
||||
|
||||
CheckModuleDependencies(t, result.TestContext, "sdklib", "android_common", []string{
|
||||
|
@ -913,9 +940,48 @@ func TestJavaSdkLibraryImport_Preferred(t *testing.T) {
|
|||
CheckModuleDependencies(t, result.TestContext, "prebuilt_sdklib", "android_common", []string{
|
||||
`dex2oatd`,
|
||||
`prebuilt_sdklib.stubs`,
|
||||
`prebuilt_sdklib.stubs.source`,
|
||||
`sdklib.impl`,
|
||||
`sdklib.xml`,
|
||||
})
|
||||
|
||||
// Make sure that dependencies on child modules use the prebuilt when preferred.
|
||||
CheckModuleDependencies(t, result.TestContext, "combined", "android_common", []string{
|
||||
// Each use of :sdklib{...} adds a dependency onto prebuilt_sdklib.
|
||||
`prebuilt_sdklib`,
|
||||
`prebuilt_sdklib`,
|
||||
`prebuilt_sdklib`,
|
||||
`prebuilt_sdklib.stubs`,
|
||||
`prebuilt_sdklib.stubs.source`,
|
||||
})
|
||||
|
||||
// Make sure that dependencies on sdklib that resolve to one of the child libraries use the
|
||||
// prebuilt library.
|
||||
public := result.ModuleForTests("public", "android_common")
|
||||
rule := public.Output("javac/public.jar")
|
||||
inputs := rule.Implicits.Strings()
|
||||
expected := "out/soong/.intermediates/prebuilt_sdklib.stubs/android_common/combined/sdklib.stubs.jar"
|
||||
if !android.InList(expected, inputs) {
|
||||
t.Errorf("expected %q to contain %q", inputs, expected)
|
||||
}
|
||||
}
|
||||
|
||||
func TestJavaSdkLibraryImport_Preferred(t *testing.T) {
|
||||
t.Run("prefer", func(t *testing.T) {
|
||||
testJavaSdkLibraryImport_Preferred(t, "prefer: true,", android.NullFixturePreparer)
|
||||
})
|
||||
|
||||
t.Run("use_source_config_var", func(t *testing.T) {
|
||||
testJavaSdkLibraryImport_Preferred(t,
|
||||
"use_source_config_var: {config_namespace: \"acme\", var_name: \"use_source\"},",
|
||||
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
|
||||
variables.VendorVars = map[string]map[string]string{
|
||||
"acme": {
|
||||
"use_source": "false",
|
||||
},
|
||||
}
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
func TestJavaSdkLibraryEnforce(t *testing.T) {
|
||||
|
|
Loading…
Reference in a new issue