Debugger: Add verbose logging for EA-125569, fix possible issue
This commit is contained in:
+11
-1
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.debugger.breakpoints
|
|||||||
|
|
||||||
import com.intellij.debugger.SourcePosition
|
import com.intellij.debugger.SourcePosition
|
||||||
import com.intellij.debugger.ui.breakpoints.JavaLineBreakpointType
|
import com.intellij.debugger.ui.breakpoints.JavaLineBreakpointType
|
||||||
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.editor.Document
|
import com.intellij.openapi.editor.Document
|
||||||
import com.intellij.openapi.fileEditor.FileDocumentManager
|
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||||
import com.intellij.openapi.project.Project
|
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.KotlinFileType
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.core.util.CodeInsightUtils
|
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.core.util.getLineNumber
|
||||||
import org.jetbrains.kotlin.idea.debugger.findElementAtLine
|
import org.jetbrains.kotlin.idea.debugger.findElementAtLine
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
@@ -47,6 +49,8 @@ import java.util.*
|
|||||||
|
|
||||||
interface KotlinBreakpointType
|
interface KotlinBreakpointType
|
||||||
|
|
||||||
|
private val LOG = Logger.getInstance("BreakpointTypeUtilsKt")
|
||||||
|
|
||||||
class ApplicabilityResult(val isApplicable: Boolean, val shouldStop: Boolean) {
|
class ApplicabilityResult(val isApplicable: Boolean, val shouldStop: Boolean) {
|
||||||
companion object {
|
companion object {
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@@ -83,7 +87,7 @@ fun isBreakpointApplicable(file: VirtualFile, line: Int, project: Project, check
|
|||||||
val checked = HashSet<PsiElement>()
|
val checked = HashSet<PsiElement>()
|
||||||
|
|
||||||
XDebuggerUtil.getInstance().iterateLine(project, document, line, fun(element: PsiElement): Boolean {
|
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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,6 +116,12 @@ private fun getTopmostParentOnLineOrSelf(element: PsiElement, document: Document
|
|||||||
var parent = current.parent
|
var parent = current.parent
|
||||||
while (parent != null) {
|
while (parent != null) {
|
||||||
val offset = parent.textOffset
|
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
|
if (offset >= 0 && document.getLineNumber(offset) != line) break
|
||||||
|
|
||||||
current = parent
|
current = parent
|
||||||
|
|||||||
Reference in New Issue
Block a user