Merge "Allow java_system_modules_import to replace java_system_modules"

This commit is contained in:
Treehugger Robot 2020-02-19 21:08:57 +00:00 committed by Gerrit Code Review
commit 1876a76216
4 changed files with 145 additions and 14 deletions

View File

@ -547,10 +547,10 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
case bootClasspathTag:
if dep, ok := module.(Dependency); ok {
deps.bootClasspath = append(deps.bootClasspath, dep.ImplementationJars()...)
} else if sm, ok := module.(*SystemModules); ok {
} else if sm, ok := module.(SystemModulesProvider); ok {
// A system modules dependency has been added to the bootclasspath
// so add its libs to the bootclasspath.
deps.bootClasspath = append(deps.bootClasspath, sm.headerJars...)
deps.bootClasspath = append(deps.bootClasspath, sm.HeaderJars()...)
} else {
panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName()))
}
@ -578,11 +578,9 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
if deps.systemModules != nil {
panic("Found two system module dependencies")
}
sm := module.(*SystemModules)
if sm.outputDir == nil && len(sm.outputDeps) == 0 {
panic("Missing directory for system module dependency")
}
deps.systemModules = &systemModules{sm.outputDir, sm.outputDeps}
sm := module.(SystemModulesProvider)
outputDir, outputDeps := sm.OutputDirAndDeps()
deps.systemModules = &systemModules{outputDir, outputDeps}
}
})
// do not pass exclude_srcs directly when expanding srcFiles since exclude_srcs

View File

@ -1031,18 +1031,16 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
case bootClasspathTag:
// If a system modules dependency has been added to the bootclasspath
// then add its libs to the bootclasspath.
sm := module.(*SystemModules)
deps.bootClasspath = append(deps.bootClasspath, sm.headerJars...)
sm := module.(SystemModulesProvider)
deps.bootClasspath = append(deps.bootClasspath, sm.HeaderJars()...)
case systemModulesTag:
if deps.systemModules != nil {
panic("Found two system module dependencies")
}
sm := module.(*SystemModules)
if sm.outputDir == nil || len(sm.outputDeps) == 0 {
panic("Missing directory for system module dependency")
}
deps.systemModules = &systemModules{sm.outputDir, sm.outputDeps}
sm := module.(SystemModulesProvider)
outputDir, outputDeps := sm.OutputDirAndDeps()
deps.systemModules = &systemModules{outputDir, outputDeps}
}
}
})

View File

@ -982,6 +982,65 @@ func TestDroiddoc(t *testing.T) {
}
}
func TestDroidstubsWithSystemModules(t *testing.T) {
ctx, _ := testJava(t, `
droidstubs {
name: "stubs-source-system-modules",
srcs: [
"bar-doc/*.java",
],
sdk_version: "none",
system_modules: "source-system-modules",
}
java_library {
name: "source-jar",
srcs: [
"a.java",
],
}
java_system_modules {
name: "source-system-modules",
libs: ["source-jar"],
}
droidstubs {
name: "stubs-prebuilt-system-modules",
srcs: [
"bar-doc/*.java",
],
sdk_version: "none",
system_modules: "prebuilt-system-modules",
}
java_import {
name: "prebuilt-jar",
jars: ["a.jar"],
}
java_system_modules_import {
name: "prebuilt-system-modules",
libs: ["prebuilt-jar"],
}
`)
checkSystemModulesUseByDroidstubs(t, ctx, "stubs-source-system-modules", "source-jar.jar")
checkSystemModulesUseByDroidstubs(t, ctx, "stubs-prebuilt-system-modules", "prebuilt-jar.jar")
}
func checkSystemModulesUseByDroidstubs(t *testing.T, ctx *android.TestContext, moduleName string, systemJar string) {
metalavaRule := ctx.ModuleForTests(moduleName, "android_common").Rule("metalava")
var systemJars []string
for _, i := range metalavaRule.Implicits {
systemJars = append(systemJars, i.Base())
}
if len(systemJars) != 1 || systemJars[0] != systemJar {
t.Errorf("inputs of %q must be []string{%q}, but was %#v.", moduleName, systemJar, systemJars)
}
}
func TestJarGenrules(t *testing.T) {
ctx, _ := testJava(t, `
java_library {
@ -1377,3 +1436,59 @@ func TestJavaSystemModulesImport(t *testing.T) {
}
}
}
func TestJavaLibraryWithSystemModules(t *testing.T) {
ctx, _ := testJava(t, `
java_library {
name: "lib-with-source-system-modules",
srcs: [
"a.java",
],
sdk_version: "none",
system_modules: "source-system-modules",
}
java_library {
name: "source-jar",
srcs: [
"a.java",
],
}
java_system_modules {
name: "source-system-modules",
libs: ["source-jar"],
}
java_library {
name: "lib-with-prebuilt-system-modules",
srcs: [
"a.java",
],
sdk_version: "none",
system_modules: "prebuilt-system-modules",
}
java_import {
name: "prebuilt-jar",
jars: ["a.jar"],
}
java_system_modules_import {
name: "prebuilt-system-modules",
libs: ["prebuilt-jar"],
}
`)
checkBootClasspathForSystemModule(t, ctx, "lib-with-source-system-modules", "/source-jar.jar")
checkBootClasspathForSystemModule(t, ctx, "lib-with-prebuilt-system-modules", "/prebuilt-jar.jar")
}
func checkBootClasspathForSystemModule(t *testing.T, ctx *android.TestContext, moduleName string, expectedSuffix string) {
javacRule := ctx.ModuleForTests(moduleName, "android_common").Rule("javac")
bootClasspath := javacRule.Args["bootClasspath"]
if strings.HasPrefix(bootClasspath, "--system ") && strings.HasSuffix(bootClasspath, expectedSuffix) {
t.Errorf("bootclasspath of %q must start with --system and end with %q, but was %#v.", moduleName, expectedSuffix, bootClasspath)
}
}

View File

@ -117,6 +117,15 @@ func SystemModulesFactory() android.Module {
return module
}
type SystemModulesProvider interface {
HeaderJars() android.Paths
OutputDirAndDeps() (android.Path, android.Paths)
}
var _ SystemModulesProvider = (*SystemModules)(nil)
var _ SystemModulesProvider = (*systemModulesImport)(nil)
type SystemModules struct {
android.ModuleBase
android.DefaultableModuleBase
@ -136,6 +145,17 @@ type SystemModulesProperties struct {
Libs []string
}
func (system *SystemModules) HeaderJars() android.Paths {
return system.headerJars
}
func (system *SystemModules) OutputDirAndDeps() (android.Path, android.Paths) {
if system.outputDir == nil || len(system.outputDeps) == 0 {
panic("Missing directory for system module dependency")
}
return system.outputDir, system.outputDeps
}
func (system *SystemModules) GenerateAndroidBuildActions(ctx android.ModuleContext) {
var jars android.Paths