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()
|
||||
}
|
||||
|
||||
val expressionEnd = expression.getTextRange()!!.getEndOffset()
|
||||
val suggestedReplacementOffset = if (expression is JetCallExpression) {
|
||||
val calleeExpression = (expression as JetCallExpression).getCalleeExpression()
|
||||
if (calleeExpression != null) calleeExpression.getTextRange()!!.getEndOffset() else expressionEnd
|
||||
}
|
||||
else {
|
||||
expressionEnd
|
||||
}
|
||||
val suggestedReplacementOffset = replacementOffsetByExpression(expression)
|
||||
if (suggestedReplacementOffset > context.getReplacementOffset()) {
|
||||
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
|
||||
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 {
|
||||
val parameterList = tokenBefore?.parents(false)?.firstOrNull { it is JetParameterList } ?: return false
|
||||
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);
|
||||
}
|
||||
|
||||
@TestMetadata("QualifiedCallReplacementBug.kt")
|
||||
public void testQualifiedCallReplacementBug() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/smart/QualifiedCallReplacementBug.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("QualifiedThisKeywordName1.kt")
|
||||
public void testQualifiedThisKeywordName1() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/smart/QualifiedThisKeywordName1.kt");
|
||||
|
||||
Reference in New Issue
Block a user