aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/ClassObject.java')
-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;
}
/**