diff options
author | 2023-12-18 22:43:45 +0000 | |
---|---|---|
committer | 2023-12-18 22:43:45 +0000 | |
commit | 51428c451a73d9d246ccecd045b0b8c76a417df1 (patch) | |
tree | 5113d87ec33b1e96150a9ad5df463e579facdb18 | |
parent | 8070c4b457d890455bd7c8437ab84d02d9e7f3bc (diff) | |
parent | 5a37718c956b1bfbda5e236c0fe50f08661a81de (diff) |
Merge changes I6f116385,Id77f514d,I73479de1,If58f4b53 into main
* changes:
Convert ModuleProvder to generic providers API
Convert OtherModuleProvider to generic providers API
Convert Provider to generic providers API
Convert SetProvider to generic providers API
99 files changed, 306 insertions, 377 deletions
diff --git a/aconfig/aconfig_declarations.go b/aconfig/aconfig_declarations.go index 272ab038e..80d36afd5 100644 --- a/aconfig/aconfig_declarations.go +++ b/aconfig/aconfig_declarations.go @@ -134,16 +134,13 @@ func (module *DeclarationsModule) GenerateAndroidBuildActions(ctx android.Module // Get the values that came from the global RELEASE_ACONFIG_VALUE_SETS flag valuesFiles := make([]android.Path, 0) ctx.VisitDirectDeps(func(dep android.Module) { - if !ctx.OtherModuleHasProvider(dep, valueSetProviderKey) { - // Other modules get injected as dependencies too, for example the license modules - return - } - depData := ctx.OtherModuleProvider(dep, valueSetProviderKey).(valueSetProviderData) - paths, ok := depData.AvailablePackages[module.properties.Package] - if ok { - valuesFiles = append(valuesFiles, paths...) - for _, path := range paths { - module.properties.Values = append(module.properties.Values, path.String()) + if depData, ok := android.OtherModuleProvider(ctx, dep, valueSetProviderKey); ok { + paths, ok := depData.AvailablePackages[module.properties.Package] + if ok { + valuesFiles = append(valuesFiles, paths...) + for _, path := range paths { + module.properties.Values = append(module.properties.Values, path.String()) + } } } }) @@ -177,7 +174,7 @@ func (module *DeclarationsModule) GenerateAndroidBuildActions(ctx android.Module Description: "aconfig_text", }) - ctx.SetProvider(DeclarationsProviderKey, DeclarationsProviderData{ + android.SetProvider(ctx, DeclarationsProviderKey, DeclarationsProviderData{ Package: module.properties.Package, Container: module.properties.Container, IntermediateCacheOutputPath: intermediateCacheFilePath, @@ -190,11 +187,11 @@ func CollectDependencyAconfigFiles(ctx android.ModuleContext, mergedAconfigFiles *mergedAconfigFiles = make(map[string]android.Paths) } 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) 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 { (*mergedAconfigFiles)[container] = append((*mergedAconfigFiles)[container], v...) } @@ -205,7 +202,7 @@ func CollectDependencyAconfigFiles(ctx android.ModuleContext, mergedAconfigFiles (*mergedAconfigFiles)[container] = mergeAconfigFiles(ctx, aconfigFiles) } - ctx.SetProvider(TransitiveDeclarationsInfoProvider, TransitiveDeclarationsInfo{ + android.SetProvider(ctx, TransitiveDeclarationsInfoProvider, TransitiveDeclarationsInfo{ AconfigFiles: *mergedAconfigFiles, }) } diff --git a/aconfig/aconfig_declarations_test.go b/aconfig/aconfig_declarations_test.go index 9035c710d..1b4acabeb 100644 --- a/aconfig/aconfig_declarations_test.go +++ b/aconfig/aconfig_declarations_test.go @@ -38,7 +38,7 @@ func TestAconfigDeclarations(t *testing.T) { module := result.ModuleForTests("module_name", "").Module().(*DeclarationsModule) // Check that the provider has the right contents - depData := result.ModuleProvider(module, DeclarationsProviderKey).(DeclarationsProviderData) + depData, _ := android.SingletonModuleProvider(result, module, DeclarationsProviderKey) android.AssertStringEquals(t, "package", depData.Package, "com.example.package") android.AssertStringEquals(t, "container", depData.Container, "com.android.foo") if !strings.HasSuffix(depData.IntermediateCacheOutputPath.String(), "/intermediate.pb") { diff --git a/aconfig/aconfig_value_set.go b/aconfig/aconfig_value_set.go index 4f142e518..7ba76c044 100644 --- a/aconfig/aconfig_value_set.go +++ b/aconfig/aconfig_value_set.go @@ -73,18 +73,14 @@ func (module *ValueSetModule) GenerateAndroidBuildActions(ctx android.ModuleCont // to append values to their aconfig actions. packages := make(map[string]android.Paths) ctx.VisitDirectDeps(func(dep android.Module) { - if !ctx.OtherModuleHasProvider(dep, valuesProviderKey) { - // Other modules get injected as dependencies too, for example the license modules - return + if depData, ok := android.OtherModuleProvider(ctx, dep, valuesProviderKey); ok { + srcs := make([]android.Path, len(depData.Values)) + 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 }) - ctx.SetProvider(valueSetProviderKey, valueSetProviderData{ + android.SetProvider(ctx, valueSetProviderKey, valueSetProviderData{ AvailablePackages: packages, }) } diff --git a/aconfig/aconfig_value_set_test.go b/aconfig/aconfig_value_set_test.go index 91278729e..7d1899926 100644 --- a/aconfig/aconfig_value_set_test.go +++ b/aconfig/aconfig_value_set_test.go @@ -38,6 +38,6 @@ func TestAconfigValueSet(t *testing.T) { module := result.ModuleForTests("module_name", "").Module().(*ValueSetModule) // Check that the provider has the right contents - depData := result.ModuleProvider(module, valueSetProviderKey).(valueSetProviderData) + depData, _ := android.SingletonModuleProvider(result, module, valueSetProviderKey) android.AssertStringEquals(t, "AvailablePackages", "blah.aconfig_values", depData.AvailablePackages["foo.package"][0].String()) } diff --git a/aconfig/aconfig_values.go b/aconfig/aconfig_values.go index 10205bb18..239b10c4b 100644 --- a/aconfig/aconfig_values.go +++ b/aconfig/aconfig_values.go @@ -64,5 +64,5 @@ func (module *ValuesModule) GenerateAndroidBuildActions(ctx android.ModuleContex Package: module.properties.Package, Values: android.PathsForModuleSrc(ctx, module.properties.Srcs), } - ctx.SetProvider(valuesProviderKey, providerData) + android.SetProvider(ctx, valuesProviderKey, providerData) } diff --git a/aconfig/aconfig_values_test.go b/aconfig/aconfig_values_test.go index ab457f06a..526579c40 100644 --- a/aconfig/aconfig_values_test.go +++ b/aconfig/aconfig_values_test.go @@ -33,7 +33,7 @@ func TestAconfigValues(t *testing.T) { module := result.ModuleForTests("module_name", "").Module().(*ValuesModule) // Check that the provider has the right contents - depData := result.ModuleProvider(module, valuesProviderKey).(valuesProviderData) + depData, _ := android.SingletonModuleProvider(result, module, valuesProviderKey) android.AssertStringEquals(t, "package", "foo.package", depData.Package) android.AssertPathsEndWith(t, "srcs", []string{"blah.aconfig_values"}, depData.Values) } diff --git a/aconfig/all_aconfig_declarations.go b/aconfig/all_aconfig_declarations.go index 2686e760e..d8604985b 100644 --- a/aconfig/all_aconfig_declarations.go +++ b/aconfig/all_aconfig_declarations.go @@ -37,10 +37,10 @@ func (this *allAconfigDeclarationsSingleton) GenerateBuildActions(ctx android.Si // Find all of the aconfig_declarations modules var cacheFiles android.Paths ctx.VisitAllModules(func(module android.Module) { - if !ctx.ModuleHasProvider(module, DeclarationsProviderKey) { + decl, ok := android.SingletonModuleProvider(ctx, module, DeclarationsProviderKey) + if !ok { return } - decl := ctx.ModuleProvider(module, DeclarationsProviderKey).(DeclarationsProviderData) cacheFiles = append(cacheFiles, decl.IntermediateCacheOutputPath) }) diff --git a/aconfig/codegen/cc_aconfig_library.go b/aconfig/codegen/cc_aconfig_library.go index 30f6863a0..2c8369be0 100644 --- a/aconfig/codegen/cc_aconfig_library.go +++ b/aconfig/codegen/cc_aconfig_library.go @@ -92,7 +92,7 @@ func (this *CcAconfigLibraryCallbacks) GeneratorSources(ctx cc.ModuleContext) cc if len(declarationsModules) != 1 { 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. this.generatedDir = android.PathForModuleGen(ctx) @@ -122,7 +122,7 @@ func (this *CcAconfigLibraryCallbacks) GeneratorBuildActions(ctx cc.ModuleContex if len(declarationsModules) != 1 { 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") if !isModeSupported(mode) { diff --git a/aconfig/codegen/java_aconfig_library.go b/aconfig/codegen/java_aconfig_library.go index 202e358ee..b33481b20 100644 --- a/aconfig/codegen/java_aconfig_library.go +++ b/aconfig/codegen/java_aconfig_library.go @@ -74,7 +74,7 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild if len(declarationsModules) != 1 { 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 srcJarPath := android.PathForModuleGen(ctx, ctx.ModuleName()+".srcjar") diff --git a/aconfig/codegen/rust_aconfig_library.go b/aconfig/codegen/rust_aconfig_library.go index e5870562c..88f5b452c 100644 --- a/aconfig/codegen/rust_aconfig_library.go +++ b/aconfig/codegen/rust_aconfig_library.go @@ -65,7 +65,7 @@ func (a *aconfigDecorator) GenerateSource(ctx rust.ModuleContext, deps rust.Path if len(declarationsModules) != 1 { 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") if !isModeSupported(mode) { diff --git a/aconfig/exported_java_aconfig_library.go b/aconfig/exported_java_aconfig_library.go index 45c5e3990..864481065 100644 --- a/aconfig/exported_java_aconfig_library.go +++ b/aconfig/exported_java_aconfig_library.go @@ -30,10 +30,10 @@ func (this *exportedJavaDeclarationsLibrarySingleton) GenerateBuildActions(ctx a // Find all of the aconfig_declarations modules var cacheFiles android.Paths ctx.VisitAllModules(func(module android.Module) { - if !ctx.ModuleHasProvider(module, DeclarationsProviderKey) { + decl, ok := android.SingletonModuleProvider(ctx, module, DeclarationsProviderKey) + if !ok { return } - decl := ctx.ModuleProvider(module, DeclarationsProviderKey).(DeclarationsProviderData) cacheFiles = append(cacheFiles, decl.IntermediateCacheOutputPath) }) diff --git a/aidl_library/aidl_library.go b/aidl_library/aidl_library.go index c2f97d96c..01415456d 100644 --- a/aidl_library/aidl_library.go +++ b/aidl_library/aidl_library.go @@ -99,14 +99,13 @@ func (lib *AidlLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { includeDirsDepSetBuilder.Direct(includeDir) for _, dep := range ctx.GetDirectDepsWithTag(aidlLibraryTag) { - if ctx.OtherModuleHasProvider(dep, AidlLibraryProvider) { - info := ctx.OtherModuleProvider(dep, AidlLibraryProvider).(AidlLibraryInfo) + if info, ok := android.OtherModuleProvider(ctx, dep, AidlLibraryProvider); ok { includeDirsDepSetBuilder.Transitive(&info.IncludeDirs) hdrsDepSetBuilder.Transitive(&info.Hdrs) } } - ctx.SetProvider(AidlLibraryProvider, AidlLibraryInfo{ + android.SetProvider(ctx, AidlLibraryProvider, AidlLibraryInfo{ Srcs: srcs, IncludeDirs: *includeDirsDepSetBuilder.Build(), Hdrs: *hdrsDepSetBuilder.Build(), diff --git a/aidl_library/aidl_library_test.go b/aidl_library/aidl_library_test.go index 020562904..01eab0eaf 100644 --- a/aidl_library/aidl_library_test.go +++ b/aidl_library/aidl_library_test.go @@ -46,7 +46,7 @@ func TestAidlLibrary(t *testing.T) { ).RunTest(t).TestContext foo := ctx.ModuleForTests("foo", "").Module().(*AidlLibrary) - actualInfo := ctx.ModuleProvider(foo, AidlLibraryProvider).(AidlLibraryInfo) + actualInfo, _ := android.SingletonModuleProvider(ctx, foo, AidlLibraryProvider) android.AssertArrayString( t, @@ -95,7 +95,7 @@ func TestAidlLibraryWithoutStripImportPrefix(t *testing.T) { ).RunTest(t).TestContext foo := ctx.ModuleForTests("foo", "").Module().(*AidlLibrary) - actualInfo := ctx.ModuleProvider(foo, AidlLibraryProvider).(AidlLibraryInfo) + actualInfo, _ := android.SingletonModuleProvider(ctx, foo, AidlLibraryProvider) android.AssertArrayString( t, diff --git a/android/androidmk.go b/android/androidmk.go index 097075e5b..a0ed1e449 100644 --- a/android/androidmk.go +++ b/android/androidmk.go @@ -492,8 +492,6 @@ type fillInEntriesContext interface { ModuleDir(module blueprint.Module) string ModuleSubDir(module blueprint.Module) string Config() Config - ModuleProvider(module blueprint.Module, provider blueprint.AnyProviderKey) any - ModuleHasProvider(module blueprint.Module, provider blueprint.AnyProviderKey) bool moduleProvider(module blueprint.Module, provider blueprint.AnyProviderKey) (any, bool) ModuleType(module blueprint.Module) string } @@ -624,8 +622,7 @@ func (a *AndroidMkEntries) fillInEntries(ctx fillInEntriesContext, mod blueprint } } - if ctx.ModuleHasProvider(mod, LicenseMetadataProvider) { - licenseMetadata := ctx.ModuleProvider(mod, LicenseMetadataProvider).(*LicenseMetadataInfo) + if licenseMetadata, ok := SingletonModuleProvider(ctx, mod, LicenseMetadataProvider); ok { a.SetPath("LOCAL_SOONG_LICENSE_METADATA", licenseMetadata.LicenseMetadataPath) } diff --git a/android/apex_contributions.go b/android/apex_contributions.go index 89058fd5a..34941c091 100644 --- a/android/apex_contributions.go +++ b/android/apex_contributions.go @@ -119,7 +119,7 @@ func (a *allApexContributions) SetPrebuiltSelectionInfoProvider(ctx BaseModuleCo ctx.ModuleErrorf("%s is not an apex_contributions module\n", child.Name()) } }) - ctx.SetProvider(PrebuiltSelectionInfoProvider, p) + SetProvider(ctx, PrebuiltSelectionInfoProvider, p) } // A provider containing metadata about whether source or prebuilt should be used diff --git a/android/deapexer.go b/android/deapexer.go index a674b424e..de933d1a4 100644 --- a/android/deapexer.go +++ b/android/deapexer.go @@ -150,7 +150,7 @@ type RequiresFilesFromPrebuiltApexTag interface { func FindDeapexerProviderForModule(ctx ModuleContext) *DeapexerInfo { var di *DeapexerInfo ctx.VisitDirectDepsWithTag(DeapexerTag, func(m Module) { - c := ctx.OtherModuleProvider(m, DeapexerProvider).(DeapexerInfo) + c, _ := OtherModuleProvider(ctx, m, DeapexerProvider) p := &c if di != nil { // If two DeapexerInfo providers have been found then check if they are @@ -167,7 +167,7 @@ func FindDeapexerProviderForModule(ctx ModuleContext) *DeapexerInfo { if di != nil { return di } - ai := ctx.Provider(ApexInfoProvider).(ApexInfo) + ai, _ := ModuleProvider(ctx, ApexInfoProvider) ctx.ModuleErrorf("No prebuilt APEX provides a deapexer module for APEX variant %s", ai.ApexVariationName) return nil } diff --git a/android/filegroup.go b/android/filegroup.go index 04bd8a8ad..0aabb6886 100644 --- a/android/filegroup.go +++ b/android/filegroup.go @@ -92,7 +92,7 @@ func (fg *fileGroup) GenerateAndroidBuildActions(ctx ModuleContext) { if fg.properties.Path != nil { fg.srcs = PathsWithModuleSrcSubDir(ctx, fg.srcs, String(fg.properties.Path)) } - ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: fg.srcs.Strings()}) + SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: fg.srcs.Strings()}) } func (fg *fileGroup) Srcs() Paths { diff --git a/android/license_metadata.go b/android/license_metadata.go index b2ba5e57c..463fd07b3 100644 --- a/android/license_metadata.go +++ b/android/license_metadata.go @@ -78,8 +78,7 @@ func buildLicenseMetadata(ctx ModuleContext, licenseMetadataFile WritablePath) { return } - if ctx.OtherModuleHasProvider(dep, LicenseMetadataProvider) { - info := ctx.OtherModuleProvider(dep, LicenseMetadataProvider).(*LicenseMetadataInfo) + if info, ok := OtherModuleProvider(ctx, dep, LicenseMetadataProvider); ok { allDepMetadataFiles = append(allDepMetadataFiles, info.LicenseMetadataPath) if isContainer || isInstallDepNeeded(dep, ctx.OtherModuleDependencyTag(dep)) { allDepMetadataDepSets = append(allDepMetadataDepSets, info.LicenseMetadataDepSet) @@ -175,7 +174,7 @@ func buildLicenseMetadata(ctx ModuleContext, licenseMetadataFile WritablePath) { }, }) - ctx.SetProvider(LicenseMetadataProvider, &LicenseMetadataInfo{ + SetProvider(ctx, LicenseMetadataProvider, &LicenseMetadataInfo{ LicenseMetadataPath: licenseMetadataFile, LicenseMetadataDepSet: NewDepSet(TOPOLOGICAL, Paths{licenseMetadataFile}, allDepMetadataDepSets), }) diff --git a/android/licenses.go b/android/licenses.go index 45c914fa1..be1eedeff 100644 --- a/android/licenses.go +++ b/android/licenses.go @@ -230,7 +230,7 @@ func licensesPropertyFlattener(ctx ModuleContext) { licenseInfo := LicenseInfo{ Licenses: licenses, } - ctx.SetProvider(LicenseInfoProvider, licenseInfo) + SetProvider(ctx, LicenseInfoProvider, licenseInfo) } // Update a property string array with a distinct union of its values and a list of new values. diff --git a/android/makevars.go b/android/makevars.go index 5a9fe7c66..d4cfd299e 100644 --- a/android/makevars.go +++ b/android/makevars.go @@ -92,7 +92,6 @@ type MakeVarsContext interface { ModuleDir(module blueprint.Module) string ModuleSubDir(module blueprint.Module) string ModuleType(module blueprint.Module) string - ModuleProvider(module blueprint.Module, key blueprint.AnyProviderKey) any moduleProvider(module blueprint.Module, key blueprint.AnyProviderKey) (any, bool) BlueprintFile(module blueprint.Module) string diff --git a/android/module.go b/android/module.go index f57115799..7e88797d6 100644 --- a/android/module.go +++ b/android/module.go @@ -1648,7 +1648,7 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) if !ctx.PrimaryArch() { suffix = append(suffix, ctx.Arch().ArchType.String()) } - if apexInfo := ctx.Provider(ApexInfoProvider).(ApexInfo); !apexInfo.IsForPlatform() { + if apexInfo, _ := ModuleProvider(ctx, ApexInfoProvider); !apexInfo.IsForPlatform() { suffix = append(suffix, apexInfo.ApexVariationName) } diff --git a/android/prebuilt.go b/android/prebuilt.go index a32a37d3a..6a417a8c7 100644 --- a/android/prebuilt.go +++ b/android/prebuilt.go @@ -461,8 +461,8 @@ func PrebuiltSelectModuleMutator(ctx BottomUpMutatorContext) { // Propagate the provider received from `all_apex_contributions` // to the source module ctx.VisitDirectDepsWithTag(acDepTag, func(am Module) { - psi := ctx.OtherModuleProvider(am, PrebuiltSelectionInfoProvider).(PrebuiltSelectionInfoMap) - ctx.SetProvider(PrebuiltSelectionInfoProvider, psi) + psi, _ := OtherModuleProvider(ctx, am, PrebuiltSelectionInfoProvider) + SetProvider(ctx, PrebuiltSelectionInfoProvider, psi) }) } 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. psi := PrebuiltSelectionInfoMap{} ctx.VisitDirectDepsWithTag(PrebuiltDepTag, func(am Module) { - if ctx.OtherModuleHasProvider(am, PrebuiltSelectionInfoProvider) { - psi = ctx.OtherModuleProvider(am, PrebuiltSelectionInfoProvider).(PrebuiltSelectionInfoMap) - } + psi, _ = OtherModuleProvider(ctx, am, PrebuiltSelectionInfoProvider) }) // If the source module is explicitly listed in the metadata module, use that diff --git a/android/singleton.go b/android/singleton.go index 8936cac65..47cfb2818 100644 --- a/android/singleton.go +++ b/android/singleton.go @@ -35,16 +35,6 @@ type SingletonContext interface { // Allows generating build actions for `referer` based on the metadata for `name` deferred until the singleton context. ModuleVariantsFromName(referer Module, name string) []Module - // ModuleProvider returns the value, if any, for the provider for a module. If the value for the - // provider was not set it returns the zero value of the type of the provider, which means the - // return value can always be type-asserted to the type of the provider. The return value should - // always be considered read-only. It panics if called before the appropriate mutator or - // GenerateBuildActions pass for the provider on the module. - ModuleProvider(module blueprint.Module, provider blueprint.AnyProviderKey) any - - // ModuleHasProvider returns true if the provider for the given module has been set. - ModuleHasProvider(module blueprint.Module, provider blueprint.AnyProviderKey) bool - moduleProvider(module blueprint.Module, provider blueprint.AnyProviderKey) (any, bool) ModuleErrorf(module blueprint.Module, format string, args ...interface{}) @@ -291,17 +281,6 @@ func (s *singletonContextAdaptor) ModuleVariantsFromName(referer Module, name st return result } -func (s *singletonContextAdaptor) ModuleProvider(module blueprint.Module, provider blueprint.AnyProviderKey) any { - value, _ := s.SingletonContext.ModuleProvider(module, provider) - return value -} - -// ModuleHasProvider returns true if the provider for the given module has been set. -func (s *singletonContextAdaptor) ModuleHasProvider(module blueprint.Module, provider blueprint.AnyProviderKey) bool { - _, ok := s.SingletonContext.ModuleProvider(module, provider) - return ok -} - func (s *singletonContextAdaptor) moduleProvider(module blueprint.Module, provider blueprint.AnyProviderKey) (any, bool) { return s.SingletonContext.ModuleProvider(module, provider) } diff --git a/apex/apex.go b/apex/apex.go index 53727644a..56559b16b 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1020,7 +1020,7 @@ func (a *apexBundle) ApexInfoMutator(mctx android.TopDownMutatorContext) { // The membership information is saved for later access apexContents := android.NewApexContents(contents) - mctx.SetProvider(ApexBundleInfoProvider, ApexBundleInfo{ + android.SetProvider(mctx, ApexBundleInfoProvider, ApexBundleInfo{ Contents: apexContents, }) @@ -1058,7 +1058,7 @@ func (a *apexBundle) ApexInfoMutator(mctx android.TopDownMutatorContext) { }) if a.dynamic_common_lib_apex() { - mctx.SetProvider(DCLAInfoProvider, DCLAInfo{ + android.SetProvider(mctx, DCLAInfoProvider, DCLAInfo{ ProvidedLibs: a.properties.Native_shared_libs, }) } @@ -1201,10 +1201,10 @@ func apexTestForMutator(mctx android.BottomUpMutatorContext) { if _, ok := mctx.Module().(android.ApexModule); ok { var contents []*android.ApexContents for _, testFor := range mctx.GetDirectDepsWithTag(testForTag) { - abInfo := mctx.OtherModuleProvider(testFor, ApexBundleInfoProvider).(ApexBundleInfo) + abInfo, _ := android.OtherModuleProvider(mctx, testFor, ApexBundleInfoProvider) contents = append(contents, abInfo.Contents) } - mctx.SetProvider(android.ApexTestForInfoProvider, android.ApexTestForInfo{ + android.SetProvider(mctx, android.ApexTestForInfoProvider, android.ApexTestForInfo{ ApexContents: contents, }) } @@ -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))) } if len(dclaModules) > 0 { - DCLAInfo := ctx.OtherModuleProvider(dclaModules[0], DCLAInfoProvider).(DCLAInfo) + DCLAInfo, _ := android.OtherModuleProvider(ctx, dclaModules[0], DCLAInfoProvider) return DCLAInfo.ProvidedLibs } return []string{} @@ -1783,7 +1783,7 @@ func (a *apexBundle) WalkPayloadDeps(ctx android.ModuleContext, do android.Paylo return false } - ai := ctx.OtherModuleProvider(child, android.ApexInfoProvider).(android.ApexInfo) + ai, _ := android.OtherModuleProvider(ctx, child, android.ApexInfoProvider) externalDep := !android.InList(ctx.ModuleName(), ai.InApexVariants) // Visit actually @@ -2150,7 +2150,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext, af := apexFileForNativeLibrary(ctx, ch, vctx.handleSpecialLibs) af.transitiveDep = true - abInfo := ctx.Provider(ApexBundleInfoProvider).(ApexBundleInfo) + abInfo, _ := android.ModuleProvider(ctx, ApexBundleInfoProvider) if !abInfo.Contents.DirectlyInApex(depName) && (ch.IsStubs() || ch.HasStubsVariants()) { // If the dependency is a stubs lib, don't include it in this APEX, // but make sure that the lib is installed on the device. @@ -2272,7 +2272,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext, } 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 { 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 // the bootclasspath_fragment contributes to the apex. 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 // 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 // the module contributes to the apex; or nil if the proto config was not generated. 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 { return nil } @@ -2437,7 +2437,7 @@ func apexClasspathFragmentProtoFile(ctx android.ModuleContext, module blueprint. // apexFileForBootclasspathFragmentContentModule creates an apexFile for a bootclasspath_fragment // content module, i.e. a library that is part of the bootclasspath. 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 // hidden API encpding. @@ -2589,7 +2589,7 @@ func (a *apexBundle) checkStaticLinkingToStubLibraries(ctx android.ModuleContext return } - abInfo := ctx.Provider(ApexBundleInfoProvider).(ApexBundleInfo) + abInfo, _ := android.ModuleProvider(ctx, ApexBundleInfoProvider) a.WalkPayloadDeps(ctx, func(ctx android.ModuleContext, from blueprint.Module, to android.ApexModule, externalDep bool) bool { if ccm, ok := to.(*cc.Module); ok { @@ -2650,7 +2650,7 @@ func (a *apexBundle) checkUpdatable(ctx android.ModuleContext) { func (a *apexBundle) checkClasspathFragments(ctx android.ModuleContext) { ctx.VisitDirectDeps(func(module android.Module) { 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 { ctx.OtherModuleErrorf(module, "is included in updatable apex %v, it must not set generate_classpaths_proto to false", ctx.ModuleName()) } diff --git a/apex/apex_singleton.go b/apex/apex_singleton.go index a63344fc1..25c0cc444 100644 --- a/apex/apex_singleton.go +++ b/apex/apex_singleton.go @@ -83,7 +83,7 @@ func (s *apexDepsInfoSingleton) GenerateBuildActions(ctx android.SingletonContex updatableFlatLists := android.Paths{} ctx.VisitAllModules(func(module android.Module) { if binaryInfo, ok := module.(android.ApexBundleDepsInfoIntf); ok { - apexInfo := ctx.ModuleProvider(module, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.SingletonModuleProvider(ctx, module, android.ApexInfoProvider) if path := binaryInfo.FlatListPath(); path != nil { if binaryInfo.Updatable() || apexInfo.Updatable { updatableFlatLists = append(updatableFlatLists, path) diff --git a/apex/bootclasspath_fragment_test.go b/apex/bootclasspath_fragment_test.go index 43be310bb..42f5cd444 100644 --- a/apex/bootclasspath_fragment_test.go +++ b/apex/bootclasspath_fragment_test.go @@ -152,7 +152,7 @@ func TestBootclasspathFragments_FragmentDependency(t *testing.T) { // Check stub dex paths exported by art. artFragment := result.Module("art-bootclasspath-fragment", "android_common") - artInfo := result.ModuleProvider(artFragment, java.HiddenAPIInfoProvider).(java.HiddenAPIInfo) + artInfo, _ := android.SingletonModuleProvider(result, artFragment, java.HiddenAPIInfoProvider) bazPublicStubs := "out/soong/.intermediates/baz.stubs/android_common/dex/baz.stubs.jar" bazSystemStubs := "out/soong/.intermediates/baz.stubs.system/android_common/dex/baz.stubs.system.jar" @@ -165,7 +165,7 @@ func TestBootclasspathFragments_FragmentDependency(t *testing.T) { // Check stub dex paths exported by other. otherFragment := result.Module("other-bootclasspath-fragment", "android_common") - otherInfo := result.ModuleProvider(otherFragment, java.HiddenAPIInfoProvider).(java.HiddenAPIInfo) + otherInfo, _ := android.SingletonModuleProvider(result, otherFragment, java.HiddenAPIInfoProvider) fooPublicStubs := "out/soong/.intermediates/foo.stubs/android_common/dex/foo.stubs.jar" fooSystemStubs := "out/soong/.intermediates/foo.stubs.system/android_common/dex/foo.stubs.system.jar" @@ -655,7 +655,7 @@ func TestBootclasspathFragmentContentsNoName(t *testing.T) { // Make sure that the fragment provides the hidden API encoded dex jars to the APEX. fragment := result.Module("mybootclasspathfragment", "android_common_apex10000") - info := result.ModuleProvider(fragment, java.BootclasspathFragmentApexContentInfoProvider).(java.BootclasspathFragmentApexContentInfo) + info, _ := android.SingletonModuleProvider(result, fragment, java.BootclasspathFragmentApexContentInfoProvider) checkFragmentExportedDexJar := func(name string, expectedDexJar string) { module := result.Module(name, "android_common_apex10000") diff --git a/apex/classpath_element_test.go b/apex/classpath_element_test.go index 1ce60ced9..b9a91982a 100644 --- a/apex/classpath_element_test.go +++ b/apex/classpath_element_test.go @@ -20,7 +20,6 @@ import ( "android/soong/android" "android/soong/java" - "github.com/google/blueprint" ) // 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. type testClasspathElementContext struct { + android.OtherModuleProviderContext testContext *android.TestContext module android.Module 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{}) { t.errs = append(t.errs, t.testContext.ModuleErrorf(t.module, fmt, args...)) } @@ -238,7 +230,11 @@ func TestCreateClasspathElements(t *testing.T) { } 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. diff --git a/apex/deapexer.go b/apex/deapexer.go index 3b7c77dc9..5aeea63d1 100644 --- a/apex/deapexer.go +++ b/apex/deapexer.go @@ -127,7 +127,7 @@ func (p *Deapexer) GenerateAndroidBuildActions(ctx android.ModuleContext) { if len(exports) > 0 { // Make the information available for other modules. di := android.NewDeapexerInfo(apexModuleName(ctx.ModuleName()), exports) - ctx.SetProvider(android.DeapexerProvider, di) + android.SetProvider(ctx, android.DeapexerProvider, di) // Create a sorted list of the files that this exports. exportedPaths = android.SortedUniquePaths(exportedPaths) diff --git a/apex/platform_bootclasspath_test.go b/apex/platform_bootclasspath_test.go index 05bb13689..b741963c8 100644 --- a/apex/platform_bootclasspath_test.go +++ b/apex/platform_bootclasspath_test.go @@ -152,7 +152,7 @@ func TestPlatformBootclasspath_Fragments(t *testing.T) { ).RunTest(t) pbcp := result.Module("platform-bootclasspath", "android_common") - info := result.ModuleProvider(pbcp, java.MonolithicHiddenAPIInfoProvider).(java.MonolithicHiddenAPIInfo) + info, _ := android.SingletonModuleProvider(result, pbcp, java.MonolithicHiddenAPIInfoProvider) for _, category := range java.HiddenAPIFlagFileCategories { name := category.PropertyName @@ -234,7 +234,7 @@ func TestPlatformBootclasspath_LegacyPrebuiltFragment(t *testing.T) { ) pbcp := result.Module("myplatform-bootclasspath", "android_common") - info := result.ModuleProvider(pbcp, java.MonolithicHiddenAPIInfoProvider).(java.MonolithicHiddenAPIInfo) + info, _ := android.SingletonModuleProvider(result, pbcp, java.MonolithicHiddenAPIInfoProvider) android.AssertArrayString(t, "stub flags", []string{"prebuilt-stub-flags.csv:out/soong/.intermediates/mybootclasspath-fragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv"}, info.StubFlagSubsets.RelativeToTop()) android.AssertArrayString(t, "all flags", []string{"prebuilt-all-flags.csv:out/soong/.intermediates/mybootclasspath-fragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv"}, info.FlagSubsets.RelativeToTop()) diff --git a/apex/prebuilt.go b/apex/prebuilt.go index 7d339d54e..179d90b17 100644 --- a/apex/prebuilt.go +++ b/apex/prebuilt.go @@ -428,7 +428,7 @@ func (p *prebuiltCommon) apexInfoMutator(mctx android.TopDownMutatorContext) { // Create contents for the prebuilt_apex and store it away for later use. apexContents := android.NewApexContents(contents) - mctx.SetProvider(ApexBundleInfoProvider, ApexBundleInfo{ + android.SetProvider(mctx, ApexBundleInfoProvider, ApexBundleInfo{ Contents: apexContents, }) diff --git a/bloaty/bloaty.go b/bloaty/bloaty.go index 97eba7055..43fb71dd2 100644 --- a/bloaty/bloaty.go +++ b/bloaty/bloaty.go @@ -73,7 +73,7 @@ func MeasureSizeForPaths(ctx android.ModuleContext, paths ...android.OptionalPat mf.paths = append(mf.paths, p) } } - ctx.SetProvider(fileSizeMeasurerKey, mf) + android.SetProvider(ctx, fileSizeMeasurerKey, mf) } type sizesSingleton struct{} @@ -85,10 +85,10 @@ func fileSizesSingleton() android.Singleton { func (singleton *sizesSingleton) GenerateBuildActions(ctx android.SingletonContext) { var deps android.Paths ctx.VisitAllModules(func(m android.Module) { - if !ctx.ModuleHasProvider(m, fileSizeMeasurerKey) { + filePaths, ok := android.SingletonModuleProvider(ctx, m, fileSizeMeasurerKey) + if !ok { return } - filePaths := ctx.ModuleProvider(m, fileSizeMeasurerKey).(measuredFiles) for _, path := range filePaths.paths { filePath := path.(android.ModuleOutPath) sizeFile := filePath.InSameDir(ctx, filePath.Base()+bloatyDescriptorExt) diff --git a/bpf/bpf.go b/bpf/bpf.go index ce57b46ad..32d62b520 100644 --- a/bpf/bpf.go +++ b/bpf/bpf.go @@ -203,7 +203,7 @@ func (bpf *bpf) GenerateAndroidBuildActions(ctx android.ModuleContext) { } } - ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcs.Strings()}) + android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcs.Strings()}) } func (bpf *bpf) AndroidMk() android.AndroidMkData { diff --git a/cc/afdo.go b/cc/afdo.go index bad16a19e..79fbae157 100644 --- a/cc/afdo.go +++ b/cc/afdo.go @@ -137,8 +137,7 @@ func (c *Module) fdoProfileMutator(ctx android.BottomUpMutatorContext) { } ctx.VisitDirectDepsWithTag(FdoProfileTag, func(m android.Module) { - if ctx.OtherModuleHasProvider(m, FdoProfileProvider) { - info := ctx.OtherModuleProvider(m, FdoProfileProvider).(FdoProfileInfo) + if info, ok := android.OtherModuleProvider(ctx, m, FdoProfileProvider); ok { c.afdo.Properties.FdoProfilePath = proptools.StringPtr(info.Path.String()) } }) @@ -1744,11 +1744,13 @@ func (ctx *moduleContextImpl) getVndkExtendsModuleName() string { } func (ctx *moduleContextImpl) isForPlatform() bool { - return ctx.ctx.Provider(android.ApexInfoProvider).(android.ApexInfo).IsForPlatform() + apexInfo, _ := android.ModuleProvider(ctx.ctx, android.ApexInfoProvider) + return apexInfo.IsForPlatform() } func (ctx *moduleContextImpl) apexVariationName() string { - return ctx.ctx.Provider(android.ApexInfoProvider).(android.ApexInfo).ApexVariationName + apexInfo, _ := android.ModuleProvider(ctx.ctx, android.ApexInfoProvider) + return apexInfo.ApexVariationName } func (ctx *moduleContextImpl) apexSdkVersion() android.ApiLevel { @@ -1991,7 +1993,7 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { } c.Properties.SubName = GetSubnameProperty(actx, c) - apexInfo := actx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(actx, android.ApexInfoProvider) if !apexInfo.IsForPlatform() { c.hideApexVariantFromMake = true } @@ -2131,9 +2133,9 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { } } if c.testModule { - ctx.SetProvider(testing.TestModuleProviderKey, testing.TestModuleProviderData{}) + android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{}) } - ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: deps.GeneratedSources.Strings()}) + android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: deps.GeneratedSources.Strings()}) aconfig.CollectDependencyAconfigFiles(ctx, &c.mergedAconfigFiles) @@ -2368,9 +2370,9 @@ func GetApiImports(c LinkableInterface, actx android.BottomUpMutatorContext) mul if actx.OtherModuleExists("api_imports") { apiImportModule = actx.AddDependency(c, nil, "api_imports") 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 - actx.SetProvider(multitree.ApiImportsProvider, apiInfo) + android.SetProvider(actx, multitree.ApiImportsProvider, apiInfo) } } } @@ -2391,10 +2393,10 @@ func GetSnapshot(c LinkableInterface, snapshotInfo **SnapshotInfo, actx android. snapshotModule = actx.AddVariationDependencies(nil, nil, "recovery_snapshot") } if len(snapshotModule) > 0 && snapshotModule[0] != nil { - snapshot := actx.OtherModuleProvider(snapshotModule[0], SnapshotInfoProvider).(SnapshotInfo) + snapshot, _ := android.OtherModuleProvider(actx, snapshotModule[0], SnapshotInfoProvider) *snapshotInfo = &snapshot // republish the snapshot for use in later mutators on this module - actx.SetProvider(SnapshotInfoProvider, snapshot) + android.SetProvider(actx, SnapshotInfoProvider, snapshot) } } if *snapshotInfo == nil { @@ -2982,7 +2984,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { depPaths.ReexportedGeneratedHeaders = append(depPaths.ReexportedGeneratedHeaders, exporter.GeneratedHeaders...) } - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) c.apexSdkVersion = findApexSdkVersion(ctx, apexInfo) skipModuleList := map[string]bool{} @@ -2992,7 +2994,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { ctx.VisitDirectDeps(func(dep android.Module) { if dep.Name() == "api_imports" { - apiImportInfo = ctx.OtherModuleProvider(dep, multitree.ApiImportsProvider).(multitree.ApiImportInfo) + apiImportInfo, _ = android.OtherModuleProvider(ctx, dep, multitree.ApiImportsProvider) hasApiImportInfo = true } }) @@ -3043,12 +3045,10 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { } 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, - ctx.OtherModuleProvider( - dep, - aidl_library.AidlLibraryProvider).(aidl_library.AidlLibraryInfo), + aidlLibraryInfo, ) } } @@ -3113,10 +3113,10 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { // version mutator, so the stubs variant is created from the shared variant that // already has the reuseObjTag dependency on the static variant. if !c.library.buildStubs() { - staticAnalogue := ctx.OtherModuleProvider(dep, StaticLibraryInfoProvider).(StaticLibraryInfo) + staticAnalogue, _ := android.OtherModuleProvider(ctx, dep, StaticLibraryInfoProvider) objs := staticAnalogue.ReuseObjects depPaths.Objs = depPaths.Objs.Append(objs) - depExporterInfo := ctx.OtherModuleProvider(dep, FlagExporterInfoProvider).(FlagExporterInfo) + depExporterInfo, _ := android.OtherModuleProvider(ctx, dep, FlagExporterInfoProvider) reexportExporter(depExporterInfo) } return @@ -3137,7 +3137,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { return } - depExporterInfo := ctx.OtherModuleProvider(dep, FlagExporterInfoProvider).(FlagExporterInfo) + depExporterInfo, _ := android.OtherModuleProvider(ctx, dep, FlagExporterInfoProvider) var ptr *android.Paths var depPtr *android.Paths @@ -3146,7 +3146,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { switch { case libDepTag.header(): - if !ctx.OtherModuleHasProvider(dep, HeaderLibraryInfoProvider) { + if _, isHeaderLib := android.OtherModuleProvider(ctx, dep, HeaderLibraryInfoProvider); !isHeaderLib { if !ctx.Config().AllowMissingDependencies() { ctx.ModuleErrorf("module %q is not a header library", depName) } else { @@ -3155,7 +3155,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { return } case libDepTag.shared(): - if !ctx.OtherModuleHasProvider(dep, SharedLibraryInfoProvider) { + if _, isSharedLib := android.OtherModuleProvider(ctx, dep, SharedLibraryInfoProvider); !isSharedLib { if !ctx.Config().AllowMissingDependencies() { ctx.ModuleErrorf("module %q is not a shared library", depName) } else { @@ -3192,7 +3192,8 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { panic(fmt.Errorf("unexpected library dependency order %d", libDepTag.Order)) } case libDepTag.static(): - if !ctx.OtherModuleHasProvider(dep, StaticLibraryInfoProvider) { + staticLibraryInfo, isStaticLib := android.OtherModuleProvider(ctx, dep, StaticLibraryInfoProvider) + if !isStaticLib { if !ctx.Config().AllowMissingDependencies() { ctx.ModuleErrorf("module %q is not a static library", depName) } else { @@ -3207,7 +3208,6 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { break } - staticLibraryInfo := ctx.OtherModuleProvider(dep, StaticLibraryInfoProvider).(StaticLibraryInfo) linkFile = android.OptionalPathForPath(staticLibraryInfo.StaticLibrary) if libDepTag.wholeStatic { ptr = &depPaths.WholeStaticLibs @@ -3317,7 +3317,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { if lib.buildStubs() && dep.(android.ApexModule).InAnyApex() { // Add the dependency to the APEX(es) providing the library so that // 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 { c.Properties.ApexesProvidingSharedLibs = append( c.Properties.ApexesProvidingSharedLibs, an) @@ -3402,7 +3402,7 @@ func ShouldUseStubForApex(ctx android.ModuleContext, dep android.Module) bool { bootstrap = linkable.Bootstrap() } - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) useStubs := false @@ -3436,7 +3436,7 @@ func ShouldUseStubForApex(ctx android.ModuleContext, dep android.Module) bool { // Another exception: if this module is a test for an APEX, then // it is linked with the non-stub variant of a module in the APEX // as if this is part of the APEX. - testFor := ctx.Provider(android.ApexTestForInfoProvider).(android.ApexTestForInfo) + testFor, _ := android.ModuleProvider(ctx, android.ApexTestForInfoProvider) for _, apexContents := range testFor.ApexContents { if apexContents.DirectlyInApex(depName) { useStubs = false @@ -3482,9 +3482,9 @@ func ChooseStubOrImpl(ctx android.ModuleContext, dep android.Module) (SharedLibr panic(fmt.Errorf("Unexpected dependency tag: %T", depTag)) } - sharedLibraryInfo := ctx.OtherModuleProvider(dep, SharedLibraryInfoProvider).(SharedLibraryInfo) - depExporterInfo := ctx.OtherModuleProvider(dep, FlagExporterInfoProvider).(FlagExporterInfo) - sharedLibraryStubsInfo := ctx.OtherModuleProvider(dep, SharedLibraryStubsProvider).(SharedLibraryStubsInfo) + sharedLibraryInfo, _ := android.OtherModuleProvider(ctx, dep, SharedLibraryInfoProvider) + depExporterInfo, _ := android.OtherModuleProvider(ctx, dep, FlagExporterInfoProvider) + sharedLibraryStubsInfo, _ := android.OtherModuleProvider(ctx, dep, SharedLibraryStubsProvider) if !libDepTag.explicitlyVersioned && len(sharedLibraryStubsInfo.SharedStubLibraries) > 0 { // when to use (unspecified) stubs, use the latest one. diff --git a/cc/cc_test.go b/cc/cc_test.go index 3631f1998..cebf129ec 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -2544,8 +2544,8 @@ func TestStaticLibDepReordering(t *testing.T) { variant := "android_arm64_armv8-a_static" moduleA := ctx.ModuleForTests("a", variant).Module().(*Module) - actual := android.Paths(ctx.ModuleProvider(moduleA, StaticLibraryInfoProvider).(StaticLibraryInfo). - TransitiveStaticLibrariesForOrdering.ToList()).RelativeToTop() + staticLibInfo, _ := android.SingletonModuleProvider(ctx, moduleA, StaticLibraryInfoProvider) + actual := android.Paths(staticLibInfo.TransitiveStaticLibrariesForOrdering.ToList()).RelativeToTop() expected := GetOutputPaths(ctx, variant, []string{"a", "c", "b", "d"}) if !reflect.DeepEqual(actual, expected) { @@ -2580,8 +2580,8 @@ func TestStaticLibDepReorderingWithShared(t *testing.T) { variant := "android_arm64_armv8-a_static" moduleA := ctx.ModuleForTests("a", variant).Module().(*Module) - actual := android.Paths(ctx.ModuleProvider(moduleA, StaticLibraryInfoProvider).(StaticLibraryInfo). - TransitiveStaticLibrariesForOrdering.ToList()).RelativeToTop() + staticLibInfo, _ := android.SingletonModuleProvider(ctx, moduleA, StaticLibraryInfoProvider) + actual := android.Paths(staticLibInfo.TransitiveStaticLibrariesForOrdering.ToList()).RelativeToTop() expected := GetOutputPaths(ctx, variant, []string{"a", "c", "b"}) if !reflect.DeepEqual(actual, expected) { @@ -2681,7 +2681,7 @@ func TestLlndkLibrary(t *testing.T) { checkExportedIncludeDirs := func(module, variant string, expectedDirs ...string) { t.Helper() m := result.ModuleForTests(module, variant).Module() - f := result.ModuleProvider(m, FlagExporterInfoProvider).(FlagExporterInfo) + f, _ := android.SingletonModuleProvider(result, m, FlagExporterInfoProvider) android.AssertPathsRelativeToTopEquals(t, "exported include dirs for "+module+"["+variant+"]", expectedDirs, f.IncludeDirs) } @@ -4113,7 +4113,7 @@ func TestIncludeDirsExporting(t *testing.T) { checkIncludeDirs := func(t *testing.T, ctx *android.TestContext, module android.Module, checkers ...exportedChecker) { t.Helper() - exported := ctx.ModuleProvider(module, FlagExporterInfoProvider).(FlagExporterInfo) + exported, _ := android.SingletonModuleProvider(ctx, module, FlagExporterInfoProvider) name := module.Name() for _, checker := range checkers { diff --git a/cc/fdo_profile.go b/cc/fdo_profile.go index 74d511aad..0893da5e0 100644 --- a/cc/fdo_profile.go +++ b/cc/fdo_profile.go @@ -62,7 +62,7 @@ func (fp *fdoProfile) GenerateAndroidBuildActions(ctx android.ModuleContext) {} func (fp *fdoProfile) fdoProfileMutator(ctx android.BottomUpMutatorContext) { if fp.properties.Profile != nil { path := android.PathForModuleSrc(ctx, *fp.properties.Profile) - ctx.SetProvider(FdoProfileProvider, FdoProfileInfo{ + android.SetProvider(ctx, FdoProfileProvider, FdoProfileInfo{ Path: path, }) } diff --git a/cc/fuzz.go b/cc/fuzz.go index 6b3a739ab..f5642d67d 100644 --- a/cc/fuzz.go +++ b/cc/fuzz.go @@ -544,7 +544,8 @@ func CollectAllSharedDependencies(ctx android.ModuleContext) (android.RuleBuilde if !IsValidSharedDependency(dep) { return } - if !ctx.OtherModuleHasProvider(dep, SharedLibraryInfoProvider) { + sharedLibraryInfo, hasSharedLibraryInfo := android.OtherModuleProvider(ctx, dep, SharedLibraryInfoProvider) + if !hasSharedLibraryInfo { return } if seen[ctx.OtherModuleName(dep)] { @@ -553,7 +554,6 @@ func CollectAllSharedDependencies(ctx android.ModuleContext) (android.RuleBuilde seen[ctx.OtherModuleName(dep)] = true deps = append(deps, dep) - sharedLibraryInfo := ctx.OtherModuleProvider(dep, SharedLibraryInfoProvider).(SharedLibraryInfo) installDestination := sharedLibraryInfo.SharedLibrary.Base() ruleBuilderInstall := android.RuleBuilderInstall{android.OutputFileForModule(ctx, dep, "unstripped"), installDestination} sharedLibraries = append(sharedLibraries, ruleBuilderInstall) @@ -574,14 +574,14 @@ func CollectAllSharedDependencies(ctx android.ModuleContext) (android.RuleBuilde if !IsValidSharedDependency(child) { return false } - if !ctx.OtherModuleHasProvider(child, SharedLibraryInfoProvider) { + sharedLibraryInfo, hasSharedLibraryInfo := android.OtherModuleProvider(ctx, child, SharedLibraryInfoProvider) + if !hasSharedLibraryInfo { return false } if !seen[ctx.OtherModuleName(child)] { seen[ctx.OtherModuleName(child)] = true deps = append(deps, child) - sharedLibraryInfo := ctx.OtherModuleProvider(child, SharedLibraryInfoProvider).(SharedLibraryInfo) installDestination := sharedLibraryInfo.SharedLibrary.Base() ruleBuilderInstall := android.RuleBuilderInstall{android.OutputFileForModule(ctx, child, "unstripped"), installDestination} sharedLibraries = append(sharedLibraries, ruleBuilderInstall) diff --git a/cc/library.go b/cc/library.go index 4d5a2547b..4c8deefcc 100644 --- a/cc/library.go +++ b/cc/library.go @@ -341,7 +341,7 @@ func (f *flagExporter) addExportedGeneratedHeaders(headers ...android.Path) { } func (f *flagExporter) setProvider(ctx android.ModuleContext) { - ctx.SetProvider(FlagExporterInfoProvider, FlagExporterInfo{ + android.SetProvider(ctx, FlagExporterInfoProvider, FlagExporterInfo{ // Comes from Export_include_dirs property, and those of exported transitive deps IncludeDirs: android.FirstUniquePaths(f.dirs), // Comes from Export_system_include_dirs property, and those of exported transitive deps @@ -1071,7 +1071,7 @@ func (library *libraryDecorator) linkStatic(ctx ModuleContext, ctx.CheckbuildFile(outputFile) if library.static() { - ctx.SetProvider(StaticLibraryInfoProvider, StaticLibraryInfo{ + android.SetProvider(ctx, StaticLibraryInfoProvider, StaticLibraryInfo{ StaticLibrary: outputFile, ReuseObjects: library.reuseObjects, Objects: library.objects, @@ -1085,7 +1085,7 @@ func (library *libraryDecorator) linkStatic(ctx ModuleContext, } if library.header() { - ctx.SetProvider(HeaderLibraryInfoProvider, HeaderLibraryInfo{}) + android.SetProvider(ctx, HeaderLibraryInfoProvider, HeaderLibraryInfo{}) } return outputFile @@ -1235,11 +1235,11 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext, var transitiveStaticLibrariesForOrdering *android.DepSet[android.Path] 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 } - ctx.SetProvider(SharedLibraryInfoProvider, SharedLibraryInfo{ + android.SetProvider(ctx, SharedLibraryInfoProvider, SharedLibraryInfo{ TableOfContents: android.OptionalPathForPath(tocFile), SharedLibrary: unstrippedOutputFile, TransitiveStaticLibrariesForOrdering: transitiveStaticLibrariesForOrdering, @@ -1256,15 +1256,15 @@ func addStubDependencyProviders(ctx ModuleContext) { if len(stubs) > 0 { var stubsInfo []SharedStubLibrary for _, stub := range stubs { - stubInfo := ctx.OtherModuleProvider(stub, SharedLibraryInfoProvider).(SharedLibraryInfo) - flagInfo := ctx.OtherModuleProvider(stub, FlagExporterInfoProvider).(FlagExporterInfo) + stubInfo, _ := android.OtherModuleProvider(ctx, stub, SharedLibraryInfoProvider) + flagInfo, _ := android.OtherModuleProvider(ctx, stub, FlagExporterInfoProvider) stubsInfo = append(stubsInfo, SharedStubLibrary{ Version: moduleLibraryInterface(stub).stubsVersion(), SharedLibraryInfo: stubInfo, FlagExporterInfo: flagInfo, }) } - ctx.SetProvider(SharedLibraryStubsProvider, SharedLibraryStubsInfo{ + android.SetProvider(ctx, SharedLibraryStubsProvider, SharedLibraryStubsInfo{ SharedStubLibraries: stubsInfo, IsLLNDK: ctx.IsLlndk(), }) diff --git a/cc/library_sdk_member.go b/cc/library_sdk_member.go index 52e78d73c..a65b1ba61 100644 --- a/cc/library_sdk_member.go +++ b/cc/library_sdk_member.go @@ -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 // include dirs (which may not be). diff --git a/cc/library_stub.go b/cc/library_stub.go index 18d3f210c..1183b29cf 100644 --- a/cc/library_stub.go +++ b/cc/library_stub.go @@ -244,7 +244,7 @@ func (d *apiLibraryDecorator) link(ctx ModuleContext, flags Flags, deps PathDeps }, }) - ctx.SetProvider(SharedLibraryInfoProvider, SharedLibraryInfo{ + android.SetProvider(ctx, SharedLibraryInfoProvider, SharedLibraryInfo{ SharedLibrary: outputFile, Target: ctx.Target(), @@ -262,15 +262,15 @@ func (d *apiLibraryDecorator) shareStubs(ctx ModuleContext) { if len(stubs) > 0 { var stubsInfo []SharedStubLibrary for _, stub := range stubs { - stubInfo := ctx.OtherModuleProvider(stub, SharedLibraryInfoProvider).(SharedLibraryInfo) - flagInfo := ctx.OtherModuleProvider(stub, FlagExporterInfoProvider).(FlagExporterInfo) + stubInfo, _ := android.OtherModuleProvider(ctx, stub, SharedLibraryInfoProvider) + flagInfo, _ := android.OtherModuleProvider(ctx, stub, FlagExporterInfoProvider) stubsInfo = append(stubsInfo, SharedStubLibrary{ Version: moduleLibraryInterface(stub).stubsVersion(), SharedLibraryInfo: stubInfo, FlagExporterInfo: flagInfo, }) } - ctx.SetProvider(SharedLibraryStubsProvider, SharedLibraryStubsInfo{ + android.SetProvider(ctx, SharedLibraryStubsProvider, SharedLibraryStubsInfo{ SharedStubLibraries: stubsInfo, IsLLNDK: ctx.IsLlndk(), diff --git a/cc/ndk_prebuilt.go b/cc/ndk_prebuilt.go index 842bdf6cb..f503982cd 100644 --- a/cc/ndk_prebuilt.go +++ b/cc/ndk_prebuilt.go @@ -117,13 +117,13 @@ func (ndk *ndkPrebuiltStlLinker) link(ctx ModuleContext, flags Flags, if ndk.static() { depSet := android.NewDepSetBuilder[android.Path](android.TOPOLOGICAL).Direct(lib).Build() - ctx.SetProvider(StaticLibraryInfoProvider, StaticLibraryInfo{ + android.SetProvider(ctx, StaticLibraryInfoProvider, StaticLibraryInfo{ StaticLibrary: lib, TransitiveStaticLibrariesForOrdering: depSet, }) } else { - ctx.SetProvider(SharedLibraryInfoProvider, SharedLibraryInfo{ + android.SetProvider(ctx, SharedLibraryInfoProvider, SharedLibraryInfo{ SharedLibrary: lib, Target: ctx.Target(), }) diff --git a/cc/prebuilt.go b/cc/prebuilt.go index f68fa246e..e721c5388 100644 --- a/cc/prebuilt.go +++ b/cc/prebuilt.go @@ -132,7 +132,7 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext, if p.static() { depSet := android.NewDepSetBuilder[android.Path](android.TOPOLOGICAL).Direct(in).Build() - ctx.SetProvider(StaticLibraryInfoProvider, StaticLibraryInfo{ + android.SetProvider(ctx, StaticLibraryInfoProvider, StaticLibraryInfo{ StaticLibrary: in, TransitiveStaticLibrariesForOrdering: depSet, @@ -190,7 +190,7 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext, }, }) - ctx.SetProvider(SharedLibraryInfoProvider, SharedLibraryInfo{ + android.SetProvider(ctx, SharedLibraryInfoProvider, SharedLibraryInfo{ SharedLibrary: outputFile, Target: ctx.Target(), @@ -213,7 +213,7 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext, } if p.header() { - ctx.SetProvider(HeaderLibraryInfoProvider, HeaderLibraryInfo{}) + android.SetProvider(ctx, HeaderLibraryInfoProvider, HeaderLibraryInfo{}) // Need to return an output path so that the AndroidMk logic doesn't skip // the prebuilt header. For compatibility, in case Android.mk files use a diff --git a/cc/sabi.go b/cc/sabi.go index 4cd776a25..13106859f 100644 --- a/cc/sabi.go +++ b/cc/sabi.go @@ -194,8 +194,8 @@ func shouldCreateSourceAbiDumpForLibrary(ctx android.BaseModuleContext) bool { return false } - isPlatformVariant := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo).IsForPlatform() - if isPlatformVariant { + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) + if apexInfo.IsForPlatform() { // Bionic libraries that are installed to the bootstrap directory are not ABI checked. // Only the runtime APEX variants, which are the implementation libraries of bionic NDK stubs, // are checked. diff --git a/cc/sanitize.go b/cc/sanitize.go index 31c050018..52b5be9e6 100644 --- a/cc/sanitize.go +++ b/cc/sanitize.go @@ -1627,7 +1627,7 @@ func sanitizerRuntimeMutator(mctx android.BottomUpMutatorContext) { addStaticDeps := func(dep string, hideSymbols bool) { // If we're using snapshots, redirect to snapshot whenever possible - snapshot := mctx.Provider(SnapshotInfoProvider).(SnapshotInfo) + snapshot, _ := android.ModuleProvider(mctx, SnapshotInfoProvider) if lib, ok := snapshot.StaticLibs[dep]; ok { dep = lib } @@ -1714,7 +1714,7 @@ func sanitizerRuntimeMutator(mctx android.BottomUpMutatorContext) { addStaticDeps(runtimeSharedLibrary, true) } else if !c.static() && !c.Header() { // If we're using snapshots, redirect to snapshot whenever possible - snapshot := mctx.Provider(SnapshotInfoProvider).(SnapshotInfo) + snapshot, _ := android.ModuleProvider(mctx, SnapshotInfoProvider) if lib, ok := snapshot.SharedLibs[runtimeSharedLibrary]; ok { runtimeSharedLibrary = lib } diff --git a/cc/sanitize_test.go b/cc/sanitize_test.go index cfc9ed215..44f38e10a 100644 --- a/cc/sanitize_test.go +++ b/cc/sanitize_test.go @@ -22,8 +22,6 @@ import ( "testing" "android/soong/android" - - "github.com/google/blueprint" ) var prepareForAsanTest = android.FixtureAddFile("asan/Android.bp", []byte(` @@ -49,7 +47,7 @@ var prepareForTsanTest = android.FixtureAddFile("tsan/Android.bp", []byte(` `)) type providerInterface interface { - ModuleProvider(blueprint.Module, blueprint.AnyProviderKey) interface{} + android.SingletonModuleProviderContext } // expectSharedLinkDep verifies that the from module links against the to module as a @@ -57,7 +55,7 @@ type providerInterface interface { func expectSharedLinkDep(t *testing.T, ctx providerInterface, from, to android.TestingModule) { t.Helper() fromLink := from.Description("link") - toInfo := ctx.ModuleProvider(to.Module(), SharedLibraryInfoProvider).(SharedLibraryInfo) + toInfo, _ := android.SingletonModuleProvider(ctx, to.Module(), SharedLibraryInfoProvider) if g, w := fromLink.OrderOnly.Strings(), toInfo.SharedLibrary.RelativeToTop().String(); !android.InList(w, g) { t.Errorf("%s should link against %s, expected %q, got %q", @@ -70,7 +68,7 @@ func expectSharedLinkDep(t *testing.T, ctx providerInterface, from, to android.T func expectNoSharedLinkDep(t *testing.T, ctx providerInterface, from, to android.TestingModule) { t.Helper() fromLink := from.Description("link") - toInfo := ctx.ModuleProvider(to.Module(), SharedLibraryInfoProvider).(SharedLibraryInfo) + toInfo, _ := android.SingletonModuleProvider(ctx, to.Module(), SharedLibraryInfoProvider) if g, w := fromLink.OrderOnly.Strings(), toInfo.SharedLibrary.RelativeToTop().String(); android.InList(w, g) { t.Errorf("%s should not link against %s, expected %q, got %q", @@ -83,7 +81,7 @@ func expectNoSharedLinkDep(t *testing.T, ctx providerInterface, from, to android func expectStaticLinkDep(t *testing.T, ctx providerInterface, from, to android.TestingModule) { t.Helper() fromLink := from.Description("link") - toInfo := ctx.ModuleProvider(to.Module(), StaticLibraryInfoProvider).(StaticLibraryInfo) + toInfo, _ := android.SingletonModuleProvider(ctx, to.Module(), StaticLibraryInfoProvider) if g, w := fromLink.Implicits.Strings(), toInfo.StaticLibrary.RelativeToTop().String(); !android.InList(w, g) { t.Errorf("%s should link against %s, expected %q, got %q", @@ -97,7 +95,7 @@ func expectStaticLinkDep(t *testing.T, ctx providerInterface, from, to android.T func expectNoStaticLinkDep(t *testing.T, ctx providerInterface, from, to android.TestingModule) { t.Helper() fromLink := from.Description("link") - toInfo := ctx.ModuleProvider(to.Module(), StaticLibraryInfoProvider).(StaticLibraryInfo) + toInfo, _ := android.SingletonModuleProvider(ctx, to.Module(), StaticLibraryInfoProvider) if g, w := fromLink.Implicits.Strings(), toInfo.StaticLibrary.RelativeToTop().String(); android.InList(w, g) { t.Errorf("%s should not link against %s, expected %q, got %q", diff --git a/cc/snapshot_prebuilt.go b/cc/snapshot_prebuilt.go index a9c4c853e..e769fe9a2 100644 --- a/cc/snapshot_prebuilt.go +++ b/cc/snapshot_prebuilt.go @@ -194,7 +194,7 @@ func (s *snapshotModule) DepsMutator(ctx android.BottomUpMutatorContext) { sharedLibs[k] = v } - ctx.SetProvider(SnapshotInfoProvider, SnapshotInfo{ + android.SetProvider(ctx, SnapshotInfoProvider, SnapshotInfo{ HeaderLibs: headers, Binaries: binaries, Objects: objects, @@ -494,7 +494,7 @@ func (p *snapshotLibraryDecorator) link(ctx ModuleContext, flags Flags, deps Pat p.tocFile = android.OptionalPathForPath(tocFile) TransformSharedObjectToToc(ctx, in, tocFile) - ctx.SetProvider(SharedLibraryInfoProvider, SharedLibraryInfo{ + android.SetProvider(ctx, SharedLibraryInfoProvider, SharedLibraryInfo{ SharedLibrary: in, Target: ctx.Target(), @@ -504,7 +504,7 @@ func (p *snapshotLibraryDecorator) link(ctx ModuleContext, flags Flags, deps Pat if p.static() { depSet := android.NewDepSetBuilder[android.Path](android.TOPOLOGICAL).Direct(in).Build() - ctx.SetProvider(StaticLibraryInfoProvider, StaticLibraryInfo{ + android.SetProvider(ctx, StaticLibraryInfoProvider, StaticLibraryInfo{ StaticLibrary: in, TransitiveStaticLibrariesForOrdering: depSet, diff --git a/cc/vendor_snapshot.go b/cc/vendor_snapshot.go index e8e930e8f..a33ed5fc3 100644 --- a/cc/vendor_snapshot.go +++ b/cc/vendor_snapshot.go @@ -275,7 +275,7 @@ var ccSnapshotAction snapshot.GenerateSnapshotAction = func(s snapshot.SnapshotS var propOut string if m.IsSnapshotLibrary() { - exporterInfo := ctx.ModuleProvider(m.Module(), FlagExporterInfoProvider).(FlagExporterInfo) + exporterInfo, _ := android.SingletonModuleProvider(ctx, m.Module(), FlagExporterInfoProvider) // library flags prop.ExportedFlags = exporterInfo.Flags @@ -407,7 +407,7 @@ var ccSnapshotAction snapshot.GenerateSnapshotAction = func(s snapshot.SnapshotS moduleDir := ctx.ModuleDir(module) inProprietaryPath := s.Image.IsProprietaryPath(moduleDir, ctx.DeviceConfig()) - apexInfo := ctx.ModuleProvider(module, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.SingletonModuleProvider(ctx, module, android.ApexInfoProvider) if s.Image.ExcludeFromSnapshot(m) { if inProprietaryPath { diff --git a/cc/vndk.go b/cc/vndk.go index a84945521..b2c6e0d1e 100644 --- a/cc/vndk.go +++ b/cc/vndk.go @@ -772,7 +772,7 @@ func (c *vndkSnapshotSingleton) GenerateBuildActions(ctx android.SingletonContex prop.MinSdkVersion = m.MinSdkVersion() if ctx.Config().VndkSnapshotBuildArtifacts() { - exportedInfo := ctx.ModuleProvider(m, FlagExporterInfoProvider).(FlagExporterInfo) + exportedInfo, _ := android.SingletonModuleProvider(ctx, m, FlagExporterInfoProvider) prop.ExportedFlags = exportedInfo.Flags prop.ExportedDirs = exportedInfo.IncludeDirs.Strings() prop.ExportedSystemDirs = exportedInfo.SystemIncludeDirs.Strings() @@ -797,7 +797,7 @@ func (c *vndkSnapshotSingleton) GenerateBuildActions(ctx android.SingletonContex return } - apexInfo := ctx.ModuleProvider(module, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.SingletonModuleProvider(ctx, module, android.ApexInfoProvider) vndkType, ok := isVndkSnapshotAware(ctx.DeviceConfig(), m, apexInfo) if !ok { diff --git a/cc/vndk_prebuilt.go b/cc/vndk_prebuilt.go index 5e526db92..3f3a0256d 100644 --- a/cc/vndk_prebuilt.go +++ b/cc/vndk_prebuilt.go @@ -171,7 +171,7 @@ func (p *vndkPrebuiltLibraryDecorator) link(ctx ModuleContext, p.androidMkSuffix = "" } - ctx.SetProvider(SharedLibraryInfoProvider, SharedLibraryInfo{ + android.SetProvider(ctx, SharedLibraryInfoProvider, SharedLibraryInfo{ SharedLibrary: in, Target: ctx.Target(), diff --git a/genrule/genrule.go b/genrule/genrule.go index 0512c15b7..87f6392ee 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -393,7 +393,7 @@ func (g *Module) generateCommonBuildActions(ctx android.ModuleContext) { return srcFiles } srcFiles := addLabelsForInputs("srcs", g.properties.Srcs, g.properties.Exclude_srcs) - ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcFiles.Strings()}) + android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcFiles.Strings()}) var copyFrom android.Paths var outputFiles android.WritablePaths diff --git a/java/aar.go b/java/aar.go index bb24f2dae..2ad8fdff4 100644 --- a/java/aar.go +++ b/java/aar.go @@ -805,7 +805,8 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) }, ) - a.hideApexVariantFromMake = !ctx.Provider(android.ApexInfoProvider).(android.ApexInfo).IsForPlatform() + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) + a.hideApexVariantFromMake = !apexInfo.IsForPlatform() a.stem = proptools.StringDefault(a.overridableDeviceProperties.Stem, ctx.ModuleName()) @@ -825,7 +826,7 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) a.linter.resources = a.aapt.resourceFiles proguardSpecInfo := a.collectProguardSpecInfo(ctx) - ctx.SetProvider(ProguardSpecInfoProvider, proguardSpecInfo) + android.SetProvider(ctx, ProguardSpecInfoProvider, proguardSpecInfo) exportedProguardFlagsFiles := proguardSpecInfo.ProguardFlagsFiles.ToList() a.extraProguardFlagsFiles = append(a.extraProguardFlagsFiles, exportedProguardFlagsFiles...) a.extraProguardFlagsFiles = append(a.extraProguardFlagsFiles, a.proguardOptionsFile) @@ -860,12 +861,12 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) prebuiltJniPackages := android.Paths{} 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...) } }) if len(prebuiltJniPackages) > 0 { - ctx.SetProvider(JniPackageProvider, JniPackageInfo{ + android.SetProvider(ctx, JniPackageProvider, JniPackageInfo{ JniPackages: prebuiltJniPackages, }) } @@ -1106,7 +1107,8 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.sdkVersion = a.SdkVersion(ctx) a.minSdkVersion = a.MinSdkVersion(ctx) - a.hideApexVariantFromMake = !ctx.Provider(android.ApexInfoProvider).(android.ApexInfo).IsForPlatform() + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) + a.hideApexVariantFromMake = !apexInfo.IsForPlatform() aarName := ctx.ModuleName() + ".aar" a.aarPath = android.PathForModuleSrc(ctx, a.properties.Aars[0]) @@ -1123,7 +1125,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { aarRTxt := extractedAARDir.Join(ctx, "R.txt") a.assetsPackage = android.PathForModuleOut(ctx, "assets.zip") a.proguardFlags = extractedAARDir.Join(ctx, "proguard.txt") - ctx.SetProvider(ProguardSpecInfoProvider, ProguardSpecInfo{ + android.SetProvider(ctx, ProguardSpecInfoProvider, ProguardSpecInfo{ ProguardFlagsFiles: android.NewDepSet[android.Path]( android.POSTORDER, android.Paths{a.proguardFlags}, @@ -1228,7 +1230,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.transitiveAaptResourcePackagesFile = transitiveAaptResourcePackagesFile a.collectTransitiveHeaderJars(ctx) - ctx.SetProvider(JavaInfoProvider, JavaInfo{ + android.SetProvider(ctx, JavaInfoProvider, JavaInfo{ HeaderJars: android.PathsIfNonNil(a.classpathFile), TransitiveLibsHeaderJars: a.transitiveLibsHeaderJars, TransitiveStaticLibsHeaderJars: a.transitiveStaticLibsHeaderJars, @@ -1258,7 +1260,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { } } - ctx.SetProvider(JniPackageProvider, JniPackageInfo{ + android.SetProvider(ctx, JniPackageProvider, JniPackageInfo{ JniPackages: a.jniPackages, }) } diff --git a/java/aar_test.go b/java/aar_test.go index 8afa039c4..4d4e5d025 100644 --- a/java/aar_test.go +++ b/java/aar_test.go @@ -52,7 +52,7 @@ func TestAarImportProducesJniPackages(t *testing.T) { appMod := ctx.Module(tc.name, "android_common") appTestMod := ctx.ModuleForTests(tc.name, "android_common") - info, ok := ctx.ModuleProvider(appMod, JniPackageProvider).(JniPackageInfo) + info, ok := android.SingletonModuleProvider(ctx, appMod, JniPackageProvider) if !ok { t.Errorf("expected android_library_import to have JniPackageProvider") } diff --git a/java/app.go b/java/app.go index ee82a3225..7f0303a6b 100755 --- a/java/app.go +++ b/java/app.go @@ -411,7 +411,7 @@ func (a *AndroidApp) useEmbeddedNativeLibs(ctx android.ModuleContext) bool { ctx.PropertyErrorf("min_sdk_version", "invalid value %q: %s", a.MinSdkVersion(ctx), err) } - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) return (minSdkVersion.FinalOrFutureInt() >= 23 && Bool(a.appProperties.Use_embedded_native_libs)) || !apexInfo.IsForPlatform() } @@ -436,7 +436,7 @@ func (a *AndroidApp) shouldUncompressDex(ctx android.ModuleContext) bool { } func (a *AndroidApp) shouldEmbedJnis(ctx android.BaseModuleContext) bool { - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) return ctx.Config().UnbundledBuild() || Bool(a.appProperties.Use_embedded_native_libs) || !apexInfo.IsForPlatform() || a.appProperties.AlwaysPackageNativeLibs } @@ -509,7 +509,7 @@ func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) { var aconfigTextFilePaths android.Paths 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) } else { 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) { var staticLibProguardFlagFiles android.Paths ctx.VisitDirectDeps(func(m android.Module) { - depProguardInfo := ctx.OtherModuleProvider(m, ProguardSpecInfoProvider).(ProguardSpecInfo) + depProguardInfo, _ := android.OtherModuleProvider(ctx, m, ProguardSpecInfoProvider) staticLibProguardFlagFiles = append(staticLibProguardFlagFiles, depProguardInfo.UnconditionallyExportedProguardFlags.ToList()...) if ctx.OtherModuleDependencyTag(m) == staticLibTag { staticLibProguardFlagFiles = append(staticLibProguardFlagFiles, depProguardInfo.ProguardFlagsFiles.ToList()...) @@ -745,7 +745,8 @@ func (a *AndroidApp) createPrivappAllowlist(ctx android.ModuleContext) android.P func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { var apkDeps android.Paths - if !ctx.Provider(android.ApexInfoProvider).(android.ApexInfo).IsForPlatform() { + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) + if !apexInfo.IsForPlatform() { a.hideApexVariantFromMake = true } @@ -890,8 +891,6 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { a.privAppAllowlist = android.OptionalPathForPath(allowlist) } - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) - // Install the app package. shouldInstallAppPackage := (Bool(a.Module.properties.Installable) || ctx.Host()) && apexInfo.IsForPlatform() && !a.appProperties.PreventInstall if shouldInstallAppPackage { @@ -975,7 +974,7 @@ func collectAppDeps(ctx android.ModuleContext, app appDepsInterface, 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...) } @@ -1295,7 +1294,7 @@ func (a *AndroidTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.testConfig = a.FixTestConfig(ctx, testConfig) a.extraTestConfigs = android.PathsForModuleSrc(ctx, a.testProperties.Test_options.Extra_test_configs) a.data = android.PathsForModuleSrc(ctx, a.testProperties.Data) - ctx.SetProvider(testing.TestModuleProviderKey, testing.TestModuleProviderData{}) + android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{}) } func (a *AndroidTest) FixTestConfig(ctx android.ModuleContext, testConfig android.Path) android.Path { diff --git a/java/app_import.go b/java/app_import.go index c5d09fdf1..ff0f5fe2f 100644 --- a/java/app_import.go +++ b/java/app_import.go @@ -257,7 +257,7 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext ctx.ModuleErrorf("prebuilt_framework-res found. This used to have special handling in soong, but was removed due to prebuilt_framework-res no longer existing. This check is to ensure it doesn't come back without readding the special handling.") } - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) if !apexInfo.IsForPlatform() { a.hideApexVariantFromMake = true } diff --git a/java/base.go b/java/base.go index 7cd28207f..41f2fcc96 100644 --- a/java/base.go +++ b/java/base.go @@ -618,7 +618,7 @@ func (j *Module) provideHiddenAPIPropertyInfo(ctx android.ModuleContext) { // Populate with package rules from the properties. hiddenAPIInfo.extractPackageRulesFromProperties(&j.deviceProperties.HiddenAPIPackageProperties) - ctx.SetProvider(hiddenAPIPropertyInfoProvider, hiddenAPIInfo) + android.SetProvider(ctx, hiddenAPIPropertyInfoProvider, hiddenAPIInfo) } func (j *Module) OutputFiles(tag string) (android.Paths, error) { @@ -685,7 +685,7 @@ func (j *Module) shouldInstrumentInApex(ctx android.BaseModuleContext) bool { // Force enable the instrumentation for java code that is built for APEXes ... // except for the jacocoagent itself (because instrumenting jacocoagent using jacocoagent // doesn't make sense) or framework libraries (e.g. libraries found in the InstrumentFrameworkModules list) unless EMMA_INSTRUMENT_FRAMEWORK is true. - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) isJacocoAgent := ctx.ModuleName() == "jacocoagent" if j.DirectlyInAnyApex() && !isJacocoAgent && !apexInfo.IsForPlatform() { if !inList(ctx.ModuleName(), config.InstrumentFrameworkModules) { @@ -1143,7 +1143,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath uniqueSrcFiles = append(uniqueSrcFiles, uniqueJavaFiles...) uniqueSrcFiles = append(uniqueSrcFiles, uniqueKtFiles...) j.uniqueSrcFiles = uniqueSrcFiles - ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: uniqueSrcFiles.Strings()}) + android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: uniqueSrcFiles.Strings()}) // We don't currently run annotation processors in turbine, which means we can't use turbine // generated header jars when an annotation processor that generates API is enabled. One @@ -1178,7 +1178,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath return } - ctx.SetProvider(JavaInfoProvider, JavaInfo{ + android.SetProvider(ctx, JavaInfoProvider, JavaInfo{ HeaderJars: android.PathsIfNonNil(j.headerJarFile), TransitiveLibsHeaderJars: j.transitiveLibsHeaderJars, TransitiveStaticLibsHeaderJars: j.transitiveStaticLibsHeaderJars, @@ -1572,7 +1572,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath // Enable dex compilation for the APEX variants, unless it is disabled explicitly compileDex := j.dexProperties.Compile_dex - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) if j.DirectlyInAnyApex() && !apexInfo.IsForPlatform() { if compileDex == nil { compileDex = proptools.BoolPtr(true) @@ -1696,7 +1696,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath aconfig.CollectDependencyAconfigFiles(ctx, &j.mergedAconfigFiles) - ctx.SetProvider(JavaInfoProvider, JavaInfo{ + android.SetProvider(ctx, JavaInfoProvider, JavaInfo{ HeaderJars: android.PathsIfNonNil(j.headerJarFile), TransitiveLibsHeaderJars: j.transitiveLibsHeaderJars, TransitiveStaticLibsHeaderJars: j.transitiveStaticLibsHeaderJars, @@ -1726,7 +1726,7 @@ func (j *Module) collectProguardSpecInfo(ctx android.ModuleContext) ProguardSpec transitiveProguardFlags := []*android.DepSet[android.Path]{} ctx.VisitDirectDeps(func(m android.Module) { - depProguardInfo := ctx.OtherModuleProvider(m, ProguardSpecInfoProvider).(ProguardSpecInfo) + depProguardInfo, _ := android.OtherModuleProvider(ctx, m, ProguardSpecInfoProvider) depTag := ctx.OtherModuleDependencyTag(m) if depProguardInfo.UnconditionallyExportedProguardFlags != nil { @@ -1912,7 +1912,7 @@ func (j *providesTransitiveHeaderJars) collectTransitiveHeaderJars(ctx android.M return } - dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) + dep, _ := android.OtherModuleProvider(ctx, module, JavaInfoProvider) tag := ctx.OtherModuleDependencyTag(module) _, isUsesLibDep := tag.(usesLibraryDependencyTag) 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) { tag := ctx.OtherModuleDependencyTag(module) if tag == staticLibTag { - depInfo := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) + depInfo, _ := android.OtherModuleProvider(ctx, module, JavaInfoProvider) if depInfo.TransitiveSrcFiles != nil { fromDeps = append(fromDeps, depInfo.TransitiveSrcFiles) } @@ -2209,15 +2209,14 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { case staticLibTag: ctx.ModuleErrorf("dependency on java_sdk_library %q can only be in libs", otherName) } - } else if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { - dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) - if sdkLinkType != javaPlatform && - ctx.OtherModuleHasProvider(module, SyspropPublicStubInfoProvider) { - // 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 - // dep with the JavaInfo from the SyspropPublicStubInfoProvider. - syspropDep := ctx.OtherModuleProvider(module, SyspropPublicStubInfoProvider).(SyspropPublicStubInfo) - dep = syspropDep.JavaInfo + } else if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok { + if sdkLinkType != javaPlatform { + if syspropDep, ok := android.OtherModuleProvider(ctx, module, SyspropPublicStubInfoProvider); ok { + // 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 + // dep with the JavaInfo from the SyspropPublicStubInfoProvider. + dep = syspropDep.JavaInfo + } } switch tag { case bootClasspathTag: @@ -2289,7 +2288,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { case syspropPublicStubDepTag: // This is a sysprop implementation library, forward the JavaInfoProvider from // the corresponding sysprop public stub library as SyspropPublicStubInfoProvider. - ctx.SetProvider(SyspropPublicStubInfoProvider, SyspropPublicStubInfo{ + android.SetProvider(ctx, SyspropPublicStubInfoProvider, SyspropPublicStubInfo{ JavaInfo: dep, }) } diff --git a/java/bootclasspath_fragment.go b/java/bootclasspath_fragment.go index 4eb916d59..d2bb52315 100644 --- a/java/bootclasspath_fragment.go +++ b/java/bootclasspath_fragment.go @@ -500,7 +500,7 @@ func (b *BootclasspathFragmentModule) GenerateAndroidBuildActions(ctx android.Mo if ctx.Module() != ctx.FinalModule() { b.HideFromMake() } - ctx.SetProvider(testing.TestModuleProviderKey, testing.TestModuleProviderData{}) + android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{}) } // getProfileProviderApex returns the name of the apex that provides a boot image profile, or an @@ -512,7 +512,7 @@ func (b *BootclasspathFragmentModule) getProfileProviderApex(ctx android.BaseMod } // Bootclasspath fragment modules that are for the platform do not produce boot related files. - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) for _, apex := range apexInfo.InApexVariants { if isProfileProviderApex(ctx, apex) { return apex @@ -537,7 +537,7 @@ func (b *BootclasspathFragmentModule) provideApexContentInfo(ctx android.ModuleC } // Make the apex content info available for other modules. - ctx.SetProvider(BootclasspathFragmentApexContentInfoProvider, info) + android.SetProvider(ctx, BootclasspathFragmentApexContentInfoProvider, info) } // generateClasspathProtoBuildActions generates all required build actions for classpath.proto config @@ -623,7 +623,7 @@ func (b *BootclasspathFragmentModule) generateHiddenAPIBuildActions(ctx android. hiddenAPIInfo.HiddenAPIFlagOutput = output.HiddenAPIFlagOutput // Provide it for use by other modules. - ctx.SetProvider(HiddenAPIInfoProvider, hiddenAPIInfo) + android.SetProvider(ctx, HiddenAPIInfoProvider, hiddenAPIInfo) return output } @@ -744,7 +744,7 @@ func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleC } // Make the information available for the sdk snapshot. - ctx.SetProvider(HiddenAPIInfoForSdkProvider, HiddenAPIInfoForSdk{ + android.SetProvider(ctx, HiddenAPIInfoForSdkProvider, HiddenAPIInfoForSdk{ FlagFilesByCategory: flagFilesByCategory, HiddenAPIFlagOutput: flagOutput, }) @@ -876,7 +876,7 @@ func (b *bootclasspathFragmentSdkMemberProperties) PopulateFromVariant(ctx andro // Get the hidden API information from the module. mctx := ctx.SdkModuleContext() - hiddenAPIInfo := mctx.OtherModuleProvider(module, HiddenAPIInfoForSdkProvider).(HiddenAPIInfoForSdk) + hiddenAPIInfo, _ := android.OtherModuleProvider(mctx, module, HiddenAPIInfoForSdkProvider) b.Flag_files_by_category = hiddenAPIInfo.FlagFilesByCategory // Copy all the generated file paths. diff --git a/java/bootclasspath_fragment_test.go b/java/bootclasspath_fragment_test.go index 828de2179..216c3b348 100644 --- a/java/bootclasspath_fragment_test.go +++ b/java/bootclasspath_fragment_test.go @@ -272,7 +272,7 @@ func TestBootclasspathFragment_StubLibs(t *testing.T) { `) fragment := result.Module("myfragment", "android_common") - info := result.ModuleProvider(fragment, HiddenAPIInfoProvider).(HiddenAPIInfo) + info, _ := android.SingletonModuleProvider(result, fragment, HiddenAPIInfoProvider) stubsJar := "out/soong/.intermediates/mystublib/android_common/dex/mystublib.jar" @@ -456,7 +456,7 @@ func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) { // Make sure that the library exports hidden API properties for use by the bootclasspath_fragment. library := result.Module("mynewlibrary", "android_common") - info := result.ModuleProvider(library, hiddenAPIPropertyInfoProvider).(HiddenAPIPropertyInfo) + info, _ := android.SingletonModuleProvider(result, library, hiddenAPIPropertyInfoProvider) android.AssertArrayString(t, "split packages", []string{"sdklibrary", "newlibrary"}, info.SplitPackages) android.AssertArrayString(t, "package prefixes", []string{"newlibrary.all.mine"}, info.PackagePrefixes) android.AssertArrayString(t, "single packages", []string{"newlibrary.mine"}, info.SinglePackages) diff --git a/java/classpath_element.go b/java/classpath_element.go index af99fb4fb..abbcae7a3 100644 --- a/java/classpath_element.go +++ b/java/classpath_element.go @@ -21,7 +21,6 @@ import ( "strings" "android/soong/android" - "github.com/google/blueprint" ) // 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 type ClasspathElementContext interface { - OtherModuleHasProvider(m blueprint.Module, provider blueprint.AnyProviderKey) bool - OtherModuleProvider(m blueprint.Module, provider blueprint.AnyProviderKey) interface{} + android.OtherModuleProviderContext ModuleErrorf(fmt string, args ...interface{}) } @@ -123,12 +121,12 @@ func CreateClasspathElements(ctx ClasspathElementContext, libraries []android.Mo // associated with a particular apex. apexToFragment := map[string]android.Module{} 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) continue } - apexInfo := ctx.OtherModuleProvider(fragment, android.ApexInfoProvider).(android.ApexInfo) for _, apex := range apexInfo.InApexVariants { if existing, ok := apexToFragment[apex]; ok { 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. for _, library := range libraries { var element ClasspathElement - if ctx.OtherModuleHasProvider(library, android.ApexInfoProvider) { - apexInfo := ctx.OtherModuleProvider(library, android.ApexInfoProvider).(android.ApexInfo) + if apexInfo, ok := android.OtherModuleProvider(ctx, library, android.ApexInfoProvider); ok { var fragment android.Module diff --git a/java/classpath_fragment.go b/java/classpath_fragment.go index eecaebdb9..201780175 100644 --- a/java/classpath_fragment.go +++ b/java/classpath_fragment.go @@ -178,7 +178,7 @@ func (c *ClasspathFragmentBase) generateClasspathProtoBuildActions(ctx android.M ClasspathFragmentProtoInstallDir: c.installDirPath, ClasspathFragmentProtoOutput: c.outputFilepath, } - ctx.SetProvider(ClasspathFragmentProtoContentInfoProvider, classpathProtoInfo) + android.SetProvider(ctx, ClasspathFragmentProtoContentInfoProvider, classpathProtoInfo) } func writeClasspathsTextproto(ctx android.ModuleContext, output android.WritablePath, jars []classpathJar) { diff --git a/java/code_metadata_test.go b/java/code_metadata_test.go index 8f8abd7cc..509e70112 100644 --- a/java/code_metadata_test.go +++ b/java/code_metadata_test.go @@ -30,9 +30,7 @@ func TestCodeMetadata(t *testing.T) { ).Module().(*soongTesting.CodeMetadataModule) // Check that the provider has the right contents - data := result.ModuleProvider( - module, soongTesting.CodeMetadataProviderKey, - ).(soongTesting.CodeMetadataProviderData) + data, _ := android.SingletonModuleProvider(result, module, soongTesting.CodeMetadataProviderKey) if !strings.HasSuffix( data.IntermediatePath.String(), "/intermediateCodeMetadata.pb", ) { diff --git a/java/device_host_converter.go b/java/device_host_converter.go index ee8a15a03..834651f54 100644 --- a/java/device_host_converter.go +++ b/java/device_host_converter.go @@ -97,8 +97,7 @@ func (d *DeviceHostConverter) GenerateAndroidBuildActions(ctx android.ModuleCont } ctx.VisitDirectDepsWithTag(deviceHostConverterDepTag, func(m android.Module) { - if ctx.OtherModuleHasProvider(m, JavaInfoProvider) { - dep := ctx.OtherModuleProvider(m, JavaInfoProvider).(JavaInfo) + if dep, ok := android.OtherModuleProvider(ctx, m, JavaInfoProvider); ok { d.headerJars = append(d.headerJars, dep.HeaderJars...) d.implementationJars = append(d.implementationJars, dep.ImplementationJars...) d.implementationAndResourceJars = append(d.implementationAndResourceJars, dep.ImplementationAndResourcesJars...) @@ -131,7 +130,7 @@ func (d *DeviceHostConverter) GenerateAndroidBuildActions(ctx android.ModuleCont d.combinedHeaderJar = d.headerJars[0] } - ctx.SetProvider(JavaInfoProvider, JavaInfo{ + android.SetProvider(ctx, JavaInfoProvider, JavaInfo{ HeaderJars: d.headerJars, ImplementationAndResourcesJars: d.implementationAndResourceJars, ImplementationJars: d.implementationJars, diff --git a/java/dex.go b/java/dex.go index 6f1c09d57..cdae0a2df 100644 --- a/java/dex.go +++ b/java/dex.go @@ -261,7 +261,7 @@ func (d *dexer) r8Flags(ctx android.ModuleContext, flags javaBuilderFlags) (r8Fl // See b/20667396 var proguardRaiseDeps classpath ctx.VisitDirectDepsWithTag(proguardRaiseTag, func(m android.Module) { - dep := ctx.OtherModuleProvider(m, JavaInfoProvider).(JavaInfo) + dep, _ := android.OtherModuleProvider(ctx, m, JavaInfoProvider) proguardRaiseDeps = append(proguardRaiseDeps, dep.HeaderJars...) }) diff --git a/java/dexpreopt.go b/java/dexpreopt.go index fe8c5fbac..0f69dc3a4 100644 --- a/java/dexpreopt.go +++ b/java/dexpreopt.go @@ -166,12 +166,12 @@ func init() { } func isApexVariant(ctx android.BaseModuleContext) bool { - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) return !apexInfo.IsForPlatform() } func forPrebuiltApex(ctx android.BaseModuleContext) bool { - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) return apexInfo.ForPrebuiltApex } diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go index 5fb36df6d..5a19945b4 100644 --- a/java/dexpreopt_bootjars.go +++ b/java/dexpreopt_bootjars.go @@ -544,7 +544,7 @@ func gatherBootclasspathFragments(ctx android.ModuleContext) map[string]android. return true } if tag == bootclasspathFragmentDepTag { - apexInfo := ctx.OtherModuleProvider(child, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.OtherModuleProvider(ctx, child, android.ApexInfoProvider) for _, apex := range apexInfo.InApexVariants { fragments[apex] = child } @@ -682,7 +682,7 @@ func extractEncodedDexJarsFromModulesOrBootclasspathFragments(ctx android.Module pair.jarModule.Name(), pair.apex) } - bootclasspathFragmentInfo := ctx.OtherModuleProvider(fragment, BootclasspathFragmentApexContentInfoProvider).(BootclasspathFragmentApexContentInfo) + bootclasspathFragmentInfo, _ := android.OtherModuleProvider(ctx, fragment, BootclasspathFragmentApexContentInfoProvider) jar, err := bootclasspathFragmentInfo.DexBootJarPathForContentModule(pair.jarModule) if err != nil { ctx.ModuleErrorf("%s", err) diff --git a/java/droiddoc.go b/java/droiddoc.go index b0d537617..138c9c3bb 100644 --- a/java/droiddoc.go +++ b/java/droiddoc.go @@ -363,8 +363,7 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps { switch tag { case bootClasspathTag: - if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { - dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) + if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok { deps.bootClasspath = append(deps.bootClasspath, dep.ImplementationJars...) } else if sm, ok := module.(SystemModulesProvider); ok { // 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: if dep, ok := module.(SdkLibraryDependency); ok { deps.classpath = append(deps.classpath, dep.SdkHeaderJars(ctx, j.SdkVersion(ctx))...) - } else if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { - dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) + } else if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok { deps.classpath = append(deps.classpath, dep.HeaderJars...) deps.aidlIncludeDirs = append(deps.aidlIncludeDirs, dep.AidlIncludeDirs...) } 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) } case java9LibTag: - if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { - dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) + if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok { deps.java9Classpath = append(deps.java9Classpath, dep.HeaderJars...) } else { ctx.ModuleErrorf("depends on non-java module %q", otherName) diff --git a/java/fuzz.go b/java/fuzz.go index b3c2fd47c..dc4c6bec5 100644 --- a/java/fuzz.go +++ b/java/fuzz.go @@ -121,7 +121,7 @@ func (j *JavaFuzzTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { _, sharedDeps := cc.CollectAllSharedDependencies(ctx) for _, dep := range sharedDeps { - sharedLibInfo := ctx.OtherModuleProvider(dep, cc.SharedLibraryInfoProvider).(cc.SharedLibraryInfo) + sharedLibInfo, _ := android.OtherModuleProvider(ctx, dep, cc.SharedLibraryInfoProvider) if sharedLibInfo.SharedLibrary != nil { arch := "lib" if sharedLibInfo.Target.Arch.ArchType.Multilib == "lib64" { diff --git a/java/hiddenapi.go b/java/hiddenapi.go index fe3fe7b61..e9ee3a2ea 100644 --- a/java/hiddenapi.go +++ b/java/hiddenapi.go @@ -94,7 +94,7 @@ func (h *hiddenAPI) initHiddenAPI(ctx android.ModuleContext, dexJar OptionalDexJ // processing. classesJars := android.Paths{classesJar} ctx.VisitDirectDepsWithTag(hiddenApiAnnotationsTag, func(dep android.Module) { - javaInfo := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) + javaInfo, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider) classesJars = append(classesJars, javaInfo.ImplementationJars...) }) h.classesJarPaths = classesJars diff --git a/java/hiddenapi_modular.go b/java/hiddenapi_modular.go index 3fc0883ce..8011f343b 100644 --- a/java/hiddenapi_modular.go +++ b/java/hiddenapi_modular.go @@ -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 // this will introduce duplicates so they will be resolved after processing all the fragments. for _, fragment := range fragments { - if ctx.OtherModuleHasProvider(fragment, HiddenAPIInfoProvider) { - info := ctx.OtherModuleProvider(fragment, HiddenAPIInfoProvider).(HiddenAPIInfo) + if info, ok := android.OtherModuleProvider(ctx, fragment, HiddenAPIInfoProvider); ok { 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) { for _, module := range contents { - if ctx.OtherModuleHasProvider(module, hiddenAPIPropertyInfoProvider) { - info := ctx.OtherModuleProvider(module, hiddenAPIPropertyInfoProvider).(HiddenAPIPropertyInfo) + if info, ok := android.OtherModuleProvider(ctx, module, hiddenAPIPropertyInfoProvider); ok { i.FlagFilesByCategory.append(info.FlagFilesByCategory) i.PackagePrefixes = append(i.PackagePrefixes, info.PackagePrefixes...) 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() { - apexInfo := ctx.OtherModuleProvider(module, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.OtherModuleProvider(ctx, module, android.ApexInfoProvider) if apexInfo.IsForPlatform() { return true } diff --git a/java/hiddenapi_monolithic.go b/java/hiddenapi_monolithic.go index c1594e9a2..a61018d84 100644 --- a/java/hiddenapi_monolithic.go +++ b/java/hiddenapi_monolithic.go @@ -67,8 +67,7 @@ func newMonolithicHiddenAPIInfo(ctx android.ModuleContext, flagFilesByCategory F case *ClasspathFragmentElement: fragment := e.Module() - if ctx.OtherModuleHasProvider(fragment, HiddenAPIInfoProvider) { - info := ctx.OtherModuleProvider(fragment, HiddenAPIInfoProvider).(HiddenAPIInfo) + if info, ok := android.OtherModuleProvider(ctx, fragment, HiddenAPIInfoProvider); ok { monolithicInfo.append(&info) } else { ctx.ModuleErrorf("%s does not provide hidden API information", fragment) diff --git a/java/hiddenapi_singleton.go b/java/hiddenapi_singleton.go index 8ec17971a..8cb78cd54 100644 --- a/java/hiddenapi_singleton.go +++ b/java/hiddenapi_singleton.go @@ -162,7 +162,7 @@ func isModuleInConfiguredList(ctx android.BaseModuleContext, module android.Modu 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. requiredApex := configuredBootJars.Apex(index) diff --git a/java/java.go b/java/java.go index d38af13d0..630318e6d 100644 --- a/java/java.go +++ b/java/java.go @@ -647,7 +647,7 @@ func (j *Library) PermittedPackagesForUpdatableBootJars() []string { func shouldUncompressDex(ctx android.ModuleContext, dexpreopter *dexpreopter) bool { // Store uncompressed (and aligned) any dex files from jars in APEXes. - if apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo); !apexInfo.IsForPlatform() { + if apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider); !apexInfo.IsForPlatform() { return true } @@ -687,7 +687,7 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) { j.stem = proptools.StringDefault(j.overridableDeviceProperties.Stem, ctx.ModuleName()) proguardSpecInfo := j.collectProguardSpecInfo(ctx) - ctx.SetProvider(ProguardSpecInfoProvider, proguardSpecInfo) + android.SetProvider(ctx, ProguardSpecInfoProvider, proguardSpecInfo) exportedProguardFlagsFiles := proguardSpecInfo.ProguardFlagsFiles.ToList() j.extraProguardFlagsFiles = append(j.extraProguardFlagsFiles, exportedProguardFlagsFiles...) @@ -695,7 +695,7 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) { writeCombinedProguardFlagsFile(ctx, combinedExportedProguardFlagFile, exportedProguardFlagsFiles) j.combinedExportedProguardFlagsFile = combinedExportedProguardFlagFile - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) if !apexInfo.IsForPlatform() { j.hideApexVariantFromMake = true } @@ -1216,12 +1216,12 @@ func (j *TestHost) GenerateAndroidBuildActions(ctx android.ModuleContext) { } j.Test.generateAndroidBuildActionsWithConfig(ctx, configs) - ctx.SetProvider(testing.TestModuleProviderKey, testing.TestModuleProviderData{}) + android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{}) } func (j *Test) GenerateAndroidBuildActions(ctx android.ModuleContext) { j.generateAndroidBuildActionsWithConfig(ctx, nil) - ctx.SetProvider(testing.TestModuleProviderKey, testing.TestModuleProviderData{}) + android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{}) } func (j *Test) generateAndroidBuildActionsWithConfig(ctx android.ModuleContext, configs []tradefed.Config) { @@ -1257,7 +1257,7 @@ func (j *Test) generateAndroidBuildActionsWithConfig(ctx android.ModuleContext, }) 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 { // Copy to an intermediate output directory to append "lib[64]" to the path, // so that it's compatible with the default rpath values. @@ -1632,7 +1632,7 @@ func (ap *JavaApiContribution) GenerateAndroidBuildActions(ctx android.ModuleCon apiFile = android.PathForModuleSrc(ctx, String(apiFileString)) } - ctx.SetProvider(JavaApiImportProvider, JavaApiImportInfo{ + android.SetProvider(ctx, JavaApiImportProvider, JavaApiImportInfo{ ApiFile: apiFile, ApiSurface: proptools.String(ap.properties.Api_surface), }) @@ -1902,19 +1902,19 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { tag := ctx.OtherModuleDependencyTag(dep) switch tag { case javaApiContributionTag: - provider := ctx.OtherModuleProvider(dep, JavaApiImportProvider).(JavaApiImportInfo) + provider, _ := android.OtherModuleProvider(ctx, dep, JavaApiImportProvider) if provider.ApiFile == nil && !ctx.Config().AllowMissingDependencies() { ctx.ModuleErrorf("Error: %s has an empty api file.", dep.Name()) } srcFilesInfo = append(srcFilesInfo, provider) case libTag: - provider := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) + provider, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider) classPaths = append(classPaths, provider.HeaderJars...) case staticLibTag: - provider := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) + provider, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider) staticLibs = append(staticLibs, provider.HeaderJars...) case depApiSrcsTag: - provider := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) + provider, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider) depApiSrcsStubsJar = provider.HeaderJars[0] case systemModulesTag: module := dep.(SystemModulesProvider) @@ -2002,7 +2002,7 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.Phony(ctx.ModuleName(), al.stubsJar) - ctx.SetProvider(JavaInfoProvider, JavaInfo{ + android.SetProvider(ctx, JavaInfoProvider, JavaInfo{ HeaderJars: android.PathsIfNonNil(al.stubsJar), ImplementationAndResourcesJars: android.PathsIfNonNil(al.stubsJar), ImplementationJars: android.PathsIfNonNil(al.stubsJar), @@ -2188,7 +2188,8 @@ func (j *Import) commonBuildActions(ctx android.ModuleContext) { j.sdkVersion = j.SdkVersion(ctx) j.minSdkVersion = j.MinSdkVersion(ctx) - if !ctx.Provider(android.ApexInfoProvider).(android.ApexInfo).IsForPlatform() { + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) + if !apexInfo.IsForPlatform() { j.hideApexVariantFromMake = true } @@ -2219,8 +2220,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { j.collectTransitiveHeaderJars(ctx) ctx.VisitDirectDeps(func(module android.Module) { tag := ctx.OtherModuleDependencyTag(module) - if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { - dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) + if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok { switch tag { case libTag, sdkLibTag: flags.classpath = append(flags.classpath, dep.HeaderJars...) @@ -2247,7 +2247,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { if ctx.Device() { // If this is a variant created for a prebuilt_apex then use the dex implementation jar // obtained from the associated deapexer module. - ai := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + ai, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) if ai.ForPrebuiltApex { // Get the path of the dex implementation jar from the `deapexer` module. di := android.FindDeapexerProviderForModule(ctx) @@ -2320,7 +2320,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { } } - ctx.SetProvider(JavaInfoProvider, JavaInfo{ + android.SetProvider(ctx, JavaInfoProvider, JavaInfo{ HeaderJars: android.PathsIfNonNil(j.combinedClasspathFile), TransitiveLibsHeaderJars: j.transitiveLibsHeaderJars, TransitiveStaticLibsHeaderJars: j.transitiveStaticLibsHeaderJars, @@ -2570,7 +2570,7 @@ func (j *DexImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.PropertyErrorf("jars", "exactly one jar must be provided") } - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) if !apexInfo.IsForPlatform() { j.hideApexVariantFromMake = true } diff --git a/java/java_test.go b/java/java_test.go index 8e83fc412..e21018c39 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -2226,7 +2226,8 @@ func TestTransitiveSrcFiles(t *testing.T) { } `) c := ctx.ModuleForTests("c", "android_common").Module() - transitiveSrcFiles := android.Paths(ctx.ModuleProvider(c, JavaInfoProvider).(JavaInfo).TransitiveSrcFiles.ToList()) + javaInfo, _ := android.SingletonModuleProvider(ctx, c, JavaInfoProvider) + transitiveSrcFiles := android.Paths(javaInfo.TransitiveSrcFiles.ToList()) android.AssertArrayString(t, "unexpected jar deps", []string{"b.java", "c.java"}, transitiveSrcFiles.Strings()) } diff --git a/java/jdeps.go b/java/jdeps.go index 7e3a14f55..91f7ce715 100644 --- a/java/jdeps.go +++ b/java/jdeps.go @@ -89,8 +89,7 @@ func (j *jdepsGeneratorSingleton) GenerateBuildActions(ctx android.SingletonCont dpInfo.Classes = append(dpInfo.Classes, data.Class) } - if ctx.ModuleHasProvider(module, JavaInfoProvider) { - dep := ctx.ModuleProvider(module, JavaInfoProvider).(JavaInfo) + if dep, ok := android.SingletonModuleProvider(ctx, module, JavaInfoProvider); ok { dpInfo.Installed_paths = append(dpInfo.Installed_paths, dep.ImplementationJars.Strings()...) } dpInfo.Classes = android.FirstUniqueStrings(dpInfo.Classes) diff --git a/java/lint.go b/java/lint.go index eb46ea809..5a684a8c0 100644 --- a/java/lint.go +++ b/java/lint.go @@ -413,8 +413,7 @@ func (l *linter) lint(ctx android.ModuleContext) { extraLintCheckModules := ctx.GetDirectDepsWithTag(extraLintCheckTag) for _, extraLintCheckModule := range extraLintCheckModules { - if ctx.OtherModuleHasProvider(extraLintCheckModule, JavaInfoProvider) { - dep := ctx.OtherModuleProvider(extraLintCheckModule, JavaInfoProvider).(JavaInfo) + if dep, ok := android.OtherModuleProvider(ctx, extraLintCheckModule, JavaInfoProvider); ok { l.extraLintCheckJars = append(l.extraLintCheckJars, dep.ImplementationAndResourcesJars...) } else { ctx.PropertyErrorf("lint.extra_check_modules", @@ -661,7 +660,7 @@ func (l *lintSingleton) generateLintReportZips(ctx android.SingletonContext) { } if apex, ok := m.(android.ApexModule); ok && apex.NotAvailableForPlatform() { - apexInfo := ctx.ModuleProvider(m, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.SingletonModuleProvider(ctx, m, android.ApexInfoProvider) if apexInfo.IsForPlatform() { // There are stray platform variants of modules in apexes that are not available for // the platform, and they sometimes can't be built. Don't depend on them. diff --git a/java/platform_bootclasspath.go b/java/platform_bootclasspath.go index 0d52614ea..88d1ae8c0 100644 --- a/java/platform_bootclasspath.go +++ b/java/platform_bootclasspath.go @@ -180,7 +180,7 @@ func (b *platformBootclasspathModule) GenerateAndroidBuildActions(ctx android.Mo var transitiveSrcFiles android.Paths for _, module := range allModules { - depInfo := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) + depInfo, _ := android.OtherModuleProvider(ctx, module, JavaInfoProvider) if depInfo.TransitiveSrcFiles != nil { 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. remainingJars := dexpreopt.GetGlobalConfig(ctx).ApexBootJars for _, fragment := range b.fragments { - info := ctx.OtherModuleProvider(fragment, ClasspathFragmentProtoContentInfoProvider).(ClasspathFragmentProtoContentInfo) + info, _ := android.OtherModuleProvider(ctx, fragment, ClasspathFragmentProtoContentInfoProvider) if info.ClasspathFragmentProtoGenerated { 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) { // TODO(satayev): change this check to only allow core-icu4j, all apex jars should not be here. for _, m := range modules { - apexInfo := ctx.OtherModuleProvider(m, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.OtherModuleProvider(ctx, m, android.ApexInfoProvider) fromUpdatableApex := apexInfo.Updatable if fromUpdatableApex { // 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. func (b *platformBootclasspathModule) checkApexModules(ctx android.ModuleContext, modules []android.Module) { for _, m := range modules { - apexInfo := ctx.OtherModuleProvider(m, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.OtherModuleProvider(ctx, m, android.ApexInfoProvider) fromUpdatableApex := apexInfo.Updatable if fromUpdatableApex { // ok: this jar is part of an updatable apex @@ -389,7 +389,7 @@ func (b *platformBootclasspathModule) createAndProvideMonolithicHiddenAPIInfo(ct monolithicInfo := newMonolithicHiddenAPIInfo(ctx, temporaryInput.FlagFilesByCategory, classpathElements) // Store the information for testing. - ctx.SetProvider(MonolithicHiddenAPIInfoProvider, monolithicInfo) + android.SetProvider(ctx, MonolithicHiddenAPIInfoProvider, monolithicInfo) return monolithicInfo } diff --git a/java/robolectric.go b/java/robolectric.go index 45621fd5d..9e8850ce9 100644 --- a/java/robolectric.go +++ b/java/robolectric.go @@ -193,7 +193,7 @@ func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext) } 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)) if !android.InList(ctx.OtherModuleName(dep), config.FrameworkLibraries) { combinedJarJars = append(combinedJarJars, m.ImplementationAndResourcesJars...) @@ -254,7 +254,7 @@ func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext) } r.installFile = ctx.InstallFile(installPath, ctx.ModuleName()+".jar", r.combinedJar, installDeps...) - ctx.SetProvider(testing.TestModuleProviderKey, testing.TestModuleProviderData{}) + android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{}) } func generateRoboTestConfig(ctx android.ModuleContext, outputFile android.WritablePath, @@ -305,8 +305,7 @@ func (r *robolectricTest) generateRoboSrcJar(ctx android.ModuleContext, outputFi srcJarDeps := append(android.Paths(nil), instrumentedApp.srcJarDeps...) for _, m := range ctx.GetDirectDepsWithTag(roboCoverageLibsTag) { - if ctx.OtherModuleHasProvider(m, JavaInfoProvider) { - dep := ctx.OtherModuleProvider(m, JavaInfoProvider).(JavaInfo) + if dep, ok := android.OtherModuleProvider(ctx, m, JavaInfoProvider); ok { srcJarArgs = append(srcJarArgs, dep.SrcJarArgs...) srcJarDeps = append(srcJarDeps, dep.SrcJarDeps...) } diff --git a/java/sdk.go b/java/sdk.go index ad71fb236..352b24319 100644 --- a/java/sdk.go +++ b/java/sdk.go @@ -262,8 +262,7 @@ func createFrameworkAidl(stubsModules []string, path android.WritablePath, ctx a ctx.VisitAllModules(func(module android.Module) { // Collect dex jar paths for the modules listed above. - if ctx.ModuleHasProvider(module, JavaInfoProvider) { - j := ctx.ModuleProvider(module, JavaInfoProvider).(JavaInfo) + if j, ok := android.SingletonModuleProvider(ctx, module, JavaInfoProvider); ok { name := ctx.ModuleName(module) if i := android.IndexList(name, stubsModules); i != -1 { stubsJars[i] = j.HeaderJars diff --git a/java/sdk_library.go b/java/sdk_library.go index 176bda0ce..0584281a5 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -673,8 +673,7 @@ type scopePaths struct { } func (paths *scopePaths) extractStubsLibraryInfoFromDependency(ctx android.ModuleContext, dep android.Module) error { - if ctx.OtherModuleHasProvider(dep, JavaInfoProvider) { - lib := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) + if lib, ok := android.OtherModuleProvider(ctx, dep, JavaInfoProvider); ok { paths.stubsHeaderPath = lib.HeaderJars paths.stubsImplPath = lib.ImplementationJars @@ -1451,7 +1450,7 @@ func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) // Make the set of components exported by this module available for use elsewhere. exportedComponentInfo := android.ExportedComponentsInfo{Components: android.SortedKeys(exportedComponents)} - ctx.SetProvider(android.ExportedComponentsInfoProvider, exportedComponentInfo) + android.SetProvider(ctx, android.ExportedComponentsInfoProvider, exportedComponentInfo) // Provide additional information for inclusion in an sdk's generated .info file. additionalSdkInfo := map[string]interface{}{} @@ -1471,7 +1470,7 @@ func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) scopeInfo["latest_removed_api"] = p.Path().String() } } - ctx.SetProvider(android.AdditionalSdkInfoProvider, android.AdditionalSdkInfo{additionalSdkInfo}) + android.SetProvider(ctx, android.AdditionalSdkInfoProvider, android.AdditionalSdkInfo{additionalSdkInfo}) } func (module *SdkLibrary) AndroidMkEntries() []android.AndroidMkEntries { @@ -2036,8 +2035,8 @@ func PrebuiltJars(ctx android.BaseModuleContext, baseName string, s android.SdkS // If either this or the other module are on the platform then this will return // false. func withinSameApexesAs(ctx android.BaseModuleContext, other android.Module) bool { - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) - otherApexInfo := ctx.OtherModuleProvider(other, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) + otherApexInfo, _ := android.OtherModuleProvider(ctx, other, android.ApexInfoProvider) return len(otherApexInfo.InApexVariants) > 0 && reflect.DeepEqual(apexInfo.InApexVariants, otherApexInfo.InApexVariants) } @@ -2693,7 +2692,7 @@ func (module *SdkLibraryImport) GenerateAndroidBuildActions(ctx android.ModuleCo if ctx.Device() { // If this is a variant created for a prebuilt_apex then use the dex implementation jar // obtained from the associated deapexer module. - ai := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + ai, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) if ai.ForPrebuiltApex { // Get the path of the dex implementation jar from the `deapexer` module. di := android.FindDeapexerProviderForModule(ctx) @@ -2960,7 +2959,7 @@ func (module *sdkLibraryXml) ShouldSupportSdkVersion(ctx android.BaseModuleConte // File path to the runtime implementation library func (module *sdkLibraryXml) implPath(ctx android.ModuleContext) string { implName := proptools.String(module.properties.Lib_name) - if apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo); !apexInfo.IsForPlatform() { + if apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider); !apexInfo.IsForPlatform() { // TODO(b/146468504): ApexVariationName() is only a soong module name, not apex name. // In most cases, this works fine. But when apex_name is set or override_apex is used // this can be wrong. @@ -3067,7 +3066,8 @@ func (module *sdkLibraryXml) permissionsContents(ctx android.ModuleContext) stri } func (module *sdkLibraryXml) GenerateAndroidBuildActions(ctx android.ModuleContext) { - module.hideApexVariantFromMake = !ctx.Provider(android.ApexInfoProvider).(android.ApexInfo).IsForPlatform() + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) + module.hideApexVariantFromMake = !apexInfo.IsForPlatform() libName := proptools.String(module.properties.Lib_name) module.selfValidate(ctx) diff --git a/java/sdk_library_test.go b/java/sdk_library_test.go index a136818ca..0965fc2c7 100644 --- a/java/sdk_library_test.go +++ b/java/sdk_library_test.go @@ -132,7 +132,7 @@ func TestJavaSdkLibrary(t *testing.T) { result.ModuleForTests("foo.api.system.28", "") result.ModuleForTests("foo.api.test.28", "") - exportedComponentsInfo := result.ModuleProvider(foo.Module(), android.ExportedComponentsInfoProvider).(android.ExportedComponentsInfo) + exportedComponentsInfo, _ := android.SingletonModuleProvider(result, foo.Module(), android.ExportedComponentsInfoProvider) expectedFooExportedComponents := []string{ "foo-removed.api.public.latest", "foo-removed.api.system.latest", diff --git a/java/system_modules.go b/java/system_modules.go index 0efa1a41c..1c7917109 100644 --- a/java/system_modules.go +++ b/java/system_modules.go @@ -159,7 +159,7 @@ func (system *SystemModules) GenerateAndroidBuildActions(ctx android.ModuleConte var jars android.Paths ctx.VisitDirectDepsWithTag(systemModulesLibsTag, func(module android.Module) { - dep, _ := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) + dep, _ := android.OtherModuleProvider(ctx, module, JavaInfoProvider) jars = append(jars, dep.HeaderJars...) }) diff --git a/java/system_modules_test.go b/java/system_modules_test.go index 7b5a3867e..2ceca5d0b 100644 --- a/java/system_modules_test.go +++ b/java/system_modules_test.go @@ -24,7 +24,7 @@ func getModuleHeaderJarsAsRelativeToTopPaths(result *android.TestResult, moduleN paths := []string{} for _, moduleName := range moduleNames { module := result.Module(moduleName, "android_common") - info := result.ModuleProvider(module, JavaInfoProvider).(JavaInfo) + info, _ := android.SingletonModuleProvider(result, module, JavaInfoProvider) paths = append(paths, info.HeaderJars.RelativeToTop().Strings()...) } return paths diff --git a/java/test_spec_test.go b/java/test_spec_test.go index 1409b28ae..f628b4b74 100644 --- a/java/test_spec_test.go +++ b/java/test_spec_test.go @@ -34,9 +34,7 @@ func TestTestSpec(t *testing.T) { ).Module().(*soongTesting.TestSpecModule) // Check that the provider has the right contents - data := result.ModuleProvider( - module, soongTesting.TestSpecProviderKey, - ).(soongTesting.TestSpecProviderData) + data, _ := android.SingletonModuleProvider(result, module, soongTesting.TestSpecProviderKey) if !strings.HasSuffix( data.IntermediatePath.String(), "/intermediateTestSpecMetadata.pb", ) { diff --git a/java/testing.go b/java/testing.go index e883bcb4c..d55cffc40 100644 --- a/java/testing.go +++ b/java/testing.go @@ -617,7 +617,7 @@ func CheckPlatformBootclasspathModules(t *testing.T, result *android.TestResult, func CheckClasspathFragmentProtoContentInfoProvider(t *testing.T, result *android.TestResult, generated bool, contents, outputFilename, installDir string) { t.Helper() p := result.Module("platform-bootclasspath", "android_common").(*platformBootclasspathModule) - info := result.ModuleProvider(p, ClasspathFragmentProtoContentInfoProvider).(ClasspathFragmentProtoContentInfo) + info, _ := android.SingletonModuleProvider(result, p, ClasspathFragmentProtoContentInfoProvider) android.AssertBoolEquals(t, "classpath proto generated", generated, info.ClasspathFragmentProtoGenerated) android.AssertStringEquals(t, "classpath proto contents", contents, info.ClasspathFragmentProtoContents.String()) @@ -637,7 +637,7 @@ func ApexNamePairsFromModules(ctx *android.TestContext, modules []android.Module func apexNamePairFromModule(ctx *android.TestContext, module android.Module) string { name := module.Name() var apex string - apexInfo := ctx.ModuleProvider(module, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.SingletonModuleProvider(ctx, module, android.ApexInfoProvider) if apexInfo.IsForPlatform() { apex = "platform" } else { diff --git a/multitree/api_imports.go b/multitree/api_imports.go index e4c21f895..51b9e07a5 100644 --- a/multitree/api_imports.go +++ b/multitree/api_imports.go @@ -81,7 +81,7 @@ func (imports *ApiImports) DepsMutator(ctx android.BottomUpMutatorContext) { headerLibs := generateNameMapWithSuffix(imports.properties.Header_libs) apexSharedLibs := generateNameMapWithSuffix(imports.properties.Apex_shared_libs) - ctx.SetProvider(ApiImportsProvider, ApiImportInfo{ + android.SetProvider(ctx, ApiImportsProvider, ApiImportInfo{ SharedLibs: sharedLibs, HeaderLibs: headerLibs, ApexSharedLibs: apexSharedLibs, diff --git a/python/python.go b/python/python.go index 79b151567..d3cbd7695 100644 --- a/python/python.go +++ b/python/python.go @@ -420,7 +420,7 @@ func (p *PythonLibraryModule) AddDepsOnPythonLauncherAndStdlib(ctx android.Botto // GenerateAndroidBuildActions performs build actions common to all Python modules func (p *PythonLibraryModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { expandedSrcs := android.PathsForModuleSrcExcludes(ctx, p.properties.Srcs, p.properties.Exclude_srcs) - ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: expandedSrcs.Strings()}) + android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: expandedSrcs.Strings()}) // expand data files from "data" property. expandedData := android.PathsForModuleSrc(ctx, p.properties.Data) diff --git a/python/test.go b/python/test.go index f15a8fccf..782f39f20 100644 --- a/python/test.go +++ b/python/test.go @@ -208,7 +208,7 @@ func (p *PythonTestModule) GenerateAndroidBuildActions(ctx android.ModuleContext installedData := ctx.InstallTestData(installDir, p.data) p.installedDest = ctx.InstallFile(installDir, p.installSource.Base(), p.installSource, installedData...) - ctx.SetProvider(testing.TestModuleProviderKey, testing.TestModuleProviderData{}) + android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{}) } func (p *PythonTestModule) AndroidMkEntries() []android.AndroidMkEntries { diff --git a/rust/afdo.go b/rust/afdo.go index 3534ee6e4..323ee36a5 100644 --- a/rust/afdo.go +++ b/rust/afdo.go @@ -67,8 +67,7 @@ func (afdo *afdo) flags(ctx android.ModuleContext, flags Flags, deps PathDeps) ( } ctx.VisitDirectDepsWithTag(cc.FdoProfileTag, func(m android.Module) { - if ctx.OtherModuleHasProvider(m, cc.FdoProfileProvider) { - info := ctx.OtherModuleProvider(m, cc.FdoProfileProvider).(cc.FdoProfileInfo) + if info, ok := android.OtherModuleProvider(ctx, m, cc.FdoProfileProvider); ok { path := info.Path profileUseFlag := fmt.Sprintf(afdoFlagFormat, path.String()) flags.RustFlags = append(flags.RustFlags, profileUseFlag) diff --git a/rust/library.go b/rust/library.go index 199ffbb4c..7f004fc20 100644 --- a/rust/library.go +++ b/rust/library.go @@ -547,7 +547,7 @@ func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps Pa } if library.static() || library.shared() { - ctx.SetProvider(cc.FlagExporterInfoProvider, cc.FlagExporterInfo{ + android.SetProvider(ctx, cc.FlagExporterInfoProvider, cc.FlagExporterInfo{ IncludeDirs: library.includeDirs, }) } @@ -559,7 +559,7 @@ func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps Pa library.tocFile = android.OptionalPathForPath(tocFile) cc.TransformSharedObjectToToc(ctx, outputFile, tocFile) - ctx.SetProvider(cc.SharedLibraryInfoProvider, cc.SharedLibraryInfo{ + android.SetProvider(ctx, cc.SharedLibraryInfoProvider, cc.SharedLibraryInfo{ TableOfContents: android.OptionalPathForPath(tocFile), SharedLibrary: outputFile, Target: ctx.Target(), @@ -568,7 +568,7 @@ func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps Pa if library.static() { depSet := android.NewDepSetBuilder[android.Path](android.TOPOLOGICAL).Direct(outputFile).Build() - ctx.SetProvider(cc.StaticLibraryInfoProvider, cc.StaticLibraryInfo{ + android.SetProvider(ctx, cc.StaticLibraryInfoProvider, cc.StaticLibraryInfo{ StaticLibrary: outputFile, TransitiveStaticLibrariesForOrdering: depSet, diff --git a/rust/protobuf.go b/rust/protobuf.go index c80e5f4fb..d021076eb 100644 --- a/rust/protobuf.go +++ b/rust/protobuf.go @@ -178,7 +178,7 @@ func (proto *protobufDecorator) GenerateSource(ctx ModuleContext, deps PathDeps) // stemFile must be first here as the first path in BaseSourceProvider.OutputFiles is the library entry-point. proto.BaseSourceProvider.OutputFiles = append(android.Paths{stemFile}, outputs.Paths()...) - ctx.SetProvider(cc.FlagExporterInfoProvider, cc.FlagExporterInfo{ + android.SetProvider(ctx, cc.FlagExporterInfoProvider, cc.FlagExporterInfo{ IncludeDirs: android.PathsForModuleSrc(ctx, proto.Properties.Exported_include_dirs), }) diff --git a/rust/rust.go b/rust/rust.go index c07966bdc..521f624a2 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -509,7 +509,7 @@ func (flagExporter *flagExporter) exportLinkObjects(flags ...string) { } func (flagExporter *flagExporter) setProvider(ctx ModuleContext) { - ctx.SetProvider(FlagExporterInfoProvider, FlagExporterInfo{ + android.SetProvider(ctx, FlagExporterInfoProvider, FlagExporterInfo{ LinkDirs: flagExporter.linkDirs, LinkObjects: flagExporter.linkObjects, }) @@ -747,7 +747,8 @@ func (mod *Module) installable(apexInfo android.ApexInfo) bool { } func (ctx moduleContext) apexVariationName() string { - return ctx.Provider(android.ApexInfoProvider).(android.ApexInfo).ApexVariationName + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) + return apexInfo.ApexVariationName } var _ cc.LinkableInterface = (*Module)(nil) @@ -897,7 +898,7 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { ModuleContext: actx, } - apexInfo := actx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(actx, android.ApexInfoProvider) if !apexInfo.IsForPlatform() { mod.hideApexVariantFromMake = true } @@ -950,7 +951,7 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { sourceLib := sourceMod.(*Module).compiler.(*libraryDecorator) mod.sourceProvider.setOutputFiles(sourceLib.sourceProvider.Srcs()) } - ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: mod.sourceProvider.Srcs().Strings()}) + android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: mod.sourceProvider.Srcs().Strings()}) } if mod.compiler != nil && !mod.compiler.Disabled() { @@ -978,7 +979,7 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { } } - apexInfo := actx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(actx, android.ApexInfoProvider) if !proptools.BoolDefault(mod.Installable(), mod.EverInstallable()) && !mod.ProcMacro() { // If the module has been specifically configure to not be installed then // hide from make as otherwise it will break when running inside make as the @@ -1003,7 +1004,7 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { ctx.Phony("rust", ctx.RustModule().OutputFile().Path()) } if mod.testModule { - ctx.SetProvider(testing.TestModuleProviderKey, testing.TestModuleProviderData{}) + android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{}) } aconfig.CollectDependencyAconfigFiles(ctx, &mod.mergedAconfigFiles) @@ -1148,7 +1149,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { // For the dependency from platform to apex, use the latest stubs mod.apexSdkVersion = android.FutureApiLevel - apexInfo := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) if !apexInfo.IsForPlatform() { mod.apexSdkVersion = apexInfo.MinSdkVersion } @@ -1167,7 +1168,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { ctx.VisitDirectDeps(func(dep android.Module) { if dep.Name() == "api_imports" { - apiImportInfo = ctx.OtherModuleProvider(dep, multitree.ApiImportsProvider).(multitree.ApiImportInfo) + apiImportInfo, _ = android.OtherModuleProvider(ctx, dep, multitree.ApiImportsProvider) hasApiImportInfo = true } }) @@ -1278,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 if depTag != procMacroDepTag { - exportedInfo := ctx.OtherModuleProvider(dep, FlagExporterInfoProvider).(FlagExporterInfo) + exportedInfo, _ := android.OtherModuleProvider(ctx, dep, FlagExporterInfoProvider) depPaths.linkDirs = append(depPaths.linkDirs, exportedInfo.LinkDirs...) depPaths.depFlags = append(depPaths.depFlags, exportedInfo.Flags...) depPaths.linkObjects = append(depPaths.linkObjects, exportedInfo.LinkObjects...) @@ -1294,7 +1295,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { if depTag == sourceDepTag { if _, ok := mod.sourceProvider.(*protobufDecorator); ok && mod.Source() { 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...) } } @@ -1347,7 +1348,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { depPaths.linkObjects = append(depPaths.linkObjects, linkObject.String()) 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.depSystemIncludePaths = append(depPaths.depSystemIncludePaths, exportedInfo.SystemIncludeDirs...) depPaths.depClangFlags = append(depPaths.depClangFlags, exportedInfo.Flags...) @@ -1391,7 +1392,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { directAndroidMkSharedLibs = append(directAndroidMkSharedLibs, makeLibName) exportDep = true 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.depSystemIncludePaths = append(depPaths.depSystemIncludePaths, exportedInfo.SystemIncludeDirs...) depPaths.depGeneratedHeaders = append(depPaths.depGeneratedHeaders, exportedInfo.GeneratedHeaders...) diff --git a/rust/sanitize.go b/rust/sanitize.go index 0b1043597..9dda43fd6 100644 --- a/rust/sanitize.go +++ b/rust/sanitize.go @@ -270,7 +270,7 @@ func rustSanitizerRuntimeMutator(mctx android.BottomUpMutatorContext) { } // If we're using snapshots, redirect to snapshot whenever possible // TODO(b/178470649): clean manual snapshot redirections - snapshot := mctx.Provider(cc.SnapshotInfoProvider).(cc.SnapshotInfo) + snapshot, _ := android.ModuleProvider(mctx, cc.SnapshotInfoProvider) if lib, ok := snapshot.StaticLibs[noteDep]; ok { noteDep = lib } diff --git a/sdk/update.go b/sdk/update.go index 4c39faea1..095e0c276 100644 --- a/sdk/update.go +++ b/sdk/update.go @@ -166,10 +166,7 @@ func (s *sdk) collectMembers(ctx android.ModuleContext) { // Keep track of which multilib variants are used by the sdk. s.multilibUsages = s.multilibUsages.addArchType(child.Target().Arch.ArchType) - var exportedComponentsInfo android.ExportedComponentsInfo - if ctx.OtherModuleHasProvider(child, android.ExportedComponentsInfoProvider) { - exportedComponentsInfo = ctx.OtherModuleProvider(child, android.ExportedComponentsInfoProvider).(android.ExportedComponentsInfo) - } + exportedComponentsInfo, _ := android.OtherModuleProvider(ctx, child, android.ExportedComponentsInfoProvider) var container android.Module if parent != ctx.Module() { @@ -607,7 +604,7 @@ func (s *sdk) generateInfoData(ctx android.ModuleContext, memberVariantDeps []sd name: name, } - additionalSdkInfo := ctx.OtherModuleProvider(module, android.AdditionalSdkInfoProvider).(android.AdditionalSdkInfo) + additionalSdkInfo, _ := android.OtherModuleProvider(ctx, module, android.AdditionalSdkInfoProvider) info.memberSpecific = additionalSdkInfo.Properties name2Info[name] = info @@ -1171,7 +1168,7 @@ func (s *snapshotBuilder) AddPrebuiltModule(member android.SdkMember, moduleType // The licenses are the same for all variants. mctx := s.ctx - licenseInfo := mctx.OtherModuleProvider(variant, android.LicenseInfoProvider).(android.LicenseInfo) + licenseInfo, _ := android.OtherModuleProvider(mctx, variant, android.LicenseInfoProvider) if len(licenseInfo.Licenses) > 0 { m.AddPropertyWithTag("licenses", licenseInfo.Licenses, s.OptionalSdkMemberReferencePropertyTag()) } @@ -1417,7 +1414,7 @@ func selectApexVariantsWhereAvailable(ctx *memberContext, variants []android.Mod variantsByApex := make(map[string]android.Module) conflictDetected := false for _, variant := range list { - apexInfo := moduleCtx.OtherModuleProvider(variant, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.OtherModuleProvider(moduleCtx, variant, android.ApexInfoProvider) apexVariationName := apexInfo.ApexVariationName // If there are two variants for a specific APEX variation then there is conflict. if _, ok := variantsByApex[apexVariationName]; ok { diff --git a/sh/sh_binary.go b/sh/sh_binary.go index 1e27375d1..97adeed86 100644 --- a/sh/sh_binary.go +++ b/sh/sh_binary.go @@ -270,7 +270,7 @@ func (s *ShBinary) generateAndroidBuildActions(ctx android.ModuleContext) { Output: s.outputFilePath, Input: s.sourceFilePath, }) - ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: []string{s.sourceFilePath.String()}}) + android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: []string{s.sourceFilePath.String()}}) } func (s *ShBinary) GenerateAndroidBuildActions(ctx android.ModuleContext) { @@ -457,7 +457,7 @@ func (s *ShTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { installedData := ctx.InstallTestData(s.installDir, s.data) s.installedFile = ctx.InstallExecutable(s.installDir, s.outputFilePath.Base(), s.outputFilePath, installedData...) - ctx.SetProvider(testing.TestModuleProviderKey, testing.TestModuleProviderData{}) + android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{}) } func (s *ShTest) InstallInData() bool { diff --git a/snapshot/host_fake_snapshot.go b/snapshot/host_fake_snapshot.go index c4cfbb5ce..63cd4e1b6 100644 --- a/snapshot/host_fake_snapshot.go +++ b/snapshot/host_fake_snapshot.go @@ -119,7 +119,7 @@ func (c *hostFakeSingleton) GenerateBuildActions(ctx android.SingletonContext) { if !module.Enabled() || module.IsHideFromMake() { return } - apexInfo := ctx.ModuleProvider(module, android.ApexInfoProvider).(android.ApexInfo) + apexInfo, _ := android.SingletonModuleProvider(ctx, module, android.ApexInfoProvider) if !apexInfo.IsForPlatform() { return } diff --git a/sysprop/sysprop_library.go b/sysprop/sysprop_library.go index c89c6b09f..4a0796bd9 100644 --- a/sysprop/sysprop_library.go +++ b/sysprop/sysprop_library.go @@ -251,7 +251,7 @@ func (m *syspropLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) ctx.PropertyErrorf("srcs", "srcs contains non-sysprop file %q", syspropFile.String()) } } - ctx.SetProvider(blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcs.Strings()}) + android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcs.Strings()}) if ctx.Failed() { return diff --git a/testing/all_code_metadata.go b/testing/all_code_metadata.go index 16d7aae66..12aa7b51f 100644 --- a/testing/all_code_metadata.go +++ b/testing/all_code_metadata.go @@ -21,14 +21,9 @@ func (this *allCodeMetadataSingleton) GenerateBuildActions(ctx android.Singleton ctx.VisitAllModules( func(module android.Module) { - if !ctx.ModuleHasProvider(module, CodeMetadataProviderKey) { - return + if metadata, ok := android.SingletonModuleProvider(ctx, module, CodeMetadataProviderKey); ok { + intermediateMetadataPaths = append(intermediateMetadataPaths, metadata.IntermediatePath) } - intermediateMetadataPaths = append( - intermediateMetadataPaths, ctx.ModuleProvider( - module, CodeMetadataProviderKey, - ).(CodeMetadataProviderData).IntermediatePath, - ) }, ) diff --git a/testing/all_test_specs.go b/testing/all_test_specs.go index 9d4645b37..b035435db 100644 --- a/testing/all_test_specs.go +++ b/testing/all_test_specs.go @@ -21,10 +21,9 @@ func (this *allTestSpecsSingleton) GenerateBuildActions(ctx android.SingletonCon var intermediateMetadataPaths android.Paths ctx.VisitAllModules(func(module android.Module) { - if !ctx.ModuleHasProvider(module, TestSpecProviderKey) { - return + if metadata, ok := android.SingletonModuleProvider(ctx, module, TestSpecProviderKey); ok { + intermediateMetadataPaths = append(intermediateMetadataPaths, metadata.IntermediatePath) } - intermediateMetadataPaths = append(intermediateMetadataPaths, ctx.ModuleProvider(module, TestSpecProviderKey).(TestSpecProviderData).IntermediatePath) }) rspFile := android.PathForOutput(ctx, fileContainingFilePaths) diff --git a/testing/code_metadata.go b/testing/code_metadata.go index 53bd07be5..3cf7c5965 100644 --- a/testing/code_metadata.go +++ b/testing/code_metadata.go @@ -96,10 +96,8 @@ func (module *CodeMetadataModule) GenerateAndroidBuildActions(ctx android.Module for _, m := range ctx.GetDirectDepsWithTag(codeDepTag) { targetName := m.Name() var moduleSrcs []string - if ctx.OtherModuleHasProvider(m, blueprint.SrcsFileProviderKey) { - moduleSrcs = ctx.OtherModuleProvider( - m, blueprint.SrcsFileProviderKey, - ).(blueprint.SrcsFileProviderData).SrcPaths + if srcsFileInfo, ok := android.OtherModuleProvider(ctx, m, blueprint.SrcsFileProviderKey); ok { + moduleSrcs = srcsFileInfo.SrcPaths } if module.properties.MultiOwnership { metadata := &code_metadata_internal_proto.CodeMetadataInternal_TargetOwnership{ @@ -132,7 +130,7 @@ func (module *CodeMetadataModule) GenerateAndroidBuildActions(ctx android.Module ) android.WriteFileRule(ctx, intermediatePath, string(protoData)) - ctx.SetProvider( + android.SetProvider(ctx, CodeMetadataProviderKey, CodeMetadataProviderData{IntermediatePath: intermediatePath}, ) diff --git a/testing/test_spec.go b/testing/test_spec.go index 2a05456d5..d25961229 100644 --- a/testing/test_spec.go +++ b/testing/test_spec.go @@ -91,7 +91,7 @@ var TestModuleProviderKey = blueprint.NewProvider[TestModuleProviderData]() func (module *TestSpecModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { for _, m := range ctx.GetDirectDepsWithTag(testsDepTag) { - if !ctx.OtherModuleHasProvider(m, TestModuleProviderKey) { + if _, ok := android.OtherModuleProvider(ctx, m, TestModuleProviderKey); !ok { ctx.ModuleErrorf(ErrTestModuleDataNotFound, m.Name()) } } @@ -119,7 +119,7 @@ func (module *TestSpecModule) GenerateAndroidBuildActions(ctx android.ModuleCont } android.WriteFileRule(ctx, intermediatePath, string(protoData)) - ctx.SetProvider( + android.SetProvider(ctx, TestSpecProviderKey, TestSpecProviderData{ IntermediatePath: intermediatePath, }, |