From 73de3ae9ab1c1808984764cfe7ea465e8b6ec6f6 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Thu, 16 Jan 2014 19:09:11 +0400 Subject: [PATCH] Catch exceptions evaluating expression --- .../jet/lang/evaluate/ConstantExpressionEvaluator.kt | 6 +++++- .../testData/evaluate/constant/exceptionWhenEvaluate.kt | 4 ++++ .../jet/evaluate/EvaluateExpressionTestGenerated.java | 5 +++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/evaluate/constant/exceptionWhenEvaluate.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.kt b/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.kt index edb36056cd9..7fecf7c275d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.kt @@ -234,7 +234,11 @@ public class ConstantExpressionEvaluator private (val trace: BindingTrace) : Jet if (functions == null) return null val (function, checker) = functions - val actualResult = function(receiver.value, parameter.value) + val actualResult = try { + function(receiver.value, parameter.value) + } catch (e: Exception) { + null + } if (checker == emptyBinaryFun) { return actualResult } diff --git a/compiler/testData/evaluate/constant/exceptionWhenEvaluate.kt b/compiler/testData/evaluate/constant/exceptionWhenEvaluate.kt new file mode 100644 index 00000000000..452abff742e --- /dev/null +++ b/compiler/testData/evaluate/constant/exceptionWhenEvaluate.kt @@ -0,0 +1,4 @@ +package test + +// val prop1: null +val prop1 = "".get(0) \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/evaluate/EvaluateExpressionTestGenerated.java b/compiler/tests/org/jetbrains/jet/evaluate/EvaluateExpressionTestGenerated.java index 771f747e2a0..6c3fb292e68 100644 --- a/compiler/tests/org/jetbrains/jet/evaluate/EvaluateExpressionTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/evaluate/EvaluateExpressionTestGenerated.java @@ -53,6 +53,11 @@ public class EvaluateExpressionTestGenerated extends AbstractEvaluateExpressionT doConstantTest("compiler/testData/evaluate/constant/equals.kt"); } + @TestMetadata("exceptionWhenEvaluate.kt") + public void testExceptionWhenEvaluate() throws Exception { + doConstantTest("compiler/testData/evaluate/constant/exceptionWhenEvaluate.kt"); + } + @TestMetadata("float.kt") public void testFloat() throws Exception { doConstantTest("compiler/testData/evaluate/constant/float.kt");