Merge "Collect transitive source files for java modules" into main

This commit is contained in:
Anton Hansson 2023-09-28 16:46:30 +00:00 committed by Gerrit Code Review
commit 9231132099
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 {