bazel docgen: also search net/starlark/java for classes
(in anticipation of the big rename).
Also, factor.
PiperOrigin-RevId: 331604741
diff --git a/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
index b39d33b..e81710b 100644
--- a/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
+++ b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
@@ -14,12 +14,16 @@
package com.google.devtools.build.docgen;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
import com.google.devtools.build.docgen.starlark.StarlarkBuiltinDoc;
import com.google.devtools.build.docgen.starlark.StarlarkConstructorMethodDoc;
import com.google.devtools.build.docgen.starlark.StarlarkJavaMethodDoc;
import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.syntax.StarlarkValue;
+import com.google.devtools.build.lib.util.Classpath;
+import com.google.devtools.build.lib.util.Classpath.ClassPathException;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.TreeMap;
@@ -46,11 +50,26 @@
return TopLevelModule.class.getAnnotation(StarlarkBuiltin.class);
}
+ private static ImmutableMap<String, StarlarkBuiltinDoc> all;
+
+ /** Applies {@link #collectModules} to all Bazel and Starlark classes. */
+ static synchronized ImmutableMap<String, StarlarkBuiltinDoc> getAllModules()
+ throws ClassPathException {
+ if (all == null) {
+ all =
+ collectModules(
+ Iterables.concat(
+ Classpath.findClasses("com/google/devtools/build"), // Bazel
+ Classpath.findClasses("net/starlark/java"))); // Starlark
+ }
+ return all;
+ }
+
/**
* Collects the documentation for all Starlark modules comprised of the given classes and returns
- * a map that maps Starlark module name to the module documentation.
+ * a map from the name of each Starlark module to its documentation.
*/
- public static Map<String, StarlarkBuiltinDoc> collectModules(Iterable<Class<?>> classes) {
+ static ImmutableMap<String, StarlarkBuiltinDoc> collectModules(Iterable<Class<?>> classes) {
// Force class loading of com.google.devtools.build.lib.syntax.Starlark before we do any of our
// own processing. Otherwise, we're in trouble since com.google.devtools.build.lib.syntax.Dict
// happens to be the first class on our classpath that we proccess via #collectModuleMethods,
@@ -93,7 +112,7 @@
}
}
- return modules;
+ return ImmutableMap.copyOf(modules);
}
/**
diff --git a/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationProcessor.java b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationProcessor.java
index 84e34f4..6b44636 100644
--- a/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationProcessor.java
+++ b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationProcessor.java
@@ -13,12 +13,10 @@
// limitations under the License.
package com.google.devtools.build.docgen;
-import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.docgen.starlark.StarlarkBuiltinDoc;
import com.google.devtools.build.docgen.starlark.StarlarkDocUtils;
import com.google.devtools.build.docgen.starlark.StarlarkMethodDoc;
-import com.google.devtools.build.lib.util.Classpath;
import com.google.devtools.build.lib.util.Classpath.ClassPathException;
import java.io.File;
import java.io.IOException;
@@ -29,6 +27,7 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.TreeMap;
import net.starlark.java.annot.StarlarkDocumentationCategory;
/** A class to assemble documentation for Starlark. */
@@ -38,9 +37,6 @@
ImmutableList.<StarlarkDocumentationCategory>of(
StarlarkDocumentationCategory.NONE, StarlarkDocumentationCategory.TOP_LEVEL_TYPE);
- // Common prefix of packages that may contain Starlark modules.
- @VisibleForTesting static final String MODULES_PACKAGE_PREFIX = "com/google/devtools/build";
-
private StarlarkDocumentationProcessor() {}
/** Generates the Starlark documentation to the given output directory. */
@@ -49,8 +45,7 @@
parseOptions(args);
Map<String, StarlarkBuiltinDoc> modules =
- StarlarkDocumentationCollector.collectModules(
- Classpath.findClasses(MODULES_PACKAGE_PREFIX));
+ new TreeMap<>(StarlarkDocumentationCollector.getAllModules());
// Generate the top level module first in the doc
StarlarkBuiltinDoc topLevelModule =
diff --git a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
index d428bcc..ad89034 100644
--- a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
+++ b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
@@ -32,7 +32,6 @@
import com.google.devtools.build.lib.starlarkbuildapi.stubs.StarlarkAspectStub;
import com.google.devtools.build.lib.starlarkbuildapi.test.TestingBootstrap;
import com.google.devtools.build.lib.syntax.Starlark;
-import com.google.devtools.build.lib.util.Classpath;
import com.google.devtools.build.lib.util.Classpath.ClassPathException;
import com.google.devtools.build.skydoc.fakebuildapi.FakeActionsInfoProvider;
import com.google.devtools.build.skydoc.fakebuildapi.FakeBuildApiGlobals;
@@ -103,9 +102,6 @@
* builtin types.
*/
public class SymbolFamilies {
- // Common prefix of packages that may contain Starlark modules.
- private static final String MODULES_PACKAGE_PREFIX = "com/google/devtools/build";
-
private final ImmutableList<RuleDocumentation> nativeRules;
private final ImmutableMap<String, StarlarkBuiltinDoc> types;
@@ -122,7 +118,7 @@
ImmutableList.copyOf(collectNativeRules(productName, provider, inputDirs, blackList));
this.globals = Starlark.UNIVERSE;
this.bzlGlobals = ImmutableMap.copyOf(collectBzlGlobals());
- this.types = ImmutableMap.copyOf(collectTypes());
+ this.types = StarlarkDocumentationCollector.getAllModules();
}
/*
@@ -154,15 +150,6 @@
}
/*
- * Collects a mapping between type names and module/type documentation that are available both
- * in BZL and BUILD files.
- */
- private Map<String, StarlarkBuiltinDoc> collectTypes() throws ClassPathException {
- return StarlarkDocumentationCollector.collectModules(
- Classpath.findClasses(MODULES_PACKAGE_PREFIX));
- }
-
- /*
* Collects a list of native rules that are available in BUILD files as top level functions
* and in BZL files as methods of the native package.
*/
diff --git a/src/test/java/com/google/devtools/build/docgen/StarlarkDocumentationTest.java b/src/test/java/com/google/devtools/build/docgen/StarlarkDocumentationTest.java
index ca087d1..f50eae4 100644
--- a/src/test/java/com/google/devtools/build/docgen/StarlarkDocumentationTest.java
+++ b/src/test/java/com/google/devtools/build/docgen/StarlarkDocumentationTest.java
@@ -29,12 +29,12 @@
import com.google.devtools.build.lib.syntax.StarlarkList;
import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.lib.syntax.Tuple;
-import com.google.devtools.build.lib.util.Classpath;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
import java.util.stream.Collectors;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
@@ -63,8 +63,7 @@
throws Exception {
Map<String, String> docMap = new HashMap<>();
Map<String, StarlarkBuiltinDoc> modules =
- StarlarkDocumentationCollector.collectModules(
- Classpath.findClasses(StarlarkDocumentationProcessor.MODULES_PACKAGE_PREFIX));
+ new TreeMap<>(StarlarkDocumentationCollector.getAllModules());
StarlarkBuiltinDoc topLevel =
modules.remove(StarlarkDocumentationCollector.getTopLevelModule().name());
for (StarlarkMethodDoc method : topLevel.getMethods()) {
@@ -390,11 +389,9 @@
@Test
public void testStarlarkGlobalLibraryCallable() throws Exception {
- Map<String, StarlarkBuiltinDoc> modules =
- StarlarkDocumentationCollector.collectModules(
- Classpath.findClasses(StarlarkDocumentationProcessor.MODULES_PACKAGE_PREFIX));
StarlarkBuiltinDoc topLevel =
- modules.remove(StarlarkDocumentationCollector.getTopLevelModule().name());
+ StarlarkDocumentationCollector.getAllModules()
+ .get(StarlarkDocumentationCollector.getTopLevelModule().name());
boolean foundGlobalLibrary = false;
for (StarlarkMethodDoc methodDoc : topLevel.getMethods()) {