Soong: support Errorprone javacflags
Add support for an errorprone block in Java modules that accepts
additional javacflags for the errorprone build.
Sample:
errorprone: {
javacflags: ["-Xep:EqualsNaN:WARN"],
},
Bug: 72004718
Test: m RUN_ERROR_PRONE=true
Test: manual - add block with ERROR to a project
Test: androidmk_test
Change-Id: I502248fe76c26aa19102f413af72a7324c35b7f4
diff --git a/androidmk/cmd/androidmk/android.go b/androidmk/cmd/androidmk/android.go
index 3e134b6..123f4a9 100644
--- a/androidmk/cmd/androidmk/android.go
+++ b/androidmk/cmd/androidmk/android.go
@@ -128,6 +128,7 @@
"LOCAL_JAVA_RESOURCE_DIRS": "java_resource_dirs",
"LOCAL_JAVACFLAGS": "javacflags",
+ "LOCAL_ERROR_PRONE_FLAGS": "errorprone.javacflags",
"LOCAL_DX_FLAGS": "dxflags",
"LOCAL_JAVA_LIBRARIES": "libs",
"LOCAL_STATIC_JAVA_LIBRARIES": "static_libs",
diff --git a/androidmk/cmd/androidmk/androidmk_test.go b/androidmk/cmd/androidmk/androidmk_test.go
index c85aaaa..3252791 100644
--- a/androidmk/cmd/androidmk/androidmk_test.go
+++ b/androidmk/cmd/androidmk/androidmk_test.go
@@ -474,6 +474,24 @@
}
`,
},
+ {
+ desc: "errorprone options for java library",
+ in: `
+ include $(CLEAR_VARS)
+ LOCAL_ERROR_PRONE_FLAGS := -Xep:AsyncCallableReturnsNull:ERROR -Xep:AsyncFunctionReturnsNull:ERROR
+ include $(BUILD_JAVA_LIBRARY)
+ `,
+ expected: `
+ java_library {
+ errorprone: {
+ javacflags: [
+ "-Xep:AsyncCallableReturnsNull:ERROR",
+ "-Xep:AsyncFunctionReturnsNull:ERROR",
+ ],
+ },
+ }
+ `,
+ },
}
func reformatBlueprint(input string) string {
diff --git a/java/builder.go b/java/builder.go
index bf826e1..7273290 100644
--- a/java/builder.go
+++ b/java/builder.go
@@ -155,6 +155,8 @@
aidlFlags string
javaVersion string
+ errorProneExtraJavacFlags string
+
kotlincFlags string
kotlincClasspath classpath
@@ -210,6 +212,14 @@
ctx.ModuleErrorf("cannot build with Error Prone, missing external/error_prone?")
}
+ if len(flags.errorProneExtraJavacFlags) > 0 {
+ if len(flags.javacFlags) > 0 {
+ flags.javacFlags = flags.errorProneExtraJavacFlags + " " + flags.javacFlags
+ } else {
+ flags.javacFlags = flags.errorProneExtraJavacFlags
+ }
+ }
+
transformJavaToClasses(ctx, outputFile, -1, srcFiles, srcJars, flags, nil,
"errorprone", "errorprone", errorprone)
}
diff --git a/java/java.go b/java/java.go
index 65e3b41..a6769e7 100644
--- a/java/java.go
+++ b/java/java.go
@@ -142,6 +142,11 @@
Exclude_filter []string
}
+ Errorprone struct {
+ // List of javac flags that should only be used when running errorprone.
+ Javacflags []string
+ }
+
Proto struct {
// List of extra options that will be passed to the proto generator.
Output_params []string
@@ -646,6 +651,10 @@
flags.javacFlags = "$javacFlags"
}
+ if len(j.properties.Errorprone.Javacflags) > 0 {
+ flags.errorProneExtraJavacFlags = strings.Join(j.properties.Errorprone.Javacflags, " ")
+ }
+
// javaVersion flag.
sdk := sdkStringToNumber(ctx, String(j.deviceProperties.Sdk_version))
if j.properties.Java_version != nil {