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()) {
