Skip to content

Commit a68d889

Browse files
Googlercopybara-github
Googler
authored andcommitted
Get databinding artifacts from Starlark prerequisite if the prerequisite does the Java compilation.
PiperOrigin-RevId: 370784802
1 parent f0f7b2f commit a68d889

File tree

4 files changed

+52
-16
lines changed

4 files changed

+52
-16
lines changed

src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java

+1
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@ private static RuleConfiguredTargetBuilder init(
320320
ruleContext.getConfiguration().isCodeCoverageEnabled(),
321321
/* collectJavaCompilationArgs= */ true,
322322
/* isBinary= */ true,
323+
shouldCompileJavaSrcs,
323324
excludedRuntimeArtifacts,
324325
/* generateExtensionRegistry= */ true);
325326
ruleContext.assertNoErrors();

src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java

+30-14
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import com.google.devtools.build.lib.packages.Type;
4949
import com.google.devtools.build.lib.rules.android.ZipFilterBuilder.CheckHashMismatchMode;
5050
import com.google.devtools.build.lib.rules.android.databinding.DataBindingContext;
51+
import com.google.devtools.build.lib.rules.android.databinding.DataBindingV2Provider;
5152
import com.google.devtools.build.lib.rules.cpp.CcInfo;
5253
import com.google.devtools.build.lib.rules.cpp.CcLinkingContext;
5354
import com.google.devtools.build.lib.rules.cpp.CcLinkingContext.LinkOptions;
@@ -438,6 +439,7 @@ public JavaTargetAttributes init(
438439
boolean addCoverageSupport,
439440
boolean collectJavaCompilationArgs,
440441
boolean isBinary,
442+
boolean shouldCompileJavaSrcs,
441443
NestedSet<Artifact> excludedRuntimeArtifacts,
442444
boolean generateExtensionRegistry)
443445
throws InterruptedException, RuleErrorException {
@@ -462,22 +464,26 @@ public JavaTargetAttributes init(
462464
ImmutableList.Builder<String> javacopts = ImmutableList.builder();
463465
javacopts.addAll(androidSemantics.getCompatibleJavacOptions(ruleContext));
464466

465-
resourceApk
466-
.asDataBindingContext()
467-
.supplyJavaCoptsUsing(ruleContext, isBinary, javacopts::addAll);
467+
if (shouldCompileJavaSrcs) {
468+
resourceApk
469+
.asDataBindingContext()
470+
.supplyJavaCoptsUsing(ruleContext, isBinary, javacopts::addAll);
471+
}
468472
JavaTargetAttributes.Builder attributesBuilder =
469473
javaCommon
470474
.initCommon(idlHelper.getIdlGeneratedJavaSources(), javacopts.build())
471475
.setBootClassPath(bootClassPathInfo);
472476

473-
resourceApk
474-
.asDataBindingContext()
475-
.supplyAnnotationProcessor(
476-
ruleContext,
477-
(plugin, additionalOutputs) -> {
478-
attributesBuilder.addPlugin(plugin);
479-
attributesBuilder.addAdditionalOutputs(additionalOutputs);
480-
});
477+
if (shouldCompileJavaSrcs) {
478+
resourceApk
479+
.asDataBindingContext()
480+
.supplyAnnotationProcessor(
481+
ruleContext,
482+
(plugin, additionalOutputs) -> {
483+
attributesBuilder.addPlugin(plugin);
484+
attributesBuilder.addAdditionalOutputs(additionalOutputs);
485+
});
486+
}
481487

482488
if (excludedRuntimeArtifacts != null) {
483489
attributesBuilder.addExcludedArtifacts(excludedRuntimeArtifacts);
@@ -505,9 +511,19 @@ public JavaTargetAttributes init(
505511
jarsProducedForRuntime.add(resourceApk.getResourceJavaClassJar());
506512
}
507513

508-
// Databinding metadata that the databinding annotation processor reads.
509-
ImmutableList<Artifact> additionalJavaInputsFromDatabinding =
510-
resourceApk.asDataBindingContext().processDeps(ruleContext, isBinary);
514+
ImmutableList<Artifact> additionalJavaInputsFromDatabinding = null;
515+
if (shouldCompileJavaSrcs) {
516+
// Databinding metadata that the databinding annotation processor reads.
517+
additionalJavaInputsFromDatabinding =
518+
resourceApk.asDataBindingContext().processDeps(ruleContext, isBinary);
519+
} else {
520+
ImmutableList.Builder<Artifact> outputs = ImmutableList.<Artifact>builder();
521+
DataBindingV2Provider p =
522+
ruleContext.getPrerequisite("application_resources", DataBindingV2Provider.PROVIDER);
523+
outputs.addAll(p.getSetterStores());
524+
outputs.addAll(p.getTransitiveBRFiles().toList());
525+
additionalJavaInputsFromDatabinding = outputs.build();
526+
}
511527

512528
JavaCompilationHelper helper =
513529
initAttributes(attributesBuilder, javaSemantics, additionalJavaInputsFromDatabinding);

src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java

+1
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ public ConfiguredTarget create(RuleContext ruleContext)
203203
/* addCoverageSupport= */ false,
204204
/* collectJavaCompilationArgs= */ true,
205205
/* isBinary= */ false,
206+
/* shouldCompileJavaSrcs= */ true,
206207
/* excludedRuntimeArtifacts= */ null,
207208
/* generateExtensionRegistry= */ false);
208209
if (javaTargetAttributes == null) {

src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Context.java

+20-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
2929
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
3030
import com.google.devtools.build.lib.packages.BuildType;
31+
import com.google.devtools.build.lib.rules.android.AndroidApplicationResourceInfo;
3132
import com.google.devtools.build.lib.rules.android.AndroidCommon;
3233
import com.google.devtools.build.lib.rules.android.AndroidDataBindingProcessorBuilder;
3334
import com.google.devtools.build.lib.rules.android.AndroidDataContext;
@@ -334,7 +335,14 @@ private static List<Artifact> getDirectClassInfo(RuleContext context) {
334335

335336
@Override
336337
public void addProvider(RuleConfiguredTargetBuilder builder, RuleContext ruleContext) {
337-
338+
if (shouldGetDatabindingArtifactsFromApplicationResources(ruleContext)) {
339+
DataBindingV2Provider p =
340+
ruleContext.getPrerequisite("application_resources", DataBindingV2Provider.PROVIDER);
341+
if (p != null) {
342+
builder.addNativeDeclaredProvider(p);
343+
return;
344+
}
345+
}
338346
Artifact setterStoreFile =
339347
DataBinding.getMetadataOutput(ruleContext, useUpdatedArgs, setterStoreName);
340348

@@ -395,7 +403,7 @@ public boolean usesAndroidX() {
395403
return useAndroidX;
396404
}
397405

398-
private static Artifact getClassInfoFile(ActionConstructionContext context) {
406+
private static Artifact getClassInfoFile(RuleContext context) {
399407
return context.getUniqueDirectoryArtifact("databinding", "class-info.zip");
400408
}
401409

@@ -405,4 +413,14 @@ private Artifact getLayoutInfoFile() {
405413
}
406414
return injectedLayoutInfoZip;
407415
}
416+
417+
private static boolean shouldGetDatabindingArtifactsFromApplicationResources(
418+
RuleContext context) {
419+
if (!context.attributes().isAttributeValueExplicitlySpecified("application_resources")) {
420+
return false;
421+
}
422+
AndroidApplicationResourceInfo androidApplicationResourceInfo =
423+
context.getPrerequisite("application_resources", AndroidApplicationResourceInfo.PROVIDER);
424+
return !androidApplicationResourceInfo.shouldCompileJavaSrcs();
425+
}
408426
}

0 commit comments

Comments
 (0)