aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax
diff options
context:
space:
mode:
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.java118
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/Type.java3
4 files changed, 71 insertions, 56 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 dbbb46ff47..43939049d3 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
@@ -1193,62 +1193,74 @@ public class MethodLibrary {
}
};
- @SkylarkSignature(name = "dict", returnType = Map.class,
- doc =
- "Creates a <a href=\"#modules.dict\">dictionary</a> from an optional positional "
- + "argument and an optional set of keyword arguments. Values from the keyword argument "
- + "will overwrite values from the positional argument if a key appears multiple times. "
- + "Dictionaries are always sorted by their keys",
- optionalPositionals = {
- @Param(name = "args", type = Object.class, defaultValue = "[]",
- doc =
- "Either a dictionary or a list of entries. Entries must be tuples or lists with "
- + "exactly two elements: key, value"),
- },
- extraKeywords = {@Param(name = "kwargs", doc = "Dictionary of additional entries.")},
- useLocation = true)
- private static final BuiltinFunction dict = new BuiltinFunction("dict") {
- @SuppressWarnings("unused")
- public Map<Object, Object> invoke(Object args, Map<Object, Object> kwargs, Location loc)
- throws EvalException {
- Map<Object, Object> result =
- (args instanceof Map<?, ?>)
- ? new LinkedHashMap<>((Map<?, ?>) args) : getMapFromArgs(args, loc);
- result.putAll(kwargs);
- return result;
- }
+ @SkylarkSignature(
+ name = "dict",
+ returnType = Map.class,
+ doc =
+ "Creates a <a href=\"#modules.dict\">dictionary</a> from an optional positional "
+ + "argument and an optional set of keyword arguments. Values from the keyword argument "
+ + "will overwrite values from the positional argument if a key appears multiple times. "
+ + "Dictionaries are always sorted by their keys",
+ optionalPositionals = {
+ @Param(
+ name = "args",
+ type = Object.class,
+ defaultValue = "[]",
+ doc =
+ "Either a dictionary or a list of entries. Entries must be tuples or lists with "
+ + "exactly two elements: key, value"
+ ),
+ },
+ extraKeywords = {@Param(name = "kwargs", doc = "Dictionary of additional entries.")},
+ useLocation = true
+ )
+ private static final BuiltinFunction dict =
+ new BuiltinFunction("dict") {
+ @SuppressWarnings("unused")
+ public Map<Object, Object> invoke(Object args, Map<Object, Object> kwargs, Location loc)
+ throws EvalException {
+ Map<Object, Object> result =
+ (args instanceof Map<?, ?>)
+ // Do not remove <Object, Object>: workaround for Java 7 type inference.
+ ? new LinkedHashMap<Object, Object>((Map<?, ?>) args)
+ : getMapFromArgs(args, loc);
+ result.putAll(kwargs);
+ return result;
+ }
- private Map<Object, Object> getMapFromArgs(Object args, Location loc) throws EvalException {
- Map<Object, Object> result = new LinkedHashMap<>();
- int pos = 0;
- for (Object element : Type.OBJECT_LIST.convert(args, "parameter args in dict()")) {
- List<Object> pair = convertToPair(element, pos, loc);
- result.put(pair.get(0), pair.get(1));
- ++pos;
- }
- return result;
- }
+ private Map<Object, Object> getMapFromArgs(Object args, Location loc) throws EvalException {
+ Map<Object, Object> result = new LinkedHashMap<>();
+ int pos = 0;
+ for (Object element : Type.OBJECT_LIST.convert(args, "parameter args in dict()")) {
+ List<Object> pair = convertToPair(element, pos, loc);
+ result.put(pair.get(0), pair.get(1));
+ ++pos;
+ }
+ return result;
+ }
- private List<Object> convertToPair(Object element, int pos, Location loc)
- throws EvalException {
- try {
- List<Object> tuple = Type.OBJECT_LIST.convert(element, "");
- int numElements = tuple.size();
- if (numElements != 2) {
- throw new EvalException(
- location,
- String.format("Sequence #%d has length %d, but exactly two elements are required",
- pos, numElements));
+ private List<Object> convertToPair(Object element, int pos, Location loc)
+ throws EvalException {
+ try {
+ List<Object> tuple = Type.OBJECT_LIST.convert(element, "");
+ int numElements = tuple.size();
+ if (numElements != 2) {
+ throw new EvalException(
+ location,
+ String.format(
+ "Sequence #%d has length %d, but exactly two elements are required",
+ pos,
+ numElements));
+ }
+ return tuple;
+ } catch (ConversionException e) {
+ throw new EvalException(
+ loc,
+ String.format(
+ "Cannot convert dictionary update sequence element #%d to a sequence", pos));
+ }
}
- return tuple;
- } catch (ConversionException e) {
- throw new EvalException(
- loc,
- String.format(
- "Cannot convert dictionary update sequence element #%d to a sequence", pos));
- }
- }
- };
+ };
@SkylarkSignature(name = "union", objectType = SkylarkNestedSet.class,
returnType = SkylarkNestedSet.class,
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 0ac292854e..547fd3e5b7 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
@@ -403,7 +403,8 @@ public abstract class SkylarkList implements Iterable<Object>, SkylarkValue {
* Creates a Tuple from an Iterable.
*/
public static Tuple copyOf(Iterable<?> contents) {
- return create(ImmutableList.copyOf(contents));
+ // Do not remove <Object>: workaround for Java 7 type inference.
+ return create(ImmutableList.<Object>copyOf(contents));
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
index b488bcfbf5..678834b760 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
@@ -228,7 +228,8 @@ public final class SkylarkNestedSet implements Iterable<Object>, SkylarkValue {
}
public Collection<Object> toCollection() {
- return ImmutableList.copyOf(set.toCollection());
+ // Do not remove <Object>: workaround for Java 7 type inference.
+ return ImmutableList.<Object>copyOf(set.toCollection());
}
public boolean isEmpty() {
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Type.java b/src/main/java/com/google/devtools/build/lib/syntax/Type.java
index a3d348cd9d..342c9006e1 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Type.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Type.java
@@ -622,7 +622,8 @@ public abstract class Type<T> {
} else if (x instanceof List) {
return (List<Object>) x;
} else if (x instanceof Iterable) {
- return ImmutableList.copyOf((Iterable<?>) x);
+ // Do not remove <Object>: workaround for Java 7 type inference.
+ return ImmutableList.<Object>copyOf((Iterable<?>) x);
} else {
throw new ConversionException(this, x, what);
}