aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/docgen
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-04-16 15:26:42 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-16 15:28:30 -0700
commitcea083af0962ee580ff3635eef974c5fbba01f87 (patch)
tree1c8298dfd15e904e4b323984266432e141cea20d /src/main/java/com/google/devtools/build/docgen
parent0c5b4c440e28d347a69196159c9aff23e4c43d5c (diff)
Create @SkylarkConstructor annotation, to annotate certain global-namespace @SkylarkCallable methods as representing constructors of other skylark types.
This change also demonstrates the new pattern on the global Label() constructor. As an added bonus, it fixes documentation of that constructor. The old documentation used to read "Label.Label(...)" and the new documentation reads "Label(...)". RELNOTES: None. PiperOrigin-RevId: 193109338
Diffstat (limited to 'src/main/java/com/google/devtools/build/docgen')
-rw-r--r--src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java18
1 files changed, 12 insertions, 6 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 334634e3b9..6b614b381b 100644
--- a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
+++ b/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.docgen.skylark.SkylarkBuiltinMethodDoc;
import com.google.devtools.build.docgen.skylark.SkylarkJavaMethodDoc;
import com.google.devtools.build.docgen.skylark.SkylarkModuleDoc;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
import com.google.devtools.build.lib.skylarkinterface.SkylarkGlobalLibrary;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -32,7 +33,6 @@ import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayDeque;
import java.util.Deque;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@@ -120,10 +120,8 @@ final class SkylarkDocumentationCollector {
Map<String, SkylarkModuleDoc> modules) {
Set<Class<?>> done = new HashSet<>();
Deque<Class<?>> toProcess = new ArrayDeque<>();
- Map<Class<?>, SkylarkModule> annotations = new HashMap<>();
toProcess.addLast(firstClass);
- annotations.put(firstClass, firstModule);
while (!toProcess.isEmpty()) {
Class<?> c = toProcess.removeFirst();
@@ -143,7 +141,6 @@ final class SkylarkDocumentationCollector {
if (returnClass.isAnnotationPresent(SkylarkModule.class)
&& !done.contains(returnClass)) {
toProcess.addLast(returnClass);
- annotations.put(returnClass, returnClass.getAnnotation(SkylarkModule.class));
}
}
}
@@ -165,12 +162,21 @@ final class SkylarkDocumentationCollector {
private static void collectBuiltinMethods(
Map<String, SkylarkModuleDoc> modules, Class<?> moduleClass) {
- SkylarkModuleDoc module = getTopLevelModuleDoc(modules);
+ SkylarkModuleDoc topLevelModuleDoc = getTopLevelModuleDoc(modules);
ImmutableMap<Method, SkylarkCallable> methods =
FuncallExpression.collectSkylarkMethodsWithAnnotation(moduleClass);
for (Map.Entry<Method, SkylarkCallable> entry : methods.entrySet()) {
- module.addMethod(new SkylarkJavaMethodDoc("", entry.getKey(), entry.getValue()));
+ if (entry.getKey().isAnnotationPresent(SkylarkConstructor.class)) {
+ SkylarkConstructor constructorAnnotation =
+ entry.getKey().getAnnotation(SkylarkConstructor.class);
+ Class<?> objectClass = constructorAnnotation.objectType();
+ SkylarkModuleDoc module = getSkylarkModuleDoc(objectClass, modules);
+ module.addMethod(
+ new SkylarkJavaMethodDoc("", entry.getKey(), entry.getValue()));
+ } else {
+ topLevelModuleDoc.addMethod(new SkylarkJavaMethodDoc("", entry.getKey(), entry.getValue()));
+ }
}
}
}