Add buildDir to java patch-module paths.
This solves a problem where javac fails to find patch-module targets when a build diretory is not under the project root. Bug: 117770838 Test: java_test.go + manual build Change-Id: If70d0d388a3f6c87b3f78a927df2063616d50c8a
This commit is contained in:
11
java/java.go
11
java/java.go
@@ -1011,8 +1011,15 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB
|
||||
}
|
||||
|
||||
if j.properties.Patch_module != nil && flags.javaVersion == "1.9" {
|
||||
patchClasspath := ".:" + flags.classpath.FormJavaClassPath("")
|
||||
javacFlags = append(javacFlags, "--patch-module="+String(j.properties.Patch_module)+"="+patchClasspath)
|
||||
// Manually specify build directory in case it is not under the repo root.
|
||||
// (javac doesn't seem to expand into symbolc links when searching for patch-module targets, so
|
||||
// just adding a symlink under the root doesn't help.)
|
||||
patchPaths := ".:" + ctx.Config().BuildDir()
|
||||
classPath := flags.classpath.FormJavaClassPath("")
|
||||
if classPath != "" {
|
||||
patchPaths += ":" + classPath
|
||||
}
|
||||
javacFlags = append(javacFlags, "--patch-module="+String(j.properties.Patch_module)+"="+patchPaths)
|
||||
}
|
||||
|
||||
// systemModules
|
||||
|
@@ -1185,3 +1185,65 @@ func TestCompilerFlags(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(jungjw): Consider making this more robust by ignoring path order.
|
||||
func checkPatchModuleFlag(t *testing.T, ctx *android.TestContext, moduleName string, expected string) {
|
||||
variables := ctx.ModuleForTests(moduleName, "android_common").Module().VariablesForTests()
|
||||
flags := strings.Split(variables["javacFlags"], " ")
|
||||
got := ""
|
||||
for _, flag := range flags {
|
||||
keyEnd := strings.Index(flag, "=")
|
||||
if keyEnd > -1 && flag[:keyEnd] == "--patch-module" {
|
||||
got = flag[keyEnd+1:]
|
||||
break
|
||||
}
|
||||
}
|
||||
if expected != got {
|
||||
t.Errorf("Unexpected patch-module flag for module %q - expected %q, but got %q", moduleName, expected, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPatchModule(t *testing.T) {
|
||||
bp := `
|
||||
java_library {
|
||||
name: "foo",
|
||||
srcs: ["a.java"],
|
||||
}
|
||||
|
||||
java_library {
|
||||
name: "bar",
|
||||
srcs: ["b.java"],
|
||||
no_standard_libs: true,
|
||||
system_modules: "none",
|
||||
patch_module: "java.base",
|
||||
}
|
||||
|
||||
java_library {
|
||||
name: "baz",
|
||||
srcs: ["c.java"],
|
||||
patch_module: "java.base",
|
||||
}
|
||||
`
|
||||
|
||||
t.Run("1.8", func(t *testing.T) {
|
||||
// Test default javac 1.8
|
||||
ctx := testJava(t, bp)
|
||||
|
||||
checkPatchModuleFlag(t, ctx, "foo", "")
|
||||
checkPatchModuleFlag(t, ctx, "bar", "")
|
||||
checkPatchModuleFlag(t, ctx, "baz", "")
|
||||
})
|
||||
|
||||
t.Run("1.9", func(t *testing.T) {
|
||||
// Test again with javac 1.9
|
||||
config := testConfig(map[string]string{"EXPERIMENTAL_USE_OPENJDK9": "true"})
|
||||
ctx := testContext(config, bp, nil)
|
||||
run(t, ctx, config)
|
||||
|
||||
checkPatchModuleFlag(t, ctx, "foo", "")
|
||||
expected := "java.base=.:" + buildDir
|
||||
checkPatchModuleFlag(t, ctx, "bar", expected)
|
||||
expected = "java.base=" + strings.Join([]string{".", buildDir, moduleToPath("ext"), moduleToPath("framework")}, ":")
|
||||
checkPatchModuleFlag(t, ctx, "baz", expected)
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user