From eaaa9d0d76a880fc1df1ce818c92b526b2b282c2 Mon Sep 17 00:00:00 2001 From: Carmi Grushko Date: Tue, 17 Nov 2015 01:54:45 +0000 Subject: 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 --- .../build/lib/analysis/RuleConfiguredTarget.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java') 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, 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; -- cgit v1.2.3