From 81440083603fc3723f56f2d5da08d9759e487fde Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 15 Aug 2018 20:21:55 -0700 Subject: [PATCH] Support patch_module in java modules A few tests that have classes in the java.base module need to pass --patch-module=java.base= to javac. Test: m checkbuild Change-Id: I246bad92dcde976969b064aace5e2856e2bac971 --- java/builder.go | 5 ++++- java/java.go | 25 ++++++++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/java/builder.go b/java/builder.go index 4bdea2833..ff5de09bb 100644 --- a/java/builder.go +++ b/java/builder.go @@ -375,8 +375,11 @@ func TransformJarJar(ctx android.ModuleContext, outputFile android.WritablePath, type classpath []android.Path func (x *classpath) FormJavaClassPath(optName string) string { + if optName != "" && !strings.HasSuffix(optName, "=") && !strings.HasSuffix(optName, " ") { + optName += " " + } if len(*x) > 0 { - return optName + " " + strings.Join(x.Strings(), ":") + return optName + strings.Join(x.Strings(), ":") } else { return "" } diff --git a/java/java.go b/java/java.go index 43af2c6b6..c9759d737 100644 --- a/java/java.go +++ b/java/java.go @@ -135,6 +135,15 @@ type CompilerProperties struct { Javacflags []string } + // When compiling language level 9+ .java code in packages that are part of + // a system module, patch_module names the module that your sources and + // dependencies should be patched into. The Android runtime currently + // doesn't implement the JEP 261 module system so this option is only + // supported at compile time. It should only be needed to compile tests in + // packages that exist in libcore and which are inconvenient to move + // elsewhere. + Patch_module *string + Jacoco struct { // List of classes to include for instrumentation with jacoco to collect coverage // information at runtime when building with coverage enabled. If unset defaults to all @@ -899,11 +908,6 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB // disk and memory usage. javacFlags = append(javacFlags, "-g:source,lines") } - if len(javacFlags) > 0 { - // optimization. - ctx.Variable(pctx, "javacFlags", strings.Join(javacFlags, " ")) - flags.javacFlags = "$javacFlags" - } if ctx.Config().RunErrorProne() { if config.ErrorProneClasspath == nil { @@ -955,6 +959,11 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB } } + if j.properties.Patch_module != nil && ctx.Config().TargetOpenJDK9() { + patchClasspath := ".:" + flags.classpath.FormJavaClassPath("") + javacFlags = append(javacFlags, "--patch-module="+String(j.properties.Patch_module)+"="+patchClasspath) + } + // systemModules if deps.systemModules != nil { flags.systemModules = append(flags.systemModules, deps.systemModules) @@ -968,6 +977,12 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB flags.aidlFlags = "$aidlFlags" } + if len(javacFlags) > 0 { + // optimization. + ctx.Variable(pctx, "javacFlags", strings.Join(javacFlags, " ")) + flags.javacFlags = "$javacFlags" + } + return flags }