aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Carmi Grushko <carmi@google.com>2016-01-21 20:05:42 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-01-22 15:53:32 +0000
commit4076e443cce29400554fbc758850c5cb3d8ed419 (patch)
tree0e1ecdad449dccd9cb858d2633dcac13608107b6 /src/main/java/com/google/devtools/build/lib
parent49978055a2ecca23df5fed892fc529e235ae9f07 (diff)
Allow filtering out some extra-actions related to Java proto compilation.
-- MOS_MIGRATED_REVID=112709717
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ExtraActionUtils.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java18
4 files changed, 43 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
index fc2df624e9..f438c99204 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
@@ -18,7 +18,9 @@ import static com.google.devtools.build.lib.analysis.ExtraActionUtils.createExtr
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.UnmodifiableIterator;
+import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -165,7 +167,10 @@ public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider>
providers.put(SkylarkProviders.class, new SkylarkProviders(skylarkProvidersMap));
}
- addProvider(ExtraActionArtifactsProvider.class, createExtraActionProvider(ruleContext));
+ addProvider(
+ ExtraActionArtifactsProvider.class,
+ createExtraActionProvider(
+ ImmutableSet.<Action>of() /* actionsWithoutExtraAction */, ruleContext));
return new ConfiguredAspect(name, ImmutableMap.copyOf(providers));
}
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 5b888df605..1bda105f2f 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
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.rules.extra.ExtraActionMapProvider;
import com.google.devtools.build.lib.rules.extra.ExtraActionSpec;
import java.util.List;
+import java.util.Set;
/**
* A collection of static methods related to ExtraActions.
@@ -42,7 +43,8 @@ class ExtraActionUtils {
* extra_action are reported to the {@link AnalysisEnvironment} for
* bookkeeping.
*/
- static ExtraActionArtifactsProvider createExtraActionProvider(RuleContext ruleContext) {
+ static ExtraActionArtifactsProvider createExtraActionProvider(
+ Set<Action> actionsWithoutExtraAction, RuleContext ruleContext) {
BuildConfiguration configuration = ruleContext.getConfiguration();
if (configuration.isHostConfiguration()) {
return ExtraActionArtifactsProvider.EMPTY;
@@ -61,7 +63,9 @@ class ExtraActionUtils {
// thus the copy
for (Action action : ImmutableList.copyOf(
ruleContext.getAnalysisEnvironment().getRegisteredActions())) {
- visitor.addExtraAction(action);
+ if (!actionsWithoutExtraAction.contains(action)) {
+ visitor.addExtraAction(action);
+ }
}
extraActionArtifacts = visitor.getAndResetExtraArtifacts();
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 ea55ace7c3..25438ec2e1 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
@@ -17,6 +17,8 @@ import static com.google.devtools.build.lib.analysis.ExtraActionUtils.createExtr
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;
@@ -62,6 +64,7 @@ public final class RuleConfiguredTargetBuilder {
private RunfilesSupport runfilesSupport;
private Artifact executable;
private ImmutableList<Artifact> mandatoryStampFiles;
+ private ImmutableSet<Action> actionsWithoutExtraAction = ImmutableSet.of();
public RuleConfiguredTargetBuilder(RuleContext ruleContext) {
this.ruleContext = ruleContext;
@@ -111,7 +114,7 @@ public final class RuleConfiguredTargetBuilder {
}
ExtraActionArtifactsProvider extraActionsProvider =
- createExtraActionProvider(ruleContext);
+ createExtraActionProvider(actionsWithoutExtraAction, ruleContext);
if (mandatoryStampFiles != null && !mandatoryStampFiles.isEmpty()) {
extraActionsProvider = ExtraActionArtifactsProvider.create(
extraActionsProvider.getExtraActionArtifacts(),
@@ -333,4 +336,13 @@ public final class RuleConfiguredTargetBuilder {
this.mandatoryStampFiles = files;
return this;
}
+
+
+ /**
+ * Set the extra action pseudo actions.
+ */
+ public RuleConfiguredTargetBuilder setActionsWithoutExtraAction(ImmutableSet<Action> actions) {
+ this.actionsWithoutExtraAction = actions;
+ return this;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java
index a8eb823ade..86a16be99b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java
@@ -40,6 +40,14 @@ public class ProtoConfiguration extends Fragment {
category = "flags",
help = "Additional options to pass to the protobuf compiler.")
public List<String> protocOpts;
+
+ @Option(
+ name = "experimental_proto_extra_actions",
+ defaultValue = "false",
+ category = "experimental",
+ help = "Run extra actions for alternative Java api versions in a proto_library."
+ )
+ public boolean experimentalProtoExtraActions;
}
/**
@@ -72,4 +80,14 @@ public class ProtoConfiguration extends Fragment {
public List<String> protocOpts() {
return options.protocOpts;
}
+
+
+ /**
+ * Returns true if we will run extra actions for actions that are not run by default. If this
+ * is enabled, e.g. all extra_actions for alternative api-versions or language-flavours of a
+ * proto_library target are run.
+ */
+ public boolean runExperimentalProtoExtraActions() {
+ return options.experimentalProtoExtraActions;
+ }
}