FIR: Make LHS of FirVariableAssignment a FirExpression
This way references can even be resolved for erroneous assignments (e.g. function call, if expression, ... on LHS) ^KT-54648 Fixed
This commit is contained in:
committed by
Space Team
parent
e9b8d6db80
commit
ace47c06a5
+1
-28
@@ -950,33 +950,6 @@ object LightTreePositioningStrategies {
|
||||
}
|
||||
}
|
||||
|
||||
val ASSIGNMENT_LHS: LightTreePositioningStrategy = object : LightTreePositioningStrategy() {
|
||||
override fun mark(
|
||||
node: LighterASTNode,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
tree: FlyweightCapableTreeStructure<LighterASTNode>
|
||||
): List<TextRange> {
|
||||
if ((node.tokenType == KtNodeTypes.BINARY_EXPRESSION &&
|
||||
tree.findDescendantByTypes(node, KtTokens.ALL_ASSIGNMENTS) != null) ||
|
||||
((node.tokenType == KtNodeTypes.PREFIX_EXPRESSION || node.tokenType == KtNodeTypes.POSTFIX_EXPRESSION) &&
|
||||
tree.findDescendantByTypes(node, KtTokens.INCREMENT_AND_DECREMENT) != null)
|
||||
) {
|
||||
val lhs = if (node.tokenType == KtNodeTypes.PREFIX_EXPRESSION) {
|
||||
tree.lastChildExpression(node)
|
||||
} else {
|
||||
tree.firstChildExpression(node)
|
||||
}
|
||||
lhs?.let {
|
||||
tree.unwrapParenthesesLabelsAndAnnotations(it).let { unwrapped ->
|
||||
return markElement(unwrapped, startOffset, endOffset, tree, node)
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.mark(node, startOffset, endOffset, tree)
|
||||
}
|
||||
}
|
||||
|
||||
val ANNOTATION_USE_SITE: LightTreePositioningStrategy = object : LightTreePositioningStrategy() {
|
||||
override fun mark(
|
||||
node: LighterASTNode,
|
||||
@@ -1426,7 +1399,7 @@ fun FlyweightCapableTreeStructure<LighterASTNode>.selector(node: LighterASTNode)
|
||||
dotOrDoubleColonFound = true
|
||||
continue
|
||||
}
|
||||
if (dotOrDoubleColonFound && (tokenType == KtNodeTypes.CALL_EXPRESSION || tokenType == KtNodeTypes.REFERENCE_EXPRESSION)) {
|
||||
if (dotOrDoubleColonFound && child.isExpression()) {
|
||||
return child
|
||||
}
|
||||
}
|
||||
|
||||
-12
@@ -944,18 +944,6 @@ object PositioningStrategies {
|
||||
}
|
||||
}
|
||||
|
||||
val ASSIGNMENT_LHS: PositioningStrategy<PsiElement> = object : PositioningStrategy<PsiElement>() {
|
||||
override fun mark(element: PsiElement): List<TextRange> {
|
||||
if (element is KtBinaryExpression && element.operationToken in KtTokens.ALL_ASSIGNMENTS) {
|
||||
element.left.let { left -> left.unwrapParenthesesLabelsAndAnnotations()?.let { return markElement(it) } }
|
||||
}
|
||||
if (element is KtUnaryExpression && element.operationToken in KtTokens.INCREMENT_AND_DECREMENT) {
|
||||
element.baseExpression.let { arg -> arg.unwrapParenthesesLabelsAndAnnotations()?.let { return markElement(it) } }
|
||||
}
|
||||
return super.mark(element)
|
||||
}
|
||||
}
|
||||
|
||||
val IMPORT_LAST_NAME: PositioningStrategy<PsiElement> = object : PositioningStrategy<PsiElement>() {
|
||||
|
||||
override fun isValid(element: PsiElement): Boolean {
|
||||
|
||||
-5
@@ -263,11 +263,6 @@ object SourceElementPositioningStrategies {
|
||||
PositioningStrategies.ANNOTATION_USE_SITE
|
||||
)
|
||||
|
||||
val ASSIGNMENT_LHS = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.ASSIGNMENT_LHS,
|
||||
PositioningStrategies.ASSIGNMENT_LHS
|
||||
)
|
||||
|
||||
val IMPORT_LAST_NAME = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.IMPORT_LAST_NAME,
|
||||
PositioningStrategies.IMPORT_LAST_NAME
|
||||
|
||||
Reference in New Issue
Block a user