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.java13
1 files changed, 11 insertions, 2 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 359f4e4f18..69d821755c 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
@@ -75,17 +75,26 @@ public interface ClassObject {
* exactly one '%s' parameter to substitute the struct field name.
*/
public SkylarkClassObject(Map<String, Object> values, String errorMessage) {
- this.values = ImmutableMap.copyOf(values);
+ this.values = copyValues(values);
this.creationLoc = null;
this.errorMessage = Preconditions.checkNotNull(errorMessage);
}
public SkylarkClassObject(Map<String, Object> values, Location creationLoc) {
- this.values = ImmutableMap.copyOf(values);
+ this.values = copyValues(values);
this.creationLoc = Preconditions.checkNotNull(creationLoc);
this.errorMessage = DEFAULT_ERROR_MESSAGE;
}
+ // Ensure that values are all acceptable to Skylark before to stuff them in a ClassObject
+ private ImmutableMap<String, Object> copyValues(Map<String, Object> values) {
+ ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder();
+ for (Map.Entry<String, Object> e : values.entrySet()) {
+ builder.put(e.getKey(), SkylarkType.convertToSkylark(e.getValue(), null));
+ }
+ return builder.build();
+ }
+
@Override
public Object getValue(String name) {
return values.get(name);