aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java3
5 files changed, 34 insertions, 15 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) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
index 7a36d4db27..8b093d5ef0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
@@ -932,8 +932,6 @@ public final class Runfiles {
if (runfilesSupport == null) {
return this;
}
- // TODO(bazel-team): We may be able to remove this now.
- addArtifact(runfilesSupport.getRunfilesMiddleman());
merge(runfilesSupport.getRunfiles());
return this;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java
index 344d41b9e8..22952e03b6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java
@@ -44,6 +44,7 @@ import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Te
import com.google.devtools.build.lib.analysis.test.ExecutionInfo;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.syntax.Type;
import java.util.ArrayList;
@@ -117,10 +118,13 @@ public class AndroidDevice implements RuleConfiguredTargetFactory {
.build();
RunfilesSupport runfilesSupport =
RunfilesSupport.withExecutable(ruleContext, runfiles, executable);
+ NestedSet<Artifact> extraFilesToRun =
+ NestedSetBuilder.create(Order.STABLE_ORDER, runfilesSupport.getRunfilesMiddleman());
return new RuleConfiguredTargetBuilder(ruleContext)
.setFilesToBuild(filesToBuild)
.addProvider(RunfilesProvider.class, RunfilesProvider.simple(runfiles))
.setRunfilesSupport(runfilesSupport, executable)
+ .addFilesToRun(extraFilesToRun)
.addNativeDeclaredProvider(new ExecutionInfo(executionInfo))
.addProvider(
DeviceBrokerTypeProvider.class, new DeviceBrokerTypeProvider(DEVICE_BROKER_TYPE))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
index 9c46ee398e..36de87c8af 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
@@ -37,6 +37,7 @@ import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.rules.android.AndroidLibraryAarProvider.Aar;
import com.google.devtools.build.lib.rules.java.ClasspathConfiguredFragment;
import com.google.devtools.build.lib.rules.java.DeployArchiveBuilder;
@@ -315,6 +316,9 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
builder.addOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL, oneVersionOutputArtifact);
}
+ NestedSet<Artifact> extraFilesToRun =
+ NestedSetBuilder.create(Order.STABLE_ORDER, runfilesSupport.getRunfilesMiddleman());
+
return builder
.setFilesToBuild(filesToBuild)
.addSkylarkTransitiveInfo(
@@ -327,6 +331,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
new Runfiles.Builder(ruleContext.getWorkspaceName())
.merge(runfilesSupport)
.build()))
+ .addFilesToRun(extraFilesToRun)
.setRunfilesSupport(runfilesSupport, executable)
.addProvider(
JavaRuntimeClasspathProvider.class,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
index 0672fe4942..b2e5a1deef 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
@@ -322,6 +322,7 @@ public class JavaBinary implements RuleConfiguredTargetFactory {
Runfiles defaultRunfiles = runfilesBuilder.build();
RunfilesSupport runfilesSupport = null;
+ NestedSetBuilder<Artifact> extraFilesToRunBuilder = NestedSetBuilder.stableOrder();
if (createExecutable) {
List<String> extraArgs =
new ArrayList<>(semantics.getExtraArguments(ruleContext, common.getSrcsArtifacts()));
@@ -348,6 +349,7 @@ public class JavaBinary implements RuleConfiguredTargetFactory {
runfilesSupport =
RunfilesSupport.withExecutable(
ruleContext, defaultRunfiles, executableForRunfiles, extraArgs);
+ extraFilesToRunBuilder.add(runfilesSupport.getRunfilesMiddleman());
}
RunfilesProvider runfilesProvider = RunfilesProvider.withData(
@@ -422,6 +424,7 @@ public class JavaBinary implements RuleConfiguredTargetFactory {
// shell script), on Windows they are different (the executable to run is a batch file, the
// executable for runfiles is the shell script).
.setRunfilesSupport(runfilesSupport, executableToRun)
+ .addFilesToRun(extraFilesToRunBuilder.build())
.add(
JavaRuntimeClasspathProvider.class,
new JavaRuntimeClasspathProvider(common.getRuntimeClasspath()))