FIR: fix VALUE_ARGUMENTS position strategy
This commit is contained in:
committed by
TeamCityServer
parent
3bd6bf1432
commit
61475c48e2
+7
-4
@@ -409,12 +409,15 @@ object LightTreePositioningStrategies {
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
tree: FlyweightCapableTreeStructure<LighterASTNode>
|
tree: FlyweightCapableTreeStructure<LighterASTNode>
|
||||||
): List<TextRange> {
|
): List<TextRange> {
|
||||||
//PSI counterpart simply search for first RPAR descendant, but this one is more correct
|
val nodeToStart = when (node.tokenType) {
|
||||||
return tree.findDescendantByType(node, KtNodeTypes.VALUE_ARGUMENT_LIST)?.let { valueArgumentList ->
|
in KtTokens.QUALIFIED_ACCESS -> tree.findLastChildByType(node, KtNodeTypes.CALL_EXPRESSION) ?: node
|
||||||
|
else -> node
|
||||||
|
}
|
||||||
|
return tree.findDescendantByType(nodeToStart, KtNodeTypes.VALUE_ARGUMENT_LIST)?.let { valueArgumentList ->
|
||||||
tree.findLastChildByType(valueArgumentList, KtTokens.RPAR)?.let { rpar ->
|
tree.findLastChildByType(valueArgumentList, KtTokens.RPAR)?.let { rpar ->
|
||||||
markElement(rpar, startOffset, endOffset, tree, node)
|
markElement(rpar, startOffset, endOffset, tree, node)
|
||||||
}
|
}
|
||||||
} ?: markElement(node, startOffset, endOffset, tree, node)
|
} ?: markElement(nodeToStart, startOffset, endOffset, tree, node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -454,7 +457,7 @@ object LightTreePositioningStrategies {
|
|||||||
return markElement(it, startOffset, endOffset, tree, node)
|
return markElement(it, startOffset, endOffset, tree, node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (node.tokenType != KtNodeTypes.DOT_QUALIFIED_EXPRESSION && node.tokenType != KtNodeTypes.SAFE_ACCESS_EXPRESSION) {
|
if (node.tokenType !in KtTokens.QUALIFIED_ACCESS) {
|
||||||
return super.mark(node, startOffset, endOffset, tree)
|
return super.mark(node, startOffset, endOffset, tree)
|
||||||
}
|
}
|
||||||
val selector = tree.selector(node)
|
val selector = tree.selector(node)
|
||||||
|
|||||||
-2
@@ -40,8 +40,6 @@ private val expressionSet = listOf(
|
|||||||
FUN
|
FUN
|
||||||
)
|
)
|
||||||
|
|
||||||
val qualifiedAccessTokens = TokenSet.create(DOT_QUALIFIED_EXPRESSION, SAFE_ACCESS_EXPRESSION)
|
|
||||||
|
|
||||||
fun String?.nameAsSafeName(defaultName: String = ""): Name {
|
fun String?.nameAsSafeName(defaultName: String = ""): Name {
|
||||||
return when {
|
return when {
|
||||||
this != null -> Name.identifier(this.replace("`", ""))
|
this != null -> Name.identifier(this.replace("`", ""))
|
||||||
|
|||||||
+1
-1
@@ -86,7 +86,7 @@ class ExpressionsConverter(
|
|||||||
ANNOTATED_EXPRESSION -> convertAnnotatedExpression(expression)
|
ANNOTATED_EXPRESSION -> convertAnnotatedExpression(expression)
|
||||||
CLASS_LITERAL_EXPRESSION -> convertClassLiteralExpression(expression)
|
CLASS_LITERAL_EXPRESSION -> convertClassLiteralExpression(expression)
|
||||||
CALLABLE_REFERENCE_EXPRESSION -> convertCallableReferenceExpression(expression)
|
CALLABLE_REFERENCE_EXPRESSION -> convertCallableReferenceExpression(expression)
|
||||||
in qualifiedAccessTokens -> convertQualifiedExpression(expression)
|
in QUALIFIED_ACCESS -> convertQualifiedExpression(expression)
|
||||||
CALL_EXPRESSION -> convertCallExpression(expression)
|
CALL_EXPRESSION -> convertCallExpression(expression)
|
||||||
WHEN -> convertWhenExpression(expression)
|
WHEN -> convertWhenExpression(expression)
|
||||||
ARRAY_ACCESS_EXPRESSION -> convertArrayAccessExpression(expression)
|
ARRAY_ACCESS_EXPRESSION -> convertArrayAccessExpression(expression)
|
||||||
|
|||||||
@@ -614,7 +614,11 @@ object PositioningStrategies {
|
|||||||
@JvmField
|
@JvmField
|
||||||
val VALUE_ARGUMENTS: PositioningStrategy<KtElement> = object : PositioningStrategy<KtElement>() {
|
val VALUE_ARGUMENTS: PositioningStrategy<KtElement> = object : PositioningStrategy<KtElement>() {
|
||||||
override fun mark(element: KtElement): List<TextRange> {
|
override fun mark(element: KtElement): List<TextRange> {
|
||||||
return markElement(element.findDescendantOfType<KtValueArgumentList>()?.rightParenthesis ?: element)
|
val qualifiedAccess = when (element) {
|
||||||
|
is KtQualifiedExpression -> element.selectorExpression ?: element
|
||||||
|
else -> element
|
||||||
|
}
|
||||||
|
return markElement(qualifiedAccess.findDescendantOfType<KtValueArgumentList>()?.rightParenthesis ?: qualifiedAccess)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ import com.intellij.psi.tree.TokenSet;
|
|||||||
import org.jetbrains.kotlin.kdoc.lexer.KDocTokens;
|
import org.jetbrains.kotlin.kdoc.lexer.KDocTokens;
|
||||||
import org.jetbrains.kotlin.psi.KtPsiUtil;
|
import org.jetbrains.kotlin.psi.KtPsiUtil;
|
||||||
|
|
||||||
|
import static org.jetbrains.kotlin.KtNodeTypes.DOT_QUALIFIED_EXPRESSION;
|
||||||
|
import static org.jetbrains.kotlin.KtNodeTypes.SAFE_ACCESS_EXPRESSION;
|
||||||
|
|
||||||
public interface KtTokens {
|
public interface KtTokens {
|
||||||
KtToken EOF = new KtToken("EOF");
|
KtToken EOF = new KtToken("EOF");
|
||||||
|
|
||||||
@@ -266,4 +269,5 @@ public interface KtTokens {
|
|||||||
TokenSet AUGMENTED_ASSIGNMENTS = TokenSet.create(PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
|
TokenSet AUGMENTED_ASSIGNMENTS = TokenSet.create(PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
|
||||||
TokenSet ALL_ASSIGNMENTS = TokenSet.create(EQ, PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
|
TokenSet ALL_ASSIGNMENTS = TokenSet.create(EQ, PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
|
||||||
TokenSet INCREMENT_AND_DECREMENT = TokenSet.create(PLUSPLUS, MINUSMINUS);
|
TokenSet INCREMENT_AND_DECREMENT = TokenSet.create(PLUSPLUS, MINUSMINUS);
|
||||||
|
TokenSet QUALIFIED_ACCESS = TokenSet.create(DOT_QUALIFIED_EXPRESSION, SAFE_ACCESS_EXPRESSION);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ class KotlinSubSubClass : KotlinSubClass() {
|
|||||||
fun viaRealOverride() = KotlinSubSubClass().foo(kotlinName = 3)
|
fun viaRealOverride() = KotlinSubSubClass().foo(kotlinName = 3)
|
||||||
|
|
||||||
|
|
||||||
fun unresolvedParameter() = JavaSuperClass(<!NO_VALUE_FOR_PARAMETER!>)<!>.foo(<!NAMED_PARAMETER_NOT_FOUND!>nonexistentName<!> = 4)
|
fun unresolvedParameter() = JavaSuperClass().foo(<!NAMED_PARAMETER_NOT_FOUND!>nonexistentName<!> = 4<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||||
|
|
||||||
|
|
||||||
fun multipleParameters() = JavaSuperClass().multipleParameters(<!NAMED_ARGUMENTS_NOT_ALLOWED!>first<!> = 1, <!NAMED_ARGUMENTS_NOT_ALLOWED!>second<!> = 2L, <!NAMED_ARGUMENTS_NOT_ALLOWED!>third<!> = "3")
|
fun multipleParameters() = JavaSuperClass().multipleParameters(<!NAMED_ARGUMENTS_NOT_ALLOWED!>first<!> = 1, <!NAMED_ARGUMENTS_NOT_ALLOWED!>second<!> = 2L, <!NAMED_ARGUMENTS_NOT_ALLOWED!>third<!> = "3")
|
||||||
|
|||||||
Reference in New Issue
Block a user