bazel packages: simplify createRuleClassStarlarkThread

And rename to setStarlarkThreadContext.

No behavior change.

PiperOrigin-RevId: 310596677
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index 2130274..56b6d34 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -55,10 +55,6 @@
 import com.google.devtools.build.lib.skylarkbuildapi.core.Bootstrap;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkBuiltin;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkInterfaceUtils;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.common.options.Option;
 import com.google.devtools.common.options.OptionDefinition;
@@ -763,33 +759,12 @@
     return environment;
   }
 
-  // TODO(adonovan): all that needs to be in the RuleClassProvider interface is:
-  //
-  //   // Returns the BazelStarlarkContext to be associated with this loading-phase thread.
-  //   BazelStarlarkContext getThreadContext(repoMapping, fileLabel, transitiveDigest).
-  //
-  // (Alternatively the call could accept the Thread and set its BazelStarlarkContext.)
   @Override
-  public StarlarkThread createRuleClassStarlarkThread(
+  public void setStarlarkThreadContext(
+      StarlarkThread thread,
       Label fileLabel,
-      Mutability mutability,
-      StarlarkSemantics starlarkSemantics,
-      StarlarkThread.PrintHandler printHandler,
       byte[] transitiveDigest,
-      Map<String, Module> loadedModules,
-      ClassObject nativeModule,
       ImmutableMap<RepositoryName, RepositoryName> repoMapping) {
-    Map<String, Object> env = new HashMap<>(environment);
-    env.put("native", nativeModule);
-
-    StarlarkThread thread =
-        StarlarkThread.builder(mutability)
-            .setGlobals(Module.createForBuiltins(env).withLabel(fileLabel))
-            .setSemantics(starlarkSemantics)
-            .setLoadedModules(loadedModules)
-            .build();
-    thread.setPrintHandler(printHandler);
-
     new BazelStarlarkContext(
             BazelStarlarkContext.Phase.LOADING,
             toolsRepository,
@@ -799,8 +774,6 @@
             /*analysisRuleLabel=*/ null,
             transitiveDigest)
         .storeInThread(thread);
-
-    return thread;
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
index 59afcf6..962d333 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
@@ -19,10 +19,6 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.packages.RuleClass.Builder.ThirdPartyLicenseExistencePolicy;
-import com.google.devtools.build.lib.syntax.ClassObject;
-import com.google.devtools.build.lib.syntax.Module;
-import com.google.devtools.build.lib.syntax.Mutability;
-import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.Map;
 
@@ -48,32 +44,21 @@
   Map<String, RuleClass> getRuleClassMap();
 
   /**
-   * Returns a new StarlarkThread for initialization of a .bzl file loaded on behalf of a BUILD or
-   * WORKSPACE file. Implementations need to be thread safe. Be sure to close() the mutability
-   * before you return the results of evaluation.
+   * Stores a BazelStarlarkContext in the specified StarlarkThread about to initialize a .bzl file.
    *
    * <p>A .bzl file loaded by (or indirectly by) a BUILD file may differ semantically from the same
    * file loaded on behalf of a WORKSPACE file, because of the repository mapping and native module;
    * these differences much be accounted for by caching.
    *
+   * @param thread StarlarkThread in which to store the context.
    * @param label the label of the .bzl file
-   * @param mutability the Mutability for the .bzl module globals
-   * @param starlarkSemantics the semantics options that modify the interpreter
-   * @param printHandler defines the behavior of Starlark print statements
    * @param transitiveDigest digest of the .bzl file and those it transitively loads
-   * @param loadedModules the .bzl modules loaded by each load statement
-   * @param nativeModule the appropriate {@code native} module for this environment.
    * @param repoMapping map of RepositoryNames to be remapped
-   * @return the StarlarkThread in which to initualize the .bzl module
    */
-  StarlarkThread createRuleClassStarlarkThread(
+  void setStarlarkThreadContext(
+      StarlarkThread thread,
       Label label,
-      Mutability mutability,
-      StarlarkSemantics starlarkSemantics,
-      StarlarkThread.PrintHandler printHandler,
       byte[] transitiveDigest,
-      Map<String, Module> loadedModules,
-      ClassObject nativeModule,
       ImmutableMap<RepositoryName, RepositoryName> repoMapping);
 
   /**
@@ -81,7 +66,7 @@
    * value may be inappropriate for a WORKSPACE file. Includes the universal bindings (e.g. True,
    * len), though that will soon change.
    */
-  // TODO(adonovan): update doc comment.
+  // TODO(adonovan): update doc comment. And does it really include native?
   ImmutableMap<String, Object> getEnvironment();
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkImportLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkImportLookupFunction.java
index 721ddc9..e5fe7d6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkImportLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkImportLookupFunction.java
@@ -62,6 +62,7 @@
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
 import com.google.devtools.build.skyframe.ValueOrException;
+import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -661,7 +662,7 @@
   /** Executes the .bzl file defining the module to be imported. */
   private Module executeModule(
       StarlarkFile file,
-      Label extensionLabel,
+      Label moduleLabel,
       byte[] transitiveDigest,
       Map<String, Module> loadedModules,
       StarlarkSemantics starlarkSemantics,
@@ -669,30 +670,30 @@
       boolean inWorkspace,
       ImmutableMap<RepositoryName, RepositoryName> repositoryMapping)
       throws StarlarkImportFailedException, InterruptedException {
-    StoredEventHandler eventHandler = new StoredEventHandler();
-    // Any change to an input file may affect program behavior,
-    // even if only by changing line numbers in error messages.
-    PathFragment extensionFile = extensionLabel.toPathFragment();
-    try (Mutability mutability = Mutability.create("importing", extensionFile)) {
+    // .bzl predeclared environment
+    Map<String, Object> predeclared = new HashMap<>(ruleClassProvider.getEnvironment());
+    predeclared.put("native", packageFactory.getNativeModule(inWorkspace));
+
+    try (Mutability mu = Mutability.create("importing", moduleLabel)) {
       StarlarkThread thread =
-          ruleClassProvider.createRuleClassStarlarkThread(
-              extensionLabel,
-              mutability,
-              starlarkSemantics,
-              Event.makeDebugPrintHandler(eventHandler),
-              transitiveDigest,
-              loadedModules,
-              packageFactory.getNativeModule(inWorkspace),
-              repositoryMapping);
+          StarlarkThread.builder(mu)
+              .setGlobals(Module.createForBuiltins(predeclared).withLabel(moduleLabel))
+              .setSemantics(starlarkSemantics)
+              .setLoadedModules(loadedModules)
+              .build();
+      StoredEventHandler eventHandler = new StoredEventHandler();
+      thread.setPrintHandler(Event.makeDebugPrintHandler(eventHandler));
+      ruleClassProvider.setStarlarkThreadContext(
+          thread, moduleLabel, transitiveDigest, repositoryMapping);
       Module module = thread.getGlobals();
-      execAndExport(file, extensionLabel, eventHandler, thread);
+      execAndExport(file, moduleLabel, eventHandler, thread);
 
       Event.replayEventsOn(env.getListener(), eventHandler.getEvents());
       for (Postable post : eventHandler.getPosts()) {
         env.getListener().post(post);
       }
       if (eventHandler.hasErrors()) {
-        throw StarlarkImportFailedException.errors(extensionFile);
+        throw StarlarkImportFailedException.errors(moduleLabel.toPathFragment());
       }
       return module;
     }