From a2aa5871b7ceeb0e182946fd5d5208b479f2bfcb Mon Sep 17 00:00:00 2001 From: Laurent Le Brun Date: Fri, 4 Sep 2015 15:01:19 +0000 Subject: Skylark: Show list of fields in error message for struct objects. -- MOS_MIGRATED_REVID=102341687 --- .../com/google/devtools/build/lib/syntax/ClassObject.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/syntax') diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java b/src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java index 2d477667d5..2d5cee7cb5 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java @@ -61,6 +61,8 @@ public interface ClassObject { + "See the global struct function " + "for more details.") public class SkylarkClassObject implements ClassObject { + /** Error message to use when errorMessage argument is null. */ + private static final String DEFAULT_ERROR_MESSAGE = "'struct' object has no attribute '%s'"; private final ImmutableMap values; private final Location creationLoc; @@ -73,13 +75,13 @@ public interface ClassObject { public SkylarkClassObject(Map values, String errorMessage) { this.values = ImmutableMap.copyOf(values); this.creationLoc = null; - this.errorMessage = errorMessage; + this.errorMessage = Preconditions.checkNotNull(errorMessage); } public SkylarkClassObject(Map values, Location creationLoc) { this.values = ImmutableMap.copyOf(values); this.creationLoc = Preconditions.checkNotNull(creationLoc); - this.errorMessage = null; + this.errorMessage = DEFAULT_ERROR_MESSAGE; } @Override @@ -110,7 +112,10 @@ public interface ClassObject { @Override public String errorMessage(String name) { - return errorMessage != null ? String.format(errorMessage, name) : null; + String suffix = + "Available attributes: " + + Joiner.on(", ").join(Ordering.natural().sortedCopy(values.keySet())); + return String.format(errorMessage, name) + "\n" + suffix; } /** -- cgit v1.2.3