Merge BlazeModule.getEnvironmentExtensions into serverInit / ServerBuilder.

--
MOS_MIGRATED_REVID=137955061
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
index 014c180..9fbd0ff 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
@@ -254,13 +254,6 @@
   }
 
   /**
-   * Returns the extensions this module contributes to the global namespace of the BUILD language.
-   */
-  public PackageFactory.EnvironmentExtension getPackageEnvironmentExtension() {
-    return new PackageFactory.EmptyEnvironmentExtension();
-  }
-
-  /**
    * Returns a helper that the {@link PackageFactory} will use during package loading. If the module
    * does not provide any helper, it should return null. Note that only one helper per Bazel/Blaze
    * runtime is allowed.
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 5037ee6..61a02ab 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -1090,11 +1090,6 @@
 
       ConfiguredRuleClassProvider ruleClassProvider = ruleClassBuilder.build();
 
-      List<PackageFactory.EnvironmentExtension> extensions = new ArrayList<>();
-      for (BlazeModule module : blazeModules) {
-        extensions.add(module.getPackageEnvironmentExtension());
-      }
-
       Package.Builder.Helper packageBuilderHelper = null;
       for (BlazeModule module : blazeModules) {
         Package.Builder.Helper candidateHelper =
@@ -1114,7 +1109,7 @@
               ruleClassProvider,
               ruleClassBuilder.getPlatformRegexps(),
               serverBuilder.getAttributeContainerFactory(),
-              extensions,
+              serverBuilder.getEnvironmentExtensions(),
               BlazeVersionInfo.instance().getVersion(),
               packageBuilderHelper);
 
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/ServerBuilder.java b/src/main/java/com/google/devtools/build/lib/runtime/ServerBuilder.java
index 6b387f8..dde7062 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/ServerBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/ServerBuilder.java
@@ -18,6 +18,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.packages.AttributeContainer;
+import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.query2.AbstractBlazeQueryEnvironment;
 import com.google.devtools.build.lib.query2.QueryEnvironmentFactory;
@@ -40,6 +41,8 @@
   private final ImmutableList.Builder<QueryFunction> queryFunctions = ImmutableList.builder();
   private final ImmutableList.Builder<OutputFormatter> queryOutputFormatters =
       ImmutableList.builder();
+  private final ImmutableList.Builder<PackageFactory.EnvironmentExtension> environmentExtensions =
+      ImmutableList.builder();
 
   @VisibleForTesting
   public ServerBuilder() {}
@@ -72,6 +75,11 @@
     return queryOutputFormatters.build();
   }
 
+  // Visible for WorkspaceResolver.
+  public ImmutableList<PackageFactory.EnvironmentExtension> getEnvironmentExtensions() {
+    return environmentExtensions.build();
+  }
+
   @VisibleForTesting
   public ImmutableList<BlazeCommand> getCommands() {
     return commands.build();
@@ -158,4 +166,9 @@
     this.queryOutputFormatters.addAll(formatters);
     return this;
   }
+
+  public ServerBuilder addEnvironmentExtension(PackageFactory.EnvironmentExtension extension) {
+    this.environmentExtensions.add(extension);
+    return this;
+  }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
index d4b51bb..e51aa42 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
@@ -20,10 +20,10 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.analysis.util.AnalysisMock;
-import com.google.devtools.build.lib.bazel.rules.BazelRulesModule;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.events.NullEventHandler;
+import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.RuleClassProvider;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction;
@@ -93,7 +93,7 @@
                 .getPackageFactoryForTesting()
                 .create(
                     ruleClassProvider,
-                    new BazelRulesModule().getPackageEnvironmentExtension(),
+                    new PackageFactory.EmptyEnvironmentExtension(),
                     scratch.getFileSystem()),
             directories));
     skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
index 48dd471..c69cddf 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
@@ -26,10 +26,10 @@
 import com.google.common.testing.EqualsTester;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.analysis.util.AnalysisMock;
-import com.google.devtools.build.lib.bazel.rules.BazelRulesModule;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
 import com.google.devtools.build.lib.events.NullEventHandler;
 import com.google.devtools.build.lib.packages.BuildFileNotFoundException;
+import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.RuleClassProvider;
 import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
 import com.google.devtools.build.lib.rules.repository.LocalRepositoryFunction;
@@ -115,7 +115,7 @@
                 .getPackageFactoryForTesting()
                 .create(
                     ruleClassProvider,
-                    new BazelRulesModule().getPackageEnvironmentExtension(),
+                    new PackageFactory.EmptyEnvironmentExtension(),
                     scratch.getFileSystem()),
             directories));
     skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
index 6a59557..0f5e046 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
@@ -21,10 +21,10 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
-import com.google.devtools.build.lib.bazel.rules.BazelRulesModule;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.NoSuchTargetException;
 import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.testutil.MoreAsserts;
@@ -113,7 +113,7 @@
 
   @Override
   protected Iterable<EnvironmentExtension> getEnvironmentExtensions() {
-    return ImmutableList.of(new BazelRulesModule().getPackageEnvironmentExtension());
+    return ImmutableList.<EnvironmentExtension>of(new PackageFactory.EmptyEnvironmentExtension());
   }
 
   private Label getLabelMapping(Package pkg, String name) throws NoSuchTargetException {
diff --git a/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/WorkspaceResolver.java b/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/WorkspaceResolver.java
index 736469f..bbf1a87 100644
--- a/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/WorkspaceResolver.java
+++ b/src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace/WorkspaceResolver.java
@@ -33,9 +33,11 @@
 import com.google.devtools.build.lib.packages.WorkspaceFactory;
 import com.google.devtools.build.lib.runtime.BlazeModule;
 import com.google.devtools.build.lib.runtime.BlazeRuntime;
+import com.google.devtools.build.lib.runtime.ServerBuilder;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.ParserInputSource;
 import com.google.devtools.build.lib.syntax.Type;
+import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.workspace.maven.DefaultModelResolver;
 import com.google.devtools.build.workspace.maven.Resolver;
@@ -59,16 +61,20 @@
   WorkspaceResolver(Resolver resolver, EventHandler handler) {
     this.resolver = resolver;
     this.handler = handler;
+    ServerBuilder serverBuilder = new ServerBuilder();
     ConfiguredRuleClassProvider.Builder ruleClassBuilder =
         new ConfiguredRuleClassProvider.Builder();
     List<BlazeModule> blazeModules = BlazeRuntime.createModules(BazelMain.BAZEL_MODULES);
-    ImmutableList.Builder<EnvironmentExtension> environmentExtensions = ImmutableList.builder();
     for (BlazeModule blazeModule : blazeModules) {
+      try {
+        blazeModule.serverInit(null, serverBuilder);
+      } catch (AbruptExitException e) {
+        throw new RuntimeException(e);
+      }
       blazeModule.initializeRuleClasses(ruleClassBuilder);
-      environmentExtensions.add(blazeModule.getPackageEnvironmentExtension());
     }
     this.ruleClassProvider = ruleClassBuilder.build();
-    this.environmentExtensions = environmentExtensions.build();
+    this.environmentExtensions = serverBuilder.getEnvironmentExtensions();
   }
 
   /** Converts the WORKSPACE file content into an ExternalPackage. */