diff options
author | Laurent Le Brun <laurentlb@google.com> | 2015-04-01 12:48:27 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@google.com> | 2015-04-01 15:36:36 +0000 |
commit | aef370e27ca1cdfac6b89ecd7f91c5a097cb1e1d (patch) | |
tree | 607995687b9d515d39d52c69f1ed3b80c7c023cb /src/main/java/com | |
parent | d52d32ef0ecfc0d784ec2fd0f1b4dcbbc03aa389 (diff) |
Skylark: Make ctx.attr.<attr_name> return Targets instead of Labels.
Careful, this is a breaking change.
To get the Label value as before, use ctx.attr.<labelattr>.label.
The goal is to remove ctx.targets and simplify access to label attributes.
--
MOS_MIGRATED_REVID=90056829
Diffstat (limited to 'src/main/java/com')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java index b4af0191db..1b3ee1d140 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java @@ -184,7 +184,7 @@ public final class SkylarkRuleContext { artifactLabelMap = artifactLabelMapBuilder.build(); outputsObject = new SkylarkClassObject(outputsBuilder, "No such output '%s'"); - ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>(); + ImmutableMap.Builder<String, Object> attrBuilder = new ImmutableMap.Builder<>(); ImmutableMap.Builder<String, Object> executableBuilder = new ImmutableMap.Builder<>(); ImmutableMap.Builder<Artifact, FilesToRunProvider> executableRunfilesbuilder = new ImmutableMap.Builder<>(); @@ -195,10 +195,10 @@ public final class SkylarkRuleContext { for (Attribute a : ruleContext.getRule().getAttributes()) { Type<?> type = a.getType(); Object val = ruleContext.attributes().get(a.getName(), type); - builder.put(attributeToSkylark(a.getName()), val == null ? Environment.NONE - // Attribute values should be type safe - : SkylarkType.convertToSkylark(val, null)); if (type != Type.LABEL && type != Type.LABEL_LIST) { + attrBuilder.put(attributeToSkylark(a.getName()), val == null ? Environment.NONE + // Attribute values should be type safe + : SkylarkType.convertToSkylark(val, null)); continue; } String skyname = attributeToSkylark(a.getName()); @@ -224,18 +224,21 @@ public final class SkylarkRuleContext { } } filesBuilder.put(skyname, ruleContext.getPrerequisiteArtifacts(a.getName(), mode).list()); - targetsBuilder.put(skyname, SkylarkList.list( - ruleContext.getPrerequisites(a.getName(), mode), TransitiveInfoCollection.class)); + List<?> allPrereq = ruleContext.getPrerequisites(a.getName(), mode); + targetsBuilder.put(skyname, SkylarkList.list(allPrereq, TransitiveInfoCollection.class)); if (type == Type.LABEL) { Object prereq = ruleContext.getPrerequisite(a.getName(), mode); - if (prereq != null) { - targetBuilder.put(skyname, prereq); - } else { - targetBuilder.put(skyname, Environment.NONE); + if (prereq == null) { + prereq = Environment.NONE; } + targetBuilder.put(skyname, prereq); + attrBuilder.put(skyname, prereq); + } else { + // Type.LABEL_LIST + attrBuilder.put(skyname, SkylarkList.list(allPrereq, TransitiveInfoCollection.class)); } } - attrObject = new SkylarkClassObject(builder.build(), "No such attribute '%s'"); + attrObject = new SkylarkClassObject(attrBuilder.build(), "No such attribute '%s'"); executableObject = new SkylarkClassObject(executableBuilder.build(), "No such executable. " + "Make sure there is a '%s' label type attribute marked as 'executable'"); fileObject = new SkylarkClassObject(fileBuilder.build(), |