diff options
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.java | 35 |
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); + } } |