Move ApexBundleInfoProvider from apex/ to android/

This provider contains information about the contents of an apex and is
set during the post deps phase of top-level source and prebuilt apexes.

java.dexpreoptDisabled needs to distinguish between platform and apex
variants of a library to prevent creating duplicate ninja rules. It does
so by looking at ApexInfoProvider. This provider gets set on the ctx of
the java_library being dexpreopted.

In case of prebuilts, these rules are being moved to the top-level
prebuilt apexes. Move ApexInfoBundleProvider from apex to android so
that java.dexpreoptDisabled can consume this provider without running
into a golang circular dependency. (java.dexpreoptDisabled will use this
provider in the next CL of this stack).

Test: go build ./android ./apex
Change-Id: I665abd9d0591eeb17b273cc822beb20690e6af09
This commit is contained in:
Spandan Das 2024-01-25 19:25:42 +00:00
parent 1f4475cee1
commit f5e03f1c1a
3 changed files with 12 additions and 11 deletions

View file

@ -147,6 +147,13 @@ type ApexTestForInfo struct {
var ApexTestForInfoProvider = blueprint.NewMutatorProvider[ApexTestForInfo]("apex_test_for") var ApexTestForInfoProvider = blueprint.NewMutatorProvider[ApexTestForInfo]("apex_test_for")
// ApexBundleInfo contains information about the dependencies of an apex
type ApexBundleInfo struct {
Contents *ApexContents
}
var ApexBundleInfoProvider = blueprint.NewMutatorProvider[ApexBundleInfo]("apex_info")
// DepIsInSameApex defines an interface that should be used to determine whether a given dependency // DepIsInSameApex defines an interface that should be used to determine whether a given dependency
// should be considered as part of the same APEX as the current module or not. Note: this was // should be considered as part of the same APEX as the current module or not. Note: this was
// extracted from ApexModule to make it easier to define custom subsets of the ApexModule interface // extracted from ApexModule to make it easier to define custom subsets of the ApexModule interface

View file

@ -929,12 +929,6 @@ type DCLAInfo struct {
var DCLAInfoProvider = blueprint.NewMutatorProvider[DCLAInfo]("apex_info") var DCLAInfoProvider = blueprint.NewMutatorProvider[DCLAInfo]("apex_info")
type ApexBundleInfo struct {
Contents *android.ApexContents
}
var ApexBundleInfoProvider = blueprint.NewMutatorProvider[ApexBundleInfo]("apex_info")
var _ ApexInfoMutator = (*apexBundle)(nil) var _ ApexInfoMutator = (*apexBundle)(nil)
func (a *apexBundle) ApexVariationName() string { func (a *apexBundle) ApexVariationName() string {
@ -1035,7 +1029,7 @@ func (a *apexBundle) ApexInfoMutator(mctx android.TopDownMutatorContext) {
// The membership information is saved for later access // The membership information is saved for later access
apexContents := android.NewApexContents(contents) apexContents := android.NewApexContents(contents)
android.SetProvider(mctx, ApexBundleInfoProvider, ApexBundleInfo{ android.SetProvider(mctx, android.ApexBundleInfoProvider, android.ApexBundleInfo{
Contents: apexContents, Contents: apexContents,
}) })
@ -1243,7 +1237,7 @@ func apexTestForMutator(mctx android.BottomUpMutatorContext) {
if _, ok := mctx.Module().(android.ApexModule); ok { if _, ok := mctx.Module().(android.ApexModule); ok {
var contents []*android.ApexContents var contents []*android.ApexContents
for _, testFor := range mctx.GetDirectDepsWithTag(testForTag) { for _, testFor := range mctx.GetDirectDepsWithTag(testForTag) {
abInfo, _ := android.OtherModuleProvider(mctx, testFor, ApexBundleInfoProvider) abInfo, _ := android.OtherModuleProvider(mctx, testFor, android.ApexBundleInfoProvider)
contents = append(contents, abInfo.Contents) contents = append(contents, abInfo.Contents)
} }
android.SetProvider(mctx, android.ApexTestForInfoProvider, android.ApexTestForInfo{ android.SetProvider(mctx, android.ApexTestForInfoProvider, android.ApexTestForInfo{
@ -2192,7 +2186,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext,
af := apexFileForNativeLibrary(ctx, ch, vctx.handleSpecialLibs) af := apexFileForNativeLibrary(ctx, ch, vctx.handleSpecialLibs)
af.transitiveDep = true af.transitiveDep = true
abInfo, _ := android.ModuleProvider(ctx, ApexBundleInfoProvider) abInfo, _ := android.ModuleProvider(ctx, android.ApexBundleInfoProvider)
if !abInfo.Contents.DirectlyInApex(depName) && (ch.IsStubs() || ch.HasStubsVariants()) { if !abInfo.Contents.DirectlyInApex(depName) && (ch.IsStubs() || ch.HasStubsVariants()) {
// If the dependency is a stubs lib, don't include it in this APEX, // 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. // but make sure that the lib is installed on the device.
@ -2658,7 +2652,7 @@ func (a *apexBundle) checkStaticLinkingToStubLibraries(ctx android.ModuleContext
return return
} }
abInfo, _ := android.ModuleProvider(ctx, ApexBundleInfoProvider) abInfo, _ := android.ModuleProvider(ctx, android.ApexBundleInfoProvider)
a.WalkPayloadDeps(ctx, func(ctx android.ModuleContext, from blueprint.Module, to android.ApexModule, externalDep bool) bool { a.WalkPayloadDeps(ctx, func(ctx android.ModuleContext, from blueprint.Module, to android.ApexModule, externalDep bool) bool {
if ccm, ok := to.(*cc.Module); ok { if ccm, ok := to.(*cc.Module); ok {

View file

@ -438,7 +438,7 @@ func (p *prebuiltCommon) apexInfoMutator(mctx android.TopDownMutatorContext) {
// Create contents for the prebuilt_apex and store it away for later use. // Create contents for the prebuilt_apex and store it away for later use.
apexContents := android.NewApexContents(contents) apexContents := android.NewApexContents(contents)
android.SetProvider(mctx, ApexBundleInfoProvider, ApexBundleInfo{ android.SetProvider(mctx, android.ApexBundleInfoProvider, android.ApexBundleInfo{
Contents: apexContents, Contents: apexContents,
}) })