Merge changes from topic "expose-system-test"
* changes: Remove legacy properties from java_sdk_library_import java_sdk_library_import - expose system and test stubs
This commit is contained in:
commit
1b57531573
3 changed files with 166 additions and 44 deletions
|
@ -479,7 +479,9 @@ func TestPrebuilts(t *testing.T) {
|
||||||
|
|
||||||
java_sdk_library_import {
|
java_sdk_library_import {
|
||||||
name: "sdklib",
|
name: "sdklib",
|
||||||
jars: ["b.jar"],
|
public: {
|
||||||
|
jars: ["c.jar"],
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
prebuilt_stubs_sources {
|
prebuilt_stubs_sources {
|
||||||
|
@ -531,6 +533,54 @@ func assertDeepEquals(t *testing.T, message string, expected interface{}, actual
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestJavaSdkLibraryImport(t *testing.T) {
|
||||||
|
ctx, _ := testJava(t, `
|
||||||
|
java_library {
|
||||||
|
name: "foo",
|
||||||
|
srcs: ["a.java"],
|
||||||
|
libs: ["sdklib"],
|
||||||
|
sdk_version: "current",
|
||||||
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "foo.system",
|
||||||
|
srcs: ["a.java"],
|
||||||
|
libs: ["sdklib"],
|
||||||
|
sdk_version: "system_current",
|
||||||
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "foo.test",
|
||||||
|
srcs: ["a.java"],
|
||||||
|
libs: ["sdklib"],
|
||||||
|
sdk_version: "test_current",
|
||||||
|
}
|
||||||
|
|
||||||
|
java_sdk_library_import {
|
||||||
|
name: "sdklib",
|
||||||
|
public: {
|
||||||
|
jars: ["a.jar"],
|
||||||
|
},
|
||||||
|
system: {
|
||||||
|
jars: ["b.jar"],
|
||||||
|
},
|
||||||
|
test: {
|
||||||
|
jars: ["c.jar"],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
for _, scope := range []string{"", ".system", ".test"} {
|
||||||
|
fooModule := ctx.ModuleForTests("foo"+scope, "android_common")
|
||||||
|
javac := fooModule.Rule("javac")
|
||||||
|
|
||||||
|
sdklibStubsJar := ctx.ModuleForTests("sdklib.stubs"+scope, "android_common").Rule("combineJar").Output
|
||||||
|
if !strings.Contains(javac.Args["classpath"], sdklibStubsJar.String()) {
|
||||||
|
t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], sdklibStubsJar.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestDefaults(t *testing.T) {
|
func TestDefaults(t *testing.T) {
|
||||||
ctx, _ := testJava(t, `
|
ctx, _ := testJava(t, `
|
||||||
java_defaults {
|
java_defaults {
|
||||||
|
|
|
@ -225,12 +225,30 @@ type scopePaths struct {
|
||||||
apiFilePath android.Path
|
apiFilePath android.Path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Common code between sdk library and sdk library import
|
||||||
|
type commonToSdkLibraryAndImport struct {
|
||||||
|
scopePaths map[*apiScope]*scopePaths
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *commonToSdkLibraryAndImport) getScopePaths(scope *apiScope) *scopePaths {
|
||||||
|
if c.scopePaths == nil {
|
||||||
|
c.scopePaths = make(map[*apiScope]*scopePaths)
|
||||||
|
}
|
||||||
|
paths := c.scopePaths[scope]
|
||||||
|
if paths == nil {
|
||||||
|
paths = &scopePaths{}
|
||||||
|
c.scopePaths[scope] = paths
|
||||||
|
}
|
||||||
|
|
||||||
|
return paths
|
||||||
|
}
|
||||||
|
|
||||||
type SdkLibrary struct {
|
type SdkLibrary struct {
|
||||||
Library
|
Library
|
||||||
|
|
||||||
sdkLibraryProperties sdkLibraryProperties
|
sdkLibraryProperties sdkLibraryProperties
|
||||||
|
|
||||||
scopePaths map[*apiScope]*scopePaths
|
commonToSdkLibraryAndImport
|
||||||
|
|
||||||
permissionsFile android.Path
|
permissionsFile android.Path
|
||||||
}
|
}
|
||||||
|
@ -246,19 +264,6 @@ func (module *SdkLibrary) getActiveApiScopes() apiScopes {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (module *SdkLibrary) getScopePaths(scope *apiScope) *scopePaths {
|
|
||||||
if module.scopePaths == nil {
|
|
||||||
module.scopePaths = make(map[*apiScope]*scopePaths)
|
|
||||||
}
|
|
||||||
paths := module.scopePaths[scope]
|
|
||||||
if paths == nil {
|
|
||||||
paths = &scopePaths{}
|
|
||||||
module.scopePaths[scope] = paths
|
|
||||||
}
|
|
||||||
|
|
||||||
return paths
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *SdkLibrary) DepsMutator(ctx android.BottomUpMutatorContext) {
|
func (module *SdkLibrary) DepsMutator(ctx android.BottomUpMutatorContext) {
|
||||||
useBuiltStubs := !ctx.Config().UnbundledBuildUsePrebuiltSdks()
|
useBuiltStubs := !ctx.Config().UnbundledBuildUsePrebuiltSdks()
|
||||||
for _, apiScope := range module.getActiveApiScopes() {
|
for _, apiScope := range module.getActiveApiScopes() {
|
||||||
|
@ -833,7 +838,8 @@ func SdkLibraryFactory() android.Module {
|
||||||
// SDK library prebuilts
|
// SDK library prebuilts
|
||||||
//
|
//
|
||||||
|
|
||||||
type sdkLibraryImportProperties struct {
|
// Properties associated with each api scope.
|
||||||
|
type sdkLibraryScopeProperties struct {
|
||||||
Jars []string `android:"path"`
|
Jars []string `android:"path"`
|
||||||
|
|
||||||
Sdk_version *string
|
Sdk_version *string
|
||||||
|
@ -842,6 +848,21 @@ type sdkLibraryImportProperties struct {
|
||||||
Libs []string
|
Libs []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type sdkLibraryImportProperties struct {
|
||||||
|
// List of shared java libs, common to all scopes, that this module has
|
||||||
|
// dependencies to
|
||||||
|
Libs []string
|
||||||
|
|
||||||
|
// Properties associated with the public api scope.
|
||||||
|
Public sdkLibraryScopeProperties
|
||||||
|
|
||||||
|
// Properties associated with the system api scope.
|
||||||
|
System sdkLibraryScopeProperties
|
||||||
|
|
||||||
|
// Properties associated with the test api scope.
|
||||||
|
Test sdkLibraryScopeProperties
|
||||||
|
}
|
||||||
|
|
||||||
type sdkLibraryImport struct {
|
type sdkLibraryImport struct {
|
||||||
android.ModuleBase
|
android.ModuleBase
|
||||||
android.DefaultableModuleBase
|
android.DefaultableModuleBase
|
||||||
|
@ -849,7 +870,7 @@ type sdkLibraryImport struct {
|
||||||
|
|
||||||
properties sdkLibraryImportProperties
|
properties sdkLibraryImportProperties
|
||||||
|
|
||||||
stubsPath android.Paths
|
commonToSdkLibraryAndImport
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ SdkLibraryDependency = (*sdkLibraryImport)(nil)
|
var _ SdkLibraryDependency = (*sdkLibraryImport)(nil)
|
||||||
|
@ -860,7 +881,7 @@ func sdkLibraryImportFactory() android.Module {
|
||||||
|
|
||||||
module.AddProperties(&module.properties)
|
module.AddProperties(&module.properties)
|
||||||
|
|
||||||
android.InitPrebuiltModule(module, &module.properties.Jars)
|
android.InitPrebuiltModule(module, &[]string{})
|
||||||
InitJavaModule(module, android.HostAndDeviceSupported)
|
InitJavaModule(module, android.HostAndDeviceSupported)
|
||||||
|
|
||||||
android.AddLoadHook(module, func(mctx android.LoadHookContext) { module.createInternalModules(mctx) })
|
android.AddLoadHook(module, func(mctx android.LoadHookContext) { module.createInternalModules(mctx) })
|
||||||
|
@ -876,38 +897,67 @@ func (module *sdkLibraryImport) Name() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (module *sdkLibraryImport) createInternalModules(mctx android.LoadHookContext) {
|
func (module *sdkLibraryImport) createInternalModules(mctx android.LoadHookContext) {
|
||||||
// Creates a java import for the jar with ".stubs" suffix
|
|
||||||
props := struct {
|
|
||||||
Name *string
|
|
||||||
Soc_specific *bool
|
|
||||||
Device_specific *bool
|
|
||||||
Product_specific *bool
|
|
||||||
System_ext_specific *bool
|
|
||||||
}{}
|
|
||||||
|
|
||||||
props.Name = proptools.StringPtr(module.BaseModuleName() + sdkStubsLibrarySuffix)
|
for apiScope, scopeProperties := range module.scopeProperties() {
|
||||||
|
if len(scopeProperties.Jars) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if module.SocSpecific() {
|
// Creates a java import for the jar with ".stubs" suffix
|
||||||
props.Soc_specific = proptools.BoolPtr(true)
|
props := struct {
|
||||||
} else if module.DeviceSpecific() {
|
Name *string
|
||||||
props.Device_specific = proptools.BoolPtr(true)
|
Soc_specific *bool
|
||||||
} else if module.ProductSpecific() {
|
Device_specific *bool
|
||||||
props.Product_specific = proptools.BoolPtr(true)
|
Product_specific *bool
|
||||||
} else if module.SystemExtSpecific() {
|
System_ext_specific *bool
|
||||||
props.System_ext_specific = proptools.BoolPtr(true)
|
Sdk_version *string
|
||||||
|
Libs []string
|
||||||
|
Jars []string
|
||||||
|
}{}
|
||||||
|
|
||||||
|
props.Name = proptools.StringPtr(apiScope.stubsModuleName(module.BaseModuleName()))
|
||||||
|
props.Sdk_version = scopeProperties.Sdk_version
|
||||||
|
// Prepend any of the libs from the legacy public properties to the libs for each of the
|
||||||
|
// scopes to avoid having to duplicate them in each scope.
|
||||||
|
props.Libs = append(module.properties.Libs, scopeProperties.Libs...)
|
||||||
|
props.Jars = scopeProperties.Jars
|
||||||
|
|
||||||
|
if module.SocSpecific() {
|
||||||
|
props.Soc_specific = proptools.BoolPtr(true)
|
||||||
|
} else if module.DeviceSpecific() {
|
||||||
|
props.Device_specific = proptools.BoolPtr(true)
|
||||||
|
} else if module.ProductSpecific() {
|
||||||
|
props.Product_specific = proptools.BoolPtr(true)
|
||||||
|
} else if module.SystemExtSpecific() {
|
||||||
|
props.System_ext_specific = proptools.BoolPtr(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
mctx.CreateModule(ImportFactory, &props)
|
||||||
}
|
}
|
||||||
|
|
||||||
mctx.CreateModule(ImportFactory, &props, &module.properties)
|
|
||||||
|
|
||||||
javaSdkLibraries := javaSdkLibraries(mctx.Config())
|
javaSdkLibraries := javaSdkLibraries(mctx.Config())
|
||||||
javaSdkLibrariesLock.Lock()
|
javaSdkLibrariesLock.Lock()
|
||||||
defer javaSdkLibrariesLock.Unlock()
|
defer javaSdkLibrariesLock.Unlock()
|
||||||
*javaSdkLibraries = append(*javaSdkLibraries, module.BaseModuleName())
|
*javaSdkLibraries = append(*javaSdkLibraries, module.BaseModuleName())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (module *sdkLibraryImport) scopeProperties() map[*apiScope]*sdkLibraryScopeProperties {
|
||||||
|
p := make(map[*apiScope]*sdkLibraryScopeProperties)
|
||||||
|
p[apiScopePublic] = &module.properties.Public
|
||||||
|
p[apiScopeSystem] = &module.properties.System
|
||||||
|
p[apiScopeTest] = &module.properties.Test
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
func (module *sdkLibraryImport) DepsMutator(ctx android.BottomUpMutatorContext) {
|
func (module *sdkLibraryImport) DepsMutator(ctx android.BottomUpMutatorContext) {
|
||||||
// Add dependencies to the prebuilt stubs library
|
for apiScope, scopeProperties := range module.scopeProperties() {
|
||||||
ctx.AddVariationDependencies(nil, apiScopePublic.stubsTag, module.BaseModuleName()+sdkStubsLibrarySuffix)
|
if len(scopeProperties.Jars) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add dependencies to the prebuilt stubs library
|
||||||
|
ctx.AddVariationDependencies(nil, apiScope.stubsTag, apiScope.stubsModuleName(module.BaseModuleName()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (module *sdkLibraryImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
func (module *sdkLibraryImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
|
@ -915,21 +965,42 @@ func (module *sdkLibraryImport) GenerateAndroidBuildActions(ctx android.ModuleCo
|
||||||
ctx.VisitDirectDeps(func(to android.Module) {
|
ctx.VisitDirectDeps(func(to android.Module) {
|
||||||
tag := ctx.OtherModuleDependencyTag(to)
|
tag := ctx.OtherModuleDependencyTag(to)
|
||||||
|
|
||||||
switch tag {
|
if lib, ok := to.(Dependency); ok {
|
||||||
case apiScopePublic.stubsTag:
|
if scopeTag, ok := tag.(scopeDependencyTag); ok {
|
||||||
module.stubsPath = to.(Dependency).HeaderJars()
|
apiScope := scopeTag.apiScope
|
||||||
|
scopePaths := module.getScopePaths(apiScope)
|
||||||
|
scopePaths.stubsHeaderPath = lib.HeaderJars()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (module *sdkLibraryImport) sdkJars(
|
||||||
|
ctx android.BaseModuleContext,
|
||||||
|
sdkVersion sdkSpec) android.Paths {
|
||||||
|
|
||||||
|
var apiScope *apiScope
|
||||||
|
switch sdkVersion.kind {
|
||||||
|
case sdkSystem:
|
||||||
|
apiScope = apiScopeSystem
|
||||||
|
case sdkTest:
|
||||||
|
apiScope = apiScopeTest
|
||||||
|
default:
|
||||||
|
apiScope = apiScopePublic
|
||||||
|
}
|
||||||
|
|
||||||
|
paths := module.getScopePaths(apiScope)
|
||||||
|
return paths.stubsHeaderPath
|
||||||
|
}
|
||||||
|
|
||||||
// to satisfy SdkLibraryDependency interface
|
// to satisfy SdkLibraryDependency interface
|
||||||
func (module *sdkLibraryImport) SdkHeaderJars(ctx android.BaseModuleContext, sdkVersion sdkSpec) android.Paths {
|
func (module *sdkLibraryImport) SdkHeaderJars(ctx android.BaseModuleContext, sdkVersion sdkSpec) android.Paths {
|
||||||
// This module is just a wrapper for the prebuilt stubs.
|
// This module is just a wrapper for the prebuilt stubs.
|
||||||
return module.stubsPath
|
return module.sdkJars(ctx, sdkVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// to satisfy SdkLibraryDependency interface
|
// to satisfy SdkLibraryDependency interface
|
||||||
func (module *sdkLibraryImport) SdkImplementationJars(ctx android.BaseModuleContext, sdkVersion sdkSpec) android.Paths {
|
func (module *sdkLibraryImport) SdkImplementationJars(ctx android.BaseModuleContext, sdkVersion sdkSpec) android.Paths {
|
||||||
// This module is just a wrapper for the stubs.
|
// This module is just a wrapper for the stubs.
|
||||||
return module.stubsPath
|
return module.sdkJars(ctx, sdkVersion)
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ func TestConfig(buildDir string, env map[string]string, bp string, fs map[string
|
||||||
"b.kt": nil,
|
"b.kt": nil,
|
||||||
"a.jar": nil,
|
"a.jar": nil,
|
||||||
"b.jar": nil,
|
"b.jar": nil,
|
||||||
|
"c.jar": nil,
|
||||||
"APP_NOTICE": nil,
|
"APP_NOTICE": nil,
|
||||||
"GENRULE_NOTICE": nil,
|
"GENRULE_NOTICE": nil,
|
||||||
"LIB_NOTICE": nil,
|
"LIB_NOTICE": nil,
|
||||||
|
|
Loading…
Reference in a new issue