bazel syntax: eliminate all but one calls to Runtime.setupStarlarkFunctions
This functionality has moved to class Starlark, in two variants
that reflect the two different intentions of their callers:
- addModule adds a single name to the environment (e.g. attr, native)
- addMethods adds all the methods of a value to the environment (e.g. glob, exports_files, etc)
setupStarlarkFunctions must remain in place temporarily until the last
remaining use, in the copybara code base, is removed. This is trivial but
cannot be done in the same change.
Also, make these CallUtils methods private:
getMethods
getMethodNames (1 overload)
getBuiltinCallable
PiperOrigin-RevId: 279746790
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
index 04b7b45..8e50a2f 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
@@ -58,7 +58,6 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkGlobalLibrary;
-import com.google.devtools.build.lib.syntax.CallUtils;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.EvalUtils;
import com.google.devtools.build.lib.syntax.Printer;
@@ -66,6 +65,7 @@
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Starlark;
import com.google.devtools.build.lib.syntax.StarlarkThread;
import com.google.devtools.build.lib.testutil.MoreAsserts;
import com.google.devtools.build.lib.util.Fingerprint;
@@ -186,13 +186,18 @@
return (StructImpl) configuredTarget.get(key);
}
- private void setupSkylarkFunction(String line) throws Exception {
- update("mock", CallUtils.getBuiltinCallable(this, "mock"));
- exec(line);
+ // Defines all @SkylarkCallable-annotated methods (mock, throw, ...) in the environment.
+ private void defineTestMethods() throws Exception {
+ ImmutableMap.Builder<String, Object> env = ImmutableMap.builder();
+ Starlark.addMethods(env, this);
+ for (Map.Entry<String, Object> entry : env.build().entrySet()) {
+ update(entry.getKey(), entry.getValue());
+ }
}
private void checkSkylarkFunctionError(String errorSubstring, String line) throws Exception {
- EvalException e = assertThrows(EvalException.class, () -> setupSkylarkFunction(line));
+ defineTestMethods();
+ EvalException e = assertThrows(EvalException.class, () -> exec(line));
assertThat(e).hasMessageThat().contains(errorSubstring);
}
@@ -200,7 +205,8 @@
@Test
public void testSkylarkFunctionPosArgs() throws Exception {
- setupSkylarkFunction("a = mock('a', 'b', mandatory_key='c')");
+ defineTestMethods();
+ exec("a = mock('a', 'b', mandatory_key='c')");
Map<?, ?> params = (Map<?, ?>) lookup("a");
assertThat(params.get("mandatory")).isEqualTo("a");
assertThat(params.get("optional")).isEqualTo("b");
@@ -210,7 +216,8 @@
@Test
public void testSkylarkFunctionKwArgs() throws Exception {
- setupSkylarkFunction("a = mock(optional='b', mandatory='a', mandatory_key='c')");
+ defineTestMethods();
+ exec("a = mock(optional='b', mandatory='a', mandatory_key='c')");
Map<?, ?> params = (Map<?, ?>) lookup("a");
assertThat(params.get("mandatory")).isEqualTo("a");
assertThat(params.get("optional")).isEqualTo("b");
@@ -1893,10 +1900,9 @@
@Test
public void testStackTraceWithoutOriginalMessage() throws Exception {
- update("throw", CallUtils.getBuiltinCallable(this, "throw1"));
+ defineTestMethods();
checkEvalErrorContains(
- "There Is No Message: SkylarkRuleImplementationFunctionsTest",
- "throw()");
+ "There Is No Message: SkylarkRuleImplementationFunctionsTest", "throw1()");
}
@SkylarkCallable(name = "throw2", documented = false)
@@ -1906,8 +1912,8 @@
@Test
public void testNoStackTraceOnInterrupt() throws Exception {
- update("throw", CallUtils.getBuiltinCallable(this, "throw2"));
- assertThrows(InterruptedException.class, () -> eval("throw()"));
+ defineTestMethods();
+ assertThrows(InterruptedException.class, () -> eval("throw2()"));
}
@Test
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
index 672fee8..f840c7c 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
@@ -414,9 +414,7 @@
allowReturnNones = true)
public ClassObject proxyMethodsObject() {
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
- for (String nativeFunction : CallUtils.getMethodNames(Mock.class)) {
- builder.put(nativeFunction, CallUtils.getBuiltinCallable(this, nativeFunction));
- }
+ Starlark.addMethods(builder, this);
return StructProvider.STRUCT.create(builder.build(), "no native callable '%s'");
}