diff options
author | Dmitry Lomov <dslomov@google.com> | 2015-12-23 15:50:20 +0000 |
---|---|---|
committer | Kristina Chodorow <kchodorow@google.com> | 2015-12-28 19:43:59 +0000 |
commit | bcaeb6430046aa4cdb5b7bf7c83d2e20d311334a (patch) | |
tree | 87970a4bc8c8dea0f6c29b020845dd32c19d1347 /src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java | |
parent | 3d776afc73370d667c271e20ca9c0d885b629fb7 (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.java | 22 |
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) |