[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,
|
ENUM_MODIFIER,
|
||||||
FIELD_KEYWORD,
|
FIELD_KEYWORD,
|
||||||
TAILREC_MODIFIER,
|
TAILREC_MODIFIER,
|
||||||
|
PROPERTY_DELEGATE,
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
+20
@@ -13,6 +13,7 @@ import com.intellij.psi.tree.TokenSet
|
|||||||
import com.intellij.util.diff.FlyweightCapableTreeStructure
|
import com.intellij.util.diff.FlyweightCapableTreeStructure
|
||||||
import org.jetbrains.kotlin.KtNodeType
|
import org.jetbrains.kotlin.KtNodeType
|
||||||
import org.jetbrains.kotlin.KtNodeTypes
|
import org.jetbrains.kotlin.KtNodeTypes
|
||||||
|
import org.jetbrains.kotlin.diagnostics.PositioningStrategies
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.MODALITY_MODIFIERS
|
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 =
|
val INLINE_PARAMETER_MODIFIER: LightTreePositioningStrategy =
|
||||||
ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.NOINLINE_KEYWORD, KtTokens.CROSSINLINE_KEYWORD))
|
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? =
|
private fun FlyweightCapableTreeStructure<LighterASTNode>.fieldKeyword(node: LighterASTNode): LighterASTNode? =
|
||||||
findChildByType(node, KtTokens.FIELD_KEYWORD)
|
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? =
|
internal fun FlyweightCapableTreeStructure<LighterASTNode>.nameIdentifier(node: LighterASTNode): LighterASTNode? =
|
||||||
findChildByType(node, KtTokens.IDENTIFIER)
|
findChildByType(node, KtTokens.IDENTIFIER)
|
||||||
|
|
||||||
|
|||||||
+5
@@ -329,4 +329,9 @@ object SourceElementPositioningStrategies {
|
|||||||
LightTreePositioningStrategies.TAILREC_MODIFIER,
|
LightTreePositioningStrategies.TAILREC_MODIFIER,
|
||||||
PositioningStrategies.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
|
@JvmField
|
||||||
val FOR_REDECLARATION: PositioningStrategy<PsiElement> = object : PositioningStrategy<PsiElement>() {
|
val FOR_REDECLARATION: PositioningStrategy<PsiElement> = object : PositioningStrategy<PsiElement>() {
|
||||||
override fun mark(element: PsiElement): List<TextRange> {
|
override fun mark(element: PsiElement): List<TextRange> {
|
||||||
|
|||||||
Reference in New Issue
Block a user