[FIR] Add positioning strategy for return keyword

This commit is contained in:
Dmitriy Novozhilov
2021-03-31 11:45:31 +03:00
committed by TeamCityServer
parent 76f2e349cc
commit 2271bb5d61
5 changed files with 28 additions and 0 deletions
@@ -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}"
@@ -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<LighterASTNode>
): List<TextRange> {
return markElement(tree.returnKeyword(node) ?: node, startOffset, endOffset, tree)
}
}
}
fun FirSourceElement.hasValOrVar(): Boolean =
@@ -525,6 +536,9 @@ private fun FlyweightCapableTreeStructure<LighterASTNode>.whenKeyword(node: Ligh
private fun FlyweightCapableTreeStructure<LighterASTNode>.ifKeyword(node: LighterASTNode): LighterASTNode? =
findChildByType(node, KtTokens.IF_KEYWORD)
private fun FlyweightCapableTreeStructure<LighterASTNode>.returnKeyword(node: LighterASTNode): LighterASTNode? =
findChildByType(node, KtTokens.RETURN_KEYWORD)
private fun FlyweightCapableTreeStructure<LighterASTNode>.nameIdentifier(node: LighterASTNode): LighterASTNode? =
findChildByType(node, KtTokens.IDENTIFIER)
@@ -167,4 +167,9 @@ object SourceElementPositioningStrategies {
LightTreePositioningStrategies.ARRAY_ACCESS,
PositioningStrategies.ARRAY_ACCESS
)
val RETURN_KEYWORD = SourceElementPositioningStrategy(
LightTreePositioningStrategies.RETURN_KEYWORD,
PositioningStrategies.RETURN_KEYWORD
)
}
@@ -421,6 +421,12 @@ object PositioningStrategies {
}
}
val RETURN_KEYWORD: PositioningStrategy<KtReturnExpression> = object : PositioningStrategy<KtReturnExpression>() {
override fun mark(element: KtReturnExpression): List<TextRange> {
return markElement(element.returnKeyword)
}
}
private class ModifierSetBasedPositioningStrategy(private val modifierSet: TokenSet) : PositioningStrategy<KtModifierListOwner>() {
override fun mark(element: KtModifierListOwner): List<TextRange> {
val modifierList = element.modifierList
@@ -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