Debugger: Add verbose logging for EA-125569, fix possible issue

This commit is contained in:
Yan Zhulanow
2019-07-24 19:22:05 +09:00
parent 527df35bf3
commit ea97926c66
@@ -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<PsiElement>()
XDebuggerUtil.getInstance().iterateLine(project, document, line, fun(element: PsiElement): Boolean {
if (element is PsiWhiteSpace || element.getParentOfType<PsiComment>(false) != null) {
if (element is PsiWhiteSpace || element.getParentOfType<PsiComment>(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