From a9f9049223883380b3b4367e4f219612b5064d3a Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Wed, 12 Nov 2014 11:51:08 +0300 Subject: [PATCH] Evaluate expression: fix exception for breakpoints on object header (for accessor methods) --- .../extractFunctionForDebuggerUtil.kt | 2 +- .../debugger/tinyApp/outs/onObjectHeader.out | 15 +++++++++++ .../singleBreakpoint/onObjectHeader.kt | 27 +++++++++++++++++++ ...KotlinEvaluateExpressionTestGenerated.java | 6 +++++ 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 idea/testData/debugger/tinyApp/outs/onObjectHeader.out create mode 100644 idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/onObjectHeader.kt diff --git a/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/extractFunctionForDebuggerUtil.kt b/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/extractFunctionForDebuggerUtil.kt index 6824f1f7b64..79747826559 100644 --- a/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/extractFunctionForDebuggerUtil.kt +++ b/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/extractFunctionForDebuggerUtil.kt @@ -190,7 +190,7 @@ private fun addDebugExpressionBeforeContextElement(codeFragment: JetCodeFragment contextElement is JetProperty && !contextElement.isLocal() -> { wrapInRunFun(contextElement.getDelegateExpressionOrInitializer()!!) } - contextElement is JetClass -> { + contextElement is JetClassOrObject -> { insertNewInitializer(contextElement.getBody()) } contextElement is JetClassObject -> { diff --git a/idea/testData/debugger/tinyApp/outs/onObjectHeader.out b/idea/testData/debugger/tinyApp/outs/onObjectHeader.out new file mode 100644 index 00000000000..3d161482026 --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/onObjectHeader.out @@ -0,0 +1,15 @@ +LineBreakpoint created at onObjectHeader.kt:5 +!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!;!CUSTOM_LIBRARY!;!RT_JAR! onObjectHeader.OnObjectHeaderPackage +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +onObjectHeader.kt:5 +onObjectHeader.kt:10 +onObjectHeader.kt:16 +onObjectHeader.kt:8 +onObjectHeader.kt:11 +onObjectHeader.kt:20 +onObjectHeader.kt:21 +onObjectHeader.kt:8 +Compile bytecode for 1 + 1 +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/singleBreakpoint/onObjectHeader.kt b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/onObjectHeader.kt new file mode 100644 index 00000000000..e87ea39c953 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/onObjectHeader.kt @@ -0,0 +1,27 @@ +package onObjectHeader + +fun main(args: Array) { + //Breakpoint! + A.test() +} + +object A { + fun test() { + lambda { + foo() + } + } + + fun lambda(f: () -> Unit) { + f() + } + + private fun foo() { + val a = 2 + } +} + +// STEP_INTO: 7 + +// EXPRESSION: 1 + 1 +// RESULT: 2: I \ 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 246af4c4d77..ad785c793d5 100644 --- a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java @@ -160,6 +160,12 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat doSingleBreakpointTest(fileName); } + @TestMetadata("onObjectHeader.kt") + public void testOnObjectHeader() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/onObjectHeader.kt"); + doSingleBreakpointTest(fileName); + } + @TestMetadata("privateMember.kt") public void testPrivateMember() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/privateMember.kt");