From ce4f923ba02e8f9c948122b4940d1dd814680dc8 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 10 Jul 2017 15:41:57 +0300 Subject: [PATCH] Replace return with `nop` to avoid merging line instructions (KT-18949) Dex ignores subsequent line numbers for same instructions and interprets instruction after inline as if they were inlined. This makes debugger behaves as if there's nowhere to stop on line with breakpoint. This also makes stepping through inline function consistent with non-inline analog. In both context debugger now stops on '}'. #KT-18949 Fixed #KT-17120 Fixed --- .../kotlin/codegen/inline/MethodInliner.kt | 6 +++++- .../inlineWithoutStateMachine.txt | 13 +++++++++++++ .../coercionToUnitOptimization/nopInlineFuns.kt | 2 +- .../bytecodeText/forLoop/loopVarInterval.kt | 2 +- .../linenumberForOneParametersArgumentCall.kt | 2 +- .../inlinedConstuctorWithSuperCallParams.kt | 2 +- .../custom/functionCallWithDefault.kt | 2 +- .../functionCallWithInlinedLambdaParam.kt | 2 +- .../noParametersArgumentCallInExpression.kt | 2 +- .../custom/stepIntoStdlibInlineFun2step.kt | 2 +- .../custom/stepIntoStdlibInlineFun2step.out | 2 ++ .../soInlineCallInLastStatementInInline.kt | 2 +- .../soInlineCallInLastStatementInInline.out | 1 + .../soInlineCallInLastStatementInInlineDex.out | 1 + ...lInLastStatementInInlineFunctionArgument.out | 1 + ...nLastStatementInInlineFunctionArgumentDex.kt | 2 +- ...LastStatementInInlineFunctionArgumentDex.out | 2 +- ...nlineCallInLastStatementInInlineInInline.out | 2 ++ ...ementOfInlineWithArgumentFromCalleeAndOwn.kt | 2 +- ...mentOfInlineWithArgumentFromCalleeAndOwn.out | 1 + ...FunWithLastStatementMultilineArgumentCall.kt | 2 +- ...unWithLastStatementMultilineArgumentCall.out | 1 + ...eFunWithLastStatementOneLineArgumentCall.out | 1 + .../stepOver/soInlineIfConditionLambdaFalse.out | 1 + .../stepOver/soInlineIfConditionLambdaTrue.out | 1 + .../src/stepping/stepOver/soInlineUnitFunDex.kt | 17 +++++++++++++++++ .../stepping/stepOver/soInlineUnitFunDex.out | 8 ++++++++ .../stepOver/stepOverInsideInlineFun.kt | 2 +- .../stepOver/stepOverInsideInlineFun.out | 1 + .../debugger/KotlinSteppingTestGenerated.java | 6 ++++++ 30 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineUnitFunDex.kt create mode 100644 idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineUnitFunDex.out diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt index beea132d717..da815e4111f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt @@ -846,9 +846,13 @@ class MethodInliner( } if (isLocalReturn && endLabel != null) { + val nop = InsnNode(Opcodes.NOP) + instructions.insert(insnNode, nop) + val labelNode = endLabel.info as LabelNode val jumpInsnNode = JumpInsnNode(Opcodes.GOTO, labelNode) - instructions.insert(insnNode, jumpInsnNode) + instructions.insert(nop, jumpInsnNode) + instructions.remove(insnNode) insnNode = jumpInsnNode } diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt index 6c2735eec89..cedffb9c222 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt @@ -24,10 +24,23 @@ final class InlineWithoutStateMachineKt$complexSuspend$1 { synthetic final method setLabel(p0: int): void } +@kotlin.Metadata +final class InlineWithoutStateMachineKt$suspendHere$1 { + field L$0: java.lang.Object + synthetic field data: java.lang.Object + synthetic field exception: java.lang.Throwable + inner class InlineWithoutStateMachineKt$suspendHere$1 + method (p0: kotlin.coroutines.experimental.Continuation): void + public final @org.jetbrains.annotations.Nullable method doResume(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Throwable): java.lang.Object + synthetic final method getLabel(): int + synthetic final method setLabel(p0: int): void +} + @kotlin.Metadata public final class InlineWithoutStateMachineKt { inner class InlineWithoutStateMachineKt$box$1 inner class InlineWithoutStateMachineKt$complexSuspend$1 + inner class InlineWithoutStateMachineKt$suspendHere$1 public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): void public final static @org.jetbrains.annotations.Nullable method complexSuspend(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object diff --git a/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/nopInlineFuns.kt b/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/nopInlineFuns.kt index fd0484340e0..5d83a81d8e0 100644 --- a/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/nopInlineFuns.kt +++ b/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/nopInlineFuns.kt @@ -23,4 +23,4 @@ fun simpleFunVoid(f: () -> Unit): Unit { return f() } -// 5 NOP +// 7 NOP diff --git a/compiler/testData/codegen/bytecodeText/forLoop/loopVarInterval.kt b/compiler/testData/codegen/bytecodeText/forLoop/loopVarInterval.kt index d993a974f2b..f4b3815c698 100644 --- a/compiler/testData/codegen/bytecodeText/forLoop/loopVarInterval.kt +++ b/compiler/testData/codegen/bytecodeText/forLoop/loopVarInterval.kt @@ -6,4 +6,4 @@ fun f() { // 1 ISTORE 0\s+L3 // 1 ILOAD 0\s+INVOKEVIRTUAL java/io/PrintStream.print \(C\)V -// 1 LOCALVARIABLE c C L3 L6 0 +// 1 LOCALVARIABLE c C L3 L7 0 diff --git a/compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt b/compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt index 47c0850198a..0c773f18018 100644 --- a/compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt +++ b/compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt @@ -9,4 +9,4 @@ inline fun lookAtMe(f: (String) -> Unit) { f(a) // Should be no unneeded nops on this line, that might be generated for zero-parameters lambda } -// 2 NOP \ No newline at end of file +// 4 NOP \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/jackAndJill/inlinedConstuctorWithSuperCallParams.kt b/compiler/testData/codegen/bytecodeText/jackAndJill/inlinedConstuctorWithSuperCallParams.kt index 27f52b3f341..5ae3ef172b8 100644 --- a/compiler/testData/codegen/bytecodeText/jackAndJill/inlinedConstuctorWithSuperCallParams.kt +++ b/compiler/testData/codegen/bytecodeText/jackAndJill/inlinedConstuctorWithSuperCallParams.kt @@ -14,4 +14,4 @@ fun main(args: Array) { } /*Threre are two constuctors so we should be sure that we check LOCALVARIABLEs from same method*/ -// 1 LOCALVARIABLE this LInlinedConstuctorWithSuperCallParamsKt\$main\$\$inlined\$test\$1; L0 L6 0\s+LOCALVARIABLE \$super_call_param\$1 Ljava/lang/String; L0 L6 1 +// 1 LOCALVARIABLE this LInlinedConstuctorWithSuperCallParamsKt\$main\$\$inlined\$test\$1; L0 L7 0\s+LOCALVARIABLE \$super_call_param\$1 Ljava/lang/String; L0 L7 1 diff --git a/compiler/testData/lineNumber/custom/functionCallWithDefault.kt b/compiler/testData/lineNumber/custom/functionCallWithDefault.kt index 8a3b82e3ff7..e7e155b002a 100644 --- a/compiler/testData/lineNumber/custom/functionCallWithDefault.kt +++ b/compiler/testData/lineNumber/custom/functionCallWithDefault.kt @@ -9,4 +9,4 @@ fun foo(i: Int = 1) { inline fun bar(i: Int = 1) { } -// 2 3 13 14 +4 7 6 10 9 15 \ No newline at end of file +// 2 3 13 14 4 7 6 10 9 15 \ No newline at end of file diff --git a/compiler/testData/lineNumber/custom/functionCallWithInlinedLambdaParam.kt b/compiler/testData/lineNumber/custom/functionCallWithInlinedLambdaParam.kt index 803dfda8107..2f348a153a5 100644 --- a/compiler/testData/lineNumber/custom/functionCallWithInlinedLambdaParam.kt +++ b/compiler/testData/lineNumber/custom/functionCallWithInlinedLambdaParam.kt @@ -13,4 +13,4 @@ inline fun foo(f: () -> Unit) { f() } -// 2 17 18 3 4 19 +6 20 21 7 8 22 +9 12 13 14 \ No newline at end of file +// 2 17 18 3 4 19 6 20 21 7 8 22 9 12 13 14 \ No newline at end of file diff --git a/compiler/testData/lineNumber/custom/noParametersArgumentCallInExpression.kt b/compiler/testData/lineNumber/custom/noParametersArgumentCallInExpression.kt index 3e5cff4c630..46a34bcae2d 100644 --- a/compiler/testData/lineNumber/custom/noParametersArgumentCallInExpression.kt +++ b/compiler/testData/lineNumber/custom/noParametersArgumentCallInExpression.kt @@ -9,4 +9,4 @@ inline fun lookAtMe(f: () -> Int) { a + f() } -// 2 13 14 3 15 +5 8 9 10 \ No newline at end of file +// 2 13 14 3 15 5 8 9 10 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/custom/stepIntoStdlibInlineFun2step.kt b/idea/testData/debugger/tinyApp/src/stepping/custom/stepIntoStdlibInlineFun2step.kt index 1dee35e576e..6dd7372505e 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/custom/stepIntoStdlibInlineFun2step.kt +++ b/idea/testData/debugger/tinyApp/src/stepping/custom/stepIntoStdlibInlineFun2step.kt @@ -5,4 +5,4 @@ fun main(args: Array) { } // ADDITIONAL_BREAKPOINT: functionInLibrary.kt:public inline fun simpleFun() -// STEP_INTO: 2 \ No newline at end of file +// STEP_INTO: 4 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/custom/stepIntoStdlibInlineFun2step.out b/idea/testData/debugger/tinyApp/src/stepping/custom/stepIntoStdlibInlineFun2step.out index 98d7b19e9e1..dfbbab4c9ab 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/custom/stepIntoStdlibInlineFun2step.out +++ b/idea/testData/debugger/tinyApp/src/stepping/custom/stepIntoStdlibInlineFun2step.out @@ -3,6 +3,8 @@ Run Java Connected to the target VM functionInLibrary.kt:4 functionInLibrary.kt:8 +functionInLibrary.kt:9 +functionInLibrary.kt:5 stepIntoStdlibInlineFun2step.kt:5 Disconnected from the target VM diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInline.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInline.kt index 39e2774ee76..18ab548198e 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInline.kt +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInline.kt @@ -14,4 +14,4 @@ inline fun foo(f: () -> Unit) { f() } -// STEP_OVER: 2 \ No newline at end of file +// STEP_OVER: 3 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInline.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInline.out index 2540e995245..f93837df517 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInline.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInline.out @@ -3,6 +3,7 @@ Run Java Connected to the target VM soInlineCallInLastStatementInInline.kt:9 soInlineCallInLastStatementInInline.kt:10 +soInlineCallInLastStatementInInline.kt:11 soInlineCallInLastStatementInInline.kt:5 Disconnected from the target VM diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineDex.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineDex.out index 6744f38ebec..832eb249374 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineDex.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineDex.out @@ -3,6 +3,7 @@ Run Java Connected to the target VM soInlineCallInLastStatementInInlineDex.kt:10 soInlineCallInLastStatementInInlineDex.kt:11 +soInlineCallInLastStatementInInlineDex.kt:12 soInlineCallInLastStatementInInlineDex.kt:5 soInlineCallInLastStatementInInlineDex.kt:6 Disconnected from the target VM diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgument.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgument.out index b41b510fe09..22445529a83 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgument.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgument.out @@ -3,6 +3,7 @@ Run Java Connected to the target VM soInlineCallInLastStatementInInlineFunctionArgument.kt:7 soInlineCallInLastStatementInInlineFunctionArgument.kt:8 +soInlineCallInLastStatementInInlineFunctionArgument.kt:14 soInlineCallInLastStatementInInlineFunctionArgument.kt:9 Disconnected from the target VM diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.kt index 0abd108a9ae..f4d5908e979 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.kt +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.kt @@ -4,7 +4,7 @@ fun main(args: Array) { bar { nop() //Breakpoint! - foo() + foo() // <-- Should not stop here twice } } diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.out index c1599ff8e1d..067c44dc138 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.out @@ -2,7 +2,7 @@ LineBreakpoint created at soInlineCallInLastStatementInInlineFunctionArgumentDex Run Java Connected to the target VM soInlineCallInLastStatementInInlineFunctionArgumentDex.kt:7 -soInlineCallInLastStatementInInlineFunctionArgumentDex.kt:8 +soInlineCallInLastStatementInInlineFunctionArgumentDex.kt:7 soInlineCallInLastStatementInInlineFunctionArgumentDex.kt:9 Disconnected from the target VM diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineInInline.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineInInline.out index 563e267ae2c..d20deae4903 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineInInline.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineInInline.out @@ -2,6 +2,8 @@ LineBreakpoint created at soInlineCallInLastStatementInInlineInInline.kt:15 Run Java Connected to the target VM soInlineCallInLastStatementInInlineInInline.kt:15 +soInlineCallInLastStatementInInlineInInline.kt:16 +soInlineCallInLastStatementInInlineInInline.kt:11 soInlineCallInLastStatementInInlineInInline.kt:5 soInlineCallInLastStatementInInlineInInline.kt:6 Disconnected from the target VM diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunCallInLastStatementOfInlineWithArgumentFromCalleeAndOwn.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunCallInLastStatementOfInlineWithArgumentFromCalleeAndOwn.kt index da548320530..aff18c9feac 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunCallInLastStatementOfInlineWithArgumentFromCalleeAndOwn.kt +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunCallInLastStatementOfInlineWithArgumentFromCalleeAndOwn.kt @@ -17,4 +17,4 @@ inline fun foo(f1: () -> Unit, f2: () -> Unit) { f2() } -// STEP_OVER 5 \ No newline at end of file +// STEP_OVER: 5 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunCallInLastStatementOfInlineWithArgumentFromCalleeAndOwn.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunCallInLastStatementOfInlineWithArgumentFromCalleeAndOwn.out index 49309978548..14fd9d7e7f1 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunCallInLastStatementOfInlineWithArgumentFromCalleeAndOwn.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunCallInLastStatementOfInlineWithArgumentFromCalleeAndOwn.out @@ -2,6 +2,7 @@ LineBreakpoint created at soInlineFunCallInLastStatementOfInlineWithArgumentFrom Run Java Connected to the target VM soInlineFunCallInLastStatementOfInlineWithArgumentFromCalleeAndOwn.kt:11 +soInlineFunCallInLastStatementOfInlineWithArgumentFromCalleeAndOwn.kt:13 soInlineFunCallInLastStatementOfInlineWithArgumentFromCalleeAndOwn.kt:7 Disconnected from the target VM diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementMultilineArgumentCall.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementMultilineArgumentCall.kt index d2a551cab0b..cebdf75941c 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementMultilineArgumentCall.kt +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementMultilineArgumentCall.kt @@ -14,4 +14,4 @@ inline fun bar(f: (Int) -> Unit) { f(1) } -// STEP_OVER: 1 \ No newline at end of file +// STEP_OVER: 2 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementMultilineArgumentCall.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementMultilineArgumentCall.out index 537fd250eff..fcc714750a0 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementMultilineArgumentCall.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementMultilineArgumentCall.out @@ -2,6 +2,7 @@ LineBreakpoint created at soInlineFunWithLastStatementMultilineArgumentCall.kt:1 Run Java Connected to the target VM soInlineFunWithLastStatementMultilineArgumentCall.kt:14 +soInlineFunWithLastStatementMultilineArgumentCall.kt:15 soInlineFunWithLastStatementMultilineArgumentCall.kt:9 Disconnected from the target VM diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementOneLineArgumentCall.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementOneLineArgumentCall.out index ae2d136bd8e..f32727af1c5 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementOneLineArgumentCall.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineFunWithLastStatementOneLineArgumentCall.out @@ -2,6 +2,7 @@ LineBreakpoint created at soInlineFunWithLastStatementOneLineArgumentCall.kt:11 Run Java Connected to the target VM soInlineFunWithLastStatementOneLineArgumentCall.kt:11 +soInlineFunWithLastStatementOneLineArgumentCall.kt:12 soInlineFunWithLastStatementOneLineArgumentCall.kt:6 soInlineFunWithLastStatementOneLineArgumentCall.kt:7 Disconnected from the target VM diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineIfConditionLambdaFalse.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineIfConditionLambdaFalse.out index 8364f946bd5..bf269a791ed 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineIfConditionLambdaFalse.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineIfConditionLambdaFalse.out @@ -4,6 +4,7 @@ Connected to the target VM soInlineIfConditionLambdaFalse.kt:11 soInlineIfConditionLambdaFalse.kt:15 soInlineIfConditionLambdaFalse.kt:18 +soInlineIfConditionLambdaFalse.kt:19 soInlineIfConditionLambdaFalse.kt:7 Disconnected from the target VM diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineIfConditionLambdaTrue.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineIfConditionLambdaTrue.out index d6e07164582..02d9b50e81e 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineIfConditionLambdaTrue.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineIfConditionLambdaTrue.out @@ -4,6 +4,7 @@ Connected to the target VM soInlineIfConditionLambdaTrue.kt:11 soInlineIfConditionLambdaTrue.kt:12 soInlineIfConditionLambdaTrue.kt:18 +soInlineIfConditionLambdaTrue.kt:19 soInlineIfConditionLambdaTrue.kt:7 Disconnected from the target VM diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineUnitFunDex.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineUnitFunDex.kt new file mode 100644 index 00000000000..4aeda8a302e --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineUnitFunDex.kt @@ -0,0 +1,17 @@ +package soInlineUnitFunDex + +fun main(args: Array) { + process() +} + +fun process(): String { + simple() + //Breakpoint! + return "Constant" // 1 +} + +inline fun simple() { + inner() +} + +fun inner() {} diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineUnitFunDex.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineUnitFunDex.out new file mode 100644 index 00000000000..a4769af6fae --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineUnitFunDex.out @@ -0,0 +1,8 @@ +LineBreakpoint created at soInlineUnitFunDex.kt:10 +Run Java +Connected to the target VM +soInlineUnitFunDex.kt:10 +soInlineUnitFunDex.kt:4 +Disconnected from the target VM + +Process finished with exit code 0 diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverInsideInlineFun.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverInsideInlineFun.kt index 7db0f135cd9..06b534e4205 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverInsideInlineFun.kt +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverInsideInlineFun.kt @@ -16,4 +16,4 @@ inline fun bar(f: (Int) -> Unit) { fun foo() {} -// STEP_OVER: 4 \ No newline at end of file +// STEP_OVER: 5 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverInsideInlineFun.out b/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverInsideInlineFun.out index c88b7a8a176..96f0b7f6076 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverInsideInlineFun.out +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverInsideInlineFun.out @@ -5,6 +5,7 @@ stepOverInsideInlineFun.kt:11 stepOverInsideInlineFun.kt:12 stepOverInsideInlineFun.kt:13 stepOverInsideInlineFun.kt:14 +stepOverInsideInlineFun.kt:15 stepOverInsideInlineFun.kt:7 Disconnected from the target VM diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java index a9b09d5645b..d48702a8fa3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java @@ -602,6 +602,12 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { doStepOverTest(fileName); } + @TestMetadata("soInlineUnitFunDex.kt") + public void testSoInlineUnitFunDex() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineUnitFunDex.kt"); + doStepOverTest(fileName); + } + @TestMetadata("soInlineWhileCondition.kt") public void testSoInlineWhileCondition() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineWhileCondition.kt");