diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategy.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategy.kt index 93611e3d5f0..9b2a7c3ee6e 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategy.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategy.kt @@ -46,9 +46,10 @@ fun markRange( tree: FlyweightCapableTreeStructure, originalNode: LighterASTNode ): List { - val betterFrom = from.nonFillerChildOrSelf(tree) + val betterFrom = from.nonFillerFirstChildOrSelf(tree) + val betterTo = to.nonFillerLastChildOrSelf(tree) val startDelta = tree.getStartOffset(betterFrom) - tree.getStartOffset(originalNode) - val endDelta = tree.getEndOffset(to) - tree.getEndOffset(originalNode) + val endDelta = tree.getEndOffset(betterTo) - tree.getEndOffset(originalNode) return listOf(TextRange(startDelta + startOffset, endDelta + endOffset)) } @@ -65,9 +66,12 @@ private val FILLER_TOKENS = setOf( KtTokens.DOC_COMMENT, ) -private fun LighterASTNode.nonFillerChildOrSelf(tree: FlyweightCapableTreeStructure): LighterASTNode = +private fun LighterASTNode.nonFillerFirstChildOrSelf(tree: FlyweightCapableTreeStructure): LighterASTNode = getChildren(tree).firstOrNull { it != null && it.tokenType !in FILLER_TOKENS } ?: this +private fun LighterASTNode.nonFillerLastChildOrSelf(tree: FlyweightCapableTreeStructure): LighterASTNode = + getChildren(tree).lastOrNull { it != null && it.tokenType !in FILLER_TOKENS } ?: this + private fun hasSyntaxErrors(node: LighterASTNode, tree: FlyweightCapableTreeStructure): Boolean { if (node.tokenType == TokenType.ERROR_ELEMENT) return true