aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
diff options
context:
space:
mode:
authorGravatar Benjamin Peterson <bp@benjamin.pe>2017-09-12 13:17:29 +0200
committerGravatar Philipp Wollermann <philwo@google.com>2017-09-12 14:09:06 +0200
commit8f499c94b250a6c92662a8b50b0761d3966c4894 (patch)
treeaaa48ef993f45ddd1b2acd0a8dcb5dbe916abe54 /src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
parent763d964b7428bbc16db7354332b5d43b93bbc9b0 (diff)
Merging a RunfilesSupport object into Runfiles.Builder no longer adds the runfiles middleman to the artifacts.
Runfiles.Builder.merge(RunfilesSupport) would add the runfiles middleman of the RunfilesSupport object being merged into the artifacts of the nascent Runfiles object. This effectively made the construction of one runfiles tree depend on that of another. Instead of putting the runfiles middleman into the runfiles artifacts, we can put it into the FilesToRunProvider, which should have the same effect. To facilitate this, RuleConfiguredTargetBuilder gains a addFilesToRun method. Note that not every caller of merge(RunfilesSupport) has to be modified because some were already adding the runfiles middleman to their FilesProvider (e.g., AndroidHostServiceFixture), which is a subset of FilesToRunProvider. This is split out from https://bazel-review.googlesource.com/c/14010 Change-Id: Icfca5262a32619e1e351477f3ff641350b6798dc PiperOrigin-RevId: 168358030
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
index 7522d099b5..9fafbe9dcc 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
@@ -64,6 +64,8 @@ public final class RuleConfiguredTargetBuilder {
/** These are supported by all configured targets and need to be specially handled. */
private NestedSet<Artifact> filesToBuild = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
+
+ private NestedSetBuilder<Artifact> filesToRunBuilder = NestedSetBuilder.stableOrder();
private RunfilesSupport runfilesSupport;
private Artifact executable;
private ImmutableSet<ActionAnalysisMetadata> actionsWithoutExtraAction = ImmutableSet.of();
@@ -85,8 +87,9 @@ public final class RuleConfiguredTargetBuilder {
return null;
}
- FilesToRunProvider filesToRunProvider = new FilesToRunProvider(
- getFilesToRun(runfilesSupport, filesToBuild), runfilesSupport, executable);
+ FilesToRunProvider filesToRunProvider =
+ new FilesToRunProvider(
+ buildFilesToRun(runfilesSupport, filesToBuild), runfilesSupport, executable);
addProvider(new FileProvider(filesToBuild));
addProvider(filesToRunProvider);
@@ -136,21 +139,18 @@ public final class RuleConfiguredTargetBuilder {
return new RuleConfiguredTarget(ruleContext, providers);
}
-
/**
- * Like getFilesToBuild(), except that it also includes the runfiles middleman, if any. Middlemen
- * are expanded in the SpawnStrategy or by the Distributor.
+ * Compute the artifacts to put into the {@link FilesToRunProvider} for this target. These are the
+ * filesToBuild, any artifacts added by the rule with {@link #addFilesToRun}, and the runfiles
+ * middleman if it exists.
*/
- private NestedSet<Artifact> getFilesToRun(
+ private NestedSet<Artifact> buildFilesToRun(
RunfilesSupport runfilesSupport, NestedSet<Artifact> filesToBuild) {
- if (runfilesSupport == null) {
- return filesToBuild;
- } else {
- NestedSetBuilder<Artifact> allFilesToBuild = NestedSetBuilder.stableOrder();
- allFilesToBuild.addTransitive(filesToBuild);
- allFilesToBuild.add(runfilesSupport.getRunfilesMiddleman());
- return allFilesToBuild.build();
+ filesToRunBuilder.addTransitive(filesToBuild);
+ if (runfilesSupport != null) {
+ filesToRunBuilder.add(runfilesSupport.getRunfilesMiddleman());
}
+ return filesToRunBuilder.build();
}
/**
@@ -209,6 +209,15 @@ public final class RuleConfiguredTargetBuilder {
return new TestProvider(testParams, testTags);
}
+ /**
+ * Add files required to run the target. Artifacts from {@link #setFilesToBuild} and the runfiles
+ * middleman, if any, are added automatically.
+ */
+ public RuleConfiguredTargetBuilder addFilesToRun(NestedSet<Artifact> files) {
+ filesToRunBuilder.addTransitive(files);
+ return this;
+ }
+
/** Add a specific provider. */
public <T extends TransitiveInfoProvider> RuleConfiguredTargetBuilder addProvider(
TransitiveInfoProvider provider) {