Merge "Run ErrorProne in OpenJDK9"

This commit is contained in:
Colin Cross
2018-06-21 20:47:41 +00:00
committed by Gerrit Code Review
6 changed files with 61 additions and 78 deletions

View File

@@ -322,10 +322,8 @@ func NewConfig(srcDir, buildDir string) (Config, error) {
func (c *config) fromEnv() error { func (c *config) fromEnv() error {
switch c.Getenv("EXPERIMENTAL_USE_OPENJDK9") { switch c.Getenv("EXPERIMENTAL_USE_OPENJDK9") {
case "": case "":
if c.Getenv("RUN_ERROR_PRONE") != "true" {
// Use OpenJDK9, but target 1.8 // Use OpenJDK9, but target 1.8
c.useOpenJDK9 = true c.useOpenJDK9 = true
}
case "false": case "false":
// Use OpenJDK8 // Use OpenJDK8
case "1.8": case "1.8":
@@ -631,6 +629,10 @@ func (c *config) UseGoma() bool {
return Bool(c.productVariables.UseGoma) return Bool(c.productVariables.UseGoma)
} }
func (c *config) RunErrorProne() bool {
return c.IsEnvTrue("RUN_ERROR_PRONE")
}
// Returns true if OpenJDK9 prebuilts are being used // Returns true if OpenJDK9 prebuilts are being used
func (c *config) UseOpenJDK9() bool { func (c *config) UseOpenJDK9() bool {
return c.useOpenJDK9 return c.useOpenJDK9

View File

@@ -26,7 +26,6 @@ import (
"github.com/google/blueprint" "github.com/google/blueprint"
"android/soong/android" "android/soong/android"
"android/soong/java/config"
) )
var ( var (
@@ -80,29 +79,6 @@ var (
}, },
"kotlincFlags", "classpath", "srcJars", "srcJarDir", "outDir", "kotlinJvmTarget") "kotlincFlags", "classpath", "srcJars", "srcJarDir", "outDir", "kotlinJvmTarget")
errorprone = pctx.AndroidStaticRule("errorprone",
blueprint.RuleParams{
Command: `rm -rf "$outDir" "$annoDir" "$srcJarDir" && mkdir -p "$outDir" "$annoDir" "$srcJarDir" && ` +
`${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
`${config.SoongJavacWrapper} ${config.ErrorProneCmd} ` +
`$processorpath $javacFlags $bootClasspath $classpath ` +
`-source $javaVersion -target $javaVersion ` +
`-d $outDir -s $annoDir @$out.rsp @$srcJarDir/list && ` +
`${config.SoongZipCmd} -jar -o $out -C $outDir -D $outDir`,
CommandDeps: []string{
"${config.JavaCmd}",
"${config.ErrorProneJavacJar}",
"${config.ErrorProneJar}",
"${config.SoongZipCmd}",
"${config.ZipSyncCmd}",
},
CommandOrderOnly: []string{"${config.SoongJavacWrapper}"},
Rspfile: "$out.rsp",
RspfileContent: "$in",
},
"javacFlags", "bootClasspath", "classpath", "processorpath", "srcJars", "srcJarDir",
"outDir", "annoDir", "javaVersion")
turbine = pctx.AndroidStaticRule("turbine", turbine = pctx.AndroidStaticRule("turbine",
blueprint.RuleParams{ blueprint.RuleParams{
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` + Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
@@ -161,6 +137,7 @@ type javaBuilderFlags struct {
javaVersion string javaVersion string
errorProneExtraJavacFlags string errorProneExtraJavacFlags string
errorProneProcessorPath classpath
kotlincFlags string kotlincFlags string
kotlincClasspath classpath kotlincClasspath classpath
@@ -208,26 +185,24 @@ func TransformJavaToClasses(ctx android.ModuleContext, outputFile android.Writab
desc += strconv.Itoa(shardIdx) desc += strconv.Itoa(shardIdx)
} }
transformJavaToClasses(ctx, outputFile, shardIdx, srcFiles, srcJars, flags, deps, "javac", desc, javac) transformJavaToClasses(ctx, outputFile, shardIdx, srcFiles, srcJars, flags, deps, "javac", desc)
} }
func RunErrorProne(ctx android.ModuleContext, outputFile android.WritablePath, func RunErrorProne(ctx android.ModuleContext, outputFile android.WritablePath,
srcFiles, srcJars android.Paths, flags javaBuilderFlags) { srcFiles, srcJars android.Paths, flags javaBuilderFlags) {
if config.ErrorProneJar == "" { flags.processorPath = append(flags.errorProneProcessorPath, flags.processorPath...)
ctx.ModuleErrorf("cannot build with Error Prone, missing external/error_prone?")
}
if len(flags.errorProneExtraJavacFlags) > 0 { if len(flags.errorProneExtraJavacFlags) > 0 {
if len(flags.javacFlags) > 0 { if len(flags.javacFlags) > 0 {
flags.javacFlags = flags.errorProneExtraJavacFlags + " " + flags.javacFlags flags.javacFlags += " " + flags.errorProneExtraJavacFlags
} else { } else {
flags.javacFlags = flags.errorProneExtraJavacFlags flags.javacFlags = flags.errorProneExtraJavacFlags
} }
} }
transformJavaToClasses(ctx, outputFile, -1, srcFiles, srcJars, flags, nil, transformJavaToClasses(ctx, outputFile, -1, srcFiles, srcJars, flags, nil,
"errorprone", "errorprone", errorprone) "errorprone", "errorprone")
} }
func TransformJavaToHeaderClasses(ctx android.ModuleContext, outputFile android.WritablePath, func TransformJavaToHeaderClasses(ctx android.ModuleContext, outputFile android.WritablePath,
@@ -276,7 +251,7 @@ func TransformJavaToHeaderClasses(ctx android.ModuleContext, outputFile android.
func transformJavaToClasses(ctx android.ModuleContext, outputFile android.WritablePath, func transformJavaToClasses(ctx android.ModuleContext, outputFile android.WritablePath,
shardIdx int, srcFiles, srcJars android.Paths, shardIdx int, srcFiles, srcJars android.Paths,
flags javaBuilderFlags, deps android.Paths, flags javaBuilderFlags, deps android.Paths,
intermediatesDir, desc string, rule blueprint.Rule) { intermediatesDir, desc string) {
deps = append(deps, srcJars...) deps = append(deps, srcJars...)
@@ -308,7 +283,7 @@ func transformJavaToClasses(ctx android.ModuleContext, outputFile android.Writab
annoDir = filepath.Join(shardDir, annoDir) annoDir = filepath.Join(shardDir, annoDir)
} }
ctx.Build(pctx, android.BuildParams{ ctx.Build(pctx, android.BuildParams{
Rule: rule, Rule: javac,
Description: desc, Description: desc,
Output: outputFile, Output: outputFile,
Inputs: srcFiles, Inputs: srcFiles,

View File

@@ -14,39 +14,40 @@
package config package config
import "android/soong/android" import (
"strings"
"android/soong/android"
)
var ( var (
// These will be filled out by external/error_prone/soong/error_prone.go if it is available // These will be filled out by external/error_prone/soong/error_prone.go if it is available
ErrorProneJavacJar string ErrorProneClasspath []string
ErrorProneJar string ErrorProneChecksError []string
ErrorProneClasspath string ErrorProneChecksWarning []string
ErrorProneChecksError string ErrorProneChecksDefaultDisabled []string
ErrorProneChecksWarning string ErrorProneChecksOff []string
ErrorProneChecksDefaultDisabled string ErrorProneFlags []string
ErrorProneFlags string
) )
// Wrapper that grabs value of val late so it can be initialized by a later module's init function // Wrapper that grabs value of val late so it can be initialized by a later module's init function
func errorProneVar(name string, val *string) { func errorProneVar(name string, val *[]string, sep string) {
pctx.VariableFunc(name, func(android.PackageVarContext) string { pctx.VariableFunc(name, func(android.PackageVarContext) string {
return *val return strings.Join(*val, sep)
}) })
} }
func init() { func init() {
errorProneVar("ErrorProneJar", &ErrorProneJar) errorProneVar("ErrorProneClasspath", &ErrorProneClasspath, ":")
errorProneVar("ErrorProneJavacJar", &ErrorProneJavacJar) errorProneVar("ErrorProneChecksError", &ErrorProneChecksError, " ")
errorProneVar("ErrorProneClasspath", &ErrorProneClasspath) errorProneVar("ErrorProneChecksWarning", &ErrorProneChecksWarning, " ")
errorProneVar("ErrorProneChecksError", &ErrorProneChecksError) errorProneVar("ErrorProneChecksDefaultDisabled", &ErrorProneChecksDefaultDisabled, " ")
errorProneVar("ErrorProneChecksWarning", &ErrorProneChecksWarning) errorProneVar("ErrorProneChecksOff", &ErrorProneChecksOff, " ")
errorProneVar("ErrorProneChecksDefaultDisabled", &ErrorProneChecksDefaultDisabled) errorProneVar("ErrorProneFlags", &ErrorProneFlags, " ")
errorProneVar("ErrorProneFlags", &ErrorProneFlags) pctx.StaticVariable("ErrorProneChecks", strings.Join([]string{
"${ErrorProneChecksOff}",
pctx.StaticVariable("ErrorProneCmd", "${ErrorProneChecksError}",
"${JavaCmd} -Xmx${JavacHeapSize} -Xbootclasspath/p:${ErrorProneJavacJar} "+ "${ErrorProneChecksWarning}",
"-cp ${ErrorProneJar}:${ErrorProneClasspath} "+ "${ErrorProneChecksDefaultDisabled}",
"${ErrorProneFlags} ${CommonJdkFlags} "+ }, " "))
"${ErrorProneChecksError} ${ErrorProneChecksWarning} ${ErrorProneChecksDefaultDisabled}")
} }

View File

@@ -52,13 +52,14 @@ func makeVarsProvider(ctx android.MakeVarsContext) {
ctx.Strict("TURBINE", "${TurbineJar}") ctx.Strict("TURBINE", "${TurbineJar}")
if ctx.Config().IsEnvTrue("RUN_ERROR_PRONE") { if ctx.Config().RunErrorProne() {
ctx.Strict("TARGET_JAVAC", "${ErrorProneCmd}") ctx.Strict("ERROR_PRONE_JARS", strings.Join(ErrorProneClasspath, " "))
ctx.Strict("HOST_JAVAC", "${ErrorProneCmd}") ctx.Strict("ERROR_PRONE_FLAGS", "${ErrorProneFlags}")
} else { ctx.Strict("ERROR_PRONE_CHECKS", "${ErrorProneChecks}")
}
ctx.Strict("TARGET_JAVAC", "${JavacCmd} ${CommonJdkFlags}") ctx.Strict("TARGET_JAVAC", "${JavacCmd} ${CommonJdkFlags}")
ctx.Strict("HOST_JAVAC", "${JavacCmd} ${CommonJdkFlags}") ctx.Strict("HOST_JAVAC", "${JavacCmd} ${CommonJdkFlags}")
}
if ctx.Config().UseOpenJDK9() { if ctx.Config().UseOpenJDK9() {
ctx.Strict("JLINK", "${JlinkCmd}") ctx.Strict("JLINK", "${JlinkCmd}")

View File

@@ -843,8 +843,20 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB
flags.javacFlags = "$javacFlags" flags.javacFlags = "$javacFlags"
} }
if len(j.properties.Errorprone.Javacflags) > 0 { if ctx.Config().RunErrorProne() {
flags.errorProneExtraJavacFlags = strings.Join(j.properties.Errorprone.Javacflags, " ") if config.ErrorProneClasspath == nil {
ctx.ModuleErrorf("cannot build with Error Prone, missing external/error_prone?")
}
errorProneFlags := []string{
"-Xplugin:ErrorProne",
"${config.ErrorProneChecks}",
}
errorProneFlags = append(errorProneFlags, j.properties.Errorprone.Javacflags...)
flags.errorProneExtraJavacFlags = "${config.ErrorProneFlags} " +
"'" + strings.Join(errorProneFlags, " ") + "'"
flags.errorProneProcessorPath = classpath(android.PathsForSource(ctx, config.ErrorProneClasspath))
} }
// javaVersion flag. // javaVersion flag.
@@ -994,7 +1006,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path
} }
if len(uniqueSrcFiles) > 0 || len(srcJars) > 0 { if len(uniqueSrcFiles) > 0 || len(srcJars) > 0 {
var extraJarDeps android.Paths var extraJarDeps android.Paths
if ctx.Config().IsEnvTrue("RUN_ERROR_PRONE") { if ctx.Config().RunErrorProne() {
// If error-prone is enabled, add an additional rule to compile the java files into // If error-prone is enabled, add an additional rule to compile the java files into
// a separate set of classes (so that they don't overwrite the normal ones and require // a separate set of classes (so that they don't overwrite the normal ones and require
// a rebuild when error-prone is turned off). // a rebuild when error-prone is turned off).

View File

@@ -165,15 +165,7 @@ func NewConfig(ctx Context, args ...string) Config {
return override return override
} }
v, ok := ret.environ.Get("EXPERIMENTAL_USE_OPENJDK9") v, ok := ret.environ.Get("EXPERIMENTAL_USE_OPENJDK9")
if !ok { if !ok || v != "false" {
v2, ok2 := ret.environ.Get("RUN_ERROR_PRONE")
if ok2 && (v2 == "true") {
v = "false"
} else {
v = "1.8"
}
}
if v != "false" {
return java9Home return java9Home
} }
return java8Home return java8Home