aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2015-12-23 15:50:20 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2015-12-28 19:43:59 +0000
commitbcaeb6430046aa4cdb5b7bf7c83d2e20d311334a (patch)
tree87970a4bc8c8dea0f6c29b020845dd32c19d1347 /src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java
parent3d776afc73370d667c271e20ca9c0d885b629fb7 (diff)
Allow Skylark rules and aspects to contribute to output groups.
-- MOS_MIGRATED_REVID=110840166
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java22
1 files changed, 22 insertions, 0 deletions
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 c2d489cf86..ee77e007e8 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
@@ -15,6 +15,7 @@ package com.google.devtools.build.lib.skyframe;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredAspect;
import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
@@ -30,6 +31,10 @@ import com.google.devtools.build.lib.syntax.Environment;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.EvalExceptionWithStackTrace;
import com.google.devtools.build.lib.syntax.Mutability;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.SkylarkType;
+
+import java.util.Map;
/**
* A factory for aspects that are defined in Skylark.
@@ -86,6 +91,9 @@ public class SkylarkAspectFactory implements ConfiguredAspectFactory {
SkylarkClassObject struct = (SkylarkClassObject) aspectSkylarkObject;
Location loc = struct.getCreationLoc();
for (String key : struct.getKeys()) {
+ if (key.equals("output_groups")) {
+ addOutputGroups(struct.getValue(key), loc, builder);
+ }
builder.addSkylarkTransitiveInfo(key, struct.getValue(key), loc);
}
ConfiguredAspect configuredAspect = builder.build();
@@ -100,6 +108,20 @@ public class SkylarkAspectFactory implements ConfiguredAspectFactory {
}
}
+ private static void addOutputGroups(Object value, Location loc,
+ ConfiguredAspect.Builder builder)
+ throws EvalException {
+ Map<String, SkylarkNestedSet> outputGroups = SkylarkType
+ .castMap(value, String.class, SkylarkNestedSet.class, "output_groups");
+
+ for (String outputGroup : outputGroups.keySet()) {
+ SkylarkNestedSet objects = outputGroups.get(outputGroup);
+ builder.addOutputGroup(outputGroup,
+ SkylarkType.cast(objects, SkylarkNestedSet.class, Artifact.class, loc,
+ "Output group '%s'", outputGroup).getSet(Artifact.class));
+ }
+ }
+
private void addAspectToStackTrace(ConfiguredTarget base, EvalException e) {
if (e instanceof EvalExceptionWithStackTrace) {
((EvalExceptionWithStackTrace) e)