diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 0f6d68f9124..385e33df6b1 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -4856,6 +4856,10 @@ The "returned" value of try expression with no finally is either the last expres KtProperty subjectVariable = expression.getSubjectVariable(); KtExpression subjectExpression = expression.getSubjectExpression(); + if (subjectVariable == null && subjectExpression == null) { + v.nop(); + } + SwitchCodegen switchCodegen = switchCodegenProvider.buildAppropriateSwitchCodegenIfPossible( expression, isStatement, CodegenUtil.isExhaustive(bindingContext, expression, isStatement) ); diff --git a/compiler/testData/lineNumber/custom/when.kt b/compiler/testData/lineNumber/custom/when.kt index b18edc1199e..2f05713e84b 100644 --- a/compiler/testData/lineNumber/custom/when.kt +++ b/compiler/testData/lineNumber/custom/when.kt @@ -12,4 +12,4 @@ fun foo(x: Int) { } } -// 2 +3 4 5 6 +8 +9 10 11 8 13 \ No newline at end of file +// 2 3 4 5 6 +8 9 10 11 8 13 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhenWithInline.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhenWithInline.kt index 953b12d64d0..ef8a2872c06 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhenWithInline.kt +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhenWithInline.kt @@ -86,4 +86,4 @@ inline fun foo(f: () -> Int): Int { fun test(i: Int) = i -// STEP_OVER: 30 \ No newline at end of file +// STEP_OVER: 32 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhenWithInline.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhenWithInline.out index db8bc2e4ad0..c254b9a99f2 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhenWithInline.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhenWithInline.out @@ -2,13 +2,16 @@ LineBreakpoint created at stepOverWhenWithInline.kt:5 Run Java Connected to the target VM stepOverWhenWithInline.kt:5 +stepOverWhenWithInline.kt:7 stepOverWhenWithInline.kt:8 stepOverWhenWithInline.kt:9 stepOverWhenWithInline.kt:7 +stepOverWhenWithInline.kt:13 stepOverWhenWithInline.kt:14 stepOverWhenWithInline.kt:17 stepOverWhenWithInline.kt:18 stepOverWhenWithInline.kt:13 +stepOverWhenWithInline.kt:25 stepOverWhenWithInline.kt:26 stepOverWhenWithInline.kt:27 stepOverWhenWithInline.kt:25 @@ -21,14 +24,16 @@ stepOverWhenWithInline.kt:38 stepOverWhenWithInline.kt:51 stepOverWhenWithInline.kt:52 stepOverWhenWithInline.kt:51 +stepOverWhenWithInline.kt:57 stepOverWhenWithInline.kt:58 stepOverWhenWithInline.kt:57 +stepOverWhenWithInline.kt:63 stepOverWhenWithInline.kt:64 stepOverWhenWithInline.kt:65 stepOverWhenWithInline.kt:63 +stepOverWhenWithInline.kt:75 stepOverWhenWithInline.kt:76 stepOverWhenWithInline.kt:75 -stepOverWhenWithInline.kt:80 Disconnected from the target VM Process finished with exit code 0 diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/whenWithoutExpression.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/whenWithoutExpression.kt new file mode 100644 index 00000000000..f4b6ff58c2e --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/whenWithoutExpression.kt @@ -0,0 +1,19 @@ +package whenWithoutExpression + +fun test(a: String): String { + val b = a.toLowerCase() + //Breakpoint! + return when { + b.startsWith("a") -> "A" + b.startsWith("b") -> "B" + b.startsWith("c") -> "C" + else -> "other" + } +} + +fun main() { + test("abcd") +} + +// STEP_OVER: 4 +// PRINT_FRAME \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/whenWithoutExpression.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/whenWithoutExpression.out new file mode 100644 index 00000000000..28817580221 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/whenWithoutExpression.out @@ -0,0 +1,11 @@ +LineBreakpoint created at whenWithoutExpression.kt:6 +Run Java +Connected to the target VM +whenWithoutExpression.kt:6 +whenWithoutExpression.kt:7 +whenWithoutExpression.kt:6 +whenWithoutExpression.kt:15 +whenWithoutExpression.kt:16 +Disconnected from the target VM + +Process finished with exit code 0 diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java index f9c31519604..fff9606d33b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java @@ -922,6 +922,11 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { public void testStopInlineCallInLocalFunInSecondaryConstructor() throws Exception { runTest("idea/testData/debugger/tinyApp/src/stepping/stepOver/stopInlineCallInLocalFunInSecondaryConstructor.kt"); } + + @TestMetadata("whenWithoutExpression.kt") + public void testWhenWithoutExpression() throws Exception { + runTest("idea/testData/debugger/tinyApp/src/stepping/stepOver/whenWithoutExpression.kt"); + } } @TestMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOverForce")