KT-7267 Arguments are replaced by tab when old call was qualified
#KT-7267 Fixed
This commit is contained in:
@@ -103,19 +103,12 @@ public class KotlinCompletionContributor : CompletionContributor() {
|
|||||||
parent = expression.getParent()
|
parent = expression.getParent()
|
||||||
}
|
}
|
||||||
|
|
||||||
val expressionEnd = expression.getTextRange()!!.getEndOffset()
|
val suggestedReplacementOffset = replacementOffsetByExpression(expression)
|
||||||
val suggestedReplacementOffset = if (expression is JetCallExpression) {
|
|
||||||
val calleeExpression = (expression as JetCallExpression).getCalleeExpression()
|
|
||||||
if (calleeExpression != null) calleeExpression.getTextRange()!!.getEndOffset() else expressionEnd
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
expressionEnd
|
|
||||||
}
|
|
||||||
if (suggestedReplacementOffset > context.getReplacementOffset()) {
|
if (suggestedReplacementOffset > context.getReplacementOffset()) {
|
||||||
context.setReplacementOffset(suggestedReplacementOffset)
|
context.setReplacementOffset(suggestedReplacementOffset)
|
||||||
}
|
}
|
||||||
|
|
||||||
context.getOffsetMap().addOffset(SmartCompletion.OLD_ARGUMENTS_REPLACEMENT_OFFSET, expressionEnd)
|
context.getOffsetMap().addOffset(SmartCompletion.OLD_ARGUMENTS_REPLACEMENT_OFFSET, expression.getTextRange().getEndOffset())
|
||||||
|
|
||||||
val argumentList = (expression.getParent() as? JetValueArgument)?.getParent() as? JetValueArgumentList
|
val argumentList = (expression.getParent() as? JetValueArgument)?.getParent() as? JetValueArgumentList
|
||||||
if (argumentList != null) {
|
if (argumentList != null) {
|
||||||
@@ -127,6 +120,25 @@ public class KotlinCompletionContributor : CompletionContributor() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun replacementOffsetByExpression(expression: JetExpression): Int {
|
||||||
|
when (expression) {
|
||||||
|
is JetCallExpression -> {
|
||||||
|
val calleeExpression = expression.getCalleeExpression()
|
||||||
|
if (calleeExpression != null) {
|
||||||
|
return calleeExpression.getTextRange()!!.getEndOffset()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
is JetQualifiedExpression -> {
|
||||||
|
val selector = expression.getSelectorExpression()
|
||||||
|
if (selector != null) {
|
||||||
|
return replacementOffsetByExpression(selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return expression.getTextRange()!!.getEndOffset()
|
||||||
|
}
|
||||||
|
|
||||||
private fun isInFunctionLiteralParameterList(tokenBefore: PsiElement?): Boolean {
|
private fun isInFunctionLiteralParameterList(tokenBefore: PsiElement?): Boolean {
|
||||||
val parameterList = tokenBefore?.parents(false)?.firstOrNull { it is JetParameterList } ?: return false
|
val parameterList = tokenBefore?.parents(false)?.firstOrNull { it is JetParameterList } ?: return false
|
||||||
val parent = parameterList.getParent()
|
val parent = parameterList.getParent()
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
class C(val v: Int)
|
||||||
|
|
||||||
|
fun foo(): C {
|
||||||
|
return <caret>a.b(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ELEMENT: C
|
||||||
|
// CHAR: \t
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
class C(val v: Int)
|
||||||
|
|
||||||
|
fun foo(): C {
|
||||||
|
return C(<caret>1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ELEMENT: C
|
||||||
|
// CHAR: \t
|
||||||
+6
@@ -534,6 +534,12 @@ public class SmartCompletionHandlerTestGenerated extends AbstractSmartCompletion
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("QualifiedCallReplacementBug.kt")
|
||||||
|
public void testQualifiedCallReplacementBug() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/smart/QualifiedCallReplacementBug.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("QualifiedThisKeywordName1.kt")
|
@TestMetadata("QualifiedThisKeywordName1.kt")
|
||||||
public void testQualifiedThisKeywordName1() throws Exception {
|
public void testQualifiedThisKeywordName1() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/smart/QualifiedThisKeywordName1.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/smart/QualifiedThisKeywordName1.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user