aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/SkylarkCommandLine.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/SkylarkCommandLine.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkCommandLine.java35
1 files changed, 13 insertions, 22 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkCommandLine.java
index 260c7e4a8f..a26248656f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkCommandLine.java
@@ -18,16 +18,13 @@ import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.events.Location;
-import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkFunction.SimpleSkylarkFunction;
+import com.google.devtools.build.lib.syntax.BuiltinFunction;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkModule;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.syntax.SkylarkSignature;
import com.google.devtools.build.lib.syntax.SkylarkSignature.Param;
-
-import java.util.Map;
+import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor;
/**
* A Skylark module class to create memory efficient command lines.
@@ -36,23 +33,17 @@ import java.util.Map;
doc = "Module for creating memory efficient command lines.")
public class SkylarkCommandLine {
- @SkylarkSignature(name = "join_paths",
+ @SkylarkSignature(name = "join_paths", objectType = SkylarkCommandLine.class,
+ returnType = String.class,
doc = "Creates a single command line argument joining the paths of a set "
+ "of files on the separator string.",
- objectType = SkylarkCommandLine.class,
- returnType = String.class,
mandatoryPositionals = {
@Param(name = "separator", type = String.class, doc = "the separator string to join on"),
@Param(name = "files", type = SkylarkNestedSet.class, generic1 = Artifact.class,
doc = "the files to concatenate")})
- private static SimpleSkylarkFunction joinPaths =
- new SimpleSkylarkFunction("join_paths") {
- @Override
- public Object call(Map<String, Object> params, Location loc)
- throws EvalException {
- final String separator = (String) params.get("separator");
- final NestedSet<Artifact> artifacts =
- ((SkylarkNestedSet) params.get("files")).getSet(Artifact.class);
+ private static BuiltinFunction joinPaths = new BuiltinFunction("join_paths") {
+ public String invoke(String separator, SkylarkNestedSet files) {
+ NestedSet<Artifact> artifacts = files.getSet(Artifact.class);
// TODO(bazel-team): lazy evaluate
return Artifact.joinExecPaths(separator, artifacts);
}
@@ -70,12 +61,8 @@ public class SkylarkCommandLine {
doc = "The template to use for the transformation, <code>%{path}</code> and "
+ "<code>%{short_path}</code> being substituted with the corresponding fields of each"
+ " file.")})
- private static SimpleSkylarkFunction template = new SimpleSkylarkFunction("template") {
- @Override
- public Object call(Map<String, Object> params, Location loc)
- throws EvalException {
- final String template = (String) params.get("template");
- SkylarkNestedSet items = (SkylarkNestedSet) params.get("items");
+ private static BuiltinFunction template = new BuiltinFunction("template") {
+ public SkylarkList invoke(final SkylarkNestedSet items, final String template) {
return SkylarkList.lazyList(Iterables.transform(items, new Function<Object, String>() {
@Override
public String apply(Object input) {
@@ -87,4 +74,8 @@ public class SkylarkCommandLine {
}), String.class);
}
};
+
+ static {
+ SkylarkSignatureProcessor.configureSkylarkFunctions(SkylarkCommandLine.class);
+ }
}