aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-01-31 11:00:11 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-31 11:01:53 -0800
commitaaab11fcf4eacfc17900daf11f35703fbef13194 (patch)
tree0199225322a1c20bc6e081307f8adc54a927ee12 /src/main/java/com/google/devtools/build/lib/syntax
parent327b911f7830bbad5c51d57a86daebcb371250d8 (diff)
Fix string_list_dict values to be skylark lists in all cases
RELNOTES: None. PiperOrigin-RevId: 184016150
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java11
3 files changed, 13 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
index 3b693991f8..88be43be0d 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
@@ -70,8 +70,8 @@ public final class EvalUtils {
@Override
@SuppressWarnings("unchecked")
public int compare(Object o1, Object o2) {
- o1 = SkylarkType.convertToSkylark(o1, /*env=*/ null);
- o2 = SkylarkType.convertToSkylark(o2, /*env=*/ null);
+ o1 = SkylarkType.convertToSkylark(o1, (Environment) null);
+ o2 = SkylarkType.convertToSkylark(o2, (Environment) null);
if (o1 instanceof SkylarkList
&& o2 instanceof SkylarkList
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java
index 6d9eff5dcd..fc9da3a177 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java
@@ -119,9 +119,10 @@ public final class SkylarkDict<K, V> extends MutableMap<K, V>
}
/** Puts all entries of the given map into the dict, without calling {@link #checkMutable}. */
+ @SuppressWarnings("unchecked")
private <KK extends K, VV extends V> SkylarkDict<K, V> putAllUnsafe(Map<KK, VV> m) {
for (Map.Entry<KK, VV> e : m.entrySet()) {
- contents.put(e.getKey(), e.getValue());
+ contents.put(e.getKey(), (VV) SkylarkType.convertToSkylark(e.getValue(), mutability));
}
return this;
}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java
index d452b7d896..303cb50d1c 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java
@@ -726,14 +726,21 @@ public abstract class SkylarkType implements Serializable {
* Converts an object to a Skylark-compatible type if possible.
*/
public static Object convertToSkylark(Object object, @Nullable Environment env) {
+ return convertToSkylark(object, env == null ? null : env.mutability());
+ }
+
+ /**
+ * Converts an object to a Skylark-compatible type if possible.
+ */
+ public static Object convertToSkylark(Object object, @Nullable Mutability mutability) {
if (object instanceof List && !(object instanceof SkylarkList)) {
- return MutableList.copyOf(env, (List<?>) object);
+ return MutableList.copyOf(mutability, (List<?>) object);
}
if (object instanceof SkylarkValue) {
return object;
}
if (object instanceof Map) {
- return SkylarkDict.<Object, Object>copyOf(env, (Map<?, ?>) object);
+ return SkylarkDict.<Object, Object>copyOf(mutability, (Map<?, ?>) object);
}
// TODO(bazel-team): ensure everything is a SkylarkValue at all times.
// Preconditions.checkArgument(EvalUtils.isSkylarkAcceptable(