bazel syntax: eliminate two subclasses of BuiltinFunction
This change replaces two test-only subclasses of BuiltinFunction with
StarlarkCallables. (The remaining two subclasses, rule and
repository_rule, will be dealt with in a follow-up.)
Also, change type of rule's and repository_rule's "implementation" parameter
to StarlarkFunction, and eliminate casts that already made this assumption.
Also, give StarlarkCallable.getLocation a default value of BUILTIN.
PiperOrigin-RevId: 285022081
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 dcb9f0f..9fb50eb 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
@@ -2088,34 +2088,34 @@
new NativeProvider<SkylarkClassObjectWithSkylarkCallables>(
SkylarkClassObjectWithSkylarkCallables.class, "struct_with_skylark_callables") {};
+ // A function that returns "fromValues".
+ Object returnFromValues =
+ new StarlarkCallable() {
+ @Override
+ public String getName() {
+ return "returnFromValues";
+ }
+
+ @Override
+ public Object call(
+ List<Object> args,
+ Map<String, Object> kwargs,
+ FuncallExpression call,
+ StarlarkThread thread) {
+ return "fromValues";
+ }
+ };
+
final Map<String, Object> fields =
ImmutableMap.of(
"values_only_field",
"fromValues",
"values_only_method",
- new BuiltinFunction(FunctionSignature.of()) {
- @Override
- public String getName() {
- return "values_only_method";
- }
-
- public String invoke() {
- return "fromValues";
- }
- },
+ returnFromValues,
"collision_field",
"fromValues",
"collision_method",
- new BuiltinFunction(FunctionSignature.of()) {
- @Override
- public String getName() {
- return "collision_method";
- }
-
- public String invoke() {
- return "fromValues";
- }
- });
+ returnFromValues);
SkylarkClassObjectWithSkylarkCallables() {
super(CONSTRUCTOR, Location.BUILTIN);