Loading java/sdk_library.go +66 −41 Original line number Original line Diff line number Diff line Loading @@ -60,6 +60,17 @@ type scopeDependencyTag struct { blueprint.BaseDependencyTag blueprint.BaseDependencyTag name string name string apiScope *apiScope apiScope *apiScope // Function for extracting appropriate path information from the dependency. depInfoExtractor func(paths *scopePaths, dep android.Module) error } // Extract tag specific information from the dependency. func (tag scopeDependencyTag) extractDepInfo(ctx android.ModuleContext, dep android.Module, paths *scopePaths) { err := tag.depInfoExtractor(paths, dep) if err != nil { ctx.ModuleErrorf("has an invalid {scopeDependencyTag: %s} dependency on module %s: %s", tag.name, ctx.OtherModuleName(dep), err.Error()) } } } // Provides information about an api scope, e.g. public, system, test. // Provides information about an api scope, e.g. public, system, test. Loading Loading @@ -88,8 +99,8 @@ type apiScope struct { // The tag to use to depend on the stubs library module. // The tag to use to depend on the stubs library module. stubsTag scopeDependencyTag stubsTag scopeDependencyTag // The tag to use to depend on the stubs // The tag to use to depend on the stubs source and API module. apiFileTag scopeDependencyTag stubsSourceAndApiTag scopeDependencyTag // The scope specific prefix to add to the api file base of "current.txt" or "removed.txt". // The scope specific prefix to add to the api file base of "current.txt" or "removed.txt". apiFilePrefix string apiFilePrefix string Loading @@ -112,14 +123,17 @@ type apiScope struct { // Initialize a scope, creating and adding appropriate dependency tags // Initialize a scope, creating and adding appropriate dependency tags func initApiScope(scope *apiScope) *apiScope { func initApiScope(scope *apiScope) *apiScope { scope.fieldName = proptools.FieldNameForProperty(scope.name) name := scope.name scope.fieldName = proptools.FieldNameForProperty(name) scope.stubsTag = scopeDependencyTag{ scope.stubsTag = scopeDependencyTag{ name: scope.name + "-stubs", name: name + "-stubs", apiScope: scope, apiScope: scope, depInfoExtractor: (*scopePaths).extractStubsLibraryInfoFromDependency, } } scope.apiFileTag = scopeDependencyTag{ scope.stubsSourceAndApiTag = scopeDependencyTag{ name: scope.name + "-api", name: name + "-stubs-source-and-api", apiScope: scope, apiScope: scope, depInfoExtractor: (*scopePaths).extractStubsSourceAndApiInfoFromApiStubsProvider, } } return scope return scope } } Loading @@ -128,7 +142,7 @@ func (scope *apiScope) stubsModuleName(baseName string) string { return baseName + sdkStubsLibrarySuffix + scope.moduleSuffix return baseName + sdkStubsLibrarySuffix + scope.moduleSuffix } } func (scope *apiScope) docsModuleName(baseName string) string { func (scope *apiScope) stubsSourceModuleName(baseName string) string { return baseName + sdkStubsSourceSuffix + scope.moduleSuffix return baseName + sdkStubsSourceSuffix + scope.moduleSuffix } } Loading Loading @@ -349,6 +363,27 @@ type scopePaths struct { stubsSrcJar android.Path stubsSrcJar android.Path } } func (paths *scopePaths) extractStubsLibraryInfoFromDependency(dep android.Module) error { if lib, ok := dep.(Dependency); ok { paths.stubsHeaderPath = lib.HeaderJars() paths.stubsImplPath = lib.ImplementationJars() return nil } else { return fmt.Errorf("expected module that implements Dependency, e.g. java_library") } } func (paths *scopePaths) extractStubsSourceAndApiInfoFromApiStubsProvider(dep android.Module) error { if provider, ok := dep.(ApiStubsProvider); ok { paths.currentApiFilePath = provider.ApiFilePath() paths.removedApiFilePath = provider.RemovedApiFilePath() paths.stubsSrcJar = provider.StubsSrcJar() return nil } else { return fmt.Errorf("expected module that implements ApiStubsProvider, e.g. droidstubs") } } // Common code between sdk library and sdk library import // Common code between sdk library and sdk library import type commonToSdkLibraryAndImport struct { type commonToSdkLibraryAndImport struct { scopePaths map[*apiScope]*scopePaths scopePaths map[*apiScope]*scopePaths Loading Loading @@ -447,8 +482,8 @@ func (module *SdkLibrary) DepsMutator(ctx android.BottomUpMutatorContext) { // Add dependencies to the stubs library // Add dependencies to the stubs library ctx.AddVariationDependencies(nil, apiScope.stubsTag, module.stubsName(apiScope)) ctx.AddVariationDependencies(nil, apiScope.stubsTag, module.stubsName(apiScope)) // And the api file // And the stubs source and api files ctx.AddVariationDependencies(nil, apiScope.apiFileTag, module.docsName(apiScope)) ctx.AddVariationDependencies(nil, apiScope.stubsSourceAndApiTag, module.stubsSourceName(apiScope)) } } if !proptools.Bool(module.sdkLibraryProperties.Api_only) { if !proptools.Bool(module.sdkLibraryProperties.Api_only) { Loading @@ -469,27 +504,16 @@ func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) // When this java_sdk_library is depended upon from others via "libs" property, // When this java_sdk_library is depended upon from others via "libs" property, // the recorded paths will be returned depending on the link type of the caller. // the recorded paths will be returned depending on the link type of the caller. ctx.VisitDirectDeps(func(to android.Module) { ctx.VisitDirectDeps(func(to android.Module) { otherName := ctx.OtherModuleName(to) tag := ctx.OtherModuleDependencyTag(to) tag := ctx.OtherModuleDependencyTag(to) if lib, ok := to.(Dependency); ok { // Extract information from any of the scope specific dependencies. if scopeTag, ok := tag.(scopeDependencyTag); ok { apiScope := scopeTag.apiScope scopePaths := module.getScopePaths(apiScope) scopePaths.stubsHeaderPath = lib.HeaderJars() scopePaths.stubsImplPath = lib.ImplementationJars() } } if doc, ok := to.(ApiStubsProvider); ok { if scopeTag, ok := tag.(scopeDependencyTag); ok { if scopeTag, ok := tag.(scopeDependencyTag); ok { apiScope := scopeTag.apiScope apiScope := scopeTag.apiScope scopePaths := module.getScopePaths(apiScope) scopePaths := module.getScopePaths(apiScope) scopePaths.currentApiFilePath = doc.ApiFilePath() scopePaths.removedApiFilePath = doc.RemovedApiFilePath() // Extract information from the dependency. The exact information extracted scopePaths.stubsSrcJar = doc.StubsSrcJar() // is determined by the nature of the dependency which is determined by the tag. } else { scopeTag.extractDepInfo(ctx, to, scopePaths) ctx.ModuleErrorf("depends on module %q of unknown tag %q", otherName, tag) } } } }) }) } } Loading @@ -504,14 +528,15 @@ func (module *SdkLibrary) AndroidMkEntries() []android.AndroidMkEntries { return entriesList return entriesList } } // Module name of the stubs library // Name of the java_library module that compiles the stubs source. func (module *SdkLibrary) stubsName(apiScope *apiScope) string { func (module *SdkLibrary) stubsName(apiScope *apiScope) string { return apiScope.stubsModuleName(module.BaseModuleName()) return apiScope.stubsModuleName(module.BaseModuleName()) } } // Module name of the docs // // Name of the droidstubs module that generates the stubs source and func (module *SdkLibrary) docsName(apiScope *apiScope) string { // generates/checks the API. return apiScope.docsModuleName(module.BaseModuleName()) func (module *SdkLibrary) stubsSourceName(apiScope *apiScope) string { return apiScope.stubsSourceModuleName(module.BaseModuleName()) } } // Module name of the runtime implementation library // Module name of the runtime implementation library Loading Loading @@ -597,7 +622,7 @@ func (module *SdkLibrary) createStubsLibrary(mctx android.DefaultableHookContext props.Visibility = visibility props.Visibility = visibility // sources are generated from the droiddoc // sources are generated from the droiddoc props.Srcs = []string{":" + module.docsName(apiScope)} props.Srcs = []string{":" + module.stubsSourceName(apiScope)} sdkVersion := module.sdkVersionForStubsLibrary(mctx, apiScope) sdkVersion := module.sdkVersionForStubsLibrary(mctx, apiScope) props.Sdk_version = proptools.StringPtr(sdkVersion) props.Sdk_version = proptools.StringPtr(sdkVersion) props.System_modules = module.Library.Module.deviceProperties.System_modules props.System_modules = module.Library.Module.deviceProperties.System_modules Loading Loading @@ -633,8 +658,8 @@ func (module *SdkLibrary) createStubsLibrary(mctx android.DefaultableHookContext } } // Creates a droidstubs module that creates stubs source files from the given full source // Creates a droidstubs module that creates stubs source files from the given full source // files // files and also updates and checks the API specification files. func (module *SdkLibrary) createStubsSources(mctx android.DefaultableHookContext, apiScope *apiScope) { func (module *SdkLibrary) createStubsSourcesAndApi(mctx android.DefaultableHookContext, apiScope *apiScope) { props := struct { props := struct { Name *string Name *string Visibility []string Visibility []string Loading Loading @@ -670,7 +695,7 @@ func (module *SdkLibrary) createStubsSources(mctx android.DefaultableHookContext // * system_modules // * system_modules // * libs (static_libs/libs) // * libs (static_libs/libs) props.Name = proptools.StringPtr(module.docsName(apiScope)) props.Name = proptools.StringPtr(module.stubsSourceName(apiScope)) // If stubs_source_visibility is not set then the created module will use the // If stubs_source_visibility is not set then the created module will use the // visibility of this module. // visibility of this module. Loading Loading @@ -934,7 +959,7 @@ func (module *SdkLibrary) CreateInternalModules(mctx android.DefaultableHookCont for _, scope := range generatedScopes { for _, scope := range generatedScopes { module.createStubsLibrary(mctx, scope) module.createStubsLibrary(mctx, scope) module.createStubsSources(mctx, scope) module.createStubsSourcesAndApi(mctx, scope) } } if !proptools.Bool(module.sdkLibraryProperties.Api_only) { if !proptools.Bool(module.sdkLibraryProperties.Api_only) { Loading Loading @@ -1001,7 +1026,7 @@ type sdkLibraryScopeProperties struct { // List of shared java libs that this module has dependencies to // List of shared java libs that this module has dependencies to Libs []string Libs []string // The stub sources. // The stubs source. Stub_srcs []string `android:"path"` Stub_srcs []string `android:"path"` // The current.txt // The current.txt Loading Loading @@ -1161,7 +1186,7 @@ func (module *sdkLibraryImport) createPrebuiltStubsSources(mctx android.Defaulta Name *string Name *string Srcs []string Srcs []string }{} }{} props.Name = proptools.StringPtr(apiScope.docsModuleName(module.BaseModuleName())) props.Name = proptools.StringPtr(apiScope.stubsSourceModuleName(module.BaseModuleName())) props.Srcs = scopeProperties.Stub_srcs props.Srcs = scopeProperties.Stub_srcs mctx.CreateModule(PrebuiltStubsSourcesFactory, &props) mctx.CreateModule(PrebuiltStubsSourcesFactory, &props) } } Loading Loading
java/sdk_library.go +66 −41 Original line number Original line Diff line number Diff line Loading @@ -60,6 +60,17 @@ type scopeDependencyTag struct { blueprint.BaseDependencyTag blueprint.BaseDependencyTag name string name string apiScope *apiScope apiScope *apiScope // Function for extracting appropriate path information from the dependency. depInfoExtractor func(paths *scopePaths, dep android.Module) error } // Extract tag specific information from the dependency. func (tag scopeDependencyTag) extractDepInfo(ctx android.ModuleContext, dep android.Module, paths *scopePaths) { err := tag.depInfoExtractor(paths, dep) if err != nil { ctx.ModuleErrorf("has an invalid {scopeDependencyTag: %s} dependency on module %s: %s", tag.name, ctx.OtherModuleName(dep), err.Error()) } } } // Provides information about an api scope, e.g. public, system, test. // Provides information about an api scope, e.g. public, system, test. Loading Loading @@ -88,8 +99,8 @@ type apiScope struct { // The tag to use to depend on the stubs library module. // The tag to use to depend on the stubs library module. stubsTag scopeDependencyTag stubsTag scopeDependencyTag // The tag to use to depend on the stubs // The tag to use to depend on the stubs source and API module. apiFileTag scopeDependencyTag stubsSourceAndApiTag scopeDependencyTag // The scope specific prefix to add to the api file base of "current.txt" or "removed.txt". // The scope specific prefix to add to the api file base of "current.txt" or "removed.txt". apiFilePrefix string apiFilePrefix string Loading @@ -112,14 +123,17 @@ type apiScope struct { // Initialize a scope, creating and adding appropriate dependency tags // Initialize a scope, creating and adding appropriate dependency tags func initApiScope(scope *apiScope) *apiScope { func initApiScope(scope *apiScope) *apiScope { scope.fieldName = proptools.FieldNameForProperty(scope.name) name := scope.name scope.fieldName = proptools.FieldNameForProperty(name) scope.stubsTag = scopeDependencyTag{ scope.stubsTag = scopeDependencyTag{ name: scope.name + "-stubs", name: name + "-stubs", apiScope: scope, apiScope: scope, depInfoExtractor: (*scopePaths).extractStubsLibraryInfoFromDependency, } } scope.apiFileTag = scopeDependencyTag{ scope.stubsSourceAndApiTag = scopeDependencyTag{ name: scope.name + "-api", name: name + "-stubs-source-and-api", apiScope: scope, apiScope: scope, depInfoExtractor: (*scopePaths).extractStubsSourceAndApiInfoFromApiStubsProvider, } } return scope return scope } } Loading @@ -128,7 +142,7 @@ func (scope *apiScope) stubsModuleName(baseName string) string { return baseName + sdkStubsLibrarySuffix + scope.moduleSuffix return baseName + sdkStubsLibrarySuffix + scope.moduleSuffix } } func (scope *apiScope) docsModuleName(baseName string) string { func (scope *apiScope) stubsSourceModuleName(baseName string) string { return baseName + sdkStubsSourceSuffix + scope.moduleSuffix return baseName + sdkStubsSourceSuffix + scope.moduleSuffix } } Loading Loading @@ -349,6 +363,27 @@ type scopePaths struct { stubsSrcJar android.Path stubsSrcJar android.Path } } func (paths *scopePaths) extractStubsLibraryInfoFromDependency(dep android.Module) error { if lib, ok := dep.(Dependency); ok { paths.stubsHeaderPath = lib.HeaderJars() paths.stubsImplPath = lib.ImplementationJars() return nil } else { return fmt.Errorf("expected module that implements Dependency, e.g. java_library") } } func (paths *scopePaths) extractStubsSourceAndApiInfoFromApiStubsProvider(dep android.Module) error { if provider, ok := dep.(ApiStubsProvider); ok { paths.currentApiFilePath = provider.ApiFilePath() paths.removedApiFilePath = provider.RemovedApiFilePath() paths.stubsSrcJar = provider.StubsSrcJar() return nil } else { return fmt.Errorf("expected module that implements ApiStubsProvider, e.g. droidstubs") } } // Common code between sdk library and sdk library import // Common code between sdk library and sdk library import type commonToSdkLibraryAndImport struct { type commonToSdkLibraryAndImport struct { scopePaths map[*apiScope]*scopePaths scopePaths map[*apiScope]*scopePaths Loading Loading @@ -447,8 +482,8 @@ func (module *SdkLibrary) DepsMutator(ctx android.BottomUpMutatorContext) { // Add dependencies to the stubs library // Add dependencies to the stubs library ctx.AddVariationDependencies(nil, apiScope.stubsTag, module.stubsName(apiScope)) ctx.AddVariationDependencies(nil, apiScope.stubsTag, module.stubsName(apiScope)) // And the api file // And the stubs source and api files ctx.AddVariationDependencies(nil, apiScope.apiFileTag, module.docsName(apiScope)) ctx.AddVariationDependencies(nil, apiScope.stubsSourceAndApiTag, module.stubsSourceName(apiScope)) } } if !proptools.Bool(module.sdkLibraryProperties.Api_only) { if !proptools.Bool(module.sdkLibraryProperties.Api_only) { Loading @@ -469,27 +504,16 @@ func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) // When this java_sdk_library is depended upon from others via "libs" property, // When this java_sdk_library is depended upon from others via "libs" property, // the recorded paths will be returned depending on the link type of the caller. // the recorded paths will be returned depending on the link type of the caller. ctx.VisitDirectDeps(func(to android.Module) { ctx.VisitDirectDeps(func(to android.Module) { otherName := ctx.OtherModuleName(to) tag := ctx.OtherModuleDependencyTag(to) tag := ctx.OtherModuleDependencyTag(to) if lib, ok := to.(Dependency); ok { // Extract information from any of the scope specific dependencies. if scopeTag, ok := tag.(scopeDependencyTag); ok { apiScope := scopeTag.apiScope scopePaths := module.getScopePaths(apiScope) scopePaths.stubsHeaderPath = lib.HeaderJars() scopePaths.stubsImplPath = lib.ImplementationJars() } } if doc, ok := to.(ApiStubsProvider); ok { if scopeTag, ok := tag.(scopeDependencyTag); ok { if scopeTag, ok := tag.(scopeDependencyTag); ok { apiScope := scopeTag.apiScope apiScope := scopeTag.apiScope scopePaths := module.getScopePaths(apiScope) scopePaths := module.getScopePaths(apiScope) scopePaths.currentApiFilePath = doc.ApiFilePath() scopePaths.removedApiFilePath = doc.RemovedApiFilePath() // Extract information from the dependency. The exact information extracted scopePaths.stubsSrcJar = doc.StubsSrcJar() // is determined by the nature of the dependency which is determined by the tag. } else { scopeTag.extractDepInfo(ctx, to, scopePaths) ctx.ModuleErrorf("depends on module %q of unknown tag %q", otherName, tag) } } } }) }) } } Loading @@ -504,14 +528,15 @@ func (module *SdkLibrary) AndroidMkEntries() []android.AndroidMkEntries { return entriesList return entriesList } } // Module name of the stubs library // Name of the java_library module that compiles the stubs source. func (module *SdkLibrary) stubsName(apiScope *apiScope) string { func (module *SdkLibrary) stubsName(apiScope *apiScope) string { return apiScope.stubsModuleName(module.BaseModuleName()) return apiScope.stubsModuleName(module.BaseModuleName()) } } // Module name of the docs // // Name of the droidstubs module that generates the stubs source and func (module *SdkLibrary) docsName(apiScope *apiScope) string { // generates/checks the API. return apiScope.docsModuleName(module.BaseModuleName()) func (module *SdkLibrary) stubsSourceName(apiScope *apiScope) string { return apiScope.stubsSourceModuleName(module.BaseModuleName()) } } // Module name of the runtime implementation library // Module name of the runtime implementation library Loading Loading @@ -597,7 +622,7 @@ func (module *SdkLibrary) createStubsLibrary(mctx android.DefaultableHookContext props.Visibility = visibility props.Visibility = visibility // sources are generated from the droiddoc // sources are generated from the droiddoc props.Srcs = []string{":" + module.docsName(apiScope)} props.Srcs = []string{":" + module.stubsSourceName(apiScope)} sdkVersion := module.sdkVersionForStubsLibrary(mctx, apiScope) sdkVersion := module.sdkVersionForStubsLibrary(mctx, apiScope) props.Sdk_version = proptools.StringPtr(sdkVersion) props.Sdk_version = proptools.StringPtr(sdkVersion) props.System_modules = module.Library.Module.deviceProperties.System_modules props.System_modules = module.Library.Module.deviceProperties.System_modules Loading Loading @@ -633,8 +658,8 @@ func (module *SdkLibrary) createStubsLibrary(mctx android.DefaultableHookContext } } // Creates a droidstubs module that creates stubs source files from the given full source // Creates a droidstubs module that creates stubs source files from the given full source // files // files and also updates and checks the API specification files. func (module *SdkLibrary) createStubsSources(mctx android.DefaultableHookContext, apiScope *apiScope) { func (module *SdkLibrary) createStubsSourcesAndApi(mctx android.DefaultableHookContext, apiScope *apiScope) { props := struct { props := struct { Name *string Name *string Visibility []string Visibility []string Loading Loading @@ -670,7 +695,7 @@ func (module *SdkLibrary) createStubsSources(mctx android.DefaultableHookContext // * system_modules // * system_modules // * libs (static_libs/libs) // * libs (static_libs/libs) props.Name = proptools.StringPtr(module.docsName(apiScope)) props.Name = proptools.StringPtr(module.stubsSourceName(apiScope)) // If stubs_source_visibility is not set then the created module will use the // If stubs_source_visibility is not set then the created module will use the // visibility of this module. // visibility of this module. Loading Loading @@ -934,7 +959,7 @@ func (module *SdkLibrary) CreateInternalModules(mctx android.DefaultableHookCont for _, scope := range generatedScopes { for _, scope := range generatedScopes { module.createStubsLibrary(mctx, scope) module.createStubsLibrary(mctx, scope) module.createStubsSources(mctx, scope) module.createStubsSourcesAndApi(mctx, scope) } } if !proptools.Bool(module.sdkLibraryProperties.Api_only) { if !proptools.Bool(module.sdkLibraryProperties.Api_only) { Loading Loading @@ -1001,7 +1026,7 @@ type sdkLibraryScopeProperties struct { // List of shared java libs that this module has dependencies to // List of shared java libs that this module has dependencies to Libs []string Libs []string // The stub sources. // The stubs source. Stub_srcs []string `android:"path"` Stub_srcs []string `android:"path"` // The current.txt // The current.txt Loading Loading @@ -1161,7 +1186,7 @@ func (module *sdkLibraryImport) createPrebuiltStubsSources(mctx android.Defaulta Name *string Name *string Srcs []string Srcs []string }{} }{} props.Name = proptools.StringPtr(apiScope.docsModuleName(module.BaseModuleName())) props.Name = proptools.StringPtr(apiScope.stubsSourceModuleName(module.BaseModuleName())) props.Srcs = scopeProperties.Stub_srcs props.Srcs = scopeProperties.Stub_srcs mctx.CreateModule(PrebuiltStubsSourcesFactory, &props) mctx.CreateModule(PrebuiltStubsSourcesFactory, &props) } } Loading