From ea97926c6659657fcceace09fd6c1bb6c2ab03aa Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 24 Jul 2019 19:22:05 +0900 Subject: [PATCH] Debugger: Add verbose logging for EA-125569, fix possible issue --- .../idea/debugger/breakpoints/breakpointTypeUtils.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/breakpointTypeUtils.kt b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/breakpointTypeUtils.kt index dfdd64c1168..b7bc48b076d 100644 --- a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/breakpointTypeUtils.kt +++ b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/breakpoints/breakpointTypeUtils.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.debugger.breakpoints import com.intellij.debugger.SourcePosition import com.intellij.debugger.ui.breakpoints.JavaLineBreakpointType +import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.editor.Document import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.project.Project @@ -33,6 +34,7 @@ import com.intellij.xdebugger.impl.XSourcePositionImpl import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.util.CodeInsightUtils +import org.jetbrains.kotlin.idea.core.util.attachmentByPsiFile import org.jetbrains.kotlin.idea.core.util.getLineNumber import org.jetbrains.kotlin.idea.debugger.findElementAtLine import org.jetbrains.kotlin.idea.util.application.runReadAction @@ -47,6 +49,8 @@ import java.util.* interface KotlinBreakpointType +private val LOG = Logger.getInstance("BreakpointTypeUtilsKt") + class ApplicabilityResult(val isApplicable: Boolean, val shouldStop: Boolean) { companion object { @JvmStatic @@ -83,7 +87,7 @@ fun isBreakpointApplicable(file: VirtualFile, line: Int, project: Project, check val checked = HashSet() XDebuggerUtil.getInstance().iterateLine(project, document, line, fun(element: PsiElement): Boolean { - if (element is PsiWhiteSpace || element.getParentOfType(false) != null) { + if (element is PsiWhiteSpace || element.getParentOfType(false) != null || !element.isValid) { return true } @@ -112,6 +116,12 @@ private fun getTopmostParentOnLineOrSelf(element: PsiElement, document: Document var parent = current.parent while (parent != null) { val offset = parent.textOffset + if (offset > document.textLength) { + val containingFile = element.containingFile + val attachments = if (containingFile != null) arrayOf(attachmentByPsiFile(containingFile)) else emptyArray() + LOG.error("Wrong offset: $offset for line $line. Should be in range: [0, ${document.textLength}].", *attachments) + break + } if (offset >= 0 && document.getLineNumber(offset) != line) break current = parent