diff options
author | 2019-01-21 21:37:16 -0800 | |
---|---|---|
committer | 2019-01-23 20:17:51 +0000 | |
commit | be9cdb8d647b6f47fc427eca5e38092614171a4d (patch) | |
tree | f61e5566bc1327dd89c51b81c3b985f06dceb968 /java/java.go | |
parent | c4efd9cb55239a9cb71286781ef47371d4f391a9 (diff) |
Replace annotation_processors with plugins
Follow bazel's modules for annotation processors by introducing
a java_plugin module type that can contain extra metadata about
the annotation processor, the processor class and a flag to
specify if the annotation processor is compatible with the
turbine optimization. Deprecate the annotation_processors
property, which took a list of java_library_host modules, in
favor of the plugins property, which takes a list of java_plugin
modules. The annotation_processors property will be removed
once all uses have been replaced with plugins.
Bug: 77284273
Test: plugin_test.go
Test: m caliper
Change-Id: I37c1e80eba71ae2d6a06199fb102194a51994989
Diffstat (limited to 'java/java.go')
-rw-r--r-- | java/java.go | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/java/java.go b/java/java.go index e64b99eb3..7014668f4 100644 --- a/java/java.go +++ b/java/java.go @@ -114,11 +114,11 @@ type CompilerProperties struct { // If set to true, include sources used to compile the module in to the final jar Include_srcs *bool - // List of modules to use as annotation processors + // List of modules to use as annotation processors. Deprecated, use plugins instead. Annotation_processors []string - // List of classes to pass to javac to use as annotation processors - Annotation_processor_classes []string + // List of modules to use as annotation processors + Plugins []string // The number of Java source entries each Javac instance can process Javac_shard_size *int64 @@ -377,6 +377,7 @@ var ( staticLibTag = dependencyTag{name: "staticlib"} libTag = dependencyTag{name: "javalib"} annoTag = dependencyTag{name: "annotation processor"} + pluginTag = dependencyTag{name: "plugin"} bootClasspathTag = dependencyTag{name: "bootclasspath"} systemModulesTag = dependencyTag{name: "system modules"} frameworkResTag = dependencyTag{name: "framework-res"} @@ -474,6 +475,10 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) { {Mutator: "arch", Variation: ctx.Config().BuildOsCommonVariant}, }, annoTag, j.properties.Annotation_processors...) + ctx.AddFarVariationDependencies([]blueprint.Variation{ + {Mutator: "arch", Variation: ctx.Config().BuildOsCommonVariant}, + }, pluginTag, j.properties.Plugins...) + android.ExtractSourcesDeps(ctx, j.properties.Srcs) android.ExtractSourcesDeps(ctx, j.properties.Exclude_srcs) android.ExtractSourcesDeps(ctx, j.properties.Java_resources) @@ -563,6 +568,7 @@ type deps struct { classpath classpath bootClasspath classpath processorPath classpath + processorClasses []string staticJars android.Paths staticHeaderJars android.Paths staticResourceJars android.Paths @@ -573,6 +579,8 @@ type deps struct { aidlPreprocess android.OptionalPath kotlinStdlib android.Paths kotlinAnnotations android.Paths + + disableTurbine bool } func checkProducesJars(ctx android.ModuleContext, dep android.SourceFileProducer) { @@ -712,6 +720,16 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { j.exportedSdkLibs = append(j.exportedSdkLibs, dep.ExportedSdkLibs()...) case annoTag: deps.processorPath = append(deps.processorPath, dep.ImplementationAndResourcesJars()...) + case pluginTag: + if plugin, ok := dep.(*Plugin); ok { + deps.processorPath = append(deps.processorPath, dep.ImplementationAndResourcesJars()...) + if plugin.pluginProperties.Processor_class != nil { + deps.processorClasses = append(deps.processorClasses, *plugin.pluginProperties.Processor_class) + } + deps.disableTurbine = deps.disableTurbine || Bool(plugin.pluginProperties.Generates_api) + } else { + ctx.PropertyErrorf("plugins", "%q is not a java_plugin module", otherName) + } case frameworkResTag: if (ctx.ModuleName() == "framework") || (ctx.ModuleName() == "framework-annotation-proc") { // framework.jar has a one-off dependency on the R.java and Manifest.java files @@ -859,6 +877,8 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB flags.classpath = append(flags.classpath, deps.classpath...) flags.processorPath = append(flags.processorPath, deps.processorPath...) + flags.processor = strings.Join(deps.processorClasses, ",") + if len(flags.bootClasspath) == 0 && ctx.Host() && flags.javaVersion != "1.9" && !Bool(j.properties.No_standard_libs) && inList(flags.javaVersion, []string{"1.6", "1.7", "1.8"}) { @@ -1020,7 +1040,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path j.compiledSrcJars = srcJars enable_sharding := false - if ctx.Device() && !ctx.Config().IsEnvFalse("TURBINE_ENABLED") { + if ctx.Device() && !ctx.Config().IsEnvFalse("TURBINE_ENABLED") && !deps.disableTurbine { if j.properties.Javac_shard_size != nil && *(j.properties.Javac_shard_size) > 0 { enable_sharding = true // Formerly, there was a check here that prevented annotation processors |