diff options
author | 2025-02-28 12:05:20 -0800 | |
---|---|---|
committer | 2025-02-28 12:05:20 -0800 | |
commit | 58047e846963c84c2784a685d4c2644bd7c80ff6 (patch) | |
tree | c3b95847c8582b0d33fe7a6d78eed8c3d7a52e24 | |
parent | 9cbe288fa7eaf56a62c764bfcba35fc550543208 (diff) | |
parent | 71f1ea3f81feae294a3031799cd638c38610850e (diff) |
Merge changes from topics "EqualModules", "tidyPhonySingleton" into main
* changes:
Convert tidyPhonySingleton, jdepsGeneratorSingleton and genNoticeBuildRules to use ModuleProxy.
Make EqualModules a free function.
-rw-r--r-- | android/androidmk.go | 6 | ||||
-rw-r--r-- | android/apex.go | 2 | ||||
-rw-r--r-- | android/base_module_context.go | 6 | ||||
-rw-r--r-- | android/container.go | 2 | ||||
-rw-r--r-- | android/gen_notice.go | 67 | ||||
-rw-r--r-- | android/module.go | 27 | ||||
-rw-r--r-- | android/notices.go | 18 | ||||
-rw-r--r-- | android/prebuilt.go | 2 | ||||
-rw-r--r-- | android/singleton.go | 44 | ||||
-rw-r--r-- | android/visibility.go | 72 | ||||
-rw-r--r-- | android/visibility_test.go | 5 | ||||
-rw-r--r-- | apex/apex.go | 4 | ||||
-rw-r--r-- | cc/cc.go | 2 | ||||
-rw-r--r-- | cc/tidy.go | 10 | ||||
-rw-r--r-- | dexpreopt/config.go | 4 | ||||
-rw-r--r-- | filesystem/filesystem.go | 20 | ||||
-rw-r--r-- | java/app.go | 2 | ||||
-rw-r--r-- | java/java.go | 9 | ||||
-rw-r--r-- | java/jdeps.go | 21 |
19 files changed, 166 insertions, 157 deletions
diff --git a/android/androidmk.go b/android/androidmk.go index 6a1701df3..e4366fad2 100644 --- a/android/androidmk.go +++ b/android/androidmk.go @@ -78,6 +78,12 @@ type AndroidMkData struct { Entries AndroidMkEntries } +type AndroidMkDataInfo struct { + Class string +} + +var AndroidMkDataInfoProvider = blueprint.NewProvider[AndroidMkDataInfo]() + type AndroidMkExtraFunc func(w io.Writer, outputFile Path) // Interface for modules to declare their Android.mk outputs. Note that every module needs to diff --git a/android/apex.go b/android/apex.go index 4e92f44f6..39de6de33 100644 --- a/android/apex.go +++ b/android/apex.go @@ -196,7 +196,7 @@ func IsDepInSameApex(ctx BaseModuleContext, module, dep Module) bool { return false } - if !ctx.EqualModules(ctx.Module(), module) { + if !EqualModules(ctx.Module(), module) { if moduleInfo, ok := OtherModuleProvider(ctx, module, DepInSameApexInfoProvider); ok { if !moduleInfo.Checker.OutgoingDepIsInSameApex(depTag) { return false diff --git a/android/base_module_context.go b/android/base_module_context.go index 5e05f547a..d2404fd3e 100644 --- a/android/base_module_context.go +++ b/android/base_module_context.go @@ -34,8 +34,6 @@ type BaseModuleContext interface { blueprintBaseModuleContext() blueprint.BaseModuleContext - EqualModules(m1, m2 Module) bool - // OtherModuleName returns the name of another Module. See BaseModuleContext.ModuleName for more information. // It is intended for use inside the visit functions of Visit* and WalkDeps. OtherModuleName(m blueprint.Module) string @@ -271,8 +269,8 @@ func getWrappedModule(module blueprint.Module) blueprint.Module { return module } -func (b *baseModuleContext) EqualModules(m1, m2 Module) bool { - return b.bp.EqualModules(getWrappedModule(m1), getWrappedModule(m2)) +func EqualModules(m1, m2 Module) bool { + return blueprint.EqualModules(getWrappedModule(m1), getWrappedModule(m2)) } func (b *baseModuleContext) OtherModuleName(m blueprint.Module) string { diff --git a/android/container.go b/android/container.go index 5dc97d38e..a5aab79bb 100644 --- a/android/container.go +++ b/android/container.go @@ -449,7 +449,7 @@ func generateContainerInfo(ctx ModuleContext) ContainersInfo { } func getContainerModuleInfo(ctx ModuleContext, module Module) (ContainersInfo, bool) { - if ctx.EqualModules(ctx.Module(), module) { + if EqualModules(ctx.Module(), module) { return ctx.getContainersInfo(), true } diff --git a/android/gen_notice.go b/android/gen_notice.go index 9adde9e9b..482b1e006 100644 --- a/android/gen_notice.go +++ b/android/gen_notice.go @@ -19,6 +19,7 @@ import ( "path/filepath" "strings" + "github.com/google/blueprint" "github.com/google/blueprint/proptools" ) @@ -35,34 +36,31 @@ func RegisterGenNoticeBuildComponents(ctx RegistrationContext) { type genNoticeBuildRules struct{} func (s *genNoticeBuildRules) GenerateBuildActions(ctx SingletonContext) { - ctx.VisitAllModules(func(m Module) { - gm, ok := m.(*genNoticeModule) + ctx.VisitAllModuleProxies(func(m ModuleProxy) { + gm, ok := OtherModuleProvider(ctx, m, GenNoticeInfoProvider) if !ok { return } - if len(gm.missing) > 0 { - missingReferencesRule(ctx, gm) + if len(gm.Missing) > 0 { + missingReferencesRule(ctx, m, &gm) return } out := BuildNoticeTextOutputFromLicenseMetadata - if proptools.Bool(gm.properties.Xml) { + if gm.Xml { out = BuildNoticeXmlOutputFromLicenseMetadata - } else if proptools.Bool(gm.properties.Html) { + } else if gm.Html { out = BuildNoticeHtmlOutputFromLicenseMetadata } defaultName := "" - if len(gm.properties.For) > 0 { - defaultName = gm.properties.For[0] + if len(gm.For) > 0 { + defaultName = gm.For[0] } - modules := make([]Module, 0) - for _, name := range gm.properties.For { - mods := ctx.ModuleVariantsFromName(gm, name) + modules := make([]ModuleProxy, 0) + for _, name := range gm.For { + mods := ctx.ModuleVariantsFromName(m, name) for _, mod := range mods { - if mod == nil { - continue - } - if !mod.Enabled(ctx) { // don't depend on variants without build rules + if !OtherModuleProviderOrDefault(ctx, mod, CommonModuleInfoKey).Enabled { // don't depend on variants without build rules continue } modules = append(modules, mod) @@ -71,8 +69,8 @@ func (s *genNoticeBuildRules) GenerateBuildActions(ctx SingletonContext) { if ctx.Failed() { return } - out(ctx, gm.output, ctx.ModuleName(gm), - proptools.StringDefault(gm.properties.ArtifactName, defaultName), + out(ctx, gm.Output, ctx.ModuleName(m), + proptools.StringDefault(gm.ArtifactName, defaultName), []string{ filepath.Join(ctx.Config().OutDir(), "target", "product", ctx.Config().DeviceName()) + "/", ctx.Config().OutDir() + "/", @@ -115,6 +113,22 @@ type genNoticeModule struct { missing []string } +type GenNoticeInfo struct { + // For specifies the modules for which to generate a notice file. + For []string + // ArtifactName specifies the internal name to use for the notice file. + // It appears in the "used by:" list for targets whose entire name is stripped by --strip_prefix. + ArtifactName *string + // Html indicates an html-format file is needed. The default is text. Can be Html or Xml but not both. + Html bool + // Xml indicates an xml-format file is needed. The default is text. Can be Html or Xml but not both. + Xml bool + Output OutputPath + Missing []string +} + +var GenNoticeInfoProvider = blueprint.NewProvider[GenNoticeInfo]() + func (m *genNoticeModule) DepsMutator(ctx BottomUpMutatorContext) { if ctx.ContainsProperty("licenses") { ctx.PropertyErrorf("licenses", "not supported on \"gen_notice\" modules") @@ -176,6 +190,15 @@ func (m *genNoticeModule) GenerateAndroidBuildActions(ctx ModuleContext) { } out := m.getStem() + m.getSuffix() m.output = PathForModuleOut(ctx, out).OutputPath + + SetProvider(ctx, GenNoticeInfoProvider, GenNoticeInfo{ + For: m.properties.For, + ArtifactName: m.properties.ArtifactName, + Xml: proptools.Bool(m.properties.Xml), + Html: proptools.Bool(m.properties.Html), + Output: m.output, + Missing: m.missing, + }) ctx.SetOutputFiles(Paths{m.output}, "") } @@ -205,17 +228,17 @@ func (m *genNoticeModule) AndroidMkEntries() []AndroidMkEntries { } // missingReferencesRule emits an ErrorRule for missing module references. -func missingReferencesRule(ctx BuilderContext, m *genNoticeModule) { - if len(m.missing) < 1 { +func missingReferencesRule(ctx BuilderContext, m ModuleProxy, genInfo *GenNoticeInfo) { + if len(genInfo.Missing) < 1 { panic(fmt.Errorf("missing references rule requested with no missing references")) } ctx.Build(pctx, BuildParams{ Rule: ErrorRule, - Output: m.output, - Description: "notice for " + proptools.StringDefault(m.properties.ArtifactName, "container"), + Output: genInfo.Output, + Description: "notice for " + proptools.StringDefault(genInfo.ArtifactName, "container"), Args: map[string]string{ - "error": m.Name() + " references missing module(s): " + strings.Join(m.missing, ", "), + "error": m.Name() + " references missing module(s): " + strings.Join(genInfo.Missing, ", "), }, }) } diff --git a/android/module.go b/android/module.go index 622399bb6..405573c1b 100644 --- a/android/module.go +++ b/android/module.go @@ -1662,7 +1662,7 @@ func (m *ModuleBase) generateModuleTarget(ctx *moduleContext) { var checkbuildTarget Path var uncheckedModule bool var skipAndroidMkProcessing bool - if ctx.EqualModules(m.module, module) { + if EqualModules(m.module, module) { allInstalledFiles = append(allInstalledFiles, ctx.installFiles...) checkbuildTarget = ctx.checkbuildTarget uncheckedModule = ctx.uncheckedModule @@ -2370,8 +2370,16 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) }) } - if v, ok := m.module.(ModuleMakeVarsProvider); m.Enabled(ctx) && ok { - SetProvider(ctx, ModuleMakeVarsInfoProvider, v.MakeVars(ctx)) + if m.Enabled(ctx) { + if v, ok := m.module.(ModuleMakeVarsProvider); ok { + SetProvider(ctx, ModuleMakeVarsInfoProvider, v.MakeVars(ctx)) + } + + if am, ok := m.module.(AndroidMkDataProvider); ok { + SetProvider(ctx, AndroidMkDataInfoProvider, AndroidMkDataInfo{ + Class: am.AndroidMk().Class, + }) + } } } @@ -2928,7 +2936,6 @@ type OutputFilesProviderModuleContext interface { OtherModuleProviderContext Module() Module GetOutputFiles() OutputFilesInfo - EqualModules(m1, m2 Module) bool } // TODO(b/397766191): Change the signature to take ModuleProxy @@ -2940,7 +2947,7 @@ func outputFilesForModule(ctx PathContext, module Module, tag string) (Paths, er } if octx, ok := ctx.(OutputFilesProviderModuleContext); ok { - if octx.EqualModules(octx.Module(), module) { + if EqualModules(octx.Module(), module) { // It is the current module, we can access the srcs through interface if sourceFileProducer, ok := module.(SourceFileProducer); ok { return sourceFileProducer.Srcs(), nil @@ -2967,7 +2974,7 @@ func outputFilesForModuleFromProvider(ctx PathContext, module Module, tag string var outputFiles OutputFilesInfo if mctx, isMctx := ctx.(OutputFilesProviderModuleContext); isMctx { - if !mctx.EqualModules(mctx.Module(), module) { + if !EqualModules(mctx.Module(), module) { outputFiles, _ = OtherModuleProvider(mctx, module, OutputFilesProvider) } else { outputFiles = mctx.GetOutputFiles() @@ -3173,14 +3180,6 @@ type IDEInfo interface { BaseModuleName() string } -// Extract the base module name from the Import name. -// Often the Import name has a prefix "prebuilt_". -// Remove the prefix explicitly if needed -// until we find a better solution to get the Import name. -type IDECustomizedModuleName interface { - IDECustomizedModuleName() string -} - // Collect information for opening IDE project files in java/jdeps.go. type IdeInfo struct { BaseModuleName string `json:"-"` diff --git a/android/notices.go b/android/notices.go index 3c41d924e..dc2290cce 100644 --- a/android/notices.go +++ b/android/notices.go @@ -18,9 +18,11 @@ import ( "fmt" "path/filepath" "strings" + + "github.com/google/blueprint" ) -func modulesOutputDirs(ctx BuilderContext, modules ...Module) []string { +func modulesOutputDirs(ctx BuilderContext, modules ...ModuleProxy) []string { dirs := make([]string, 0, len(modules)) for _, module := range modules { paths, err := outputFilesForModule(ctx, module, "") @@ -41,12 +43,12 @@ type BuilderAndOtherModuleProviderContext interface { OtherModuleProviderContext } -func modulesLicenseMetadata(ctx OtherModuleProviderContext, modules ...Module) Paths { +func modulesLicenseMetadata(ctx OtherModuleProviderContext, modules ...ModuleProxy) Paths { result := make(Paths, 0, len(modules)) mctx, isMctx := ctx.(ModuleContext) for _, module := range modules { var mf Path - if isMctx && mctx.Module() == module { + if isMctx && EqualModules(mctx.Module(), module) { mf = mctx.LicenseMetadataFile() } else { mf = OtherModuleProviderOrDefault(ctx, module, InstallFilesProvider).LicenseMetadataFile @@ -61,12 +63,12 @@ func modulesLicenseMetadata(ctx OtherModuleProviderContext, modules ...Module) P // buildNoticeOutputFromLicenseMetadata writes out a notice file. func buildNoticeOutputFromLicenseMetadata( ctx BuilderAndOtherModuleProviderContext, tool, ruleName string, outputFile WritablePath, - libraryName string, stripPrefix []string, modules ...Module) { + libraryName string, stripPrefix []string, modules ...ModuleProxy) { depsFile := outputFile.ReplaceExtension(ctx, strings.TrimPrefix(outputFile.Ext()+".d", ".")) rule := NewRuleBuilder(pctx, ctx) if len(modules) == 0 { if mctx, ok := ctx.(ModuleContext); ok { - modules = []Module{mctx.Module()} + modules = []ModuleProxy{{blueprint.CreateModuleProxy(mctx.Module())}} } else { panic(fmt.Errorf("%s %q needs a module to generate the notice for", ruleName, libraryName)) } @@ -97,7 +99,7 @@ func buildNoticeOutputFromLicenseMetadata( // current context module if none given. func BuildNoticeTextOutputFromLicenseMetadata( ctx BuilderAndOtherModuleProviderContext, outputFile WritablePath, ruleName, libraryName string, - stripPrefix []string, modules ...Module) { + stripPrefix []string, modules ...ModuleProxy) { buildNoticeOutputFromLicenseMetadata(ctx, "textnotice", "text_notice_"+ruleName, outputFile, libraryName, stripPrefix, modules...) } @@ -107,7 +109,7 @@ func BuildNoticeTextOutputFromLicenseMetadata( // current context module if none given. func BuildNoticeHtmlOutputFromLicenseMetadata( ctx BuilderAndOtherModuleProviderContext, outputFile WritablePath, ruleName, libraryName string, - stripPrefix []string, modules ...Module) { + stripPrefix []string, modules ...ModuleProxy) { buildNoticeOutputFromLicenseMetadata(ctx, "htmlnotice", "html_notice_"+ruleName, outputFile, libraryName, stripPrefix, modules...) } @@ -117,7 +119,7 @@ func BuildNoticeHtmlOutputFromLicenseMetadata( // current context module if none given. func BuildNoticeXmlOutputFromLicenseMetadata( ctx BuilderAndOtherModuleProviderContext, outputFile WritablePath, ruleName, libraryName string, - stripPrefix []string, modules ...Module) { + stripPrefix []string, modules ...ModuleProxy) { buildNoticeOutputFromLicenseMetadata(ctx, "xmlnotice", "xml_notice_"+ruleName, outputFile, libraryName, stripPrefix, modules...) } diff --git a/android/prebuilt.go b/android/prebuilt.go index 72735991d..4a94c0bcb 100644 --- a/android/prebuilt.go +++ b/android/prebuilt.go @@ -412,7 +412,7 @@ func PrebuiltGetPreferred(ctx BaseModuleContext, module Module) Module { if prebuiltMod != nil { return false } - if ctx.EqualModules(parent, ctx.Module()) { + if EqualModules(parent, ctx.Module()) { // First level: Only recurse if the module is found as a direct dependency. sourceModDepFound = child == module return sourceModDepFound diff --git a/android/singleton.go b/android/singleton.go index 96b10223f..e5f26842a 100644 --- a/android/singleton.go +++ b/android/singleton.go @@ -36,7 +36,7 @@ type SingletonContext interface { // ModuleVariantsFromName returns the list of module variants named `name` in the same namespace as `referer` enforcing visibility rules. // Allows generating build actions for `referer` based on the metadata for `name` deferred until the singleton context. - ModuleVariantsFromName(referer Module, name string) []Module + ModuleVariantsFromName(referer ModuleProxy, name string) []ModuleProxy otherModuleProvider(module blueprint.Module, provider blueprint.AnyProviderKey) (any, bool) @@ -331,7 +331,7 @@ func (s *singletonContextAdaptor) VisitAllModuleVariants(module Module, visit fu } func (s *singletonContextAdaptor) VisitAllModuleVariantProxies(module Module, visit func(proxy ModuleProxy)) { - s.SingletonContext.VisitAllModuleVariantProxies(module, visitProxyAdaptor(visit)) + s.SingletonContext.VisitAllModuleVariantProxies(getWrappedModule(module), visitProxyAdaptor(visit)) } func (s *singletonContextAdaptor) PrimaryModule(module Module) Module { @@ -343,32 +343,30 @@ func (s *singletonContextAdaptor) PrimaryModuleProxy(module ModuleProxy) ModuleP } func (s *singletonContextAdaptor) IsFinalModule(module Module) bool { - return s.SingletonContext.IsFinalModule(module) + return s.SingletonContext.IsFinalModule(getWrappedModule(module)) } -func (s *singletonContextAdaptor) ModuleVariantsFromName(referer Module, name string) []Module { +func (s *singletonContextAdaptor) ModuleVariantsFromName(referer ModuleProxy, name string) []ModuleProxy { // get module reference for visibility enforcement - qualified := createVisibilityModuleReference(s.ModuleName(referer), s.ModuleDir(referer), referer) - - modules := s.SingletonContext.ModuleVariantsFromName(referer, name) - result := make([]Module, 0, len(modules)) - for _, m := range modules { - if module, ok := m.(Module); ok { - // enforce visibility - depName := s.ModuleName(module) - depDir := s.ModuleDir(module) - depQualified := qualifiedModuleName{depDir, depName} - // Targets are always visible to other targets in their own package. - if depQualified.pkg != qualified.name.pkg { - rule := effectiveVisibilityRules(s.Config(), depQualified) - if !rule.matches(qualified) { - s.ModuleErrorf(referer, "module %q references %q which is not visible to this module\nYou may need to add %q to its visibility", - referer.Name(), depQualified, "//"+s.ModuleDir(referer)) - continue - } + qualified := createVisibilityModuleProxyReference(s, s.ModuleName(referer), s.ModuleDir(referer), referer) + + modules := s.SingletonContext.ModuleVariantsFromName(referer.module, name) + result := make([]ModuleProxy, 0, len(modules)) + for _, module := range modules { + // enforce visibility + depName := s.ModuleName(module) + depDir := s.ModuleDir(module) + depQualified := qualifiedModuleName{depDir, depName} + // Targets are always visible to other targets in their own package. + if depQualified.pkg != qualified.name.pkg { + rule := effectiveVisibilityRules(s.Config(), depQualified) + if !rule.matches(qualified) { + s.ModuleErrorf(referer, "module %q references %q which is not visible to this module\nYou may need to add %q to its visibility", + referer.Name(), depQualified, "//"+s.ModuleDir(referer)) + continue } - result = append(result, module) } + result = append(result, ModuleProxy{module}) } return result } diff --git a/android/visibility.go b/android/visibility.go index 4837c7d4b..416a3f15f 100644 --- a/android/visibility.go +++ b/android/visibility.go @@ -58,15 +58,29 @@ const ( var visibilityRuleRegexp = regexp.MustCompile(visibilityRulePattern) type visibilityModuleReference struct { - name qualifiedModuleName - module Module + name qualifiedModuleName + partitionType *string } func createVisibilityModuleReference(name, dir string, module Module) visibilityModuleReference { - return visibilityModuleReference{ - name: createQualifiedModuleName(name, dir), - module: module, + vis := visibilityModuleReference{ + name: createQualifiedModuleName(name, dir), } + if m, ok := module.(PartitionTypeInterface); ok { + pt := m.PartitionType() + vis.partitionType = &pt + } + return vis +} + +func createVisibilityModuleProxyReference(ctx OtherModuleProviderContext, name, dir string, module ModuleProxy) visibilityModuleReference { + vis := visibilityModuleReference{ + name: createQualifiedModuleName(name, dir), + } + if m, ok := OtherModuleProvider(ctx, module, PartitionTypeInfoProvider); ok { + vis.partitionType = &m.PartitionType + } + return vis } // A visibility rule is associated with a module and determines which other modules it is visible @@ -222,9 +236,17 @@ type PartitionTypeInterface interface { PartitionType() string } +type PartitionTypeInfo struct { + // Identifies which partition this is for //visibility:any_system_image (and others) visibility + // checks, and will be used in the future for API surface checks. + PartitionType string +} + +var PartitionTypeInfoProvider = blueprint.NewProvider[PartitionTypeInfo]() + func (r anyPartitionRule) matches(m visibilityModuleReference) bool { - if m2, ok := m.module.(PartitionTypeInterface); ok { - return m2.PartitionType() == r.partitionType + if m.partitionType != nil { + return *m.partitionType == r.partitionType } return false } @@ -647,42 +669,6 @@ func (v *visibilityRuleSet) Strings() []string { return v.rules } -// Get the effective visibility rules, i.e. the actual rules that affect the visibility of the -// property irrespective of where they are defined. -// -// Includes visibility rules specified by package default_visibility and/or on defaults. -// Short hand forms, e.g. //:__subpackages__ are replaced with their full form, e.g. -// //package/containing/rule:__subpackages__. -func EffectiveVisibilityRules(ctx BaseModuleContext, module Module) VisibilityRuleSet { - moduleName := ctx.OtherModuleName(module) - dir := ctx.OtherModuleDir(module) - qualified := qualifiedModuleName{dir, moduleName} - - rule := effectiveVisibilityRules(ctx.Config(), qualified) - - currentModule := createVisibilityModuleReference(moduleName, dir, module) - - // Modules are implicitly visible to other modules in the same package, - // without checking the visibility rules. Here we need to add that visibility - // explicitly. - if !rule.matches(currentModule) { - if len(rule) == 1 { - if _, ok := rule[0].(privateRule); ok { - // If the rule is //visibility:private we can't append another - // visibility to it. Semantically we need to convert it to a package - // visibility rule for the location where the result is used, but since - // modules are implicitly visible within the package we get the same - // result without any rule at all, so just make it an empty list to be - // appended below. - rule = nil - } - } - rule = append(rule, packageRule{dir}) - } - - return &visibilityRuleSet{rule.Strings()} -} - // Clear the default visibility properties so they can be replaced. func clearVisibilityProperties(module Module) { module.base().visibilityPropertyInfo = nil diff --git a/android/visibility_test.go b/android/visibility_test.go index 277be0f65..4acaa02e5 100644 --- a/android/visibility_test.go +++ b/android/visibility_test.go @@ -2112,7 +2112,10 @@ func (j *mockFilesystemModule) DepsMutator(ctx BottomUpMutatorContext) { ctx.AddVariationDependencies(nil, dependencyTag{name: "mockdeps"}, j.properties.Deps...) } -func (p *mockFilesystemModule) GenerateAndroidBuildActions(ModuleContext) { +func (p *mockFilesystemModule) GenerateAndroidBuildActions(ctx ModuleContext) { + SetProvider(ctx, PartitionTypeInfoProvider, PartitionTypeInfo{ + PartitionType: p.PartitionType(), + }) } func (p *mockFilesystemModule) PartitionType() string { diff --git a/apex/apex.go b/apex/apex.go index bda5f2f2a..f70076899 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1849,7 +1849,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext, return false } depName := ctx.OtherModuleName(child) - if ctx.EqualModules(parent, ctx.Module()) { + if android.EqualModules(parent, ctx.Module()) { switch depTag { case sharedLibTag, jniLibTag: isJniLib := depTag == jniLibTag @@ -2893,7 +2893,7 @@ func (a *apexBundle) verifyNativeImplementationLibs(ctx android.ModuleContext) { tag := ctx.OtherModuleDependencyTag(child) - if ctx.EqualModules(parent, ctx.Module()) { + if android.EqualModules(parent, ctx.Module()) { if !checkApexTag(tag) { return false } @@ -3713,7 +3713,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { func ShouldUseStubForApex(ctx android.ModuleContext, parent android.Module, dep android.ModuleProxy) bool { inVendorOrProduct := false bootstrap := false - if ctx.EqualModules(ctx.Module(), parent) { + if android.EqualModules(ctx.Module(), parent) { if linkable, ok := parent.(LinkableInterface); !ok { ctx.ModuleErrorf("Not a Linkable module: %q", ctx.ModuleName()) } else { diff --git a/cc/tidy.go b/cc/tidy.go index 23736585a..8e7f899a2 100644 --- a/cc/tidy.go +++ b/cc/tidy.go @@ -211,7 +211,7 @@ func TidyPhonySingleton() android.Singleton { type tidyPhonySingleton struct{} // Given a final module, add its tidy/obj phony targets to tidy/objModulesInDirGroup. -func collectTidyObjModuleTargets(ctx android.SingletonContext, module android.Module, +func collectTidyObjModuleTargets(ctx android.SingletonContext, module android.ModuleProxy, tidyModulesInDirGroup, objModulesInDirGroup map[string]map[string]android.Paths) { allObjFileGroups := make(map[string]android.Paths) // variant group name => obj file Paths allTidyFileGroups := make(map[string]android.Paths) // variant group name => tidy file Paths @@ -253,7 +253,7 @@ func (m *tidyPhonySingleton) GenerateBuildActions(ctx android.SingletonContext) objModulesInDirGroup := make(map[string]map[string]android.Paths) // Collect tidy/obj targets from the 'final' modules. - ctx.VisitAllModules(func(module android.Module) { + ctx.VisitAllModuleProxies(func(module android.ModuleProxy) { if ctx.IsFinalModule(module) { collectTidyObjModuleTargets(ctx, module, tidyModulesInDirGroup, objModulesInDirGroup) } @@ -268,7 +268,7 @@ func (m *tidyPhonySingleton) GenerateBuildActions(ctx android.SingletonContext) } // The name for an obj/tidy module variant group phony target is Name_group-obj/tidy, -func objTidyModuleGroupName(module android.Module, group string, suffix string) string { +func objTidyModuleGroupName(module android.ModuleProxy, group string, suffix string) string { if group == "" { return module.Name() + "-" + suffix } @@ -327,7 +327,7 @@ func addToOSGroup(osName string, files android.Paths, allGroups, subsetGroups ma } // Add an all-OS group, with groupName, to include all os-specific phony targets. -func addAllOSGroup(ctx android.SingletonContext, module android.Module, phonyTargetGroups map[string]android.Paths, groupName string, objTidyName string) { +func addAllOSGroup(ctx android.SingletonContext, module android.ModuleProxy, phonyTargetGroups map[string]android.Paths, groupName string, objTidyName string) { if len(phonyTargetGroups) > 0 { var targets android.Paths for group, _ := range phonyTargetGroups { @@ -338,7 +338,7 @@ func addAllOSGroup(ctx android.SingletonContext, module android.Module, phonyTar } // Create one phony targets for each group and add them to the targetGroups. -func genObjTidyPhonyTargets(ctx android.SingletonContext, module android.Module, objTidyName string, fileGroups map[string]android.Paths, targetGroups map[string]android.Path) { +func genObjTidyPhonyTargets(ctx android.SingletonContext, module android.ModuleProxy, objTidyName string, fileGroups map[string]android.Paths, targetGroups map[string]android.Path) { for group, files := range fileGroups { groupName := objTidyModuleGroupName(module, group, objTidyName) ctx.Phony(groupName, files...) diff --git a/dexpreopt/config.go b/dexpreopt/config.go index c5cafb1cf..655ee9b7b 100644 --- a/dexpreopt/config.go +++ b/dexpreopt/config.go @@ -510,7 +510,7 @@ func dex2oatPathFromDep(ctx android.ModuleContext) android.Path { var dex2oatModule android.ModuleProxy ctx.WalkDepsProxy(func(child, parent android.ModuleProxy) bool { prebuiltInfo, isPrebuilt := android.OtherModuleProvider(ctx, child, android.PrebuiltModuleInfoProvider) - if ctx.EqualModules(parent, ctx.Module()) && ctx.OtherModuleDependencyTag(child) == Dex2oatDepTag { + if android.EqualModules(parent, ctx.Module()) && ctx.OtherModuleDependencyTag(child) == Dex2oatDepTag { // Found the source module, or prebuilt module that has replaced the source. dex2oatModule = child if isPrebuilt { @@ -519,7 +519,7 @@ func dex2oatPathFromDep(ctx android.ModuleContext) android.Path { return true // Recurse to check if the source has a prebuilt dependency. } } - if ctx.EqualModules(parent, dex2oatModule) && ctx.OtherModuleDependencyTag(child) == android.PrebuiltDepTag { + if android.EqualModules(parent, dex2oatModule) && ctx.OtherModuleDependencyTag(child) == android.PrebuiltDepTag { if isPrebuilt && prebuiltInfo.UsePrebuilt { dex2oatModule = child // Found a prebuilt that should be used. } diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go index d4ea6a34c..725786897 100644 --- a/filesystem/filesystem.go +++ b/filesystem/filesystem.go @@ -474,11 +474,7 @@ type FullInstallPathInfo struct { var FilesystemProvider = blueprint.NewProvider[FilesystemInfo]() -type FilesystemDefaultsInfo struct { - // Identifies which partition this is for //visibility:any_system_image (and others) visibility - // checks, and will be used in the future for API surface checks. - PartitionType string -} +type FilesystemDefaultsInfo struct{} var FilesystemDefaultsInfoProvider = blueprint.NewProvider[FilesystemDefaultsInfo]() @@ -696,6 +692,10 @@ func (f *filesystem) GenerateAndroidBuildActions(ctx android.ModuleContext) { android.SetProvider(ctx, FilesystemProvider, fsInfo) + android.SetProvider(ctx, android.PartitionTypeInfoProvider, android.PartitionTypeInfo{ + PartitionType: f.PartitionType(), + }) + f.fileListFile = fileListFile if proptools.Bool(f.properties.Unchecked_module) { @@ -822,11 +822,12 @@ func validatePartitionType(ctx android.ModuleContext, p partition) { } ctx.VisitDirectDepsProxyWithTag(android.DefaultsDepTag, func(m android.ModuleProxy) { - if fdm, ok := android.OtherModuleProvider(ctx, m, FilesystemDefaultsInfoProvider); ok { - if p.PartitionType() != fdm.PartitionType { + if _, ok := android.OtherModuleProvider(ctx, m, FilesystemDefaultsInfoProvider); ok { + partitionInfo := android.OtherModuleProviderOrDefault(ctx, m, android.PartitionTypeInfoProvider) + if p.PartitionType() != partitionInfo.PartitionType { ctx.PropertyErrorf("partition_type", "%s doesn't match with the partition type %s of the filesystem default module %s", - p.PartitionType(), fdm.PartitionType, m.Name()) + p.PartitionType(), partitionInfo.PartitionType, m.Name()) } } }) @@ -1413,7 +1414,8 @@ var _ partition = (*filesystemDefaults)(nil) func (f *filesystemDefaults) GenerateAndroidBuildActions(ctx android.ModuleContext) { validatePartitionType(ctx, f) - android.SetProvider(ctx, FilesystemDefaultsInfoProvider, FilesystemDefaultsInfo{ + android.SetProvider(ctx, FilesystemDefaultsInfoProvider, FilesystemDefaultsInfo{}) + android.SetProvider(ctx, android.PartitionTypeInfoProvider, android.PartitionTypeInfo{ PartitionType: f.PartitionType(), }) } diff --git a/java/app.go b/java/app.go index 827b23526..c2aa8a474 100644 --- a/java/app.go +++ b/java/app.go @@ -1175,7 +1175,7 @@ func collectAppDeps(ctx android.ModuleContext, app appDepsInterface, apkInApex := ctx.Module().(android.ApexModule).NotInPlatform() childLinkable, _ := android.OtherModuleProvider(ctx, child, cc.LinkableInfoProvider) parentIsLinkable := false - if ctx.EqualModules(ctx.Module(), parent) { + if android.EqualModules(ctx.Module(), parent) { parentLinkable, _ := ctx.Module().(cc.LinkableInterface) parentIsLinkable = parentLinkable != nil } else { diff --git a/java/java.go b/java/java.go index 38361bfa7..c1e4f8ca0 100644 --- a/java/java.go +++ b/java/java.go @@ -3363,21 +3363,12 @@ func (j *Import) UseProfileGuidedDexpreopt() bool { // Add compile time check for interface implementation var _ android.IDEInfo = (*Import)(nil) -var _ android.IDECustomizedModuleName = (*Import)(nil) // Collect information for opening IDE project files in java/jdeps.go. - func (j *Import) IDEInfo(ctx android.BaseModuleContext, dpInfo *android.IdeInfo) { dpInfo.Jars = append(dpInfo.Jars, j.combinedImplementationFile.String()) } -func (j *Import) IDECustomizedModuleName() string { - // TODO(b/113562217): Extract the base module name from the Import name, often the Import name - // has a prefix "prebuilt_". Remove the prefix explicitly if needed until we find a better - // solution to get the Import name. - return android.RemoveOptionalPrebuiltPrefix(j.Name()) -} - var _ android.PrebuiltInterface = (*Import)(nil) func (j *Import) IsInstallable() bool { diff --git a/java/jdeps.go b/java/jdeps.go index 07f8c4378..4711dc1a4 100644 --- a/java/jdeps.go +++ b/java/jdeps.go @@ -45,13 +45,13 @@ func (j *jdepsGeneratorSingleton) GenerateBuildActions(ctx android.SingletonCont // (b/204397180) Generate module_bp_java_deps.json by default. moduleInfos := make(map[string]android.IdeInfo) - ctx.VisitAllModules(func(module android.Module) { - if !module.Enabled(ctx) { + ctx.VisitAllModuleProxies(func(module android.ModuleProxy) { + if !android.OtherModuleProviderOrDefault(ctx, module, android.CommonModuleInfoKey).Enabled { return } // Prevent including both prebuilts and matching source modules when one replaces the other. - if !android.IsModulePreferred(module) { + if !android.IsModulePreferredProxy(ctx, module) { return } @@ -60,9 +60,11 @@ func (j *jdepsGeneratorSingleton) GenerateBuildActions(ctx android.SingletonCont return } name := ideInfoProvider.BaseModuleName - ideModuleNameProvider, ok := module.(android.IDECustomizedModuleName) - if ok { - name = ideModuleNameProvider.IDECustomizedModuleName() + if info, ok := android.OtherModuleProvider(ctx, module, JavaLibraryInfoProvider); ok && info.Prebuilt { + // TODO(b/113562217): Extract the base module name from the Import name, often the Import name + // has a prefix "prebuilt_". Remove the prefix explicitly if needed until we find a better + // solution to get the Import name. + name = android.RemoveOptionalPrebuiltPrefix(module.Name()) } dpInfo := moduleInfos[name] @@ -70,13 +72,12 @@ func (j *jdepsGeneratorSingleton) GenerateBuildActions(ctx android.SingletonCont dpInfo.Paths = []string{ctx.ModuleDir(module)} moduleInfos[name] = dpInfo - mkProvider, ok := module.(android.AndroidMkDataProvider) + mkProvider, ok := android.OtherModuleProvider(ctx, module, android.AndroidMkDataInfoProvider) if !ok { return } - data := mkProvider.AndroidMk() - if data.Class != "" { - dpInfo.Classes = append(dpInfo.Classes, data.Class) + if mkProvider.Class != "" { + dpInfo.Classes = append(dpInfo.Classes, mkProvider.Class) } if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok { |