From 85a5e5241fb4cec6b094a1ee7811dac09608e3d1 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Thu, 6 Feb 2020 21:52:08 +0900 Subject: [PATCH] Debugger: Fix function breakpoints for libraries (KT-36403) --- .../breakpoints/KotlinFunctionBreakpoint.java | 58 ++++++++++++++----- .../test/KotlinSteppingTestGenerated.java | 5 ++ .../custom/functionBreakpointInStdlib.kt | 11 ++++ .../custom/functionBreakpointInStdlib.out | 8 +++ 4 files changed, 67 insertions(+), 15 deletions(-) create mode 100644 idea/jvm-debugger/jvm-debugger-test/testData/stepping/custom/functionBreakpointInStdlib.kt create mode 100644 idea/jvm-debugger/jvm-debugger-test/testData/stepping/custom/functionBreakpointInStdlib.out diff --git a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/KotlinFunctionBreakpoint.java b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/KotlinFunctionBreakpoint.java index 448bb36602f..914d008a386 100644 --- a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/KotlinFunctionBreakpoint.java +++ b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/KotlinFunctionBreakpoint.java @@ -13,7 +13,6 @@ import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; import com.intellij.debugger.engine.requests.RequestManagerImpl; import com.intellij.debugger.impl.DebuggerUtilsEx; -import com.intellij.debugger.impl.DebuggerUtilsImpl; import com.intellij.debugger.impl.PositionUtil; import com.intellij.debugger.jdi.ClassesByNameProvider; import com.intellij.debugger.jdi.MethodBytecodeUtil; @@ -22,7 +21,6 @@ import com.intellij.debugger.ui.breakpoints.*; import com.intellij.icons.AllIcons; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.progress.*; @@ -54,7 +52,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.java.debugger.breakpoints.properties.JavaMethodBreakpointProperties; import org.jetbrains.kotlin.asJava.LightClassUtilsKt; -import org.jetbrains.kotlin.asJava.classes.KtLightClass; +import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin; +import org.jetbrains.kotlin.asJava.elements.KtLightMethod; +import org.jetbrains.kotlin.idea.decompiler.classFile.KtClsFile; +import org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper; import org.jetbrains.kotlin.idea.debugger.KotlinDebuggerCoreBundle; import org.jetbrains.kotlin.psi.KtClass; import org.jetbrains.kotlin.psi.KtClassOrObject; @@ -543,20 +544,22 @@ public class KotlinFunctionBreakpoint extends BreakpointWithHighlighter { // MODIFICATION: Start Kotlin implementation PsiMethod method = resolveJvmMethodFromKotlinDeclaration(project, sourcePosition); - // MODIFICATION: End Kotlin implementation if (method == null) { return null; } - int methodOffset = method.getTextOffset(); - if (!DocumentUtil.isValidOffset(methodOffset, document) || document.getLineNumber(methodOffset) < sourcePosition.getLine()) { - return null; + + KtDeclaration kotlinOrigin = getSourceOrigin(method); + + if (kotlinOrigin != null) { + int offset = kotlinOrigin.getTextOffset(); + if (!DocumentUtil.isValidOffset(offset, document) || document.getLineNumber(offset) < sourcePosition.getLine()) { + return null; + } } - PsiIdentifier identifier = method.getNameIdentifier(); - int methodNameOffset = identifier != null? identifier.getTextOffset() : methodOffset; - MethodDescriptor res = - new MethodDescriptor(); + MethodDescriptor res = new MethodDescriptor(); res.methodName = JVMNameUtil.getJVMMethodName(method); + try { res.methodSignature = JVMNameUtil.getJVMSignature(method); res.isStatic = method.hasModifierProperty(PsiModifier.STATIC); @@ -564,8 +567,9 @@ public class KotlinFunctionBreakpoint extends BreakpointWithHighlighter 0) { @@ -599,7 +627,8 @@ public class KotlinFunctionBreakpoint extends BreakpointWithHighlighter