diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt index 5d3b0ee6c59..da4c50f090d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt @@ -22,6 +22,7 @@ import com.intellij.util.Range import com.intellij.util.SofterReference import com.sun.jdi.Location import org.jetbrains.kotlin.builtins.functions.FunctionInvokeDescriptor +import org.jetbrains.kotlin.codegen.SamCodegenUtil import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.* import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny @@ -44,7 +45,9 @@ class KotlinBasicStepMethodFilter( else -> targetDescriptor.name.asString() } - private val _targetDescriptor = SofterReference(targetDescriptor) + private val _targetDescriptor = SofterReference( + (targetDescriptor as? FunctionDescriptor)?.let { SamCodegenUtil.getOriginalIfSamAdapter(it) } ?: targetDescriptor + ) override fun getCallingExpressionLines() = myCallingExpressionLines diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepIntoAndSmartStepInto/kotlinSamFunction.kt b/idea/testData/debugger/tinyApp/src/stepping/stepIntoAndSmartStepInto/kotlinSamFunction.kt new file mode 100644 index 00000000000..012fcd3ba65 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepIntoAndSmartStepInto/kotlinSamFunction.kt @@ -0,0 +1,15 @@ +package kotlinSamFunction + +import forTests.MyJavaClass + +class KotlinSubclass : MyJavaClass() { + override fun other(runnable: Runnable) { + super.other(runnable) + } +} + +fun main(args: Array) { + val klass = KotlinSubclass() + //Breakpoint! + klass.other { /* do nothing*/ } +} \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepIntoAndSmartStepInto/kotlinSamFunction.out b/idea/testData/debugger/tinyApp/src/stepping/stepIntoAndSmartStepInto/kotlinSamFunction.out new file mode 100644 index 00000000000..cd5834665e9 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepIntoAndSmartStepInto/kotlinSamFunction.out @@ -0,0 +1,9 @@ +LineBreakpoint created at kotlinSamFunction.kt:14 +Run Java +Connected to the target VM +kotlinSamFunction.kt:14 +kotlinSamFunction.kt:7 +resuming kotlinSamFunction.kt:14 +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 baaedbfb16a..e4cf94af2ce 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java @@ -74,6 +74,12 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { doStepIntoTest(fileName); } + @TestMetadata("kotlinSamFunction.kt") + public void testKotlinSamFunction() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepIntoAndSmartStepInto/kotlinSamFunction.kt"); + doStepIntoTest(fileName); + } + @TestMetadata("memberFunFromClass.kt") public void testMemberFunFromClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepIntoAndSmartStepInto/memberFunFromClass.kt"); @@ -173,6 +179,12 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { doSmartStepIntoTest(fileName); } + @TestMetadata("kotlinSamFunction.kt") + public void testKotlinSamFunction() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepIntoAndSmartStepInto/kotlinSamFunction.kt"); + doSmartStepIntoTest(fileName); + } + @TestMetadata("memberFunFromClass.kt") public void testMemberFunFromClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepIntoAndSmartStepInto/memberFunFromClass.kt");