diff options
Diffstat (limited to 'src/main/java/com')
6 files changed, 30 insertions, 33 deletions
diff --git a/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkBuiltinMethodDoc.java b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkBuiltinMethodDoc.java index 318ec24ad5..1fe4fdd861 100644 --- a/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkBuiltinMethodDoc.java +++ b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkBuiltinMethodDoc.java @@ -85,8 +85,12 @@ public final class SkylarkBuiltinMethodDoc extends SkylarkMethodDoc { processParams(annotation.optionalPositionals()); processParams(annotation.optionalNamedOnly()); processParams(annotation.mandatoryNamedOnly()); - processParams(annotation.extraPositionals()); - processParams(annotation.extraKeywords()); + if (!annotation.extraPositionals().name().isEmpty()) { + this.params.add(new SkylarkParamDoc(this, annotation.extraPositionals())); + } + if (!annotation.extraKeywords().name().isEmpty()) { + this.params.add(new SkylarkParamDoc(this, annotation.extraKeywords())); + } } private void processParams(Param[] params) { diff --git a/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkMethodDoc.java b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkMethodDoc.java index bf254e17e6..5dbd6a79d6 100644 --- a/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkMethodDoc.java +++ b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkMethodDoc.java @@ -82,10 +82,10 @@ abstract class SkylarkMethodDoc extends SkylarkDoc { for (Param param : method.optionalPositionals()) { argList.add(formatOptionalParameter(param)); } - for (Param param : method.extraPositionals()) { - argList.add("*" + param.name()); + if (!method.extraPositionals().name().isEmpty()) { + argList.add("*" + method.extraPositionals().name()); } - if (argList.size() > 0 && method.extraPositionals().length == 0 + if (!argList.isEmpty() && method.extraPositionals().name().isEmpty() && (method.optionalNamedOnly().length > 0 || method.mandatoryNamedOnly().length > 0)) { argList.add("*"); } @@ -95,8 +95,8 @@ abstract class SkylarkMethodDoc extends SkylarkDoc { for (Param param : method.optionalNamedOnly()) { argList.add(formatOptionalParameter(param)); } - for (Param param : method.extraKeywords()) { - argList.add("**" + param.name()); + if (!method.extraKeywords().name().isEmpty()) { + argList.add("**" + method.extraKeywords().name()); } String args = "(" + Joiner.on(", ").join(argList) + ")"; if (!objectName.equals(TOP_LEVEL_ID)) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java index 2bcf821fc8..67fd149d22 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java @@ -79,14 +79,13 @@ public class AppleSkylarkCommon { doc = "Whether this provider should enable Swift support." ) }, - extraKeywords = { + extraKeywords = @Param( name = "kwargs", type = SkylarkDict.class, defaultValue = "{}", doc = "Dictionary of arguments" ) - } ) public static final BuiltinFunction NEW_OBJC_PROVIDER = new BuiltinFunction("new_objc_provider") { diff --git a/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkSignature.java b/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkSignature.java index ffaab00250..eed1888e7e 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkSignature.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkSignature.java @@ -42,9 +42,9 @@ public @interface SkylarkSignature { Param[] mandatoryNamedOnly() default {}; - Param[] extraPositionals() default {}; + Param extraPositionals() default @Param(name = ""); - Param[] extraKeywords() default {}; + Param extraKeywords() default @Param(name = ""); boolean documented() default true; 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 0f25172266..0552414e9e 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 @@ -883,12 +883,11 @@ public class MethodLibrary { mandatoryPositionals = { @Param(name = "self", type = String.class, doc = "This string."), }, - extraPositionals = { + extraPositionals = @Param(name = "args", type = SkylarkList.class, defaultValue = "()", doc = "List of arguments"), - }, - extraKeywords = {@Param(name = "kwargs", type = SkylarkDict.class, defaultValue = "{}", - doc = "Dictionary of arguments")}, + extraKeywords = @Param(name = "kwargs", type = SkylarkDict.class, defaultValue = "{}", + doc = "Dictionary of arguments"), useLocation = true) private static final BuiltinFunction format = new BuiltinFunction("format") { @SuppressWarnings("unused") @@ -1086,9 +1085,8 @@ public class MethodLibrary { doc = "Returns the smallest one of all given arguments. " + "If only one argument is provided, it must be a non-empty iterable.", - extraPositionals = { - @Param(name = "args", type = SkylarkList.class, doc = "The elements to be checked.") - }, + extraPositionals = + @Param(name = "args", type = SkylarkList.class, doc = "The elements to be checked."), useLocation = true ) private static final BuiltinFunction min = new BuiltinFunction("min") { @@ -1104,9 +1102,8 @@ public class MethodLibrary { doc = "Returns the largest one of all given arguments. " + "If only one argument is provided, it must be a non-empty iterable.", - extraPositionals = { - @Param(name = "args", type = SkylarkList.class, doc = "The elements to be checked.") - }, + extraPositionals = + @Param(name = "args", type = SkylarkList.class, doc = "The elements to be checked."), useLocation = true ) private static final BuiltinFunction max = new BuiltinFunction("max") { @@ -1829,8 +1826,7 @@ public class MethodLibrary { + "multiple values together.Example:<br>" + "<pre class=\"language-python\">s = struct(x = 2, y = 3)\n" + "return s.x + getattr(s, \"y\") # returns 5</pre>", - extraKeywords = { - @Param(name = "kwargs", doc = "the struct attributes")}, + extraKeywords = @Param(name = "kwargs", doc = "the struct attributes"), useLocation = true) private static final BuiltinFunction struct = new BuiltinFunction("struct") { @SuppressWarnings("unchecked") @@ -1887,7 +1883,7 @@ public class MethodLibrary { + "exactly two elements: key, value" ), }, - extraKeywords = {@Param(name = "kwargs", doc = "Dictionary of additional entries.")}, + extraKeywords = @Param(name = "kwargs", doc = "Dictionary of additional entries."), useLocation = true, useEnvironment = true ) private static final BuiltinFunction dict = @@ -2197,7 +2193,7 @@ public class MethodLibrary { @Param(name = "sep", type = String.class, defaultValue = "' '", doc = "The separator string between the objects, default is space (\" \").")}, // NB: as compared to Python3, we're missing optional named-only arguments 'end' and 'file' - extraPositionals = {@Param(name = "args", doc = "The objects to print.")}, + extraPositionals = @Param(name = "args", doc = "The objects to print."), useLocation = true, useEnvironment = true) private static final BuiltinFunction print = new BuiltinFunction("print") { public Runtime.NoneType invoke(String sep, SkylarkList<?> starargs, @@ -2223,7 +2219,7 @@ public class MethodLibrary { + "zip([1, 2]) # == [(1,), (2,)]\n" + "zip([1, 2], [3, 4]) # == [(1, 3), (2, 4)]\n" + "zip([1, 2], [3, 4, 5]) # == [(1, 3), (2, 4)]</pre>", - extraPositionals = {@Param(name = "args", doc = "lists to zip")}, + extraPositionals = @Param(name = "args", doc = "lists to zip"), returnType = MutableList.class, useLocation = true, useEnvironment = true) private static final BuiltinFunction zip = new BuiltinFunction("zip") { public MutableList<?> invoke(SkylarkList<?> args, Location loc, Environment env) diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java index 1348267540..cc3b0c47f0 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java @@ -72,13 +72,12 @@ public class SkylarkSignatureProcessor { /*mandatory=*/false, /*star=*/false, /*starStar=*/false, /*defaultValue=*/getDefaultValue(param, defaultValuesIterator))); } - if (annotation.extraPositionals().length > 0 + if (!annotation.extraPositionals().name().isEmpty() || annotation.optionalNamedOnly().length > 0 || annotation.mandatoryNamedOnly().length > 0) { @Nullable Param starParam = null; - if (annotation.extraPositionals().length > 0) { - Preconditions.checkArgument(annotation.extraPositionals().length == 1); - starParam = annotation.extraPositionals()[0]; + if (!annotation.extraPositionals().name().isEmpty()) { + starParam = annotation.extraPositionals(); } paramList.add(getParameter(name, starParam, enforcedTypes, doc, documented, /*mandatory=*/false, /*star=*/true, /*starStar=*/false, /*defaultValue=*/null)); @@ -92,10 +91,9 @@ public class SkylarkSignatureProcessor { /*mandatory=*/false, /*star=*/false, /*starStar=*/false, /*defaultValue=*/getDefaultValue(param, defaultValuesIterator))); } - if (annotation.extraKeywords().length > 0) { - Preconditions.checkArgument(annotation.extraKeywords().length == 1); + if (!annotation.extraKeywords().name().isEmpty()) { paramList.add( - getParameter(name, annotation.extraKeywords()[0], enforcedTypes, doc, documented, + getParameter(name, annotation.extraKeywords(), enforcedTypes, doc, documented, /*mandatory=*/false, /*star=*/false, /*starStar=*/true, /*defaultValue=*/null)); } FunctionSignature.WithValues<Object, SkylarkType> signature = |