KT-7267 Arguments are replaced by tab when old call was qualified

#KT-7267 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-04-03 18:00:09 +03:00
parent 2c1a0a0c4b
commit 8ab12e217d
4 changed files with 43 additions and 9 deletions
@@ -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
@@ -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");