Clean up FuncallExpression and document it better
With this change, FuncallExpression defers to DotExpression in many cases instead of re-inventing dot expresssion evaluation. This removes some of the code duplication between these two classes.
Additionally, this avoids creating a BuiltinCallable for selfCall methods of objects. This is a benefit in that it cleans up the code (it removes the need for redundant BuiltinCallable code, to be removed in a future change), and it also prevents creating a superfluous object which is to be immediately discarded.
RELNOTES: None.
PiperOrigin-RevId: 219877592
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
index 2809f04..932ce26 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
@@ -734,6 +734,6 @@
assertThrows(AssertionError.class, () ->
getConfiguredTarget("//examples/apple_skylark:my_target"));
assertThat(expected).hasMessageThat()
- .contains("unexpected keyword 'foo' in call");
+ .contains("unexpected keyword 'foo', in call to AppleStaticLibrary");
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index 69511a0..60dc76f 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -1127,8 +1127,7 @@
@Test
public void testStructAccessingNonFunctionFieldWithArgs() throws Exception {
- checkErrorContains(
- "struct field 'a' is not a function", "x = struct(a = 1, b = 2)", "x1 = x.a(1)");
+ checkErrorContains("'int' object is not callable", "x = struct(a = 1, b = 2)", "x1 = x.a(1)");
}
@Test
@@ -1140,7 +1139,7 @@
@Test
public void testStructPosArgs() throws Exception {
checkErrorContains(
- "struct(**kwargs) does not accept positional arguments, but got 1", "x = struct(1, b = 2)");
+ "expected no more than 0 positional arguments, but got 1", "x = struct(1, b = 2)");
}
@Test
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 4bf5203..fe87346 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
@@ -1292,7 +1292,7 @@
assertThrows(AssertionError.class, () -> getConfiguredTarget("//test:my_rule"));
assertThat(expected)
.hasMessageThat()
- .contains("unexpected keyword 'foo' in call to DefaultInfo");
+ .contains("unexpected keyword 'foo', in call to DefaultInfo");
}
@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 732c4e8..682a8a4 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
@@ -1272,7 +1272,7 @@
new SkylarkTest()
.update("mock", new Mock())
.testIfErrorContains(
- "expected string for 'pos' while calling MockFn but got int instead: 1",
+ "expected value of type 'string' for parameter 'pos', in call to MockFn(int)",
"v = mock(1)");
}
@@ -2175,19 +2175,11 @@
}
@Test
- public void testStructFieldDefinedInValuesAndSkylarkCallable() throws Exception {
- new SkylarkTest()
- .update("val", new SkylarkClassObjectWithSkylarkCallables())
- .setUp("v = val.collision_field")
- .testLookup("v", "fromSkylarkCallable");
- }
-
- @Test
public void testStructMethodDefinedInValuesAndSkylarkCallable() throws Exception {
new SkylarkTest()
.update("val", new SkylarkClassObjectWithSkylarkCallables())
.setUp("v = val.collision_method()")
- .testLookup("v", "fromValues");
+ .testLookup("v", "fromSkylarkCallable");
}
@Test