diff options
author | 2016-09-05 09:44:48 +0000 | |
---|---|---|
committer | 2016-09-06 15:38:34 +0000 | |
commit | 5fd7da5b801a929c669b58322ce5f730b26818fd (patch) | |
tree | 77301bf5c9dc40e0f784f8dec902594de368bc3c /src/main/java/com/google/devtools/build/lib/syntax | |
parent | ab64e592fe5f5fb2e5dd2996b72c75416b2de721 (diff) |
Better API for creating immutable Skylark lists.
--
MOS_MIGRATED_REVID=132226460
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java | 6 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java | 18 |
2 files changed, 11 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java index 0df0aa4336..8706337739 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java @@ -623,7 +623,7 @@ public class MethodLibrary { }; @SkylarkSignature(name = "splitlines", objectType = StringModule.class, - returnType = MutableList.class, + returnType = SkylarkList.class, doc = "Splits the string at line boundaries ('\\n', '\\r\\n', '\\r') " + "and returns the result as a list.", @@ -633,7 +633,7 @@ public class MethodLibrary { doc = "Whether the line breaks should be included in the resulting list.")}) private static final BuiltinFunction splitLines = new BuiltinFunction("splitlines") { @SuppressWarnings("unused") - public MutableList<String> invoke(String self, Boolean keepEnds) throws EvalException { + public SkylarkList<String> invoke(String self, Boolean keepEnds) throws EvalException { List<String> result = new ArrayList<>(); Matcher matcher = SPLIT_LINES_PATTERN.matcher(self); while (matcher.find()) { @@ -649,7 +649,7 @@ public class MethodLibrary { result.add(line); } } - return new MutableList(result); + return SkylarkList.createImmutable(result); } }; diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java index 05cf33b176..de03e0ace5 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java @@ -210,6 +210,13 @@ public abstract class SkylarkList<E> extends MutableCollection<E> implements Lis return castList(getContentsUnsafe(), type, description); } + /** + * Creates immutable SkylarkList with given elements. + */ + public static <E> SkylarkList<E> createImmutable(Iterable<? extends E> contents) { + return new MutableList<E>(contents, Mutability.IMMUTABLE); + } + /** A class for mutable lists. */ @SkylarkModule( name = "list", @@ -280,15 +287,6 @@ public abstract class SkylarkList<E> extends MutableCollection<E> implements Lis } /** - * Creates a MutableList from contents. - * @param contents the contents of the list - * @return an actually immutable MutableList containing the elements - */ - public MutableList(Iterable<? extends E> contents) { - this(contents, Mutability.IMMUTABLE); - } - - /** * Creates a mutable or immutable MutableList depending on the given {@link Mutability}. */ public MutableList(Mutability mutability) { @@ -427,7 +425,7 @@ public abstract class SkylarkList<E> extends MutableCollection<E> implements Lis /** * An empty IMMUTABLE MutableList. */ - public static final MutableList EMPTY = new MutableList(Tuple.EMPTY); + public static final MutableList EMPTY = new MutableList(Tuple.EMPTY, Mutability.IMMUTABLE); } /** An immutable tuple, e.g. in (1, 2, 3) */ |