aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
diff options
context:
space:
mode:
authorGravatar Francois-Rene Rideau <tunes@google.com>2015-04-20 18:35:05 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2015-04-21 10:57:39 +0000
commita3ac202ec114c092221b296a2695d0aadd50031f (patch)
treef06351880eb87347d3ca5e247ab4e050831c903d /src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
parent1c72383a145ce29174fee15525d3caf44ae47959 (diff)
Migrate SkylarkBuiltin annotations to SkylarkSignature instead.
-- MOS_MIGRATED_REVID=91603959
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java158
1 files changed, 91 insertions, 67 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
index cc582ab17e..0019fe8683 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
@@ -36,12 +36,12 @@ import com.google.devtools.build.lib.syntax.Environment;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.EvalUtils;
import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.SkylarkBuiltin;
-import com.google.devtools.build.lib.syntax.SkylarkBuiltin.Param;
import com.google.devtools.build.lib.syntax.SkylarkFunction;
import com.google.devtools.build.lib.syntax.SkylarkFunction.SimpleSkylarkFunction;
import com.google.devtools.build.lib.syntax.SkylarkList;
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 com.google.devtools.build.lib.vfs.PathFragment;
import java.util.Map;
@@ -69,32 +69,43 @@ public class SkylarkRuleImplementationFunctions {
* command = 'command',
* )
*/
- @SkylarkBuiltin(name = "action",
+ @SkylarkSignature(name = "action",
doc = "Creates an action that runs an executable or a shell command.",
objectType = SkylarkRuleContext.class,
returnType = Environment.NoneType.class,
- mandatoryParams = {
- @Param(name = "outputs", type = SkylarkList.class, generic1 = Artifact.class,
- doc = "list of the output files of the action")},
- optionalParams = {
- @Param(name = "inputs", type = SkylarkList.class, generic1 = Artifact.class,
- doc = "list of the input files of the action"),
- @Param(name = "executable", doc = "the executable file to be called by the action"),
- @Param(name = "arguments", type = SkylarkList.class, generic1 = String.class,
- doc = "command line arguments of the action"),
- @Param(name = "mnemonic", type = String.class, doc = "mnemonic"),
- @Param(name = "command", doc = "shell command to execute"),
- @Param(name = "progress_message", type = String.class,
- doc = "progress message to show to the user during the build, e.g. \"Compiling foo.cc to"
- + " create foo.o\""),
- @Param(name = "use_default_shell_env", type = Boolean.class,
- doc = "whether the action should use the built in shell environment or not"),
- @Param(name = "env", type = Map.class, doc = "sets the dictionary of environment variables"),
- @Param(name = "execution_requirements", type = Map.class,
- doc = "information for scheduling the action"),
- @Param(name = "input_manifests", type = Map.class,
- doc = "sets the map of input manifests files; "
- + "they are typicially generated by the command_helper")})
+ mandatoryPositionals = {
+ @Param(name = "self", type = SkylarkRuleContext.class, doc = "This RuleContext.")},
+ mandatoryNamedOnly = {
+ @Param(name = "outputs", type = SkylarkList.class, generic1 = Artifact.class,
+ doc = "list of the output files of the action")},
+ optionalNamedOnly = {
+ @Param(name = "inputs", type = SkylarkList.class, generic1 = Artifact.class,
+ defaultValue = "[]", doc = "list of the input files of the action"),
+ @Param(name = "executable", type = Object.class, // File or PathFragment or None
+ defaultValue = "None",
+ doc = "the executable file to be called by the action"),
+ @Param(name = "arguments", type = SkylarkList.class, generic1 = String.class,
+ defaultValue = "[]", doc = "command line arguments of the action"),
+ @Param(name = "mnemonic", type = String.class, noneable = true,
+ defaultValue = "None", doc = "mnemonic"),
+ @Param(name = "command", type = Object.class, // string or ListOf(string) or NoneType
+ defaultValue = "None", doc = "shell command to execute"),
+ @Param(name = "progress_message", type = String.class, noneable = true,
+ defaultValue = "None",
+ doc = "progress message to show to the user during the build, "
+ + "e.g. \"Compiling foo.cc to create foo.o\""),
+ @Param(name = "use_default_shell_env", type = Boolean.class, defaultValue = "False",
+ doc = "whether the action should use the built in shell environment or not"),
+ @Param(name = "env", type = Map.class, noneable = true, defaultValue = "None",
+ doc = "sets the dictionary of environment variables"),
+ @Param(name = "execution_requirements", type = Map.class, noneable = true,
+ defaultValue = "None",
+ doc = "information for scheduling the action"),
+ @Param(name = "input_manifests", type = Map.class, noneable = true,
+ defaultValue = "None",
+ doc = "sets the map of input manifests files; "
+ + "they are typicially generated by the command_helper")},
+ useLocation = true)
private static final SkylarkFunction createSpawnAction =
new SimpleSkylarkFunction("action") {
@@ -175,17 +186,17 @@ public class SkylarkRuleImplementationFunctions {
};
// TODO(bazel-team): improve this method to be more memory friendly
- @SkylarkBuiltin(name = "file_action",
+ @SkylarkSignature(name = "file_action",
doc = "Creates a file write action.",
objectType = SkylarkRuleContext.class,
- returnType = Environment.NoneType.class,
- optionalParams = {
- @Param(name = "executable", type = Boolean.class,
- doc = "whether the output file should be executable (default is False)"),
- },
- mandatoryParams = {
+ returnType = FileWriteAction.class,
+ mandatoryPositionals = {
+ @Param(name = "self", type = SkylarkRuleContext.class, doc = "this context"),
@Param(name = "output", type = Artifact.class, doc = "the output file"),
- @Param(name = "content", type = String.class, doc = "the contents of the file")})
+ @Param(name = "content", type = String.class, doc = "the contents of the file")},
+ optionalPositionals = {
+ @Param(name = "executable", type = Boolean.class,
+ doc = "whether the output file should be executable (default is False)")})
private static final SkylarkFunction createFileWriteAction =
new SimpleSkylarkFunction("file_action") {
@@ -204,18 +215,22 @@ public class SkylarkRuleImplementationFunctions {
}
};
- @SkylarkBuiltin(name = "template_action",
+ @SkylarkSignature(name = "template_action",
doc = "Creates a template expansion action.",
objectType = SkylarkRuleContext.class,
- returnType = Environment.NoneType.class,
- mandatoryParams = {
- @Param(name = "template", type = Artifact.class, doc = "the template file"),
- @Param(name = "output", type = Artifact.class, doc = "the output file"),
- @Param(name = "substitutions", type = Map.class,
- doc = "substitutions to make when expanding the template")},
- optionalParams = {
- @Param(name = "executable", type = Boolean.class,
- doc = "whether the output file should be executable (default is False)")})
+ returnType = TemplateExpansionAction.class,
+ mandatoryPositionals = {
+ @Param(name = "self", type = SkylarkRuleContext.class, doc = "this context")},
+ mandatoryNamedOnly = {
+ @Param(name = "template", type = Artifact.class,
+ doc = "the template file"),
+ @Param(name = "output", type = Artifact.class,
+ doc = "the output file"),
+ @Param(name = "substitutions", type = Map.class,
+ doc = "substitutions to make when expanding the template")},
+ optionalNamedOnly = {
+ @Param(name = "executable", type = Boolean.class,
+ doc = "whether the output file should be executable (default is False)")})
private static final SkylarkFunction createTemplateAction =
new SimpleSkylarkFunction("template_action") {
@@ -245,12 +260,13 @@ public class SkylarkRuleImplementationFunctions {
* A built in Skylark helper function to access the
* Transitive info providers of Transitive info collections.
*/
- @SkylarkBuiltin(name = "provider",
+ @SkylarkSignature(name = "provider",
doc = "Returns the transitive info provider provided by the target.",
- mandatoryParams = {
- @Param(name = "target", type = TransitiveInfoCollection.class,
- doc = "the configured target which provides the provider"),
- @Param(name = "type", type = String.class, doc = "the class type of the provider")})
+ mandatoryPositionals = {
+ @Param(name = "target", type = TransitiveInfoCollection.class,
+ doc = "the configured target which provides the provider"),
+ @Param(name = "type", type = String.class, doc = "the class type of the provider")},
+ useLocation = true)
private static final SkylarkFunction provider = new SimpleSkylarkFunction("provider") {
@Override
public Object call(Map<String, Object> params, Location loc) throws EvalException {
@@ -271,21 +287,28 @@ public class SkylarkRuleImplementationFunctions {
};
// TODO(bazel-team): Remove runfile states from Skylark.
- @SkylarkBuiltin(name = "runfiles",
+ @SkylarkSignature(name = "runfiles",
doc = "Creates a runfiles object.",
objectType = SkylarkRuleContext.class,
returnType = Runfiles.class,
- optionalParams = {
- @Param(name = "files", type = SkylarkList.class, generic1 = Artifact.class,
- doc = "The list of files to be added to the runfiles."),
- // TODO(bazel-team): If we have a memory efficient support for lazy list containing NestedSets
- // we can remove this and just use files = [file] + list(set)
- @Param(name = "transitive_files", type = SkylarkNestedSet.class, generic1 = Artifact.class,
- doc = "The (transitive) set of files to be added to the runfiles."),
- @Param(name = "collect_data", type = Boolean.class, doc = "Whether to collect the data "
- + "runfiles from the dependencies in srcs, data and deps attributes."),
- @Param(name = "collect_default", type = Boolean.class, doc = "Whether to collect the default "
- + "runfiles from the dependencies in srcs, data and deps attributes.")})
+ mandatoryPositionals = {
+ @Param(name = "self", type = SkylarkRuleContext.class, doc = "This context.")},
+ optionalPositionals = {
+ @Param(name = "files", type = SkylarkList.class, generic1 = Artifact.class,
+ defaultValue = "[]", doc = "The list of files to be added to the runfiles."),
+ // TODO(bazel-team): If we have a memory efficient support for lazy list containing
+ // NestedSets we can remove this and just use files = [file] + list(set)
+ // Also, allow empty set for init
+ @Param(name = "transitive_files", type = SkylarkNestedSet.class, generic1 = Artifact.class,
+ noneable = true, defaultValue = "None",
+ doc = "The (transitive) set of files to be added to the runfiles."),
+ @Param(name = "collect_data", type = Boolean.class, defaultValue = "False",
+ doc = "Whether to collect the data "
+ + "runfiles from the dependencies in srcs, data and deps attributes."),
+ @Param(name = "collect_default", type = Boolean.class, defaultValue = "False",
+ doc = "Whether to collect the default "
+ + "runfiles from the dependencies in srcs, data and deps attributes.")},
+ useLocation = true)
private static final SkylarkFunction runfiles = new SimpleSkylarkFunction("runfiles") {
@Override
public Object call(Map<String, Object> params, Location loc) throws EvalException,
@@ -309,15 +332,16 @@ public class SkylarkRuleImplementationFunctions {
}
};
- @SkylarkBuiltin(name = "command_helper", doc = "Experimental. Creates a command helper class.",
+ @SkylarkSignature(name = "command_helper", doc = "Experimental. Creates a command helper class.",
objectType = SkylarkRuleContext.class,
returnType = CommandHelper.class,
- mandatoryParams = {
- @Param(name = "tools", type = SkylarkList.class, generic1 = TransitiveInfoCollection.class,
- doc = "list of tools (list of targets)"),
- @Param(name = "label_dict", type = Map.class,
- doc = "dictionary of resolved labels and the corresponding list of Files "
- + "(a dict of Label : list of Files)")})
+ mandatoryPositionals = {
+ @Param(name = "self", type = SkylarkRuleContext.class, doc = "this RuleContext"),
+ @Param(name = "tools", type = SkylarkList.class, generic1 = TransitiveInfoCollection.class,
+ doc = "list of tools (list of targets)"),
+ @Param(name = "label_dict", type = Map.class, defaultValue = "{}",
+ doc = "dictionary of resolved labels and the corresponding list of Files "
+ + "(a dict of Label : list of Files)")})
private static final SkylarkFunction createCommandHelper =
new SimpleSkylarkFunction("command_helper") {
@SuppressWarnings("unchecked")