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 3f761586ad7..1dea5fa8c99 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.codegen.inline import org.jetbrains.kotlin.codegen.* import org.jetbrains.kotlin.codegen.coroutines.continuationAsmType -import org.jetbrains.kotlin.codegen.coroutines.getOrCreateJvmSuspendFunctionView import org.jetbrains.kotlin.codegen.inline.FieldRemapper.Companion.foldName import org.jetbrains.kotlin.codegen.inline.coroutines.* import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethods @@ -260,11 +259,12 @@ class MethodInliner( val invokeParameters = erasedInvokeFunction.valueParameters val valueParamShift = max(nextLocalIndex, markerShift)//NB: don't inline cause it changes + val parameterTypesFromDesc = info.invokeMethod.argumentTypes putStackValuesIntoLocalsForLambdaOnInvoke( - listOf(*info.invokeMethod.argumentTypes), valueParameters, invokeParameters, valueParamShift, this, coroutineDesc + listOf(*parameterTypesFromDesc), valueParameters, invokeParameters, valueParamShift, this, coroutineDesc ) - if (info.invokeMethodDescriptor.valueParameters.isEmpty()) { + if (parameterTypesFromDesc.isEmpty()) { // There won't be no parameters processing and line call can be left without actual instructions. // Note: if function is called on the line with other instructions like 1 + foo(), 'nop' will still be generated. visitInsn(Opcodes.NOP) diff --git a/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinSteppingTestGenerated.java b/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinSteppingTestGenerated.java index 255e08dc743..0e514bd6c2a 100644 --- a/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinSteppingTestGenerated.java +++ b/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinSteppingTestGenerated.java @@ -487,6 +487,21 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { runTest("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/kt24343.kt"); } + @TestMetadata("noParameterExtensionLambdaArgumentCallInInline.kt") + public void testNoParameterExtensionLambdaArgumentCallInInline() throws Exception { + runTest("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline.kt"); + } + + @TestMetadata("noParameterExtensionLambdaArgumentCallInInline2.kt") + public void testNoParameterExtensionLambdaArgumentCallInInline2() throws Exception { + runTest("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline2.kt"); + } + + @TestMetadata("noParameterExtensionLambdaArgumentCallInInline3.kt") + public void testNoParameterExtensionLambdaArgumentCallInInline3() throws Exception { + runTest("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline3.kt"); + } + @TestMetadata("noParameterLambdaArgumentCallInInline.kt") public void testNoParameterLambdaArgumentCallInInline() throws Exception { runTest("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterLambdaArgumentCallInInline.kt"); diff --git a/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline.kt b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline.kt new file mode 100644 index 00000000000..dbffb84c31f --- /dev/null +++ b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline.kt @@ -0,0 +1,14 @@ +package noParameterLambdaArgumentCallInInline + +fun main(args: Array) { + lookAtMe { + val c = "c" + } +} + +inline fun lookAtMe(f: String.() -> Unit) { + val a = "a" + //Breakpoint! + "123".f() + val b = "b" +} \ No newline at end of file diff --git a/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline.out b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline.out new file mode 100644 index 00000000000..5c26ab19bff --- /dev/null +++ b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline.out @@ -0,0 +1,8 @@ +LineBreakpoint created at noParameterExtensionLambdaArgumentCallInInline.kt:12 +Run Java +Connected to the target VM +noParameterExtensionLambdaArgumentCallInInline.kt:12 +noParameterExtensionLambdaArgumentCallInInline.kt:13 +Disconnected from the target VM + +Process finished with exit code 0 diff --git a/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline2.kt b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline2.kt new file mode 100644 index 00000000000..6018ab44442 --- /dev/null +++ b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline2.kt @@ -0,0 +1,14 @@ +package noParameterLambdaArgumentCallInInline + +fun main(args: Array) { + "123".lookAtMe { + val c = "c" + } +} + +inline fun String.lookAtMe(f: String.() -> Unit) { + val a = "a" + //Breakpoint! + f() + val b = "b" +} \ No newline at end of file diff --git a/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline2.out b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline2.out new file mode 100644 index 00000000000..bc0a143f031 --- /dev/null +++ b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline2.out @@ -0,0 +1,8 @@ +LineBreakpoint created at noParameterExtensionLambdaArgumentCallInInline2.kt:12 +Run Java +Connected to the target VM +noParameterExtensionLambdaArgumentCallInInline2.kt:12 +noParameterExtensionLambdaArgumentCallInInline2.kt:13 +Disconnected from the target VM + +Process finished with exit code 0 diff --git a/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline3.kt b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline3.kt new file mode 100644 index 00000000000..a27a3a0c657 --- /dev/null +++ b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline3.kt @@ -0,0 +1,15 @@ +package noParameterLambdaArgumentCallInInline + +fun main(args: Array) { + lookAtMe { + val c = "c" + } +} + +inline fun lookAtMe(f: String.() -> Unit) { + val a = "a" + //Breakpoint! + "123". + f() + val b = "b" +} \ No newline at end of file diff --git a/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline3.out b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline3.out new file mode 100644 index 00000000000..f612c7f22b6 --- /dev/null +++ b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/noParameterExtensionLambdaArgumentCallInInline3.out @@ -0,0 +1,8 @@ +LineBreakpoint created at noParameterExtensionLambdaArgumentCallInInline3.kt:12 +Run Java +Connected to the target VM +noParameterExtensionLambdaArgumentCallInInline3.kt:12 +noParameterExtensionLambdaArgumentCallInInline3.kt:5 +Disconnected from the target VM + +Process finished with exit code 0