aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax
diff options
context:
space:
mode:
authorGravatar Laurent Le Brun <laurentlb@google.com>2015-09-04 15:01:19 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-09-04 16:32:24 +0000
commita2aa5871b7ceeb0e182946fd5d5208b479f2bfcb (patch)
tree51d2dc01a309c30c79e3be64f9cd0480caa359de /src/main/java/com/google/devtools/build/lib/syntax
parentd13207c8da178025d56df37a497092b3de971b3a (diff)
Skylark: Show list of fields in error message for struct objects.
-- MOS_MIGRATED_REVID=102341687
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java11
1 files changed, 8 insertions, 3 deletions
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 <a href=\"globals.html#struct\">struct</a> 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<String, Object> values;
private final Location creationLoc;
@@ -73,13 +75,13 @@ public interface ClassObject {
public SkylarkClassObject(Map<String, Object> values, String errorMessage) {
this.values = ImmutableMap.copyOf(values);
this.creationLoc = null;
- this.errorMessage = errorMessage;
+ this.errorMessage = Preconditions.checkNotNull(errorMessage);
}
public SkylarkClassObject(Map<String, Object> 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;
}
/**