Refactor errorprone support to reduce duplication
Use a helper function to set up errorprone and javac compiles.
Test: m -j checkbuild
Test: m -j RUN_ERROR_PRONE=true
Change-Id: Icef3a5e1b359487eea3c3306d3d5763dab912b38
diff --git a/java/builder.go b/java/builder.go
index ca0d2c5..118f239 100644
--- a/java/builder.go
+++ b/java/builder.go
@@ -137,36 +137,8 @@
func TransformJavaToClasses(ctx android.ModuleContext, srcFiles, srcFileLists android.Paths,
flags javaBuilderFlags, deps android.Paths) android.ModuleOutPath {
- classDir := android.PathForModuleOut(ctx, "classes")
- annoDir := android.PathForModuleOut(ctx, "anno")
- classJar := android.PathForModuleOut(ctx, "classes-compiled.jar")
-
- javacFlags := flags.javacFlags
- if len(srcFileLists) > 0 {
- javacFlags += " " + android.JoinWithPrefix(srcFileLists.Strings(), "@")
- }
-
- deps = append(deps, srcFileLists...)
- deps = append(deps, flags.bootClasspath...)
- deps = append(deps, flags.classpath...)
-
- ctx.ModuleBuild(pctx, android.ModuleBuildParams{
- Rule: javac,
- Description: "javac",
- Output: classJar,
- Inputs: srcFiles,
- Implicits: deps,
- Args: map[string]string{
- "javacFlags": javacFlags,
- "bootClasspath": flags.bootClasspath.JavaBootClasspath(ctx.Device()),
- "classpath": flags.classpath.JavaClasspath(),
- "outDir": classDir.String(),
- "annoDir": annoDir.String(),
- "javaVersion": flags.javaVersion,
- },
- })
-
- return classJar
+ return transformJavaToClasses(ctx, srcFiles, srcFileLists, flags, deps,
+ "classes-compiled.jar", "", "javac", javac)
}
func RunErrorProne(ctx android.ModuleContext, srcFiles, srcFileLists android.Paths,
@@ -177,38 +149,54 @@
return nil
}
- classDir := android.PathForModuleOut(ctx, "classes-errorprone")
- annoDir := android.PathForModuleOut(ctx, "anno-errorprone")
- classFileList := android.PathForModuleOut(ctx, "classes-errorprone.list")
+ return transformJavaToClasses(ctx, srcFiles, srcFileLists, flags, nil,
+ "classes-errorprone.list", "-errorprone", "errorprone", errorprone)
+}
+
+// transformJavaToClasses takes source files and converts them to a jar containing .class files.
+// srcFiles is a list of paths to sources, srcFileLists is a list of paths to files that contain
+// paths to sources. There is no dependency on the sources passed through srcFileLists, those
+// must be added through the deps argument, which contains a list of paths that should be added
+// as implicit dependencies. flags contains various command line flags to be passed to the
+// compiler.
+//
+// This method may be used for different compilers, including javac and Error Prone. The rule
+// argument specifies which command line to use and desc sets the description of the rule that will
+// be printed at build time. The stem argument provides the file name of the output jar, and
+// suffix will be appended to various intermediate files and directories to avoid collisions when
+// this function is called twice in the same module directory.
+func transformJavaToClasses(ctx android.ModuleContext, srcFiles, srcFileLists android.Paths,
+ flags javaBuilderFlags, deps android.Paths, stem, suffix, desc string,
+ rule blueprint.Rule) android.ModuleOutPath {
+
+ outputFile := android.PathForModuleOut(ctx, stem)
javacFlags := flags.javacFlags
if len(srcFileLists) > 0 {
javacFlags += " " + android.JoinWithPrefix(srcFileLists.Strings(), "@")
}
- var deps android.Paths
-
deps = append(deps, srcFileLists...)
deps = append(deps, flags.bootClasspath...)
deps = append(deps, flags.classpath...)
ctx.ModuleBuild(pctx, android.ModuleBuildParams{
- Rule: errorprone,
- Description: "errorprone",
- Output: classFileList,
+ Rule: rule,
+ Description: desc,
+ Output: outputFile,
Inputs: srcFiles,
Implicits: deps,
Args: map[string]string{
"javacFlags": javacFlags,
"bootClasspath": flags.bootClasspath.JavaBootClasspath(ctx.Device()),
"classpath": flags.classpath.JavaClasspath(),
- "outDir": classDir.String(),
- "annoDir": annoDir.String(),
+ "outDir": android.PathForModuleOut(ctx, "classes"+suffix).String(),
+ "annoDir": android.PathForModuleOut(ctx, "anno"+suffix).String(),
"javaVersion": flags.javaVersion,
},
})
- return classFileList
+ return outputFile
}
func TransformResourcesToJar(ctx android.ModuleContext, jarArgs []string,