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;
}