diff options
author | 2018-01-31 11:00:11 -0800 | |
---|---|---|
committer | 2018-01-31 11:01:53 -0800 | |
commit | aaab11fcf4eacfc17900daf11f35703fbef13194 (patch) | |
tree | 0199225322a1c20bc6e081307f8adc54a927ee12 /src/main/java/com/google/devtools/build/lib/syntax | |
parent | 327b911f7830bbad5c51d57a86daebcb371250d8 (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')
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( |