diff options
Diffstat (limited to 'src/main')
8 files changed, 42 insertions, 32 deletions
diff --git a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java b/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java index 6d38c43c3f..884fe299e7 100644 --- a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java +++ b/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java @@ -30,7 +30,6 @@ import com.google.devtools.build.lib.syntax.FuncallExpression; import com.google.devtools.build.lib.syntax.Runtime; import com.google.devtools.build.lib.util.Classpath; import com.google.devtools.build.lib.util.Classpath.ClassPathException; -import com.google.devtools.build.lib.util.StringUtilities; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayDeque; @@ -234,11 +233,8 @@ final class SkylarkDocumentationCollector { private static String getFullyQualifiedName( String objectName, Method method, SkylarkCallable callable) { - String objectDotExpressionPrefix = - objectName.isEmpty() ? "" : objectName + "."; - String methodName = callable.name().isEmpty() - ? StringUtilities.toPythonStyleFunctionName(method.getName()) - : callable.name(); + String objectDotExpressionPrefix = objectName.isEmpty() ? "" : objectName + "."; + String methodName = callable.name(); return objectDotExpressionPrefix + methodName; } } diff --git a/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkJavaMethodDoc.java b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkJavaMethodDoc.java index 614d155325..eeff9fa73e 100644 --- a/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkJavaMethodDoc.java +++ b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkJavaMethodDoc.java @@ -17,7 +17,6 @@ import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; -import com.google.devtools.build.lib.util.StringUtilities; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; @@ -36,9 +35,7 @@ public final class SkylarkJavaMethodDoc extends SkylarkMethodDoc { public SkylarkJavaMethodDoc(String moduleName, Method method, SkylarkCallable callable) { this.moduleName = moduleName; - this.name = callable.name().isEmpty() - ? StringUtilities.toPythonStyleFunctionName(method.getName()) - : callable.name(); + this.name = callable.name(); this.method = method; this.callable = callable; this.params = diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileTypeApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileTypeApi.java index cbff500d36..83faf7fd61 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileTypeApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileTypeApi.java @@ -32,7 +32,9 @@ import com.google.devtools.build.lib.syntax.EvalException; ) public interface FileTypeApi<FileApiT extends FileApi> { - @SkylarkCallable(doc = + @SkylarkCallable( + name = "filter", + doc = "Returns a list created from the elements of the parameter containing all the " + "<a href=\"File.html\"><code>File</code></a>s that match the FileType. The parameter " + "must be a <a href=\"depset.html\"><code>depset</code></a> or a " diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java index 7c1be4caf3..12c2c523c9 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java @@ -264,10 +264,15 @@ public interface SkylarkRuleContextApi extends SkylarkValue { ) public FileRootApi getGenfilesDirectory() throws EvalException; - @SkylarkCallable(structField = true, doc = OUTPUTS_DOC) + @SkylarkCallable( + name = "outputs", + structField = true, + doc = OUTPUTS_DOC + ) public ClassObject outputs() throws EvalException; @SkylarkCallable( + name = "rule", structField = true, doc = "Returns rule attributes descriptor for the rule that aspect is applied to." @@ -276,8 +281,8 @@ public interface SkylarkRuleContextApi extends SkylarkValue { public SkylarkAttributesCollectionApi rule() throws EvalException; @SkylarkCallable( - structField = true, name = "aspect_ids", + structField = true, doc = "Returns a list ids for all aspects applied to the target." + " Only available in aspect implementation functions." @@ -285,18 +290,28 @@ public interface SkylarkRuleContextApi extends SkylarkValue { public ImmutableList<String> aspectIds() throws EvalException; @SkylarkCallable( + name = "var", structField = true, doc = "Dictionary (String to String) of configuration variables." ) public SkylarkDict<String, String> var() throws EvalException; - @SkylarkCallable(structField = true, doc = "Toolchains required for this rule.") + @SkylarkCallable( + name = "toolchains", + structField = true, + doc = "Toolchains required for this rule." + ) public SkylarkIndexable toolchains() throws EvalException; - @SkylarkCallable(doc = "Splits a shell command to a list of tokens.", documented = false) + @SkylarkCallable( + name = "tokenize", + doc = "Splits a shell command to a list of tokens.", + documented = false + ) public SkylarkList<String> tokenize(String optionString) throws FuncallException, EvalException; @SkylarkCallable( + name = "expand", doc = "Expands all references to labels embedded within a string for all files using a mapping " + "from definition labels (i.e. the label in the output type attribute) to files. " @@ -366,11 +381,15 @@ public interface SkylarkRuleContextApi extends SkylarkValue { ) public FileApi newDirectory(String name, Object siblingArtifactUnchecked) throws EvalException; - @SkylarkCallable(documented = false) + @SkylarkCallable( + name = "check_placeholders", + documented = false + ) public boolean checkPlaceholders(String template, SkylarkList<Object> allowedPlaceholders) throws EvalException; @SkylarkCallable( + name = "expand_make_variables", doc = "<b>Deprecated.</b> Use <a href=\"ctx.html#var\">ctx.var</a> to access the variables " + "instead.<br>Returns a string after expanding all references to \"Make " diff --git a/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkCallable.java b/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkCallable.java index 9b5720fcf5..ceb65b033f 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkCallable.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkCallable.java @@ -60,7 +60,7 @@ public @interface SkylarkCallable { /** * Name of the method, as exposed to Skylark. */ - String name() default ""; + String name(); /** * The documentation text in Skylark. It can contain HTML tags for special formatting. diff --git a/src/main/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessor.java b/src/main/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessor.java index 2ccc6ccb49..ecfd963529 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessor.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessor.java @@ -109,6 +109,7 @@ public final class SkylarkCallableProcessor extends AbstractProcessor { } try { + verifyNameNotEmpty(methodElement, annotation); verifyDocumented(methodElement, annotation); verifyNotStructFieldWithParams(methodElement, annotation); verifyParamSemantics(methodElement, annotation); @@ -123,6 +124,15 @@ public final class SkylarkCallableProcessor extends AbstractProcessor { return true; } + private void verifyNameNotEmpty(ExecutableElement methodElement, SkylarkCallable annotation) + throws SkylarkCallableProcessorException { + if (annotation.name().isEmpty()) { + throw new SkylarkCallableProcessorException( + methodElement, + "@SkylarkCallable.name must be non-empty."); + } + } + private void verifyIfSelfCall(ExecutableElement methodElement, SkylarkCallable annotation) throws SkylarkCallableProcessorException { if (annotation.selfCall()) { @@ -131,11 +141,6 @@ public final class SkylarkCallableProcessor extends AbstractProcessor { methodElement, "@SkylarkCallable-annotated methods with selfCall=true must have structField=false"); } - if (annotation.name().isEmpty()) { - throw new SkylarkCallableProcessorException( - methodElement, - "@SkylarkCallable-annotated methods with selfCall=true must have a name"); - } if (!classesWithSelfcall.add(methodElement.getEnclosingElement().asType().toString())) { throw new SkylarkCallableProcessorException( methodElement, diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java index bf43266b21..877b087ea6 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java @@ -36,7 +36,6 @@ import com.google.devtools.build.lib.syntax.EvalException.EvalExceptionWithJavaC import com.google.devtools.build.lib.syntax.Runtime.NoneType; import com.google.devtools.build.lib.syntax.SkylarkList.Tuple; import com.google.devtools.build.lib.util.Pair; -import com.google.devtools.build.lib.util.StringUtilities; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -132,9 +131,6 @@ public final class FuncallExpression extends Expression { continue; } String name = callable.name(); - if (name.isEmpty()) { - name = StringUtilities.toPythonStyleFunctionName(method.getName()); - } if (methodMap.containsKey(name)) { methodMap.get(name).add(new MethodDescriptor(method, callable)); } else { @@ -168,11 +164,6 @@ public final class FuncallExpression extends Expression { for (MethodDescriptor fieldMethod : fieldMethods) { SkylarkCallable callable = fieldMethod.getAnnotation(); String name = callable.name(); - if (name.isEmpty()) { - name = - StringUtilities.toPythonStyleFunctionName( - fieldMethod.getMethod().getName()); - } // TODO(b/72113542): Validate with annotation processor instead of at runtime. if (!fieldNamesForCollisions.add(name)) { throw new IllegalArgumentException( 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 5d5094117d..f5311328f4 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 @@ -51,7 +51,7 @@ public class SkylarkSignatureProcessor { SkylarkCallable annotation = descriptor.getAnnotation(); // TODO(cparsons): Validate these properties with the annotation processor instead. - Preconditions.checkArgument(annotation.name().isEmpty() || name.equals(annotation.name()), + Preconditions.checkArgument(name.equals(annotation.name()), "%s != %s", name, annotation.name()); boolean documented = annotation.documented(); if (annotation.doc().isEmpty() && documented) { |