Convert OtherModuleProvider to generic providers API

Convert all of the callers of OtherModuleProvider/OtherModuleHasProvider
to use the type-safe android.OtherModuleProvider API.

Bug: 316410648
Test: builds
Change-Id: Id77f514d68761a262d9ea830a601dbed804bbbe5
This commit is contained in:
Colin Cross 2023-12-13 13:47:44 -08:00
parent ff694a8c88
commit 313aa5475f
43 changed files with 128 additions and 168 deletions

View file

@ -134,16 +134,13 @@ func (module *DeclarationsModule) GenerateAndroidBuildActions(ctx android.Module
// Get the values that came from the global RELEASE_ACONFIG_VALUE_SETS flag // Get the values that came from the global RELEASE_ACONFIG_VALUE_SETS flag
valuesFiles := make([]android.Path, 0) valuesFiles := make([]android.Path, 0)
ctx.VisitDirectDeps(func(dep android.Module) { ctx.VisitDirectDeps(func(dep android.Module) {
if !ctx.OtherModuleHasProvider(dep, valueSetProviderKey) { if depData, ok := android.OtherModuleProvider(ctx, dep, valueSetProviderKey); ok {
// Other modules get injected as dependencies too, for example the license modules paths, ok := depData.AvailablePackages[module.properties.Package]
return if ok {
} valuesFiles = append(valuesFiles, paths...)
depData := ctx.OtherModuleProvider(dep, valueSetProviderKey).(valueSetProviderData) for _, path := range paths {
paths, ok := depData.AvailablePackages[module.properties.Package] module.properties.Values = append(module.properties.Values, path.String())
if ok { }
valuesFiles = append(valuesFiles, paths...)
for _, path := range paths {
module.properties.Values = append(module.properties.Values, path.String())
} }
} }
}) })
@ -190,11 +187,11 @@ func CollectDependencyAconfigFiles(ctx android.ModuleContext, mergedAconfigFiles
*mergedAconfigFiles = make(map[string]android.Paths) *mergedAconfigFiles = make(map[string]android.Paths)
} }
ctx.VisitDirectDeps(func(module android.Module) { ctx.VisitDirectDeps(func(module android.Module) {
if dep := ctx.OtherModuleProvider(module, DeclarationsProviderKey).(DeclarationsProviderData); dep.IntermediateCacheOutputPath != nil { if dep, _ := android.OtherModuleProvider(ctx, module, DeclarationsProviderKey); dep.IntermediateCacheOutputPath != nil {
(*mergedAconfigFiles)[dep.Container] = append((*mergedAconfigFiles)[dep.Container], dep.IntermediateCacheOutputPath) (*mergedAconfigFiles)[dep.Container] = append((*mergedAconfigFiles)[dep.Container], dep.IntermediateCacheOutputPath)
return return
} }
if dep := ctx.OtherModuleProvider(module, TransitiveDeclarationsInfoProvider).(TransitiveDeclarationsInfo); len(dep.AconfigFiles) > 0 { if dep, _ := android.OtherModuleProvider(ctx, module, TransitiveDeclarationsInfoProvider); len(dep.AconfigFiles) > 0 {
for container, v := range dep.AconfigFiles { for container, v := range dep.AconfigFiles {
(*mergedAconfigFiles)[container] = append((*mergedAconfigFiles)[container], v...) (*mergedAconfigFiles)[container] = append((*mergedAconfigFiles)[container], v...)
} }

View file

@ -73,15 +73,11 @@ func (module *ValueSetModule) GenerateAndroidBuildActions(ctx android.ModuleCont
// to append values to their aconfig actions. // to append values to their aconfig actions.
packages := make(map[string]android.Paths) packages := make(map[string]android.Paths)
ctx.VisitDirectDeps(func(dep android.Module) { ctx.VisitDirectDeps(func(dep android.Module) {
if !ctx.OtherModuleHasProvider(dep, valuesProviderKey) { if depData, ok := android.OtherModuleProvider(ctx, dep, valuesProviderKey); ok {
// Other modules get injected as dependencies too, for example the license modules srcs := make([]android.Path, len(depData.Values))
return copy(srcs, depData.Values)
packages[depData.Package] = srcs
} }
depData := ctx.OtherModuleProvider(dep, valuesProviderKey).(valuesProviderData)
srcs := make([]android.Path, len(depData.Values))
copy(srcs, depData.Values)
packages[depData.Package] = srcs
}) })
android.SetProvider(ctx, valueSetProviderKey, valueSetProviderData{ android.SetProvider(ctx, valueSetProviderKey, valueSetProviderData{

View file

@ -92,7 +92,7 @@ func (this *CcAconfigLibraryCallbacks) GeneratorSources(ctx cc.ModuleContext) cc
if len(declarationsModules) != 1 { if len(declarationsModules) != 1 {
panic(fmt.Errorf("Exactly one aconfig_declarations property required")) panic(fmt.Errorf("Exactly one aconfig_declarations property required"))
} }
declarations := ctx.OtherModuleProvider(declarationsModules[0], aconfig.DeclarationsProviderKey).(aconfig.DeclarationsProviderData) declarations, _ := android.OtherModuleProvider(ctx, declarationsModules[0], aconfig.DeclarationsProviderKey)
// Figure out the generated file paths. This has to match aconfig's codegen_cpp.rs. // Figure out the generated file paths. This has to match aconfig's codegen_cpp.rs.
this.generatedDir = android.PathForModuleGen(ctx) this.generatedDir = android.PathForModuleGen(ctx)
@ -122,7 +122,7 @@ func (this *CcAconfigLibraryCallbacks) GeneratorBuildActions(ctx cc.ModuleContex
if len(declarationsModules) != 1 { if len(declarationsModules) != 1 {
panic(fmt.Errorf("Exactly one aconfig_declarations property required")) panic(fmt.Errorf("Exactly one aconfig_declarations property required"))
} }
declarations := ctx.OtherModuleProvider(declarationsModules[0], aconfig.DeclarationsProviderKey).(aconfig.DeclarationsProviderData) declarations, _ := android.OtherModuleProvider(ctx, declarationsModules[0], aconfig.DeclarationsProviderKey)
mode := proptools.StringDefault(this.properties.Mode, "production") mode := proptools.StringDefault(this.properties.Mode, "production")
if !isModeSupported(mode) { if !isModeSupported(mode) {

View file

@ -74,7 +74,7 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild
if len(declarationsModules) != 1 { if len(declarationsModules) != 1 {
panic(fmt.Errorf("Exactly one aconfig_declarations property required")) panic(fmt.Errorf("Exactly one aconfig_declarations property required"))
} }
declarations := ctx.OtherModuleProvider(declarationsModules[0], aconfig.DeclarationsProviderKey).(aconfig.DeclarationsProviderData) declarations, _ := android.OtherModuleProvider(ctx, declarationsModules[0], aconfig.DeclarationsProviderKey)
// Generate the action to build the srcjar // Generate the action to build the srcjar
srcJarPath := android.PathForModuleGen(ctx, ctx.ModuleName()+".srcjar") srcJarPath := android.PathForModuleGen(ctx, ctx.ModuleName()+".srcjar")

View file

@ -65,7 +65,7 @@ func (a *aconfigDecorator) GenerateSource(ctx rust.ModuleContext, deps rust.Path
if len(declarationsModules) != 1 { if len(declarationsModules) != 1 {
panic(fmt.Errorf("Exactly one aconfig_declarations property required")) panic(fmt.Errorf("Exactly one aconfig_declarations property required"))
} }
declarations := ctx.OtherModuleProvider(declarationsModules[0], aconfig.DeclarationsProviderKey).(aconfig.DeclarationsProviderData) declarations, _ := android.OtherModuleProvider(ctx, declarationsModules[0], aconfig.DeclarationsProviderKey)
mode := proptools.StringDefault(a.Properties.Mode, "production") mode := proptools.StringDefault(a.Properties.Mode, "production")
if !isModeSupported(mode) { if !isModeSupported(mode) {

View file

@ -99,8 +99,7 @@ func (lib *AidlLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
includeDirsDepSetBuilder.Direct(includeDir) includeDirsDepSetBuilder.Direct(includeDir)
for _, dep := range ctx.GetDirectDepsWithTag(aidlLibraryTag) { for _, dep := range ctx.GetDirectDepsWithTag(aidlLibraryTag) {
if ctx.OtherModuleHasProvider(dep, AidlLibraryProvider) { if info, ok := android.OtherModuleProvider(ctx, dep, AidlLibraryProvider); ok {
info := ctx.OtherModuleProvider(dep, AidlLibraryProvider).(AidlLibraryInfo)
includeDirsDepSetBuilder.Transitive(&info.IncludeDirs) includeDirsDepSetBuilder.Transitive(&info.IncludeDirs)
hdrsDepSetBuilder.Transitive(&info.Hdrs) hdrsDepSetBuilder.Transitive(&info.Hdrs)
} }

View file

@ -624,8 +624,7 @@ func (a *AndroidMkEntries) fillInEntries(ctx fillInEntriesContext, mod blueprint
} }
} }
if ctx.ModuleHasProvider(mod, LicenseMetadataProvider) { if licenseMetadata, ok := SingletonModuleProvider(ctx, mod, LicenseMetadataProvider); ok {
licenseMetadata := ctx.ModuleProvider(mod, LicenseMetadataProvider).(*LicenseMetadataInfo)
a.SetPath("LOCAL_SOONG_LICENSE_METADATA", licenseMetadata.LicenseMetadataPath) a.SetPath("LOCAL_SOONG_LICENSE_METADATA", licenseMetadata.LicenseMetadataPath)
} }

View file

@ -150,7 +150,7 @@ type RequiresFilesFromPrebuiltApexTag interface {
func FindDeapexerProviderForModule(ctx ModuleContext) *DeapexerInfo { func FindDeapexerProviderForModule(ctx ModuleContext) *DeapexerInfo {
var di *DeapexerInfo var di *DeapexerInfo
ctx.VisitDirectDepsWithTag(DeapexerTag, func(m Module) { ctx.VisitDirectDepsWithTag(DeapexerTag, func(m Module) {
c := ctx.OtherModuleProvider(m, DeapexerProvider).(DeapexerInfo) c, _ := OtherModuleProvider(ctx, m, DeapexerProvider)
p := &c p := &c
if di != nil { if di != nil {
// If two DeapexerInfo providers have been found then check if they are // If two DeapexerInfo providers have been found then check if they are

View file

@ -78,8 +78,7 @@ func buildLicenseMetadata(ctx ModuleContext, licenseMetadataFile WritablePath) {
return return
} }
if ctx.OtherModuleHasProvider(dep, LicenseMetadataProvider) { if info, ok := OtherModuleProvider(ctx, dep, LicenseMetadataProvider); ok {
info := ctx.OtherModuleProvider(dep, LicenseMetadataProvider).(*LicenseMetadataInfo)
allDepMetadataFiles = append(allDepMetadataFiles, info.LicenseMetadataPath) allDepMetadataFiles = append(allDepMetadataFiles, info.LicenseMetadataPath)
if isContainer || isInstallDepNeeded(dep, ctx.OtherModuleDependencyTag(dep)) { if isContainer || isInstallDepNeeded(dep, ctx.OtherModuleDependencyTag(dep)) {
allDepMetadataDepSets = append(allDepMetadataDepSets, info.LicenseMetadataDepSet) allDepMetadataDepSets = append(allDepMetadataDepSets, info.LicenseMetadataDepSet)

View file

@ -461,8 +461,8 @@ func PrebuiltSelectModuleMutator(ctx BottomUpMutatorContext) {
// Propagate the provider received from `all_apex_contributions` // Propagate the provider received from `all_apex_contributions`
// to the source module // to the source module
ctx.VisitDirectDepsWithTag(acDepTag, func(am Module) { ctx.VisitDirectDepsWithTag(acDepTag, func(am Module) {
psi := ctx.OtherModuleProvider(am, PrebuiltSelectionInfoProvider).(PrebuiltSelectionInfoMap) psi, _ := OtherModuleProvider(ctx, am, PrebuiltSelectionInfoProvider)
ctx.SetProvider(PrebuiltSelectionInfoProvider, psi) SetProvider(ctx, PrebuiltSelectionInfoProvider, psi)
}) })
} else if s, ok := ctx.Module().(Module); ok { } else if s, ok := ctx.Module().(Module); ok {
@ -548,9 +548,7 @@ func (p *Prebuilt) usePrebuilt(ctx BaseMutatorContext, source Module, prebuilt M
// Use `all_apex_contributions` for source vs prebuilt selection. // Use `all_apex_contributions` for source vs prebuilt selection.
psi := PrebuiltSelectionInfoMap{} psi := PrebuiltSelectionInfoMap{}
ctx.VisitDirectDepsWithTag(PrebuiltDepTag, func(am Module) { ctx.VisitDirectDepsWithTag(PrebuiltDepTag, func(am Module) {
if ctx.OtherModuleHasProvider(am, PrebuiltSelectionInfoProvider) { psi, _ = OtherModuleProvider(ctx, am, PrebuiltSelectionInfoProvider)
psi = ctx.OtherModuleProvider(am, PrebuiltSelectionInfoProvider).(PrebuiltSelectionInfoMap)
}
}) })
// If the source module is explicitly listed in the metadata module, use that // If the source module is explicitly listed in the metadata module, use that

View file

@ -1201,7 +1201,7 @@ func apexTestForMutator(mctx android.BottomUpMutatorContext) {
if _, ok := mctx.Module().(android.ApexModule); ok { if _, ok := mctx.Module().(android.ApexModule); ok {
var contents []*android.ApexContents var contents []*android.ApexContents
for _, testFor := range mctx.GetDirectDepsWithTag(testForTag) { for _, testFor := range mctx.GetDirectDepsWithTag(testForTag) {
abInfo := mctx.OtherModuleProvider(testFor, ApexBundleInfoProvider).(ApexBundleInfo) abInfo, _ := android.OtherModuleProvider(mctx, testFor, ApexBundleInfoProvider)
contents = append(contents, abInfo.Contents) contents = append(contents, abInfo.Contents)
} }
android.SetProvider(mctx, android.ApexTestForInfoProvider, android.ApexTestForInfo{ android.SetProvider(mctx, android.ApexTestForInfoProvider, android.ApexTestForInfo{
@ -1465,7 +1465,7 @@ func (a *apexBundle) libs_to_trim(ctx android.ModuleContext) []string {
panic(fmt.Errorf("expected exactly at most one dcla dependency, got %d", len(dclaModules))) panic(fmt.Errorf("expected exactly at most one dcla dependency, got %d", len(dclaModules)))
} }
if len(dclaModules) > 0 { if len(dclaModules) > 0 {
DCLAInfo := ctx.OtherModuleProvider(dclaModules[0], DCLAInfoProvider).(DCLAInfo) DCLAInfo, _ := android.OtherModuleProvider(ctx, dclaModules[0], DCLAInfoProvider)
return DCLAInfo.ProvidedLibs return DCLAInfo.ProvidedLibs
} }
return []string{} return []string{}
@ -1783,7 +1783,7 @@ func (a *apexBundle) WalkPayloadDeps(ctx android.ModuleContext, do android.Paylo
return false return false
} }
ai := ctx.OtherModuleProvider(child, android.ApexInfoProvider).(android.ApexInfo) ai, _ := android.OtherModuleProvider(ctx, child, android.ApexInfoProvider)
externalDep := !android.InList(ctx.ModuleName(), ai.InApexVariants) externalDep := !android.InList(ctx.ModuleName(), ai.InApexVariants)
// Visit actually // Visit actually
@ -2272,7 +2272,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext,
} }
func addAconfigFiles(vctx *visitorContext, ctx android.ModuleContext, module blueprint.Module) { func addAconfigFiles(vctx *visitorContext, ctx android.ModuleContext, module blueprint.Module) {
dep := ctx.OtherModuleProvider(module, aconfig.TransitiveDeclarationsInfoProvider).(aconfig.TransitiveDeclarationsInfo) dep, _ := android.OtherModuleProvider(ctx, module, aconfig.TransitiveDeclarationsInfoProvider)
if len(dep.AconfigFiles) > 0 && dep.AconfigFiles[ctx.ModuleName()] != nil { if len(dep.AconfigFiles) > 0 && dep.AconfigFiles[ctx.ModuleName()] != nil {
vctx.aconfigFiles = append(vctx.aconfigFiles, dep.AconfigFiles[ctx.ModuleName()]...) vctx.aconfigFiles = append(vctx.aconfigFiles, dep.AconfigFiles[ctx.ModuleName()]...)
} }
@ -2376,7 +2376,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
// apexBootclasspathFragmentFiles returns the list of apexFile structures defining the files that // apexBootclasspathFragmentFiles returns the list of apexFile structures defining the files that
// the bootclasspath_fragment contributes to the apex. // the bootclasspath_fragment contributes to the apex.
func apexBootclasspathFragmentFiles(ctx android.ModuleContext, module blueprint.Module) []apexFile { func apexBootclasspathFragmentFiles(ctx android.ModuleContext, module blueprint.Module) []apexFile {
bootclasspathFragmentInfo := ctx.OtherModuleProvider(module, java.BootclasspathFragmentApexContentInfoProvider).(java.BootclasspathFragmentApexContentInfo) bootclasspathFragmentInfo, _ := android.OtherModuleProvider(ctx, module, java.BootclasspathFragmentApexContentInfoProvider)
var filesToAdd []apexFile var filesToAdd []apexFile
// Add classpaths.proto config. // Add classpaths.proto config.
@ -2425,7 +2425,7 @@ func apexBootclasspathFragmentFiles(ctx android.ModuleContext, module blueprint.
// apexClasspathFragmentProtoFile returns *apexFile structure defining the classpath.proto config that // apexClasspathFragmentProtoFile returns *apexFile structure defining the classpath.proto config that
// the module contributes to the apex; or nil if the proto config was not generated. // the module contributes to the apex; or nil if the proto config was not generated.
func apexClasspathFragmentProtoFile(ctx android.ModuleContext, module blueprint.Module) *apexFile { func apexClasspathFragmentProtoFile(ctx android.ModuleContext, module blueprint.Module) *apexFile {
info := ctx.OtherModuleProvider(module, java.ClasspathFragmentProtoContentInfoProvider).(java.ClasspathFragmentProtoContentInfo) info, _ := android.OtherModuleProvider(ctx, module, java.ClasspathFragmentProtoContentInfoProvider)
if !info.ClasspathFragmentProtoGenerated { if !info.ClasspathFragmentProtoGenerated {
return nil return nil
} }
@ -2437,7 +2437,7 @@ func apexClasspathFragmentProtoFile(ctx android.ModuleContext, module blueprint.
// apexFileForBootclasspathFragmentContentModule creates an apexFile for a bootclasspath_fragment // apexFileForBootclasspathFragmentContentModule creates an apexFile for a bootclasspath_fragment
// content module, i.e. a library that is part of the bootclasspath. // content module, i.e. a library that is part of the bootclasspath.
func apexFileForBootclasspathFragmentContentModule(ctx android.ModuleContext, fragmentModule blueprint.Module, javaModule javaModule) apexFile { func apexFileForBootclasspathFragmentContentModule(ctx android.ModuleContext, fragmentModule blueprint.Module, javaModule javaModule) apexFile {
bootclasspathFragmentInfo := ctx.OtherModuleProvider(fragmentModule, java.BootclasspathFragmentApexContentInfoProvider).(java.BootclasspathFragmentApexContentInfo) bootclasspathFragmentInfo, _ := android.OtherModuleProvider(ctx, fragmentModule, java.BootclasspathFragmentApexContentInfoProvider)
// Get the dexBootJar from the bootclasspath_fragment as that is responsible for performing the // Get the dexBootJar from the bootclasspath_fragment as that is responsible for performing the
// hidden API encpding. // hidden API encpding.
@ -2650,7 +2650,7 @@ func (a *apexBundle) checkUpdatable(ctx android.ModuleContext) {
func (a *apexBundle) checkClasspathFragments(ctx android.ModuleContext) { func (a *apexBundle) checkClasspathFragments(ctx android.ModuleContext) {
ctx.VisitDirectDeps(func(module android.Module) { ctx.VisitDirectDeps(func(module android.Module) {
if tag := ctx.OtherModuleDependencyTag(module); tag == bcpfTag || tag == sscpfTag { if tag := ctx.OtherModuleDependencyTag(module); tag == bcpfTag || tag == sscpfTag {
info := ctx.OtherModuleProvider(module, java.ClasspathFragmentProtoContentInfoProvider).(java.ClasspathFragmentProtoContentInfo) info, _ := android.OtherModuleProvider(ctx, module, java.ClasspathFragmentProtoContentInfoProvider)
if !info.ClasspathFragmentProtoGenerated { if !info.ClasspathFragmentProtoGenerated {
ctx.OtherModuleErrorf(module, "is included in updatable apex %v, it must not set generate_classpaths_proto to false", ctx.ModuleName()) ctx.OtherModuleErrorf(module, "is included in updatable apex %v, it must not set generate_classpaths_proto to false", ctx.ModuleName())
} }

View file

@ -20,7 +20,6 @@ import (
"android/soong/android" "android/soong/android"
"android/soong/java" "android/soong/java"
"github.com/google/blueprint"
) )
// Contains tests for java.CreateClasspathElements logic from java/classpath_element.go that // Contains tests for java.CreateClasspathElements logic from java/classpath_element.go that
@ -28,19 +27,12 @@ import (
// testClasspathElementContext is a ClasspathElementContext suitable for use in tests. // testClasspathElementContext is a ClasspathElementContext suitable for use in tests.
type testClasspathElementContext struct { type testClasspathElementContext struct {
android.OtherModuleProviderContext
testContext *android.TestContext testContext *android.TestContext
module android.Module module android.Module
errs []error errs []error
} }
func (t *testClasspathElementContext) OtherModuleHasProvider(module blueprint.Module, provider blueprint.AnyProviderKey) bool {
return t.testContext.ModuleHasProvider(module, provider)
}
func (t *testClasspathElementContext) OtherModuleProvider(module blueprint.Module, provider blueprint.AnyProviderKey) interface{} {
return t.testContext.ModuleProvider(module, provider)
}
func (t *testClasspathElementContext) ModuleErrorf(fmt string, args ...interface{}) { func (t *testClasspathElementContext) ModuleErrorf(fmt string, args ...interface{}) {
t.errs = append(t.errs, t.testContext.ModuleErrorf(t.module, fmt, args...)) t.errs = append(t.errs, t.testContext.ModuleErrorf(t.module, fmt, args...))
} }
@ -238,7 +230,11 @@ func TestCreateClasspathElements(t *testing.T) {
} }
newCtx := func() *testClasspathElementContext { newCtx := func() *testClasspathElementContext {
return &testClasspathElementContext{testContext: result.TestContext, module: bootclasspath} return &testClasspathElementContext{
OtherModuleProviderContext: result.TestContext.OtherModuleProviderAdaptor(),
testContext: result.TestContext,
module: bootclasspath,
}
} }
// Verify that CreateClasspathElements works when given valid input. // Verify that CreateClasspathElements works when given valid input.

View file

@ -137,8 +137,7 @@ func (c *Module) fdoProfileMutator(ctx android.BottomUpMutatorContext) {
} }
ctx.VisitDirectDepsWithTag(FdoProfileTag, func(m android.Module) { ctx.VisitDirectDepsWithTag(FdoProfileTag, func(m android.Module) {
if ctx.OtherModuleHasProvider(m, FdoProfileProvider) { if info, ok := android.OtherModuleProvider(ctx, m, FdoProfileProvider); ok {
info := ctx.OtherModuleProvider(m, FdoProfileProvider).(FdoProfileInfo)
c.afdo.Properties.FdoProfilePath = proptools.StringPtr(info.Path.String()) c.afdo.Properties.FdoProfilePath = proptools.StringPtr(info.Path.String())
} }
}) })

View file

@ -2370,7 +2370,7 @@ func GetApiImports(c LinkableInterface, actx android.BottomUpMutatorContext) mul
if actx.OtherModuleExists("api_imports") { if actx.OtherModuleExists("api_imports") {
apiImportModule = actx.AddDependency(c, nil, "api_imports") apiImportModule = actx.AddDependency(c, nil, "api_imports")
if len(apiImportModule) > 0 && apiImportModule[0] != nil { if len(apiImportModule) > 0 && apiImportModule[0] != nil {
apiInfo := actx.OtherModuleProvider(apiImportModule[0], multitree.ApiImportsProvider).(multitree.ApiImportInfo) apiInfo, _ := android.OtherModuleProvider(actx, apiImportModule[0], multitree.ApiImportsProvider)
apiImportInfo = apiInfo apiImportInfo = apiInfo
android.SetProvider(actx, multitree.ApiImportsProvider, apiInfo) android.SetProvider(actx, multitree.ApiImportsProvider, apiInfo)
} }
@ -2393,7 +2393,7 @@ func GetSnapshot(c LinkableInterface, snapshotInfo **SnapshotInfo, actx android.
snapshotModule = actx.AddVariationDependencies(nil, nil, "recovery_snapshot") snapshotModule = actx.AddVariationDependencies(nil, nil, "recovery_snapshot")
} }
if len(snapshotModule) > 0 && snapshotModule[0] != nil { if len(snapshotModule) > 0 && snapshotModule[0] != nil {
snapshot := actx.OtherModuleProvider(snapshotModule[0], SnapshotInfoProvider).(SnapshotInfo) snapshot, _ := android.OtherModuleProvider(actx, snapshotModule[0], SnapshotInfoProvider)
*snapshotInfo = &snapshot *snapshotInfo = &snapshot
// republish the snapshot for use in later mutators on this module // republish the snapshot for use in later mutators on this module
android.SetProvider(actx, SnapshotInfoProvider, snapshot) android.SetProvider(actx, SnapshotInfoProvider, snapshot)
@ -2994,7 +2994,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
ctx.VisitDirectDeps(func(dep android.Module) { ctx.VisitDirectDeps(func(dep android.Module) {
if dep.Name() == "api_imports" { if dep.Name() == "api_imports" {
apiImportInfo = ctx.OtherModuleProvider(dep, multitree.ApiImportsProvider).(multitree.ApiImportInfo) apiImportInfo, _ = android.OtherModuleProvider(ctx, dep, multitree.ApiImportsProvider)
hasApiImportInfo = true hasApiImportInfo = true
} }
}) })
@ -3045,12 +3045,10 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
} }
if depTag == aidlLibraryTag { if depTag == aidlLibraryTag {
if ctx.OtherModuleHasProvider(dep, aidl_library.AidlLibraryProvider) { if aidlLibraryInfo, ok := android.OtherModuleProvider(ctx, dep, aidl_library.AidlLibraryProvider); ok {
depPaths.AidlLibraryInfos = append( depPaths.AidlLibraryInfos = append(
depPaths.AidlLibraryInfos, depPaths.AidlLibraryInfos,
ctx.OtherModuleProvider( aidlLibraryInfo,
dep,
aidl_library.AidlLibraryProvider).(aidl_library.AidlLibraryInfo),
) )
} }
} }
@ -3115,10 +3113,10 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
// version mutator, so the stubs variant is created from the shared variant that // version mutator, so the stubs variant is created from the shared variant that
// already has the reuseObjTag dependency on the static variant. // already has the reuseObjTag dependency on the static variant.
if !c.library.buildStubs() { if !c.library.buildStubs() {
staticAnalogue := ctx.OtherModuleProvider(dep, StaticLibraryInfoProvider).(StaticLibraryInfo) staticAnalogue, _ := android.OtherModuleProvider(ctx, dep, StaticLibraryInfoProvider)
objs := staticAnalogue.ReuseObjects objs := staticAnalogue.ReuseObjects
depPaths.Objs = depPaths.Objs.Append(objs) depPaths.Objs = depPaths.Objs.Append(objs)
depExporterInfo := ctx.OtherModuleProvider(dep, FlagExporterInfoProvider).(FlagExporterInfo) depExporterInfo, _ := android.OtherModuleProvider(ctx, dep, FlagExporterInfoProvider)
reexportExporter(depExporterInfo) reexportExporter(depExporterInfo)
} }
return return
@ -3139,7 +3137,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
return return
} }
depExporterInfo := ctx.OtherModuleProvider(dep, FlagExporterInfoProvider).(FlagExporterInfo) depExporterInfo, _ := android.OtherModuleProvider(ctx, dep, FlagExporterInfoProvider)
var ptr *android.Paths var ptr *android.Paths
var depPtr *android.Paths var depPtr *android.Paths
@ -3148,7 +3146,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
switch { switch {
case libDepTag.header(): case libDepTag.header():
if !ctx.OtherModuleHasProvider(dep, HeaderLibraryInfoProvider) { if _, isHeaderLib := android.OtherModuleProvider(ctx, dep, HeaderLibraryInfoProvider); !isHeaderLib {
if !ctx.Config().AllowMissingDependencies() { if !ctx.Config().AllowMissingDependencies() {
ctx.ModuleErrorf("module %q is not a header library", depName) ctx.ModuleErrorf("module %q is not a header library", depName)
} else { } else {
@ -3157,7 +3155,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
return return
} }
case libDepTag.shared(): case libDepTag.shared():
if !ctx.OtherModuleHasProvider(dep, SharedLibraryInfoProvider) { if _, isSharedLib := android.OtherModuleProvider(ctx, dep, SharedLibraryInfoProvider); !isSharedLib {
if !ctx.Config().AllowMissingDependencies() { if !ctx.Config().AllowMissingDependencies() {
ctx.ModuleErrorf("module %q is not a shared library", depName) ctx.ModuleErrorf("module %q is not a shared library", depName)
} else { } else {
@ -3194,7 +3192,8 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
panic(fmt.Errorf("unexpected library dependency order %d", libDepTag.Order)) panic(fmt.Errorf("unexpected library dependency order %d", libDepTag.Order))
} }
case libDepTag.static(): case libDepTag.static():
if !ctx.OtherModuleHasProvider(dep, StaticLibraryInfoProvider) { staticLibraryInfo, isStaticLib := android.OtherModuleProvider(ctx, dep, StaticLibraryInfoProvider)
if !isStaticLib {
if !ctx.Config().AllowMissingDependencies() { if !ctx.Config().AllowMissingDependencies() {
ctx.ModuleErrorf("module %q is not a static library", depName) ctx.ModuleErrorf("module %q is not a static library", depName)
} else { } else {
@ -3209,7 +3208,6 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
break break
} }
staticLibraryInfo := ctx.OtherModuleProvider(dep, StaticLibraryInfoProvider).(StaticLibraryInfo)
linkFile = android.OptionalPathForPath(staticLibraryInfo.StaticLibrary) linkFile = android.OptionalPathForPath(staticLibraryInfo.StaticLibrary)
if libDepTag.wholeStatic { if libDepTag.wholeStatic {
ptr = &depPaths.WholeStaticLibs ptr = &depPaths.WholeStaticLibs
@ -3319,7 +3317,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
if lib.buildStubs() && dep.(android.ApexModule).InAnyApex() { if lib.buildStubs() && dep.(android.ApexModule).InAnyApex() {
// Add the dependency to the APEX(es) providing the library so that // Add the dependency to the APEX(es) providing the library so that
// m <module> can trigger building the APEXes as well. // m <module> can trigger building the APEXes as well.
depApexInfo := ctx.OtherModuleProvider(dep, android.ApexInfoProvider).(android.ApexInfo) depApexInfo, _ := android.OtherModuleProvider(ctx, dep, android.ApexInfoProvider)
for _, an := range depApexInfo.InApexVariants { for _, an := range depApexInfo.InApexVariants {
c.Properties.ApexesProvidingSharedLibs = append( c.Properties.ApexesProvidingSharedLibs = append(
c.Properties.ApexesProvidingSharedLibs, an) c.Properties.ApexesProvidingSharedLibs, an)
@ -3484,9 +3482,9 @@ func ChooseStubOrImpl(ctx android.ModuleContext, dep android.Module) (SharedLibr
panic(fmt.Errorf("Unexpected dependency tag: %T", depTag)) panic(fmt.Errorf("Unexpected dependency tag: %T", depTag))
} }
sharedLibraryInfo := ctx.OtherModuleProvider(dep, SharedLibraryInfoProvider).(SharedLibraryInfo) sharedLibraryInfo, _ := android.OtherModuleProvider(ctx, dep, SharedLibraryInfoProvider)
depExporterInfo := ctx.OtherModuleProvider(dep, FlagExporterInfoProvider).(FlagExporterInfo) depExporterInfo, _ := android.OtherModuleProvider(ctx, dep, FlagExporterInfoProvider)
sharedLibraryStubsInfo := ctx.OtherModuleProvider(dep, SharedLibraryStubsProvider).(SharedLibraryStubsInfo) sharedLibraryStubsInfo, _ := android.OtherModuleProvider(ctx, dep, SharedLibraryStubsProvider)
if !libDepTag.explicitlyVersioned && len(sharedLibraryStubsInfo.SharedStubLibraries) > 0 { if !libDepTag.explicitlyVersioned && len(sharedLibraryStubsInfo.SharedStubLibraries) > 0 {
// when to use (unspecified) stubs, use the latest one. // when to use (unspecified) stubs, use the latest one.

View file

@ -544,7 +544,8 @@ func CollectAllSharedDependencies(ctx android.ModuleContext) (android.RuleBuilde
if !IsValidSharedDependency(dep) { if !IsValidSharedDependency(dep) {
return return
} }
if !ctx.OtherModuleHasProvider(dep, SharedLibraryInfoProvider) { sharedLibraryInfo, hasSharedLibraryInfo := android.OtherModuleProvider(ctx, dep, SharedLibraryInfoProvider)
if !hasSharedLibraryInfo {
return return
} }
if seen[ctx.OtherModuleName(dep)] { if seen[ctx.OtherModuleName(dep)] {
@ -553,7 +554,6 @@ func CollectAllSharedDependencies(ctx android.ModuleContext) (android.RuleBuilde
seen[ctx.OtherModuleName(dep)] = true seen[ctx.OtherModuleName(dep)] = true
deps = append(deps, dep) deps = append(deps, dep)
sharedLibraryInfo := ctx.OtherModuleProvider(dep, SharedLibraryInfoProvider).(SharedLibraryInfo)
installDestination := sharedLibraryInfo.SharedLibrary.Base() installDestination := sharedLibraryInfo.SharedLibrary.Base()
ruleBuilderInstall := android.RuleBuilderInstall{android.OutputFileForModule(ctx, dep, "unstripped"), installDestination} ruleBuilderInstall := android.RuleBuilderInstall{android.OutputFileForModule(ctx, dep, "unstripped"), installDestination}
sharedLibraries = append(sharedLibraries, ruleBuilderInstall) sharedLibraries = append(sharedLibraries, ruleBuilderInstall)
@ -574,14 +574,14 @@ func CollectAllSharedDependencies(ctx android.ModuleContext) (android.RuleBuilde
if !IsValidSharedDependency(child) { if !IsValidSharedDependency(child) {
return false return false
} }
if !ctx.OtherModuleHasProvider(child, SharedLibraryInfoProvider) { sharedLibraryInfo, hasSharedLibraryInfo := android.OtherModuleProvider(ctx, child, SharedLibraryInfoProvider)
if !hasSharedLibraryInfo {
return false return false
} }
if !seen[ctx.OtherModuleName(child)] { if !seen[ctx.OtherModuleName(child)] {
seen[ctx.OtherModuleName(child)] = true seen[ctx.OtherModuleName(child)] = true
deps = append(deps, child) deps = append(deps, child)
sharedLibraryInfo := ctx.OtherModuleProvider(child, SharedLibraryInfoProvider).(SharedLibraryInfo)
installDestination := sharedLibraryInfo.SharedLibrary.Base() installDestination := sharedLibraryInfo.SharedLibrary.Base()
ruleBuilderInstall := android.RuleBuilderInstall{android.OutputFileForModule(ctx, child, "unstripped"), installDestination} ruleBuilderInstall := android.RuleBuilderInstall{android.OutputFileForModule(ctx, child, "unstripped"), installDestination}
sharedLibraries = append(sharedLibraries, ruleBuilderInstall) sharedLibraries = append(sharedLibraries, ruleBuilderInstall)

View file

@ -1235,7 +1235,7 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext,
var transitiveStaticLibrariesForOrdering *android.DepSet[android.Path] var transitiveStaticLibrariesForOrdering *android.DepSet[android.Path]
if static := ctx.GetDirectDepsWithTag(staticVariantTag); len(static) > 0 { if static := ctx.GetDirectDepsWithTag(staticVariantTag); len(static) > 0 {
s := ctx.OtherModuleProvider(static[0], StaticLibraryInfoProvider).(StaticLibraryInfo) s, _ := android.OtherModuleProvider(ctx, static[0], StaticLibraryInfoProvider)
transitiveStaticLibrariesForOrdering = s.TransitiveStaticLibrariesForOrdering transitiveStaticLibrariesForOrdering = s.TransitiveStaticLibrariesForOrdering
} }
@ -1256,8 +1256,8 @@ func addStubDependencyProviders(ctx ModuleContext) {
if len(stubs) > 0 { if len(stubs) > 0 {
var stubsInfo []SharedStubLibrary var stubsInfo []SharedStubLibrary
for _, stub := range stubs { for _, stub := range stubs {
stubInfo := ctx.OtherModuleProvider(stub, SharedLibraryInfoProvider).(SharedLibraryInfo) stubInfo, _ := android.OtherModuleProvider(ctx, stub, SharedLibraryInfoProvider)
flagInfo := ctx.OtherModuleProvider(stub, FlagExporterInfoProvider).(FlagExporterInfo) flagInfo, _ := android.OtherModuleProvider(ctx, stub, FlagExporterInfoProvider)
stubsInfo = append(stubsInfo, SharedStubLibrary{ stubsInfo = append(stubsInfo, SharedStubLibrary{
Version: moduleLibraryInterface(stub).stubsVersion(), Version: moduleLibraryInterface(stub).stubsVersion(),
SharedLibraryInfo: stubInfo, SharedLibraryInfo: stubInfo,

View file

@ -511,7 +511,7 @@ func (p *nativeLibInfoProperties) PopulateFromVariant(ctx android.SdkMemberConte
} }
} }
exportedInfo := ctx.SdkModuleContext().OtherModuleProvider(variant, FlagExporterInfoProvider).(FlagExporterInfo) exportedInfo, _ := android.OtherModuleProvider(ctx.SdkModuleContext(), variant, FlagExporterInfoProvider)
// Separate out the generated include dirs (which are arch specific) from the // Separate out the generated include dirs (which are arch specific) from the
// include dirs (which may not be). // include dirs (which may not be).

View file

@ -262,8 +262,8 @@ func (d *apiLibraryDecorator) shareStubs(ctx ModuleContext) {
if len(stubs) > 0 { if len(stubs) > 0 {
var stubsInfo []SharedStubLibrary var stubsInfo []SharedStubLibrary
for _, stub := range stubs { for _, stub := range stubs {
stubInfo := ctx.OtherModuleProvider(stub, SharedLibraryInfoProvider).(SharedLibraryInfo) stubInfo, _ := android.OtherModuleProvider(ctx, stub, SharedLibraryInfoProvider)
flagInfo := ctx.OtherModuleProvider(stub, FlagExporterInfoProvider).(FlagExporterInfo) flagInfo, _ := android.OtherModuleProvider(ctx, stub, FlagExporterInfoProvider)
stubsInfo = append(stubsInfo, SharedStubLibrary{ stubsInfo = append(stubsInfo, SharedStubLibrary{
Version: moduleLibraryInterface(stub).stubsVersion(), Version: moduleLibraryInterface(stub).stubsVersion(),
SharedLibraryInfo: stubInfo, SharedLibraryInfo: stubInfo,

View file

@ -861,7 +861,7 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext)
prebuiltJniPackages := android.Paths{} prebuiltJniPackages := android.Paths{}
ctx.VisitDirectDeps(func(module android.Module) { ctx.VisitDirectDeps(func(module android.Module) {
if info, ok := ctx.OtherModuleProvider(module, JniPackageProvider).(JniPackageInfo); ok { if info, ok := android.OtherModuleProvider(ctx, module, JniPackageProvider); ok {
prebuiltJniPackages = append(prebuiltJniPackages, info.JniPackages...) prebuiltJniPackages = append(prebuiltJniPackages, info.JniPackages...)
} }
}) })

View file

@ -509,7 +509,7 @@ func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) {
var aconfigTextFilePaths android.Paths var aconfigTextFilePaths android.Paths
ctx.VisitDirectDepsWithTag(aconfigDeclarationTag, func(dep android.Module) { ctx.VisitDirectDepsWithTag(aconfigDeclarationTag, func(dep android.Module) {
if provider, ok := ctx.OtherModuleProvider(dep, aconfig.DeclarationsProviderKey).(aconfig.DeclarationsProviderData); ok { if provider, ok := android.OtherModuleProvider(ctx, dep, aconfig.DeclarationsProviderKey); ok {
aconfigTextFilePaths = append(aconfigTextFilePaths, provider.IntermediateDumpOutputPath) aconfigTextFilePaths = append(aconfigTextFilePaths, provider.IntermediateDumpOutputPath)
} else { } else {
ctx.ModuleErrorf("Only aconfig_declarations module type is allowed for "+ ctx.ModuleErrorf("Only aconfig_declarations module type is allowed for "+
@ -537,7 +537,7 @@ func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) {
func (a *AndroidApp) proguardBuildActions(ctx android.ModuleContext) { func (a *AndroidApp) proguardBuildActions(ctx android.ModuleContext) {
var staticLibProguardFlagFiles android.Paths var staticLibProguardFlagFiles android.Paths
ctx.VisitDirectDeps(func(m android.Module) { ctx.VisitDirectDeps(func(m android.Module) {
depProguardInfo := ctx.OtherModuleProvider(m, ProguardSpecInfoProvider).(ProguardSpecInfo) depProguardInfo, _ := android.OtherModuleProvider(ctx, m, ProguardSpecInfoProvider)
staticLibProguardFlagFiles = append(staticLibProguardFlagFiles, depProguardInfo.UnconditionallyExportedProguardFlags.ToList()...) staticLibProguardFlagFiles = append(staticLibProguardFlagFiles, depProguardInfo.UnconditionallyExportedProguardFlags.ToList()...)
if ctx.OtherModuleDependencyTag(m) == staticLibTag { if ctx.OtherModuleDependencyTag(m) == staticLibTag {
staticLibProguardFlagFiles = append(staticLibProguardFlagFiles, depProguardInfo.ProguardFlagsFiles.ToList()...) staticLibProguardFlagFiles = append(staticLibProguardFlagFiles, depProguardInfo.ProguardFlagsFiles.ToList()...)
@ -974,7 +974,7 @@ func collectAppDeps(ctx android.ModuleContext, app appDepsInterface,
return shouldCollectRecursiveNativeDeps return shouldCollectRecursiveNativeDeps
} }
if info, ok := ctx.OtherModuleProvider(module, JniPackageProvider).(JniPackageInfo); ok { if info, ok := android.OtherModuleProvider(ctx, module, JniPackageProvider); ok {
prebuiltJniPackages = append(prebuiltJniPackages, info.JniPackages...) prebuiltJniPackages = append(prebuiltJniPackages, info.JniPackages...)
} }

View file

@ -1726,7 +1726,7 @@ func (j *Module) collectProguardSpecInfo(ctx android.ModuleContext) ProguardSpec
transitiveProguardFlags := []*android.DepSet[android.Path]{} transitiveProguardFlags := []*android.DepSet[android.Path]{}
ctx.VisitDirectDeps(func(m android.Module) { ctx.VisitDirectDeps(func(m android.Module) {
depProguardInfo := ctx.OtherModuleProvider(m, ProguardSpecInfoProvider).(ProguardSpecInfo) depProguardInfo, _ := android.OtherModuleProvider(ctx, m, ProguardSpecInfoProvider)
depTag := ctx.OtherModuleDependencyTag(m) depTag := ctx.OtherModuleDependencyTag(m)
if depProguardInfo.UnconditionallyExportedProguardFlags != nil { if depProguardInfo.UnconditionallyExportedProguardFlags != nil {
@ -1912,7 +1912,7 @@ func (j *providesTransitiveHeaderJars) collectTransitiveHeaderJars(ctx android.M
return return
} }
dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) dep, _ := android.OtherModuleProvider(ctx, module, JavaInfoProvider)
tag := ctx.OtherModuleDependencyTag(module) tag := ctx.OtherModuleDependencyTag(module)
_, isUsesLibDep := tag.(usesLibraryDependencyTag) _, isUsesLibDep := tag.(usesLibraryDependencyTag)
if tag == libTag || tag == r8LibraryJarTag || isUsesLibDep { if tag == libTag || tag == r8LibraryJarTag || isUsesLibDep {
@ -2037,7 +2037,7 @@ func (j *Module) collectTransitiveSrcFiles(ctx android.ModuleContext, mine andro
ctx.VisitDirectDeps(func(module android.Module) { ctx.VisitDirectDeps(func(module android.Module) {
tag := ctx.OtherModuleDependencyTag(module) tag := ctx.OtherModuleDependencyTag(module)
if tag == staticLibTag { if tag == staticLibTag {
depInfo := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) depInfo, _ := android.OtherModuleProvider(ctx, module, JavaInfoProvider)
if depInfo.TransitiveSrcFiles != nil { if depInfo.TransitiveSrcFiles != nil {
fromDeps = append(fromDeps, depInfo.TransitiveSrcFiles) fromDeps = append(fromDeps, depInfo.TransitiveSrcFiles)
} }
@ -2209,15 +2209,14 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
case staticLibTag: case staticLibTag:
ctx.ModuleErrorf("dependency on java_sdk_library %q can only be in libs", otherName) ctx.ModuleErrorf("dependency on java_sdk_library %q can only be in libs", otherName)
} }
} else if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { } else if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok {
dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) if sdkLinkType != javaPlatform {
if sdkLinkType != javaPlatform && if syspropDep, ok := android.OtherModuleProvider(ctx, module, SyspropPublicStubInfoProvider); ok {
ctx.OtherModuleHasProvider(module, SyspropPublicStubInfoProvider) { // dep is a sysprop implementation library, but this module is not linking against
// dep is a sysprop implementation library, but this module is not linking against // the platform, so it gets the sysprop public stubs library instead. Replace
// the platform, so it gets the sysprop public stubs library instead. Replace // dep with the JavaInfo from the SyspropPublicStubInfoProvider.
// dep with the JavaInfo from the SyspropPublicStubInfoProvider. dep = syspropDep.JavaInfo
syspropDep := ctx.OtherModuleProvider(module, SyspropPublicStubInfoProvider).(SyspropPublicStubInfo) }
dep = syspropDep.JavaInfo
} }
switch tag { switch tag {
case bootClasspathTag: case bootClasspathTag:

View file

@ -876,7 +876,7 @@ func (b *bootclasspathFragmentSdkMemberProperties) PopulateFromVariant(ctx andro
// Get the hidden API information from the module. // Get the hidden API information from the module.
mctx := ctx.SdkModuleContext() mctx := ctx.SdkModuleContext()
hiddenAPIInfo := mctx.OtherModuleProvider(module, HiddenAPIInfoForSdkProvider).(HiddenAPIInfoForSdk) hiddenAPIInfo, _ := android.OtherModuleProvider(mctx, module, HiddenAPIInfoForSdkProvider)
b.Flag_files_by_category = hiddenAPIInfo.FlagFilesByCategory b.Flag_files_by_category = hiddenAPIInfo.FlagFilesByCategory
// Copy all the generated file paths. // Copy all the generated file paths.

View file

@ -21,7 +21,6 @@ import (
"strings" "strings"
"android/soong/android" "android/soong/android"
"github.com/google/blueprint"
) )
// Supports constructing a list of ClasspathElement from a set of fragments and modules. // Supports constructing a list of ClasspathElement from a set of fragments and modules.
@ -72,8 +71,7 @@ var _ ClasspathElement = (*ClasspathLibraryElement)(nil)
// ClasspathElementContext defines the context methods needed by CreateClasspathElements // ClasspathElementContext defines the context methods needed by CreateClasspathElements
type ClasspathElementContext interface { type ClasspathElementContext interface {
OtherModuleHasProvider(m blueprint.Module, provider blueprint.AnyProviderKey) bool android.OtherModuleProviderContext
OtherModuleProvider(m blueprint.Module, provider blueprint.AnyProviderKey) interface{}
ModuleErrorf(fmt string, args ...interface{}) ModuleErrorf(fmt string, args ...interface{})
} }
@ -123,12 +121,12 @@ func CreateClasspathElements(ctx ClasspathElementContext, libraries []android.Mo
// associated with a particular apex. // associated with a particular apex.
apexToFragment := map[string]android.Module{} apexToFragment := map[string]android.Module{}
for _, fragment := range fragments { for _, fragment := range fragments {
if !ctx.OtherModuleHasProvider(fragment, android.ApexInfoProvider) { apexInfo, ok := android.OtherModuleProvider(ctx, fragment, android.ApexInfoProvider)
if !ok {
ctx.ModuleErrorf("fragment %s is not part of an apex", fragment) ctx.ModuleErrorf("fragment %s is not part of an apex", fragment)
continue continue
} }
apexInfo := ctx.OtherModuleProvider(fragment, android.ApexInfoProvider).(android.ApexInfo)
for _, apex := range apexInfo.InApexVariants { for _, apex := range apexInfo.InApexVariants {
if existing, ok := apexToFragment[apex]; ok { if existing, ok := apexToFragment[apex]; ok {
ctx.ModuleErrorf("apex %s has multiple fragments, %s and %s", apex, fragment, existing) ctx.ModuleErrorf("apex %s has multiple fragments, %s and %s", apex, fragment, existing)
@ -146,8 +144,7 @@ skipLibrary:
// Iterate over the libraries to construct the ClasspathElements list. // Iterate over the libraries to construct the ClasspathElements list.
for _, library := range libraries { for _, library := range libraries {
var element ClasspathElement var element ClasspathElement
if ctx.OtherModuleHasProvider(library, android.ApexInfoProvider) { if apexInfo, ok := android.OtherModuleProvider(ctx, library, android.ApexInfoProvider); ok {
apexInfo := ctx.OtherModuleProvider(library, android.ApexInfoProvider).(android.ApexInfo)
var fragment android.Module var fragment android.Module

View file

@ -97,8 +97,7 @@ func (d *DeviceHostConverter) GenerateAndroidBuildActions(ctx android.ModuleCont
} }
ctx.VisitDirectDepsWithTag(deviceHostConverterDepTag, func(m android.Module) { ctx.VisitDirectDepsWithTag(deviceHostConverterDepTag, func(m android.Module) {
if ctx.OtherModuleHasProvider(m, JavaInfoProvider) { if dep, ok := android.OtherModuleProvider(ctx, m, JavaInfoProvider); ok {
dep := ctx.OtherModuleProvider(m, JavaInfoProvider).(JavaInfo)
d.headerJars = append(d.headerJars, dep.HeaderJars...) d.headerJars = append(d.headerJars, dep.HeaderJars...)
d.implementationJars = append(d.implementationJars, dep.ImplementationJars...) d.implementationJars = append(d.implementationJars, dep.ImplementationJars...)
d.implementationAndResourceJars = append(d.implementationAndResourceJars, dep.ImplementationAndResourcesJars...) d.implementationAndResourceJars = append(d.implementationAndResourceJars, dep.ImplementationAndResourcesJars...)

View file

@ -261,7 +261,7 @@ func (d *dexer) r8Flags(ctx android.ModuleContext, flags javaBuilderFlags) (r8Fl
// See b/20667396 // See b/20667396
var proguardRaiseDeps classpath var proguardRaiseDeps classpath
ctx.VisitDirectDepsWithTag(proguardRaiseTag, func(m android.Module) { ctx.VisitDirectDepsWithTag(proguardRaiseTag, func(m android.Module) {
dep := ctx.OtherModuleProvider(m, JavaInfoProvider).(JavaInfo) dep, _ := android.OtherModuleProvider(ctx, m, JavaInfoProvider)
proguardRaiseDeps = append(proguardRaiseDeps, dep.HeaderJars...) proguardRaiseDeps = append(proguardRaiseDeps, dep.HeaderJars...)
}) })

View file

@ -544,7 +544,7 @@ func gatherBootclasspathFragments(ctx android.ModuleContext) map[string]android.
return true return true
} }
if tag == bootclasspathFragmentDepTag { if tag == bootclasspathFragmentDepTag {
apexInfo := ctx.OtherModuleProvider(child, android.ApexInfoProvider).(android.ApexInfo) apexInfo, _ := android.OtherModuleProvider(ctx, child, android.ApexInfoProvider)
for _, apex := range apexInfo.InApexVariants { for _, apex := range apexInfo.InApexVariants {
fragments[apex] = child fragments[apex] = child
} }
@ -682,7 +682,7 @@ func extractEncodedDexJarsFromModulesOrBootclasspathFragments(ctx android.Module
pair.jarModule.Name(), pair.jarModule.Name(),
pair.apex) pair.apex)
} }
bootclasspathFragmentInfo := ctx.OtherModuleProvider(fragment, BootclasspathFragmentApexContentInfoProvider).(BootclasspathFragmentApexContentInfo) bootclasspathFragmentInfo, _ := android.OtherModuleProvider(ctx, fragment, BootclasspathFragmentApexContentInfoProvider)
jar, err := bootclasspathFragmentInfo.DexBootJarPathForContentModule(pair.jarModule) jar, err := bootclasspathFragmentInfo.DexBootJarPathForContentModule(pair.jarModule)
if err != nil { if err != nil {
ctx.ModuleErrorf("%s", err) ctx.ModuleErrorf("%s", err)

View file

@ -363,8 +363,7 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
switch tag { switch tag {
case bootClasspathTag: case bootClasspathTag:
if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok {
dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo)
deps.bootClasspath = append(deps.bootClasspath, dep.ImplementationJars...) deps.bootClasspath = append(deps.bootClasspath, dep.ImplementationJars...)
} else if sm, ok := module.(SystemModulesProvider); ok { } else if sm, ok := module.(SystemModulesProvider); ok {
// A system modules dependency has been added to the bootclasspath // A system modules dependency has been added to the bootclasspath
@ -376,8 +375,7 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
case libTag, sdkLibTag: case libTag, sdkLibTag:
if dep, ok := module.(SdkLibraryDependency); ok { if dep, ok := module.(SdkLibraryDependency); ok {
deps.classpath = append(deps.classpath, dep.SdkHeaderJars(ctx, j.SdkVersion(ctx))...) deps.classpath = append(deps.classpath, dep.SdkHeaderJars(ctx, j.SdkVersion(ctx))...)
} else if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { } else if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok {
dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo)
deps.classpath = append(deps.classpath, dep.HeaderJars...) deps.classpath = append(deps.classpath, dep.HeaderJars...)
deps.aidlIncludeDirs = append(deps.aidlIncludeDirs, dep.AidlIncludeDirs...) deps.aidlIncludeDirs = append(deps.aidlIncludeDirs, dep.AidlIncludeDirs...)
} else if dep, ok := module.(android.SourceFileProducer); ok { } else if dep, ok := module.(android.SourceFileProducer); ok {
@ -387,8 +385,7 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
ctx.ModuleErrorf("depends on non-java module %q", otherName) ctx.ModuleErrorf("depends on non-java module %q", otherName)
} }
case java9LibTag: case java9LibTag:
if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok {
dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo)
deps.java9Classpath = append(deps.java9Classpath, dep.HeaderJars...) deps.java9Classpath = append(deps.java9Classpath, dep.HeaderJars...)
} else { } else {
ctx.ModuleErrorf("depends on non-java module %q", otherName) ctx.ModuleErrorf("depends on non-java module %q", otherName)

View file

@ -121,7 +121,7 @@ func (j *JavaFuzzTest) GenerateAndroidBuildActions(ctx android.ModuleContext) {
_, sharedDeps := cc.CollectAllSharedDependencies(ctx) _, sharedDeps := cc.CollectAllSharedDependencies(ctx)
for _, dep := range sharedDeps { for _, dep := range sharedDeps {
sharedLibInfo := ctx.OtherModuleProvider(dep, cc.SharedLibraryInfoProvider).(cc.SharedLibraryInfo) sharedLibInfo, _ := android.OtherModuleProvider(ctx, dep, cc.SharedLibraryInfoProvider)
if sharedLibInfo.SharedLibrary != nil { if sharedLibInfo.SharedLibrary != nil {
arch := "lib" arch := "lib"
if sharedLibInfo.Target.Arch.ArchType.Multilib == "lib64" { if sharedLibInfo.Target.Arch.ArchType.Multilib == "lib64" {

View file

@ -94,7 +94,7 @@ func (h *hiddenAPI) initHiddenAPI(ctx android.ModuleContext, dexJar OptionalDexJ
// processing. // processing.
classesJars := android.Paths{classesJar} classesJars := android.Paths{classesJar}
ctx.VisitDirectDepsWithTag(hiddenApiAnnotationsTag, func(dep android.Module) { ctx.VisitDirectDepsWithTag(hiddenApiAnnotationsTag, func(dep android.Module) {
javaInfo := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) javaInfo, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider)
classesJars = append(classesJars, javaInfo.ImplementationJars...) classesJars = append(classesJars, javaInfo.ImplementationJars...)
}) })
h.classesJarPaths = classesJars h.classesJarPaths = classesJars

View file

@ -579,8 +579,7 @@ func (i *HiddenAPIInfo) mergeFromFragmentDeps(ctx android.ModuleContext, fragmen
// Merge all the information from the fragments. The fragments form a DAG so it is possible that // Merge all the information from the fragments. The fragments form a DAG so it is possible that
// this will introduce duplicates so they will be resolved after processing all the fragments. // this will introduce duplicates so they will be resolved after processing all the fragments.
for _, fragment := range fragments { for _, fragment := range fragments {
if ctx.OtherModuleHasProvider(fragment, HiddenAPIInfoProvider) { if info, ok := android.OtherModuleProvider(ctx, fragment, HiddenAPIInfoProvider); ok {
info := ctx.OtherModuleProvider(fragment, HiddenAPIInfoProvider).(HiddenAPIInfo)
i.TransitiveStubDexJarsByScope.addStubDexJarsByModule(info.TransitiveStubDexJarsByScope) i.TransitiveStubDexJarsByScope.addStubDexJarsByModule(info.TransitiveStubDexJarsByScope)
} }
} }
@ -777,8 +776,7 @@ func (i *HiddenAPIPropertyInfo) extractPackageRulesFromProperties(p *HiddenAPIPa
func (i *HiddenAPIPropertyInfo) gatherPropertyInfo(ctx android.ModuleContext, contents []android.Module) { func (i *HiddenAPIPropertyInfo) gatherPropertyInfo(ctx android.ModuleContext, contents []android.Module) {
for _, module := range contents { for _, module := range contents {
if ctx.OtherModuleHasProvider(module, hiddenAPIPropertyInfoProvider) { if info, ok := android.OtherModuleProvider(ctx, module, hiddenAPIPropertyInfoProvider); ok {
info := ctx.OtherModuleProvider(module, hiddenAPIPropertyInfoProvider).(HiddenAPIPropertyInfo)
i.FlagFilesByCategory.append(info.FlagFilesByCategory) i.FlagFilesByCategory.append(info.FlagFilesByCategory)
i.PackagePrefixes = append(i.PackagePrefixes, info.PackagePrefixes...) i.PackagePrefixes = append(i.PackagePrefixes, info.PackagePrefixes...)
i.SinglePackages = append(i.SinglePackages, info.SinglePackages...) i.SinglePackages = append(i.SinglePackages, info.SinglePackages...)
@ -1404,7 +1402,7 @@ func deferReportingMissingBootDexJar(ctx android.ModuleContext, module android.M
} }
if am, ok := module.(android.ApexModule); ok && am.InAnyApex() { if am, ok := module.(android.ApexModule); ok && am.InAnyApex() {
apexInfo := ctx.OtherModuleProvider(module, android.ApexInfoProvider).(android.ApexInfo) apexInfo, _ := android.OtherModuleProvider(ctx, module, android.ApexInfoProvider)
if apexInfo.IsForPlatform() { if apexInfo.IsForPlatform() {
return true return true
} }

View file

@ -67,8 +67,7 @@ func newMonolithicHiddenAPIInfo(ctx android.ModuleContext, flagFilesByCategory F
case *ClasspathFragmentElement: case *ClasspathFragmentElement:
fragment := e.Module() fragment := e.Module()
if ctx.OtherModuleHasProvider(fragment, HiddenAPIInfoProvider) { if info, ok := android.OtherModuleProvider(ctx, fragment, HiddenAPIInfoProvider); ok {
info := ctx.OtherModuleProvider(fragment, HiddenAPIInfoProvider).(HiddenAPIInfo)
monolithicInfo.append(&info) monolithicInfo.append(&info)
} else { } else {
ctx.ModuleErrorf("%s does not provide hidden API information", fragment) ctx.ModuleErrorf("%s does not provide hidden API information", fragment)

View file

@ -162,7 +162,7 @@ func isModuleInConfiguredList(ctx android.BaseModuleContext, module android.Modu
return false return false
} }
apexInfo := ctx.OtherModuleProvider(module, android.ApexInfoProvider).(android.ApexInfo) apexInfo, _ := android.OtherModuleProvider(ctx, module, android.ApexInfoProvider)
// Now match the apex part of the boot image configuration. // Now match the apex part of the boot image configuration.
requiredApex := configuredBootJars.Apex(index) requiredApex := configuredBootJars.Apex(index)

View file

@ -1257,7 +1257,7 @@ func (j *Test) generateAndroidBuildActionsWithConfig(ctx android.ModuleContext,
}) })
ctx.VisitDirectDepsWithTag(jniLibTag, func(dep android.Module) { ctx.VisitDirectDepsWithTag(jniLibTag, func(dep android.Module) {
sharedLibInfo := ctx.OtherModuleProvider(dep, cc.SharedLibraryInfoProvider).(cc.SharedLibraryInfo) sharedLibInfo, _ := android.OtherModuleProvider(ctx, dep, cc.SharedLibraryInfoProvider)
if sharedLibInfo.SharedLibrary != nil { if sharedLibInfo.SharedLibrary != nil {
// Copy to an intermediate output directory to append "lib[64]" to the path, // Copy to an intermediate output directory to append "lib[64]" to the path,
// so that it's compatible with the default rpath values. // so that it's compatible with the default rpath values.
@ -1902,19 +1902,19 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
tag := ctx.OtherModuleDependencyTag(dep) tag := ctx.OtherModuleDependencyTag(dep)
switch tag { switch tag {
case javaApiContributionTag: case javaApiContributionTag:
provider := ctx.OtherModuleProvider(dep, JavaApiImportProvider).(JavaApiImportInfo) provider, _ := android.OtherModuleProvider(ctx, dep, JavaApiImportProvider)
if provider.ApiFile == nil && !ctx.Config().AllowMissingDependencies() { if provider.ApiFile == nil && !ctx.Config().AllowMissingDependencies() {
ctx.ModuleErrorf("Error: %s has an empty api file.", dep.Name()) ctx.ModuleErrorf("Error: %s has an empty api file.", dep.Name())
} }
srcFilesInfo = append(srcFilesInfo, provider) srcFilesInfo = append(srcFilesInfo, provider)
case libTag: case libTag:
provider := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) provider, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider)
classPaths = append(classPaths, provider.HeaderJars...) classPaths = append(classPaths, provider.HeaderJars...)
case staticLibTag: case staticLibTag:
provider := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) provider, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider)
staticLibs = append(staticLibs, provider.HeaderJars...) staticLibs = append(staticLibs, provider.HeaderJars...)
case depApiSrcsTag: case depApiSrcsTag:
provider := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) provider, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider)
depApiSrcsStubsJar = provider.HeaderJars[0] depApiSrcsStubsJar = provider.HeaderJars[0]
case systemModulesTag: case systemModulesTag:
module := dep.(SystemModulesProvider) module := dep.(SystemModulesProvider)
@ -2220,8 +2220,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
j.collectTransitiveHeaderJars(ctx) j.collectTransitiveHeaderJars(ctx)
ctx.VisitDirectDeps(func(module android.Module) { ctx.VisitDirectDeps(func(module android.Module) {
tag := ctx.OtherModuleDependencyTag(module) tag := ctx.OtherModuleDependencyTag(module)
if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok {
dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo)
switch tag { switch tag {
case libTag, sdkLibTag: case libTag, sdkLibTag:
flags.classpath = append(flags.classpath, dep.HeaderJars...) flags.classpath = append(flags.classpath, dep.HeaderJars...)

View file

@ -413,8 +413,7 @@ func (l *linter) lint(ctx android.ModuleContext) {
extraLintCheckModules := ctx.GetDirectDepsWithTag(extraLintCheckTag) extraLintCheckModules := ctx.GetDirectDepsWithTag(extraLintCheckTag)
for _, extraLintCheckModule := range extraLintCheckModules { for _, extraLintCheckModule := range extraLintCheckModules {
if ctx.OtherModuleHasProvider(extraLintCheckModule, JavaInfoProvider) { if dep, ok := android.OtherModuleProvider(ctx, extraLintCheckModule, JavaInfoProvider); ok {
dep := ctx.OtherModuleProvider(extraLintCheckModule, JavaInfoProvider).(JavaInfo)
l.extraLintCheckJars = append(l.extraLintCheckJars, dep.ImplementationAndResourcesJars...) l.extraLintCheckJars = append(l.extraLintCheckJars, dep.ImplementationAndResourcesJars...)
} else { } else {
ctx.PropertyErrorf("lint.extra_check_modules", ctx.PropertyErrorf("lint.extra_check_modules",

View file

@ -180,7 +180,7 @@ func (b *platformBootclasspathModule) GenerateAndroidBuildActions(ctx android.Mo
var transitiveSrcFiles android.Paths var transitiveSrcFiles android.Paths
for _, module := range allModules { for _, module := range allModules {
depInfo := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) depInfo, _ := android.OtherModuleProvider(ctx, module, JavaInfoProvider)
if depInfo.TransitiveSrcFiles != nil { if depInfo.TransitiveSrcFiles != nil {
transitiveSrcFiles = append(transitiveSrcFiles, depInfo.TransitiveSrcFiles.ToList()...) transitiveSrcFiles = append(transitiveSrcFiles, depInfo.TransitiveSrcFiles.ToList()...)
} }
@ -219,7 +219,7 @@ func (b *platformBootclasspathModule) configuredJars(ctx android.ModuleContext)
// Include jars from APEXes that don't populate their classpath proto config. // Include jars from APEXes that don't populate their classpath proto config.
remainingJars := dexpreopt.GetGlobalConfig(ctx).ApexBootJars remainingJars := dexpreopt.GetGlobalConfig(ctx).ApexBootJars
for _, fragment := range b.fragments { for _, fragment := range b.fragments {
info := ctx.OtherModuleProvider(fragment, ClasspathFragmentProtoContentInfoProvider).(ClasspathFragmentProtoContentInfo) info, _ := android.OtherModuleProvider(ctx, fragment, ClasspathFragmentProtoContentInfoProvider)
if info.ClasspathFragmentProtoGenerated { if info.ClasspathFragmentProtoGenerated {
remainingJars = remainingJars.RemoveList(info.ClasspathFragmentProtoContents) remainingJars = remainingJars.RemoveList(info.ClasspathFragmentProtoContents)
} }
@ -241,7 +241,7 @@ func (b *platformBootclasspathModule) platformJars(ctx android.PathContext) andr
func (b *platformBootclasspathModule) checkPlatformModules(ctx android.ModuleContext, modules []android.Module) { func (b *platformBootclasspathModule) checkPlatformModules(ctx android.ModuleContext, modules []android.Module) {
// TODO(satayev): change this check to only allow core-icu4j, all apex jars should not be here. // TODO(satayev): change this check to only allow core-icu4j, all apex jars should not be here.
for _, m := range modules { for _, m := range modules {
apexInfo := ctx.OtherModuleProvider(m, android.ApexInfoProvider).(android.ApexInfo) apexInfo, _ := android.OtherModuleProvider(ctx, m, android.ApexInfoProvider)
fromUpdatableApex := apexInfo.Updatable fromUpdatableApex := apexInfo.Updatable
if fromUpdatableApex { if fromUpdatableApex {
// error: this jar is part of an updatable apex // error: this jar is part of an updatable apex
@ -255,7 +255,7 @@ func (b *platformBootclasspathModule) checkPlatformModules(ctx android.ModuleCon
// checkApexModules ensures that the apex modules supplied are not from the platform. // checkApexModules ensures that the apex modules supplied are not from the platform.
func (b *platformBootclasspathModule) checkApexModules(ctx android.ModuleContext, modules []android.Module) { func (b *platformBootclasspathModule) checkApexModules(ctx android.ModuleContext, modules []android.Module) {
for _, m := range modules { for _, m := range modules {
apexInfo := ctx.OtherModuleProvider(m, android.ApexInfoProvider).(android.ApexInfo) apexInfo, _ := android.OtherModuleProvider(ctx, m, android.ApexInfoProvider)
fromUpdatableApex := apexInfo.Updatable fromUpdatableApex := apexInfo.Updatable
if fromUpdatableApex { if fromUpdatableApex {
// ok: this jar is part of an updatable apex // ok: this jar is part of an updatable apex

View file

@ -193,7 +193,7 @@ func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext)
} }
handleLibDeps := func(dep android.Module) { handleLibDeps := func(dep android.Module) {
m := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) m, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider)
r.libs = append(r.libs, ctx.OtherModuleName(dep)) r.libs = append(r.libs, ctx.OtherModuleName(dep))
if !android.InList(ctx.OtherModuleName(dep), config.FrameworkLibraries) { if !android.InList(ctx.OtherModuleName(dep), config.FrameworkLibraries) {
combinedJarJars = append(combinedJarJars, m.ImplementationAndResourcesJars...) combinedJarJars = append(combinedJarJars, m.ImplementationAndResourcesJars...)
@ -305,8 +305,7 @@ func (r *robolectricTest) generateRoboSrcJar(ctx android.ModuleContext, outputFi
srcJarDeps := append(android.Paths(nil), instrumentedApp.srcJarDeps...) srcJarDeps := append(android.Paths(nil), instrumentedApp.srcJarDeps...)
for _, m := range ctx.GetDirectDepsWithTag(roboCoverageLibsTag) { for _, m := range ctx.GetDirectDepsWithTag(roboCoverageLibsTag) {
if ctx.OtherModuleHasProvider(m, JavaInfoProvider) { if dep, ok := android.OtherModuleProvider(ctx, m, JavaInfoProvider); ok {
dep := ctx.OtherModuleProvider(m, JavaInfoProvider).(JavaInfo)
srcJarArgs = append(srcJarArgs, dep.SrcJarArgs...) srcJarArgs = append(srcJarArgs, dep.SrcJarArgs...)
srcJarDeps = append(srcJarDeps, dep.SrcJarDeps...) srcJarDeps = append(srcJarDeps, dep.SrcJarDeps...)
} }

View file

@ -673,8 +673,7 @@ type scopePaths struct {
} }
func (paths *scopePaths) extractStubsLibraryInfoFromDependency(ctx android.ModuleContext, dep android.Module) error { func (paths *scopePaths) extractStubsLibraryInfoFromDependency(ctx android.ModuleContext, dep android.Module) error {
if ctx.OtherModuleHasProvider(dep, JavaInfoProvider) { if lib, ok := android.OtherModuleProvider(ctx, dep, JavaInfoProvider); ok {
lib := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo)
paths.stubsHeaderPath = lib.HeaderJars paths.stubsHeaderPath = lib.HeaderJars
paths.stubsImplPath = lib.ImplementationJars paths.stubsImplPath = lib.ImplementationJars
@ -2037,7 +2036,7 @@ func PrebuiltJars(ctx android.BaseModuleContext, baseName string, s android.SdkS
// false. // false.
func withinSameApexesAs(ctx android.BaseModuleContext, other android.Module) bool { func withinSameApexesAs(ctx android.BaseModuleContext, other android.Module) bool {
apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider)
otherApexInfo := ctx.OtherModuleProvider(other, android.ApexInfoProvider).(android.ApexInfo) otherApexInfo, _ := android.OtherModuleProvider(ctx, other, android.ApexInfoProvider)
return len(otherApexInfo.InApexVariants) > 0 && reflect.DeepEqual(apexInfo.InApexVariants, otherApexInfo.InApexVariants) return len(otherApexInfo.InApexVariants) > 0 && reflect.DeepEqual(apexInfo.InApexVariants, otherApexInfo.InApexVariants)
} }

View file

@ -159,7 +159,7 @@ func (system *SystemModules) GenerateAndroidBuildActions(ctx android.ModuleConte
var jars android.Paths var jars android.Paths
ctx.VisitDirectDepsWithTag(systemModulesLibsTag, func(module android.Module) { ctx.VisitDirectDepsWithTag(systemModulesLibsTag, func(module android.Module) {
dep, _ := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) dep, _ := android.OtherModuleProvider(ctx, module, JavaInfoProvider)
jars = append(jars, dep.HeaderJars...) jars = append(jars, dep.HeaderJars...)
}) })

View file

@ -67,8 +67,7 @@ func (afdo *afdo) flags(ctx android.ModuleContext, flags Flags, deps PathDeps) (
} }
ctx.VisitDirectDepsWithTag(cc.FdoProfileTag, func(m android.Module) { ctx.VisitDirectDepsWithTag(cc.FdoProfileTag, func(m android.Module) {
if ctx.OtherModuleHasProvider(m, cc.FdoProfileProvider) { if info, ok := android.OtherModuleProvider(ctx, m, cc.FdoProfileProvider); ok {
info := ctx.OtherModuleProvider(m, cc.FdoProfileProvider).(cc.FdoProfileInfo)
path := info.Path path := info.Path
profileUseFlag := fmt.Sprintf(afdoFlagFormat, path.String()) profileUseFlag := fmt.Sprintf(afdoFlagFormat, path.String())
flags.RustFlags = append(flags.RustFlags, profileUseFlag) flags.RustFlags = append(flags.RustFlags, profileUseFlag)

View file

@ -1168,7 +1168,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
ctx.VisitDirectDeps(func(dep android.Module) { ctx.VisitDirectDeps(func(dep android.Module) {
if dep.Name() == "api_imports" { if dep.Name() == "api_imports" {
apiImportInfo = ctx.OtherModuleProvider(dep, multitree.ApiImportsProvider).(multitree.ApiImportInfo) apiImportInfo, _ = android.OtherModuleProvider(ctx, dep, multitree.ApiImportsProvider)
hasApiImportInfo = true hasApiImportInfo = true
} }
}) })
@ -1279,7 +1279,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
//Append the dependencies exportedDirs, except for proc-macros which target a different arch/OS //Append the dependencies exportedDirs, except for proc-macros which target a different arch/OS
if depTag != procMacroDepTag { if depTag != procMacroDepTag {
exportedInfo := ctx.OtherModuleProvider(dep, FlagExporterInfoProvider).(FlagExporterInfo) exportedInfo, _ := android.OtherModuleProvider(ctx, dep, FlagExporterInfoProvider)
depPaths.linkDirs = append(depPaths.linkDirs, exportedInfo.LinkDirs...) depPaths.linkDirs = append(depPaths.linkDirs, exportedInfo.LinkDirs...)
depPaths.depFlags = append(depPaths.depFlags, exportedInfo.Flags...) depPaths.depFlags = append(depPaths.depFlags, exportedInfo.Flags...)
depPaths.linkObjects = append(depPaths.linkObjects, exportedInfo.LinkObjects...) depPaths.linkObjects = append(depPaths.linkObjects, exportedInfo.LinkObjects...)
@ -1295,7 +1295,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
if depTag == sourceDepTag { if depTag == sourceDepTag {
if _, ok := mod.sourceProvider.(*protobufDecorator); ok && mod.Source() { if _, ok := mod.sourceProvider.(*protobufDecorator); ok && mod.Source() {
if _, ok := rustDep.sourceProvider.(*protobufDecorator); ok { if _, ok := rustDep.sourceProvider.(*protobufDecorator); ok {
exportedInfo := ctx.OtherModuleProvider(dep, cc.FlagExporterInfoProvider).(cc.FlagExporterInfo) exportedInfo, _ := android.OtherModuleProvider(ctx, dep, cc.FlagExporterInfoProvider)
depPaths.depIncludePaths = append(depPaths.depIncludePaths, exportedInfo.IncludeDirs...) depPaths.depIncludePaths = append(depPaths.depIncludePaths, exportedInfo.IncludeDirs...)
} }
} }
@ -1348,7 +1348,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
depPaths.linkObjects = append(depPaths.linkObjects, linkObject.String()) depPaths.linkObjects = append(depPaths.linkObjects, linkObject.String())
depPaths.linkDirs = append(depPaths.linkDirs, linkPath) depPaths.linkDirs = append(depPaths.linkDirs, linkPath)
exportedInfo := ctx.OtherModuleProvider(dep, cc.FlagExporterInfoProvider).(cc.FlagExporterInfo) exportedInfo, _ := android.OtherModuleProvider(ctx, dep, cc.FlagExporterInfoProvider)
depPaths.depIncludePaths = append(depPaths.depIncludePaths, exportedInfo.IncludeDirs...) depPaths.depIncludePaths = append(depPaths.depIncludePaths, exportedInfo.IncludeDirs...)
depPaths.depSystemIncludePaths = append(depPaths.depSystemIncludePaths, exportedInfo.SystemIncludeDirs...) depPaths.depSystemIncludePaths = append(depPaths.depSystemIncludePaths, exportedInfo.SystemIncludeDirs...)
depPaths.depClangFlags = append(depPaths.depClangFlags, exportedInfo.Flags...) depPaths.depClangFlags = append(depPaths.depClangFlags, exportedInfo.Flags...)
@ -1392,7 +1392,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
directAndroidMkSharedLibs = append(directAndroidMkSharedLibs, makeLibName) directAndroidMkSharedLibs = append(directAndroidMkSharedLibs, makeLibName)
exportDep = true exportDep = true
case cc.IsHeaderDepTag(depTag): case cc.IsHeaderDepTag(depTag):
exportedInfo := ctx.OtherModuleProvider(dep, cc.FlagExporterInfoProvider).(cc.FlagExporterInfo) exportedInfo, _ := android.OtherModuleProvider(ctx, dep, cc.FlagExporterInfoProvider)
depPaths.depIncludePaths = append(depPaths.depIncludePaths, exportedInfo.IncludeDirs...) depPaths.depIncludePaths = append(depPaths.depIncludePaths, exportedInfo.IncludeDirs...)
depPaths.depSystemIncludePaths = append(depPaths.depSystemIncludePaths, exportedInfo.SystemIncludeDirs...) depPaths.depSystemIncludePaths = append(depPaths.depSystemIncludePaths, exportedInfo.SystemIncludeDirs...)
depPaths.depGeneratedHeaders = append(depPaths.depGeneratedHeaders, exportedInfo.GeneratedHeaders...) depPaths.depGeneratedHeaders = append(depPaths.depGeneratedHeaders, exportedInfo.GeneratedHeaders...)

View file

@ -166,10 +166,7 @@ func (s *sdk) collectMembers(ctx android.ModuleContext) {
// Keep track of which multilib variants are used by the sdk. // Keep track of which multilib variants are used by the sdk.
s.multilibUsages = s.multilibUsages.addArchType(child.Target().Arch.ArchType) s.multilibUsages = s.multilibUsages.addArchType(child.Target().Arch.ArchType)
var exportedComponentsInfo android.ExportedComponentsInfo exportedComponentsInfo, _ := android.OtherModuleProvider(ctx, child, android.ExportedComponentsInfoProvider)
if ctx.OtherModuleHasProvider(child, android.ExportedComponentsInfoProvider) {
exportedComponentsInfo = ctx.OtherModuleProvider(child, android.ExportedComponentsInfoProvider).(android.ExportedComponentsInfo)
}
var container android.Module var container android.Module
if parent != ctx.Module() { if parent != ctx.Module() {
@ -607,7 +604,7 @@ func (s *sdk) generateInfoData(ctx android.ModuleContext, memberVariantDeps []sd
name: name, name: name,
} }
additionalSdkInfo := ctx.OtherModuleProvider(module, android.AdditionalSdkInfoProvider).(android.AdditionalSdkInfo) additionalSdkInfo, _ := android.OtherModuleProvider(ctx, module, android.AdditionalSdkInfoProvider)
info.memberSpecific = additionalSdkInfo.Properties info.memberSpecific = additionalSdkInfo.Properties
name2Info[name] = info name2Info[name] = info
@ -1171,7 +1168,7 @@ func (s *snapshotBuilder) AddPrebuiltModule(member android.SdkMember, moduleType
// The licenses are the same for all variants. // The licenses are the same for all variants.
mctx := s.ctx mctx := s.ctx
licenseInfo := mctx.OtherModuleProvider(variant, android.LicenseInfoProvider).(android.LicenseInfo) licenseInfo, _ := android.OtherModuleProvider(mctx, variant, android.LicenseInfoProvider)
if len(licenseInfo.Licenses) > 0 { if len(licenseInfo.Licenses) > 0 {
m.AddPropertyWithTag("licenses", licenseInfo.Licenses, s.OptionalSdkMemberReferencePropertyTag()) m.AddPropertyWithTag("licenses", licenseInfo.Licenses, s.OptionalSdkMemberReferencePropertyTag())
} }
@ -1417,7 +1414,7 @@ func selectApexVariantsWhereAvailable(ctx *memberContext, variants []android.Mod
variantsByApex := make(map[string]android.Module) variantsByApex := make(map[string]android.Module)
conflictDetected := false conflictDetected := false
for _, variant := range list { for _, variant := range list {
apexInfo := moduleCtx.OtherModuleProvider(variant, android.ApexInfoProvider).(android.ApexInfo) apexInfo, _ := android.OtherModuleProvider(moduleCtx, variant, android.ApexInfoProvider)
apexVariationName := apexInfo.ApexVariationName apexVariationName := apexInfo.ApexVariationName
// If there are two variants for a specific APEX variation then there is conflict. // If there are two variants for a specific APEX variation then there is conflict.
if _, ok := variantsByApex[apexVariationName]; ok { if _, ok := variantsByApex[apexVariationName]; ok {

View file

@ -96,10 +96,8 @@ func (module *CodeMetadataModule) GenerateAndroidBuildActions(ctx android.Module
for _, m := range ctx.GetDirectDepsWithTag(codeDepTag) { for _, m := range ctx.GetDirectDepsWithTag(codeDepTag) {
targetName := m.Name() targetName := m.Name()
var moduleSrcs []string var moduleSrcs []string
if ctx.OtherModuleHasProvider(m, blueprint.SrcsFileProviderKey) { if srcsFileInfo, ok := android.OtherModuleProvider(ctx, m, blueprint.SrcsFileProviderKey); ok {
moduleSrcs = ctx.OtherModuleProvider( moduleSrcs = srcsFileInfo.SrcPaths
m, blueprint.SrcsFileProviderKey,
).(blueprint.SrcsFileProviderData).SrcPaths
} }
if module.properties.MultiOwnership { if module.properties.MultiOwnership {
metadata := &code_metadata_internal_proto.CodeMetadataInternal_TargetOwnership{ metadata := &code_metadata_internal_proto.CodeMetadataInternal_TargetOwnership{

View file

@ -91,7 +91,7 @@ var TestModuleProviderKey = blueprint.NewProvider[TestModuleProviderData]()
func (module *TestSpecModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { func (module *TestSpecModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
for _, m := range ctx.GetDirectDepsWithTag(testsDepTag) { for _, m := range ctx.GetDirectDepsWithTag(testsDepTag) {
if !ctx.OtherModuleHasProvider(m, TestModuleProviderKey) { if _, ok := android.OtherModuleProvider(ctx, m, TestModuleProviderKey); !ok {
ctx.ModuleErrorf(ErrTestModuleDataNotFound, m.Name()) ctx.ModuleErrorf(ErrTestModuleDataNotFound, m.Name())
} }
} }