aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
diff options
context:
space:
mode:
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.java56
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;