diff options
author | Carmi Grushko <carmi@google.com> | 2016-01-21 20:05:42 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2016-01-22 15:53:32 +0000 |
commit | 4076e443cce29400554fbc758850c5cb3d8ed419 (patch) | |
tree | 0e1ecdad449dccd9cb858d2633dcac13608107b6 /src/main/java/com/google | |
parent | 49978055a2ecca23df5fed892fc529e235ae9f07 (diff) |
Allow filtering out some extra-actions related to Java proto compilation.
--
MOS_MIGRATED_REVID=112709717
Diffstat (limited to 'src/main/java/com/google')
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; + } } |