MethodDescriptor.call: don't convert unchecked exceptions into EvalException.
Also, move some code that doesn't need to be in the try block out of it.
Closes #8266.
PiperOrigin-RevId: 251673653
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 2e8fdc7..bbcde18 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
@@ -511,6 +511,11 @@
return "with_args_and_kwargs(" + foo + ", " + argsString + ", " + kwargsString + ")";
}
+ @SkylarkCallable(name = "raise_unchecked_exception", documented = false)
+ public void raiseUncheckedException() {
+ throw new InternalError("buggy code");
+ }
+
@Override
public String toString() {
return "<mock>";
@@ -1309,6 +1314,12 @@
}
@Test
+ public void testCallingMethodThatRaisesUncheckedException() throws Exception {
+ update("mock", new Mock());
+ assertThrows(InternalError.class, () -> eval("mock.raise_unchecked_exception()"));
+ }
+
+ @Test
public void testJavaFunctionWithExtraInterpreterParams() throws Exception {
new SkylarkTest()
.update("mock", new Mock())
@@ -1470,12 +1481,10 @@
@Test
public void testJavaFunctionReturnsNullFails() throws Exception {
- new SkylarkTest()
- .update("mock", new Mock())
- .testIfErrorContains(
- "method invocation returned None,"
- + " please file a bug report: nullfunc_failing(\"abc\", 1)",
- "mock.nullfunc_failing('abc', 1)");
+ update("mock", new Mock());
+ IllegalStateException e =
+ assertThrows(IllegalStateException.class, () -> eval("mock.nullfunc_failing('abc', 1)"));
+ assertThat(e).hasMessageThat().contains("method invocation returned None");
}
@Test
@@ -1947,6 +1956,7 @@
"nullfunc_failing",
"nullfunc_working",
"proxy_methods_object",
+ "raise_unchecked_exception",
"return_bad",
"string",
"string_list",