mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-189603 Multi-parameter completion overwrites code if there is no closing parenthesis
This commit is contained in:
+7
-3
@@ -35,7 +35,6 @@ import com.intellij.util.JavaPsiConstructorUtil;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -105,9 +104,14 @@ class SameSignatureCallParametersProvider extends CompletionProvider<CompletionP
|
||||
element = element.withInsertHandler(new InsertHandler<LookupElement>() {
|
||||
@Override
|
||||
public void handleInsert(InsertionContext context, LookupElement item) {
|
||||
context.commitDocument();
|
||||
int startOffset = context.getTailOffset();
|
||||
int endOffset = CharArrayUtil.shiftForwardUntil(context.getDocument().getImmutableCharSequence(), startOffset, ")");
|
||||
context.getDocument().deleteString(startOffset, endOffset);
|
||||
PsiExpressionList exprList =
|
||||
PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), startOffset - 1, PsiExpressionList.class, false);
|
||||
PsiElement rParen = exprList == null ? null : exprList.getLastChild();
|
||||
if (rParen != null && rParen.textMatches(")")) {
|
||||
context.getDocument().deleteString(startOffset, rParen.getTextRange().getStartOffset());
|
||||
}
|
||||
if (makeFinalIfNeeded) {
|
||||
context.commitDocument();
|
||||
for (PsiParameter parameter : CompletionUtil.getOriginalOrSelf(takeParametersFrom).getParameterList().getParameters()) {
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
class Dummy {
|
||||
void caller(String someString, int number) {
|
||||
toComplete(someString, number);<caret>
|
||||
}
|
||||
void toComplete(String someString, int number) {
|
||||
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
class Dummy {
|
||||
void caller(String someString, int number) {
|
||||
toComplete(<caret>
|
||||
}
|
||||
void toComplete(String someString, int number) {
|
||||
|
||||
}
|
||||
}
|
||||
+8
@@ -797,6 +797,14 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
|
||||
myFixture.assertPreferredCompletionItems(0, "i", "z", "zz", "i, z, zz");
|
||||
}
|
||||
|
||||
public void testSameSignatureWithoutClosingParen() {
|
||||
configureByTestName();
|
||||
myFixture.assertPreferredCompletionItems(0, "someString", "someString, number");
|
||||
getLookup().setCurrentItem(getLookup().getItems().get(1));
|
||||
select();
|
||||
checkResultByTestName();
|
||||
}
|
||||
|
||||
public void testSuggestTypeParametersInTypeArgumentList() {
|
||||
configureByTestName();
|
||||
myFixture.assertPreferredCompletionItems(0, "T", "String");
|
||||
|
||||
Reference in New Issue
Block a user