From a17bcce682b76e028b8068fee98e82be1731108d Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Mon, 23 Jun 2014 17:39:53 +0400 Subject: [PATCH] Add tests for exceptions from evaluate expression --- .../evaluate/KotlinEvaluationBuilder.kt | 2 +- .../debugger/tinyApp/outs/clearCache.out | 27 ++++---- .../debugger/tinyApp/outs/exceptions.out | 20 ++++++ .../multipleBreakpoints/clearCache.kt | 21 ------ .../multipleBreakpoints/exceptions.kt | 65 +++++++++++++++++++ ...KotlinEvaluateExpressionTestGenerated.java | 5 ++ 6 files changed, 102 insertions(+), 38 deletions(-) create mode 100644 idea/testData/debugger/tinyApp/outs/exceptions.out create mode 100644 idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/exceptions.kt diff --git a/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt b/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt index 22942f81958..4ef6861a05d 100644 --- a/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt +++ b/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt @@ -100,7 +100,7 @@ class KotlinEvaluator(val codeFragment: JetCodeFragment, val virtualMachine = context.getDebugProcess().getVirtualMachineProxy().getVirtualMachine() // If bytecode was taken from cache and exception was thrown - recompile bytecode and run eval4j again - if (result is ExceptionThrown && isCompiledDataFromCache) { + if (isCompiledDataFromCache && result is ExceptionThrown && result.kind == ExceptionThrown.ExceptionKind.BROKEN_CODE) { return runEval4j(context, extractAndCompile(codeFragment, sourcePosition), args).toJdiValue(virtualMachine) } diff --git a/idea/testData/debugger/tinyApp/outs/clearCache.out b/idea/testData/debugger/tinyApp/outs/clearCache.out index f5f1235bf62..1ea2db70d4c 100644 --- a/idea/testData/debugger/tinyApp/outs/clearCache.out +++ b/idea/testData/debugger/tinyApp/outs/clearCache.out @@ -9,14 +9,12 @@ LineBreakpoint created at clearCache.kt:86 LineBreakpoint created at clearCache.kt:95 LineBreakpoint created at clearCache.kt:105 LineBreakpoint created at clearCache.kt:113 -LineBreakpoint created at clearCache.kt:124 -LineBreakpoint created at clearCache.kt:133 -LineBreakpoint created at clearCache.kt:143 -LineBreakpoint created at clearCache.kt:151 +LineBreakpoint created at clearCache.kt:123 +LineBreakpoint created at clearCache.kt:131 +LineBreakpoint created at clearCache.kt:149 +LineBreakpoint created at clearCache.kt:154 +LineBreakpoint created at clearCache.kt:161 LineBreakpoint created at clearCache.kt:169 -LineBreakpoint created at clearCache.kt:174 -LineBreakpoint created at clearCache.kt:181 -LineBreakpoint created at clearCache.kt:189 !JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !APP_PATH!\classes;!KOTLIN_RUNTIME!;!RT_JAR! clearCache.ClearCachePackage Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' clearCache.kt:11 @@ -39,18 +37,15 @@ clearCache.kt:94 clearCache.kt:104 clearCache.kt:112 Compile bytecode for c.size() -clearCache.kt:123 -Compile bytecode for c.get(0) -clearCache.kt:132 -clearCache.kt:142 +clearCache.kt:122 Compile bytecode for o.test() -clearCache.kt:150 -clearCache.kt:168 +clearCache.kt:130 +clearCache.kt:148 Compile bytecode for obj.test() -clearCache.kt:173 -clearCache.kt:180 +clearCache.kt:153 +clearCache.kt:160 Compile bytecode for o.test() -clearCache.kt:188 +clearCache.kt:168 Compile bytecode for o.test() Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' diff --git a/idea/testData/debugger/tinyApp/outs/exceptions.out b/idea/testData/debugger/tinyApp/outs/exceptions.out new file mode 100644 index 00000000000..2491cf5912d --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/exceptions.out @@ -0,0 +1,20 @@ +LineBreakpoint created at exceptions.kt:9 +LineBreakpoint created at exceptions.kt:14 +LineBreakpoint created at exceptions.kt:26 +LineBreakpoint created at exceptions.kt:31 +LineBreakpoint created at exceptions.kt:42 +LineBreakpoint created at exceptions.kt:51 +!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !APP_PATH!\classes;!KOTLIN_RUNTIME!;!RT_JAR! exceptions.ExceptionsPackage +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +exceptions.kt:8 +Compile bytecode for fail() +exceptions.kt:13 +exceptions.kt:25 +Compile bytecode for o as Derived +exceptions.kt:30 +exceptions.kt:41 +Compile bytecode for c.get(0) +exceptions.kt:50 +Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' + +Process finished with exit code 0 diff --git a/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/clearCache.kt b/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/clearCache.kt index 290a9a81261..99f8c6c8f46 100644 --- a/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/clearCache.kt +++ b/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/clearCache.kt @@ -114,26 +114,6 @@ fun subTypePlatform() { } } -fun genericRerun() { - if (true) { - val c = ArrayList() - c.add(1) - // EXPRESSION: c.get(0) - // RESULT: 1: I - //Breakpoint! - val b = 1 - } - - if (true) { - val c = ArrayList() - c.add("a") - // EXPRESSION: c.get(0) - // RESULT: "a": Ljava/lang/String; - //Breakpoint! - val b = 1 - } -} - fun innerClass() { if (true) { val o = TestInnerClasses.Base() @@ -200,7 +180,6 @@ fun main(args: Array) { primitiveTypes() subType() subTypePlatform() - genericRerun() innerClass() objects() } diff --git a/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/exceptions.kt b/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/exceptions.kt new file mode 100644 index 00000000000..deb56b87e41 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/exceptions.kt @@ -0,0 +1,65 @@ +package exceptions + +import java.util.ArrayList + +fun throwException() { + // EXPRESSION: fail() + // RESULT: instance of java.lang.UnsupportedOperationException(id=ID): Ljava/lang/UnsupportedOperationException; + //Breakpoint! + val a = 1 + + // EXPRESSION: fail() + // RESULT: instance of java.lang.UnsupportedOperationException(id=ID): Ljava/lang/UnsupportedOperationException; + //Breakpoint! + val b = 1 +} + +fun fail() { + throw UnsupportedOperationException() +} + +fun classCast() { + val o = Base() + // EXPRESSION: o as Derived + // RESULT: java.lang.ClassCastException: exceptions.Base cannot be cast to exceptions.Derived: Ljava/lang/ClassCastException; + //Breakpoint! + val a = 1 + + // EXPRESSION: o as Derived + // RESULT: java.lang.ClassCastException: exceptions.Base cannot be cast to exceptions.Derived: Ljava/lang/ClassCastException; + //Breakpoint! + val b = 1 +} + + +fun genericClassCast() { + if (true) { + val c = ArrayList() + c.add(1) + // EXPRESSION: c.get(0) + // RESULT: 1: I + //Breakpoint! + val b = 1 + } + + if (true) { + val c = ArrayList() + c.add("a") + // EXPRESSION: c.get(0) + // RESULT: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number: Ljava/lang/ClassCastException; + //Breakpoint! + val b = 1 + } +} + +open class Base { + private fun test(): Int = 1 +} + +class Derived: Base() + +fun main(args: Array) { + throwException() + classCast() + genericClassCast() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java index a9fe9459d19..538ea354fb7 100644 --- a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java @@ -151,6 +151,11 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat doMultipleBreakpointsTest("idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/clearCache.kt"); } + @TestMetadata("exceptions.kt") + public void testExceptions() throws Exception { + doMultipleBreakpointsTest("idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/exceptions.kt"); + } + } public static Test suite() {