Merge "Collect transitive source files for java modules" into main am: 9231132099 am: ea95719555

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2757568

Change-Id: Idad894c8cf621d172f8dc6f9504064de379d0bec
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Anton Hansson 2023-09-28 18:28:40 +00:00 committed by Automerger Merge Worker
commit 4a1fdf1964
3 changed files with 46 additions and 0 deletions

View file

@ -432,6 +432,9 @@ type Module struct {
srcJarArgs []string
srcJarDeps android.Paths
// the source files of this module and all its static dependencies
transitiveSrcFiles *android.DepSet[android.Path]
// jar file containing implementation classes and resources including static library
// dependencies
implementationAndResourcesJar android.Path
@ -1694,6 +1697,8 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
j.linter.lint(ctx)
}
j.collectTransitiveSrcFiles(ctx, srcFiles)
ctx.CheckbuildFile(outputFile)
j.collectTransitiveAconfigFiles(ctx)
@ -1708,6 +1713,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
AidlIncludeDirs: j.exportAidlIncludeDirs,
SrcJarArgs: j.srcJarArgs,
SrcJarDeps: j.srcJarDeps,
TransitiveSrcFiles: j.transitiveSrcFiles,
ExportedPlugins: j.exportedPluginJars,
ExportedPluginClasses: j.exportedPluginClasses,
ExportedPluginDisableTurbine: j.exportedDisableTurbine,
@ -2032,6 +2038,21 @@ func (j *Module) JacocoReportClassesFile() android.Path {
return j.jacocoReportClassesFile
}
func (j *Module) collectTransitiveSrcFiles(ctx android.ModuleContext, mine android.Paths) {
var fromDeps []*android.DepSet[android.Path]
ctx.VisitDirectDeps(func(module android.Module) {
tag := ctx.OtherModuleDependencyTag(module)
if tag == staticLibTag {
depInfo := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo)
if depInfo.TransitiveSrcFiles != nil {
fromDeps = append(fromDeps, depInfo.TransitiveSrcFiles)
}
}
})
j.transitiveSrcFiles = android.NewDepSet(android.POSTORDER, mine, fromDeps)
}
func (j *Module) IsInstallable() bool {
return Bool(j.properties.Installable)
}

View file

@ -278,6 +278,9 @@ type JavaInfo struct {
// SrcJarDeps is a list of paths to depend on when packaging the sources of this module.
SrcJarDeps android.Paths
// The source files of this module and all its transitive static dependencies.
TransitiveSrcFiles *android.DepSet[android.Path]
// ExportedPlugins is a list of paths that should be used as annotation processors for any
// module that depends on this module.
ExportedPlugins android.Paths

View file

@ -2263,6 +2263,28 @@ func TestJavaApiLibraryFullApiSurfaceStub(t *testing.T) {
android.AssertStringDoesContain(t, "Command expected to contain full_api_surface_stub output jar", manifestCommand, "lib1.jar")
}
func TestTransitiveSrcFiles(t *testing.T) {
ctx, _ := testJava(t, `
java_library {
name: "a",
srcs: ["a.java"],
}
java_library {
name: "b",
srcs: ["b.java"],
}
java_library {
name: "c",
srcs: ["c.java"],
libs: ["a"],
static_libs: ["b"],
}
`)
c := ctx.ModuleForTests("c", "android_common").Module()
transitiveSrcFiles := android.Paths(ctx.ModuleProvider(c, JavaInfoProvider).(JavaInfo).TransitiveSrcFiles.ToList())
android.AssertArrayString(t, "unexpected jar deps", []string{"b.java", "c.java"}, transitiveSrcFiles.Strings())
}
func TestTradefedOptions(t *testing.T) {
result := PrepareForTestWithJavaBuildComponents.RunTestWithBp(t, `
java_test_host {