aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
diff options
context:
space:
mode:
authorGravatar Carmi Grushko <carmi@google.com>2015-11-17 01:54:45 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-11-17 10:53:19 +0000
commiteaaa9d0d76a880fc1df1ce818c92b526b2b282c2 (patch)
tree0b5baa17a4a47f0f3f0fc7b56ebb73a423dd95df /src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
parent6b283e212281ac194011c1245dbe0c559b32779a (diff)
Emit extra-actions for actions registered by Aspects.
A prerequisite is to pass RuleContext to ConfiguredAspect, so we can read from it the registered actions when we build() the aspect. -- MOS_MIGRATED_REVID=107997593
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
index 3ef5414323..b05609dd71 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
@@ -137,6 +137,10 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget {
SkylarkProviders mergedSkylarkProviders =
SkylarkProviders.merge(getAllProviders(base, aspects, SkylarkProviders.class));
+ // Merge extra-actions provider.
+ ExtraActionArtifactsProvider mergedExtraActionProviders = ExtraActionArtifactsProvider.merge(
+ getAllProviders(base, aspects, ExtraActionArtifactsProvider.class));
+
// Validate that all other providers are only provided once.
for (ConfiguredAspect configuredAspect : aspects) {
for (TransitiveInfoProvider aspectProvider : configuredAspect) {
@@ -147,6 +151,9 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget {
if (SkylarkProviders.class.equals(aClass)) {
continue;
}
+ if (ExtraActionArtifactsProvider.class.equals(aClass)) {
+ continue;
+ }
if (!providers.add(aClass)) {
throw new IllegalStateException("Provider " + aClass + " provided twice");
}
@@ -154,7 +161,8 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget {
}
if (base.getProvider(OutputGroupProvider.class) == mergedOutputGroupProvider
- && base.getProvider(SkylarkProviders.class) == mergedSkylarkProviders) {
+ && base.getProvider(SkylarkProviders.class) == mergedSkylarkProviders
+ && base.getProvider(ExtraActionArtifactsProvider.class) == mergedExtraActionProviders) {
this.providers = base.providers;
} else {
ImmutableMap.Builder<Class<? extends TransitiveInfoProvider>, Object> builder =
@@ -166,6 +174,9 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget {
if (SkylarkProviders.class.equals(aClass)) {
continue;
}
+ if (ExtraActionArtifactsProvider.class.equals(aClass)) {
+ continue;
+ }
builder.put(aClass, base.providers.get(aClass));
}
if (mergedOutputGroupProvider != null) {
@@ -174,6 +185,9 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget {
if (mergedSkylarkProviders != null) {
builder.put(SkylarkProviders.class, mergedSkylarkProviders);
}
+ if (mergedExtraActionProviders != null) {
+ builder.put(ExtraActionArtifactsProvider.class, mergedExtraActionProviders);
+ }
this.providers = builder.build();
}
this.mandatoryStampFiles = base.mandatoryStampFiles;