diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java index edeee584dd..cc5c0d3fb8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java @@ -44,6 +44,7 @@ import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.packages.TriState; +import com.google.devtools.build.lib.rules.android.DataBinding.DataBindingContext; import com.google.devtools.build.lib.rules.android.ZipFilterBuilder.CheckHashMismatchMode; import com.google.devtools.build.lib.rules.cpp.AbstractCcLinkParamsStore; import com.google.devtools.build.lib.rules.cpp.CcLinkParams; @@ -483,16 +484,23 @@ public class AndroidCommon { } ImmutableList.Builder<String> javacopts = ImmutableList.builder(); javacopts.addAll(androidSemantics.getCompatibleJavacOptions(ruleContext)); - if (DataBinding.isEnabled(ruleContext)) { - javacopts.addAll(DataBinding.getJavacOpts(ruleContext, isBinary)); - } + + resourceApk + .asDataBindingContext() + .supplyJavaCoptsUsing(ruleContext, isBinary, javacopts::addAll); JavaTargetAttributes.Builder attributes = javaCommon .initCommon(idlHelper.getIdlGeneratedJavaSources(), javacopts.build()) .setBootClassPath(bootclasspath); - if (DataBinding.isEnabled(ruleContext)) { - DataBinding.addAnnotationProcessor(ruleContext, attributes); - } + + resourceApk + .asDataBindingContext() + .supplyAnnotationProcessor( + ruleContext, + (plugin, additionalOutputs) -> { + attributes.addPlugin(plugin); + attributes.addAdditionalOutputs(additionalOutputs); + }); if (excludedRuntimeArtifacts != null) { attributes.addExcludedArtifacts(excludedRuntimeArtifacts); @@ -514,7 +522,9 @@ public class AndroidCommon { jarsProducedForRuntime.add(resourceApk.getResourceJavaClassJar()); } - JavaCompilationHelper helper = initAttributes(attributes, javaSemantics); + JavaCompilationHelper helper = + initAttributes( + attributes, javaSemantics, resourceApk.asDataBindingContext().processDeps(ruleContext)); if (ruleContext.hasErrors()) { return null; } @@ -545,15 +555,16 @@ public class AndroidCommon { } private JavaCompilationHelper initAttributes( - JavaTargetAttributes.Builder attributes, JavaSemantics semantics) { - boolean useDataBinding = DataBinding.isEnabled(ruleContext); + JavaTargetAttributes.Builder attributes, + JavaSemantics semantics, + ImmutableList<Artifact> additionalArtifacts) { JavaCompilationHelper helper = new JavaCompilationHelper( ruleContext, semantics, javaCommon.getJavacOpts(), attributes, - useDataBinding ? DataBinding.processDeps(ruleContext) : ImmutableList.<Artifact>of(), + additionalArtifacts, /*disableStrictDeps=*/ false); helper.addLibrariesToAttributes(javaCommon.targetsTreatedAsDeps(ClasspathType.COMPILE_ONLY)); @@ -845,25 +856,14 @@ public class AndroidCommon { * <p>No rule needs <i>any</i> support if data binding is disabled. */ static JavaCommon createJavaCommonWithAndroidDataBinding( - RuleContext ruleContext, JavaSemantics semantics, boolean isLibrary) { - boolean useDataBinding = DataBinding.isEnabled(ruleContext); - + RuleContext ruleContext, + JavaSemantics semantics, + DataBindingContext dataBindingContext, + boolean isLibrary) { ImmutableList<Artifact> srcs = - ruleContext.getPrerequisiteArtifacts("srcs", RuleConfiguredTarget.Mode.TARGET).list(); - if (useDataBinding) { - // Add this rule's annotation processor input. If the rule doesn't have direct resources, - // there's no direct data binding info, so there's strictly no need for annotation processing. - // But it's still important to process the deps' .bin files so any Java class references get - // re-referenced so they don't get filtered out of the compilation classpath by JavaBuilder - // (which filters out classpath .jars that "aren't used": see --reduce_classpath). If data - // binding didn't reprocess a library's data binding expressions redundantly up the dependency - // chain (meaning each depender processes them again as if they were its own), this problem - // wouldn't happen. - Artifact annotationFile = DataBinding.createAnnotationFile(ruleContext); - if (annotationFile != null) { - srcs = ImmutableList.<Artifact>builder().addAll(srcs).add(annotationFile).build(); - } - } + dataBindingContext.addAnnotationFileToSrcs( + ruleContext.getPrerequisiteArtifacts("srcs", RuleConfiguredTarget.Mode.TARGET).list(), + ruleContext); ImmutableList<TransitiveInfoCollection> compileDeps; ImmutableList<TransitiveInfoCollection> runtimeDeps; |