aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Carmi Grushko <carmi@google.com>2015-11-12 17:14:05 +0000
committerGravatar Lukacs Berki <lberki@google.com>2015-11-13 10:20:00 +0000
commit5bf8e1373209afcd0a865d4d90e54bb586c5ffcf (patch)
tree14ef037d86e6eb203419ab5d458d3148627c0879 /src/main/java
parent0f7b11eb2634675dd5e742e4dcde9ed273237a4b (diff)
Refactor createExtraActionProvider to not require mandatoryStampFiles, which is required by rules but not aspects.
-- MOS_MIGRATED_REVID=107689641
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java21
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java4
4 files changed, 35 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java
index 55bb44d91b..e790b867f4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java
@@ -76,11 +76,22 @@ public final class ExtraActionArtifactsProvider implements TransitiveInfoProvide
}
}
+ public static ExtraActionArtifactsProvider create(ImmutableList<Artifact> extraActionArtifacts,
+ NestedSet<ExtraArtifactSet> transitiveExtraActionArtifacts) {
+ if (extraActionArtifacts.isEmpty() && transitiveExtraActionArtifacts.isEmpty()) {
+ return EMPTY;
+ }
+ return new ExtraActionArtifactsProvider(extraActionArtifacts, transitiveExtraActionArtifacts);
+ }
+
/** The outputs of the extra actions associated with this target. */
private final ImmutableList<Artifact> extraActionArtifacts;
private final NestedSet<ExtraArtifactSet> transitiveExtraActionArtifacts;;
- public ExtraActionArtifactsProvider(ImmutableList<Artifact> extraActionArtifacts,
+ /**
+ * Use {@link #create} instead.
+ */
+ private ExtraActionArtifactsProvider(ImmutableList<Artifact> extraActionArtifacts,
NestedSet<ExtraArtifactSet> transitiveExtraActionArtifacts) {
this.extraActionArtifacts = extraActionArtifacts;
this.transitiveExtraActionArtifacts = transitiveExtraActionArtifacts;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java
index f59281042c..520f40e0ba 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java
@@ -44,8 +44,7 @@ class ExtraActionUtils {
* bookkeeping.
*/
static ExtraActionArtifactsProvider createExtraActionProvider(
- Set<Action> actionsWithoutExtraAction, List<Artifact> mandatoryStampFiles,
- RuleContext ruleContext) {
+ Set<Action> actionsWithoutExtraAction, RuleContext ruleContext) {
BuildConfiguration configuration = ruleContext.getConfiguration();
if (configuration.isHostConfiguration()) {
return ExtraActionArtifactsProvider.EMPTY;
@@ -76,22 +75,12 @@ class ExtraActionUtils {
}
// Add extra action artifacts from dependencies
- for (TransitiveInfoCollection dep : ruleContext.getConfiguredTargetMap().values()) {
- ExtraActionArtifactsProvider provider =
- dep.getProvider(ExtraActionArtifactsProvider.class);
- if (provider != null) {
- builder.addTransitive(provider.getTransitiveExtraActionArtifacts());
- }
- }
-
- if (mandatoryStampFiles != null && !mandatoryStampFiles.isEmpty()) {
- builder.add(ExtraArtifactSet.of(ruleContext.getLabel(), mandatoryStampFiles));
+ for (ExtraActionArtifactsProvider provider : AnalysisUtils.getProviders(
+ ruleContext.getConfiguredTargetMap().values(), ExtraActionArtifactsProvider.class)) {
+ builder.addTransitive(provider.getTransitiveExtraActionArtifacts());
}
- if (extraActionArtifacts.isEmpty() && builder.isEmpty()) {
- return ExtraActionArtifactsProvider.EMPTY;
- }
- return new ExtraActionArtifactsProvider(extraActionArtifacts, builder.build());
+ return ExtraActionArtifactsProvider.create(extraActionArtifacts, builder.build());
}
/**
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 a5ed4b46a3..f1737be2a0 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
@@ -13,12 +13,15 @@
// limitations under the License.
package com.google.devtools.build.lib.analysis;
+import static com.google.devtools.build.lib.analysis.ExtraActionUtils.createExtraActionProvider;
+
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.analysis.ExtraActionArtifactsProvider.ExtraArtifactSet;
import com.google.devtools.build.lib.analysis.LicensesProvider.TargetLicense;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.constraints.ConstraintSemantics;
@@ -109,9 +112,17 @@ public final class RuleConfiguredTargetBuilder {
Preconditions.checkState(runfilesSupport != null);
add(TestProvider.class, initializeTestProvider(filesToRunProvider));
}
- add(ExtraActionArtifactsProvider.class, ExtraActionUtils.createExtraActionProvider(
- actionsWithoutExtraAction,
- mandatoryStampFiles, ruleContext));
+
+ ExtraActionArtifactsProvider extraActionsProvider =
+ createExtraActionProvider(actionsWithoutExtraAction, ruleContext);
+ if (mandatoryStampFiles != null && !mandatoryStampFiles.isEmpty()) {
+ extraActionsProvider = ExtraActionArtifactsProvider.create(
+ extraActionsProvider.getExtraActionArtifacts(),
+ NestedSetBuilder.fromNestedSet(extraActionsProvider.getTransitiveExtraActionArtifacts())
+ .add(ExtraArtifactSet.of(ruleContext.getLabel(), mandatoryStampFiles)).build());
+ }
+ add(ExtraActionArtifactsProvider.class, extraActionsProvider);
+
if (!outputGroupBuilders.isEmpty()) {
ImmutableMap.Builder<String, NestedSet<Artifact>> outputGroups = ImmutableMap.builder();
for (Map.Entry<String, NestedSetBuilder<Artifact>> entry : outputGroupBuilders.entrySet()) {
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java
index e75ae8b022..dbe1cd3208 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetBuilder.java
@@ -250,4 +250,8 @@ public final class NestedSetBuilder<E> {
public static <E> NestedSetBuilder<E> naiveLinkOrder() {
return new NestedSetBuilder<>(Order.NAIVE_LINK_ORDER);
}
+
+ public static <E> NestedSetBuilder<E> fromNestedSet(NestedSet<E> set) {
+ return new NestedSetBuilder<E>(set.getOrder()).addTransitive(set);
+ }
}