aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
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
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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java2
9 files changed, 50 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
index 6a1fa38b43..fa134f23fb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
@@ -27,6 +27,7 @@ import static com.google.devtools.build.lib.syntax.Type.INTEGER;
import static com.google.devtools.build.lib.syntax.Type.STRING;
import static com.google.devtools.build.lib.syntax.Type.STRING_LIST;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.Constants;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -77,7 +78,8 @@ public class BaseRuleClasses {
/**
* Implementation for the :action_listener attribute.
*/
- private static final LateBoundLabelList<BuildConfiguration> ACTION_LISTENER =
+ @VisibleForTesting
+ static final LateBoundLabelList<BuildConfiguration> ACTION_LISTENER =
new LateBoundLabelList<BuildConfiguration>() {
@Override
public List<Label> getDefault(Rule rule, BuildConfiguration configuration) {
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 d5ef9e846b..8ffb94df89 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
@@ -14,10 +14,14 @@
package com.google.devtools.build.lib.analysis;
+import static com.google.devtools.build.lib.analysis.ExtraActionUtils.createExtraActionProvider;
+
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
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;
@@ -93,9 +97,11 @@ public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider>
private final ImmutableMap.Builder<String, Object> skylarkProviderBuilder =
ImmutableMap.builder();
private final String name;
+ private final RuleContext ruleContext;
- public Builder(String name) {
+ public Builder(String name, RuleContext ruleContext) {
this.name = name;
+ this.ruleContext = ruleContext;
}
/**
@@ -159,6 +165,10 @@ public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider>
providers.put(SkylarkProviders.class, new SkylarkProviders(skylarkProvidersMap));
}
+ addProvider(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/ExtraActionArtifactsProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java
index 8f2e1caad9..01b23d988f 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
@@ -78,6 +78,20 @@ public final class ExtraActionArtifactsProvider implements TransitiveInfoProvide
return new ExtraActionArtifactsProvider(extraActionArtifacts, transitiveExtraActionArtifacts);
}
+ public static ExtraActionArtifactsProvider merge(
+ Iterable<ExtraActionArtifactsProvider> providers) {
+ NestedSetBuilder<Artifact> artifacts = NestedSetBuilder.stableOrder();
+ NestedSetBuilder<ExtraArtifactSet> transitiveExtraActionArtifacts =
+ NestedSetBuilder.stableOrder();
+
+ for (ExtraActionArtifactsProvider provider : providers) {
+ artifacts.addTransitive(provider.getExtraActionArtifacts());
+ transitiveExtraActionArtifacts.addTransitive(provider.getTransitiveExtraActionArtifacts());
+ }
+ return ExtraActionArtifactsProvider.create(
+ artifacts.build(), transitiveExtraActionArtifacts.build());
+ }
+
/** The outputs of the extra actions associated with this target. */
private final NestedSet<Artifact> extraActionArtifacts;
private final NestedSet<ExtraArtifactSet> transitiveExtraActionArtifacts;
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;
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
index 5512a1993b..dc3d6f0f3b 100644
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
@@ -121,7 +121,7 @@ public class AndroidStudioInfoAspect implements ConfiguredNativeAspectFactory {
@Override
public ConfiguredAspect create(
ConfiguredTarget base, RuleContext ruleContext, AspectParameters parameters) {
- ConfiguredAspect.Builder builder = new Builder(NAME);
+ ConfiguredAspect.Builder builder = new Builder(NAME, ruleContext);
AndroidStudioInfoFilesProvider.Builder providerBuilder =
new AndroidStudioInfoFilesProvider.Builder();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java
index eb856708d9..b0a3e0d914 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java
@@ -49,7 +49,7 @@ public class AndroidNeverlinkAspect implements ConfiguredNativeAspectFactory {
ConfiguredTarget base, RuleContext ruleContext, AspectParameters parameters) {
if (!JavaCommon.getConstraints(ruleContext).contains("android")
&& !ruleContext.getRule().getRuleClass().startsWith("android_")) {
- return new ConfiguredAspect.Builder(NAME).build();
+ return new ConfiguredAspect.Builder(NAME, ruleContext).build();
}
List<TransitiveInfoCollection> deps = new ArrayList<>();
@@ -65,7 +65,7 @@ public class AndroidNeverlinkAspect implements ConfiguredNativeAspectFactory {
deps.addAll(ruleContext.getPrerequisites(attribute, Mode.TARGET));
}
- return new ConfiguredAspect.Builder(NAME)
+ return new ConfiguredAspect.Builder(NAME, ruleContext)
.addProvider(
AndroidNeverLinkLibrariesProvider.class,
new AndroidNeverLinkLibrariesProvider(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java
index 529bc4a29e..743c5442a4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AbstractJ2ObjcProtoAspect.java
@@ -78,7 +78,7 @@ public abstract class AbstractJ2ObjcProtoAspect implements ConfiguredNativeAspec
public ConfiguredAspect create(
ConfiguredTarget base, RuleContext ruleContext, AspectParameters parameters) {
if (!checkShouldCreateAspect(ruleContext)) {
- return new ConfiguredAspect.Builder(NAME).build();
+ return new ConfiguredAspect.Builder(NAME, ruleContext).build();
}
ProtoSourcesProvider protoSourcesProvider = base.getProvider(ProtoSourcesProvider.class);
@@ -110,7 +110,7 @@ public abstract class AbstractJ2ObjcProtoAspect implements ConfiguredNativeAspec
NestedSet<Artifact> j2ObjcTransitiveClassMappingFiles = j2ObjcTransitiveClassMappingFiles(
ruleContext, classMappingFiles);
- return new ConfiguredAspect.Builder(NAME)
+ return new ConfiguredAspect.Builder(NAME, ruleContext)
.addProvider(J2ObjcSrcsProvider.class, j2objcSrcsProvider)
.addProvider(
J2ObjcMappingFileProvider.class,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 5d28156446..ab1aa8a1db 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -92,7 +92,7 @@ public class J2ObjcAspect implements ConfiguredNativeAspectFactory {
@Override
public ConfiguredAspect create(
ConfiguredTarget base, RuleContext ruleContext, AspectParameters parameters) {
- ConfiguredAspect.Builder builder = new ConfiguredAspect.Builder(NAME);
+ ConfiguredAspect.Builder builder = new ConfiguredAspect.Builder(NAME, ruleContext);
JavaCompilationArgsProvider compilationArgsProvider =
base.getProvider(JavaCompilationArgsProvider.class);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java
index 707a8963f8..794d746f1e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java
@@ -80,7 +80,7 @@ public class SkylarkAspectFactory implements ConfiguredAspectFactory {
return null;
}
- ConfiguredAspect.Builder builder = new ConfiguredAspect.Builder(name);
+ ConfiguredAspect.Builder builder = new ConfiguredAspect.Builder(name, ruleContext);
SkylarkClassObject struct = (SkylarkClassObject) aspectSkylarkObject;
Location loc = struct.getCreationLoc();