Add container property to aconfig_declarations.

Bug: 311155208
Test: Unit test
Change-Id: I7b187138856d0144203961e82b6dad5e2f8eed9d
This commit is contained in:
Yu Liu
2023-11-16 17:05:47 -08:00
parent 62093cf7fc
commit eae7b36699
26 changed files with 750 additions and 146 deletions

View File

@@ -25,6 +25,7 @@ import (
"github.com/google/blueprint/pathtools"
"github.com/google/blueprint/proptools"
"android/soong/aconfig"
"android/soong/android"
"android/soong/dexpreopt"
"android/soong/java/config"
@@ -512,13 +513,8 @@ type Module struct {
// or the module should override Stem().
stem string
// Aconfig "cache files" that went directly into this module. Transitive ones are
// tracked via JavaInfo.TransitiveAconfigFiles
// TODO: Extract to something standalone to propagate tags via GeneratedJavaLibraryModule
aconfigIntermediates android.Paths
// Aconfig files for all transitive deps. Also exposed via JavaInfo
transitiveAconfigFiles *android.DepSet[android.Path]
// Aconfig files for all transitive deps. Also exposed via TransitiveDeclarationsInfo
transitiveAconfigFiles map[string]*android.DepSet[android.Path]
}
func (j *Module) CheckStableSdkVersion(ctx android.BaseModuleContext) error {
@@ -1723,7 +1719,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
ctx.CheckbuildFile(outputFile)
j.collectTransitiveAconfigFiles(ctx)
aconfig.CollectTransitiveAconfigFiles(ctx, &j.transitiveAconfigFiles)
ctx.SetProvider(JavaInfoProvider, JavaInfo{
HeaderJars: android.PathsIfNonNil(j.headerJarFile),
@@ -1740,7 +1736,6 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
ExportedPluginClasses: j.exportedPluginClasses,
ExportedPluginDisableTurbine: j.exportedDisableTurbine,
JacocoReportClassesFile: j.jacocoReportClassesFile,
TransitiveAconfigFiles: j.transitiveAconfigFiles,
})
// Save the output file with no relative path so that it doesn't end up in a subdirectory when used as a resource
@@ -2081,32 +2076,8 @@ func (j *Module) IsInstallable() bool {
return Bool(j.properties.Installable)
}
func (j *Module) collectTransitiveAconfigFiles(ctx android.ModuleContext) {
// Aconfig files from this module
mine := j.aconfigIntermediates
// Aconfig files from transitive dependencies
fromDeps := []*android.DepSet[android.Path]{}
ctx.VisitDirectDeps(func(module android.Module) {
dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo)
if dep.TransitiveAconfigFiles != nil {
fromDeps = append(fromDeps, dep.TransitiveAconfigFiles)
}
})
// DepSet containing aconfig files myself and from dependencies
j.transitiveAconfigFiles = android.NewDepSet(android.POSTORDER, mine, fromDeps)
}
func (j *Module) AddAconfigIntermediate(path android.Path) {
j.aconfigIntermediates = append(j.aconfigIntermediates, path)
}
func (j *Module) getTransitiveAconfigFiles() *android.DepSet[android.Path] {
if j.transitiveAconfigFiles == nil {
panic(fmt.Errorf("java.Moduile: getTransitiveAconfigFiles called before collectTransitiveAconfigFiles module=%s", j.Name()))
}
return j.transitiveAconfigFiles
func (j *Module) getTransitiveAconfigFiles(container string) []android.Path {
return j.transitiveAconfigFiles[container].ToList()
}
type sdkLinkType int