From 3802957c1556f867ca6ca9e7b0643dd2b4f3d3cb Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Fri, 6 Feb 2015 15:12:28 +0300 Subject: [PATCH] Debugger: add tests for accessing outer class members from lambda inside inner class --- .../outs/funFromOuterClassInLamdba.out | 14 +++++++ .../funFromOuterClassInLamdba.kt | 42 +++++++++++++++++++ ...KotlinEvaluateExpressionTestGenerated.java | 6 +++ 3 files changed, 62 insertions(+) create mode 100644 idea/testData/debugger/tinyApp/outs/funFromOuterClassInLamdba.out create mode 100644 idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/funFromOuterClassInLamdba.kt diff --git a/idea/testData/debugger/tinyApp/outs/funFromOuterClassInLamdba.out b/idea/testData/debugger/tinyApp/outs/funFromOuterClassInLamdba.out new file mode 100644 index 00000000000..70c9cc5b811 --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/funFromOuterClassInLamdba.out @@ -0,0 +1,14 @@ +LineBreakpoint created at funFromOuterClassInLamdba.kt:20 +LineBreakpoint created at funFromOuterClassInLamdba.kt:28 +LineBreakpoint created at funFromOuterClassInLamdba.kt:36 +!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! funFromOuterClassInLamdba.FunFromOuterClassInLamdbaPackage +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +funFromOuterClassInLamdba.kt:20 +Compile bytecode for foo() + 1 +funFromOuterClassInLamdba.kt:28 +Compile bytecode for foo() + 2 +funFromOuterClassInLamdba.kt:36 +Compile bytecode for foo() + 3 +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/funFromOuterClassInLamdba.kt b/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/funFromOuterClassInLamdba.kt new file mode 100644 index 00000000000..195ac3ecd25 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/funFromOuterClassInLamdba.kt @@ -0,0 +1,42 @@ +package funFromOuterClassInLamdba + +fun main(args: Array) { + Outer().Inner().test() +} + +class Outer { + fun foo() = 1 + + inner class Inner { + fun innerFun() = 1 + fun test() { + fun f() = 1 + + // outer is captured in lambda + lambda { + // EXPRESSION: foo() + 1 + // RESULT: 2: I + //Breakpoint! + val a = foo() + } + + // outer isn't captured in lambda + lambda { + // EXPRESSION: foo() + 2 + // RESULT: Cannot find local variable: name = this + //Breakpoint! + val a = 1 + } + + // inner is captured in lambda + lambda { + // EXPRESSION: foo() + 3 + // RESULT: 4: I + //Breakpoint! + val a = innerFun() + } + } + } +} + +fun lambda(f: () -> Unit) = f() \ No newline at end of file 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 2baaca35ce6..6a8c363cea0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java @@ -488,6 +488,12 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat doMultipleBreakpointsTest(fileName); } + @TestMetadata("funFromOuterClassInLamdba.kt") + public void testFunFromOuterClassInLamdba() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/funFromOuterClassInLamdba.kt"); + doMultipleBreakpointsTest(fileName); + } + @TestMetadata("whenEntry.kt") public void testWhenEntry() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/whenEntry.kt");