diff options
author | 2016-11-18 15:14:56 +0000 | |
---|---|---|
committer | 2016-11-21 19:34:38 +0000 | |
commit | 8f45b7c71394f07227e507fddf736bcf6d5b0097 (patch) | |
tree | 80b4eccd7033f63b0aa50bd735437305a1fcd1d3 /src/main/java/com/google/devtools/build/lib/rules | |
parent | bd9576a7b092114b02118c2d08c2d6ef60806858 (diff) |
Implement 'output_groups' provider.
This behavior - that 'output_groups' is a provider available
on targets and aspects - has been accidental, but people already depend
on it. This CL keeps that behavior, while fixing the bug that
two aspects could not both provide output groups.
--
MOS_MIGRATED_REVID=139578378
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetBuilder.java | 66 |
1 files changed, 36 insertions, 30 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetBuilder.java index 94c507787d..84f6a5f359 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetBuilder.java @@ -186,41 +186,47 @@ public final class SkylarkRuleConfiguredTargetBuilder { for (String outputGroup : outputGroups.keySet()) { SkylarkValue objects = outputGroups.get(outputGroup); - NestedSet<Artifact> artifacts; + NestedSet<Artifact> artifacts = convertToOutputGroupValue(loc, outputGroup, objects); + builder.addOutputGroup(outputGroup, artifacts); + } + } - String typeErrorMessage = - "Output group '%s' is of unexpected type. " - + "Should be list or set of Files, but got '%s' instead."; + public static NestedSet<Artifact> convertToOutputGroupValue(Location loc, String outputGroup, + SkylarkValue objects) throws EvalException { + NestedSet<Artifact> artifacts; - if (objects instanceof SkylarkList) { - NestedSetBuilder<Artifact> nestedSetBuilder = NestedSetBuilder.stableOrder(); - for (Object o : (SkylarkList) objects) { - if (o instanceof Artifact) { - nestedSetBuilder.add((Artifact) o); - } else { - throw new EvalException( - loc, - String.format( - typeErrorMessage, - outputGroup, - "list with an element of " + EvalUtils.getDataTypeNameFromClass(o.getClass()))); - } + String typeErrorMessage = + "Output group '%s' is of unexpected type. " + + "Should be list or set of Files, but got '%s' instead."; + + if (objects instanceof SkylarkList) { + NestedSetBuilder<Artifact> nestedSetBuilder = NestedSetBuilder.stableOrder(); + for (Object o : (SkylarkList) objects) { + if (o instanceof Artifact) { + nestedSetBuilder.add((Artifact) o); + } else { + throw new EvalException( + loc, + String.format( + typeErrorMessage, + outputGroup, + "list with an element of " + EvalUtils.getDataTypeNameFromClass(o.getClass()))); } - artifacts = nestedSetBuilder.build(); - } else { - artifacts = - SkylarkType.cast( - objects, - SkylarkNestedSet.class, - Artifact.class, - loc, - typeErrorMessage, - outputGroup, - EvalUtils.getDataTypeName(objects, true)) - .getSet(Artifact.class); } - builder.addOutputGroup(outputGroup, artifacts); + artifacts = nestedSetBuilder.build(); + } else { + artifacts = + SkylarkType.cast( + objects, + SkylarkNestedSet.class, + Artifact.class, + loc, + typeErrorMessage, + outputGroup, + EvalUtils.getDataTypeName(objects, true)) + .getSet(Artifact.class); } + return artifacts; } private static ConfiguredTarget addStructFieldsAndBuild( |