diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/DiagnosticData.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/DiagnosticData.kt index 1f4b7a36a20..189e0543e48 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/DiagnosticData.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/DiagnosticData.kt @@ -54,6 +54,8 @@ enum class PositioningStrategy(private val strategy: String? = null) { NAME_OF_NAMED_ARGUMENT, VALUE_ARGUMENTS, SUPERTYPES_LIST, + RETURN_KEYWORD, + ; val expressionToCreate get() = "SourceElementPositioningStrategies.${strategy ?: name}" diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt index 2153c06dc88..cd7ef79245d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt @@ -496,6 +496,17 @@ object LightTreePositioningStrategies { return markElement(tree.findChildByType(node, KtNodeTypes.INDICES)!!, startOffset, endOffset, tree, node) } } + + val RETURN_KEYWORD = object : LightTreePositioningStrategy() { + override fun mark( + node: LighterASTNode, + startOffset: Int, + endOffset: Int, + tree: FlyweightCapableTreeStructure + ): List { + return markElement(tree.returnKeyword(node) ?: node, startOffset, endOffset, tree) + } + } } fun FirSourceElement.hasValOrVar(): Boolean = @@ -525,6 +536,9 @@ private fun FlyweightCapableTreeStructure.whenKeyword(node: Ligh private fun FlyweightCapableTreeStructure.ifKeyword(node: LighterASTNode): LighterASTNode? = findChildByType(node, KtTokens.IF_KEYWORD) +private fun FlyweightCapableTreeStructure.returnKeyword(node: LighterASTNode): LighterASTNode? = + findChildByType(node, KtTokens.RETURN_KEYWORD) + private fun FlyweightCapableTreeStructure.nameIdentifier(node: LighterASTNode): LighterASTNode? = findChildByType(node, KtTokens.IDENTIFIER) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt index 055122cbebe..8aa5b4273cc 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt @@ -167,4 +167,9 @@ object SourceElementPositioningStrategies { LightTreePositioningStrategies.ARRAY_ACCESS, PositioningStrategies.ARRAY_ACCESS ) + + val RETURN_KEYWORD = SourceElementPositioningStrategy( + LightTreePositioningStrategies.RETURN_KEYWORD, + PositioningStrategies.RETURN_KEYWORD + ) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt index 59a0eeff0d2..30138e7a5b4 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt @@ -421,6 +421,12 @@ object PositioningStrategies { } } + val RETURN_KEYWORD: PositioningStrategy = object : PositioningStrategy() { + override fun mark(element: KtReturnExpression): List { + return markElement(element.returnKeyword) + } + } + private class ModifierSetBasedPositioningStrategy(private val modifierSet: TokenSet) : PositioningStrategy() { override fun mark(element: KtModifierListOwner): List { val modifierList = element.modifierList diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt index e7bdac8c866..a6f7d784f25 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.psi.KtPrimaryConstructor import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtPropertyAccessor import org.jetbrains.kotlin.psi.KtPropertyDelegate +import org.jetbrains.kotlin.psi.KtReturnExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.KtTypeAlias import org.jetbrains.kotlin.psi.KtTypeParameter