Support patch_module in java modules

A few tests that have classes in the java.base module need to pass
--patch-module=java.base=<classpath> to javac.

Test: m checkbuild
Change-Id: I246bad92dcde976969b064aace5e2856e2bac971
diff --git a/java/java.go b/java/java.go
index 43af2c6..c9759d7 100644
--- a/java/java.go
+++ b/java/java.go
@@ -135,6 +135,15 @@
 		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 @@
 		// 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 @@
 		}
 	}
 
+	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 @@
 		flags.aidlFlags = "$aidlFlags"
 	}
 
+	if len(javacFlags) > 0 {
+		// optimization.
+		ctx.Variable(pctx, "javacFlags", strings.Join(javacFlags, " "))
+		flags.javacFlags = "$javacFlags"
+	}
+
 	return flags
 }