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,
|
||||
tree: FlyweightCapableTreeStructure<LighterASTNode>
|
||||
): List<TextRange> {
|
||||
//PSI counterpart simply search for first RPAR descendant, but this one is more correct
|
||||
return tree.findDescendantByType(node, KtNodeTypes.VALUE_ARGUMENT_LIST)?.let { valueArgumentList ->
|
||||
val nodeToStart = when (node.tokenType) {
|
||||
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 ->
|
||||
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)
|
||||
}
|
||||
}
|
||||
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)
|
||||
}
|
||||
val selector = tree.selector(node)
|
||||
|
||||
-2
@@ -40,8 +40,6 @@ private val expressionSet = listOf(
|
||||
FUN
|
||||
)
|
||||
|
||||
val qualifiedAccessTokens = TokenSet.create(DOT_QUALIFIED_EXPRESSION, SAFE_ACCESS_EXPRESSION)
|
||||
|
||||
fun String?.nameAsSafeName(defaultName: String = ""): Name {
|
||||
return when {
|
||||
this != null -> Name.identifier(this.replace("`", ""))
|
||||
|
||||
+1
-1
@@ -86,7 +86,7 @@ class ExpressionsConverter(
|
||||
ANNOTATED_EXPRESSION -> convertAnnotatedExpression(expression)
|
||||
CLASS_LITERAL_EXPRESSION -> convertClassLiteralExpression(expression)
|
||||
CALLABLE_REFERENCE_EXPRESSION -> convertCallableReferenceExpression(expression)
|
||||
in qualifiedAccessTokens -> convertQualifiedExpression(expression)
|
||||
in QUALIFIED_ACCESS -> convertQualifiedExpression(expression)
|
||||
CALL_EXPRESSION -> convertCallExpression(expression)
|
||||
WHEN -> convertWhenExpression(expression)
|
||||
ARRAY_ACCESS_EXPRESSION -> convertArrayAccessExpression(expression)
|
||||
|
||||
@@ -614,7 +614,11 @@ object PositioningStrategies {
|
||||
@JvmField
|
||||
val VALUE_ARGUMENTS: PositioningStrategy<KtElement> = object : PositioningStrategy<KtElement>() {
|
||||
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.psi.KtPsiUtil;
|
||||
|
||||
import static org.jetbrains.kotlin.KtNodeTypes.DOT_QUALIFIED_EXPRESSION;
|
||||
import static org.jetbrains.kotlin.KtNodeTypes.SAFE_ACCESS_EXPRESSION;
|
||||
|
||||
public interface KtTokens {
|
||||
KtToken EOF = new KtToken("EOF");
|
||||
|
||||
@@ -266,4 +269,5 @@ public interface KtTokens {
|
||||
TokenSet AUGMENTED_ASSIGNMENTS = TokenSet.create(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 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 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")
|
||||
|
||||
Reference in New Issue
Block a user