From 5667a924727340c91eb77440f87e9f2fa597ce82 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Mon, 11 Jan 2016 19:12:20 +0300 Subject: [PATCH] Debugger: add breakpoint variant for line with lambda in init block #KT-KT-1061 Fixed --- .../breakpoints/KotlinLineBreakpointType.java | 3 ++- .../breakpoints/breakpointTypeUtils.kt | 6 ++---- .../debugger/tinyApp/outs/initializer.out | 11 ++++++++++ .../multipleBreakpoints/initializer.kt | 20 +++++++++++++++++++ ...KotlinEvaluateExpressionTestGenerated.java | 6 ++++++ 5 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 idea/testData/debugger/tinyApp/outs/initializer.out create mode 100644 idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/initializer.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/breakpoints/KotlinLineBreakpointType.java b/idea/src/org/jetbrains/kotlin/idea/debugger/breakpoints/KotlinLineBreakpointType.java index 53b26edf56e..fcec300c81e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/breakpoints/KotlinLineBreakpointType.java +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/breakpoints/KotlinLineBreakpointType.java @@ -35,6 +35,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.java.debugger.breakpoints.properties.JavaBreakpointProperties; import org.jetbrains.java.debugger.breakpoints.properties.JavaLineBreakpointProperties; import org.jetbrains.kotlin.idea.KotlinIcons; +import org.jetbrains.kotlin.psi.KtClassInitializer; import org.jetbrains.kotlin.psi.KtFunction; import javax.swing.*; @@ -96,7 +97,7 @@ public class KotlinLineBreakpointType extends JavaLineBreakpointType { @Nullable public static PsiElement getContainingMethod(@Nullable PsiElement elem) { //noinspection unchecked - return PsiTreeUtil.getParentOfType(elem, KtFunction.class); + return PsiTreeUtil.getParentOfType(elem, KtFunction.class, KtClassInitializer.class); } public static boolean inTheMethod(@NotNull SourcePosition pos, @NotNull PsiElement method) { diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/breakpoints/breakpointTypeUtils.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/breakpoints/breakpointTypeUtils.kt index 4427d4a08a0..f2120479fc0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/breakpoints/breakpointTypeUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/breakpoints/breakpointTypeUtils.kt @@ -108,10 +108,8 @@ fun computeVariants( XSourcePositionImpl.createByElement(lambda.bodyExpression), lambda, ordinal)) } - if (result.size > 1) { - val allBreakpoint = (kotlinBreakpointType as JavaLineBreakpointType).JavaBreakpointVariant(position) - result.addFirst(allBreakpoint) - } + val allBreakpoint = (kotlinBreakpointType as JavaLineBreakpointType).JavaBreakpointVariant(position) + result.addFirst(allBreakpoint) return result } diff --git a/idea/testData/debugger/tinyApp/outs/initializer.out b/idea/testData/debugger/tinyApp/outs/initializer.out new file mode 100644 index 00000000000..5619714d942 --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/initializer.out @@ -0,0 +1,11 @@ +LineBreakpoint created at initializer.kt:12 +LineBreakpoint created at initializer.kt:18 lambdaOrdinal = -1 +!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !OUTPUT_PATH!;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! initializer.InitializerKt +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +initializer.kt:12 +Compile bytecode for prop +initializer.kt:18 +Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' + +Process finished with exit code 0 +1 diff --git a/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/initializer.kt b/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/initializer.kt new file mode 100644 index 00000000000..9c083745d0f --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/initializer.kt @@ -0,0 +1,20 @@ +package initializer + +fun main(args: Array) { + A(1) +} + +class A(val prop: Int) { + init { + // EXPRESSION: prop + // RESULT: 1: I + //Breakpoint! + val a = 1 + + val list = listOf(1) + // EXPRESSION: it + // RESULT: Unresolved reference: it + //Breakpoint! (lambdaOrdinal = -1) + list.forEach { println(it) } + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java index d8c4d5ee9e1..87244882283 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java @@ -736,6 +736,12 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat doMultipleBreakpointsTest(fileName); } + @TestMetadata("initializer.kt") + public void testInitializer() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/initializer.kt"); + doMultipleBreakpointsTest(fileName); + } + @TestMetadata("isInsideInlineLambda.kt") public void testIsInsideInlineLambda() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/isInsideInlineLambda.kt");