[FIR] Add property delegate positioning strategy
This commit is contained in:
committed by
TeamCityServer
parent
276fb77155
commit
f97e666608
+1
@@ -108,6 +108,7 @@ enum class PositioningStrategy(private val strategy: String? = null) {
|
||||
ENUM_MODIFIER,
|
||||
FIELD_KEYWORD,
|
||||
TAILREC_MODIFIER,
|
||||
PROPERTY_DELEGATE,
|
||||
|
||||
;
|
||||
|
||||
|
||||
+20
@@ -13,6 +13,7 @@ import com.intellij.psi.tree.TokenSet
|
||||
import com.intellij.util.diff.FlyweightCapableTreeStructure
|
||||
import org.jetbrains.kotlin.KtNodeType
|
||||
import org.jetbrains.kotlin.KtNodeTypes
|
||||
import org.jetbrains.kotlin.diagnostics.PositioningStrategies
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.MODALITY_MODIFIERS
|
||||
@@ -401,6 +402,22 @@ object LightTreePositioningStrategies {
|
||||
}
|
||||
}
|
||||
|
||||
val PROPERTY_DELEGATE: LightTreePositioningStrategy = object : LightTreePositioningStrategy() {
|
||||
override fun mark(
|
||||
node: LighterASTNode,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
tree: FlyweightCapableTreeStructure<LighterASTNode>
|
||||
): List<TextRange> {
|
||||
val delegate = tree.findChildByType(node, KtNodeTypes.PROPERTY_DELEGATE)
|
||||
return markElement(delegate ?: node, startOffset, endOffset, tree, node)
|
||||
}
|
||||
|
||||
override fun isValid(node: LighterASTNode, tree: FlyweightCapableTreeStructure<LighterASTNode>): Boolean {
|
||||
return tree.findChildByType(node, KtNodeTypes.PROPERTY_DELEGATE) != null
|
||||
}
|
||||
}
|
||||
|
||||
val INLINE_PARAMETER_MODIFIER: LightTreePositioningStrategy =
|
||||
ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.NOINLINE_KEYWORD, KtTokens.CROSSINLINE_KEYWORD))
|
||||
|
||||
@@ -1023,6 +1040,9 @@ private fun FlyweightCapableTreeStructure<LighterASTNode>.returnKeyword(node: Li
|
||||
private fun FlyweightCapableTreeStructure<LighterASTNode>.fieldKeyword(node: LighterASTNode): LighterASTNode? =
|
||||
findChildByType(node, KtTokens.FIELD_KEYWORD)
|
||||
|
||||
private fun FlyweightCapableTreeStructure<LighterASTNode>.byKeyword(node: LighterASTNode): LighterASTNode? =
|
||||
findChildByType(node, KtTokens.BY_KEYWORD)
|
||||
|
||||
internal fun FlyweightCapableTreeStructure<LighterASTNode>.nameIdentifier(node: LighterASTNode): LighterASTNode? =
|
||||
findChildByType(node, KtTokens.IDENTIFIER)
|
||||
|
||||
|
||||
+5
@@ -329,4 +329,9 @@ object SourceElementPositioningStrategies {
|
||||
LightTreePositioningStrategies.TAILREC_MODIFIER,
|
||||
PositioningStrategies.TAILREC_MODIFIER
|
||||
)
|
||||
|
||||
val PROPERTY_DELEGATE = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.PROPERTY_DELEGATE,
|
||||
PositioningStrategies.PROPERTY_DELEGATE
|
||||
)
|
||||
}
|
||||
|
||||
+12
@@ -302,6 +302,18 @@ object PositioningStrategies {
|
||||
}
|
||||
}
|
||||
|
||||
@JvmField
|
||||
val PROPERTY_DELEGATE: PositioningStrategy<KtProperty> = object : DeclarationHeader<KtProperty>() {
|
||||
override fun mark(element: KtProperty): List<TextRange> {
|
||||
val delegate = element.delegate
|
||||
return if (delegate != null) {
|
||||
markElement(delegate)
|
||||
} else {
|
||||
DEFAULT.mark(element)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@JvmField
|
||||
val FOR_REDECLARATION: PositioningStrategy<PsiElement> = object : PositioningStrategy<PsiElement>() {
|
||||
override fun mark(element: PsiElement): List<TextRange> {
|
||||
|
||||
Reference in New Issue
Block a user