From fe13245171d9d26d53e49adbbf9bfd0a6c543572 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 15 Feb 2012 16:14:41 +0100 Subject: [PATCH] suggest to pass several parameters in autopopup --- .../codeInsight/completion/JavaCompletionData.java | 3 +++ .../completion/JavaSmartCompletionContributor.java | 5 +---- ...referLocalVariablesLiteralsAndAnnoMethodsWeigher.java | 8 ++++---- .../completion/SameSignatureCallParametersProvider.java | 8 ++++++++ .../codeInsight/completion/normal/SameSignature.java | 9 +++++++++ .../completion/normal/SameSignature_after.java | 9 +++++++++ .../codeInsight/completion/NormalCompletionTest.groovy | 7 +++++++ 7 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/SameSignature.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/SameSignature_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java index 437015a6bfe5..618d7196e467 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java @@ -537,6 +537,9 @@ public class JavaCompletionData extends JavaAwareCompletionData{ } }); } + if (SameSignatureCallParametersProvider.IN_CALL_ARGUMENT.accepts(position)) { + new SameSignatureCallParametersProvider().addCompletions(parameters, new ProcessingContext(), result); + } } } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java index e4825f5781f2..d54d27ad5ee0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java @@ -111,10 +111,7 @@ public class JavaSmartCompletionContributor extends CompletionContributor { public JavaSmartCompletionContributor() { extend(CompletionType.SMART, SmartCastProvider.INSIDE_TYPECAST_TYPE, new SmartCastProvider()); - extend(CompletionType.SMART, - psiElement().beforeLeaf(psiElement(JavaTokenType.RPARENTH)).afterLeaf("(").withParent( - psiElement(PsiReferenceExpression.class).withParent( - psiElement(PsiExpressionList.class).withParent(PsiCall.class))), new SameSignatureCallParametersProvider()); + extend(CompletionType.SMART, SameSignatureCallParametersProvider.IN_CALL_ARGUMENT, new SameSignatureCallParametersProvider()); extend(CompletionType.SMART, psiElement().afterLeaf(PsiKeyword.INSTANCEOF), new CompletionProvider() { protected void addCompletions(@NotNull final CompletionParameters parameters, final ProcessingContext context, @NotNull final CompletionResultSet result) { diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/PreferLocalVariablesLiteralsAndAnnoMethodsWeigher.java b/java/java-impl/src/com/intellij/codeInsight/completion/PreferLocalVariablesLiteralsAndAnnoMethodsWeigher.java index 5159fb5430db..5899de6213c5 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/PreferLocalVariablesLiteralsAndAnnoMethodsWeigher.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/PreferLocalVariablesLiteralsAndAnnoMethodsWeigher.java @@ -67,11 +67,11 @@ public class PreferLocalVariablesLiteralsAndAnnoMethodsWeigher extends LookupEle return MyResult.localOrParameter; } - if (myCompletionType == CompletionType.SMART) { - if (object instanceof String && item.getUserData(JavaCompletionUtil.SUPER_METHOD_PARAMETERS) == Boolean.TRUE) { - return MyResult.superMethodParameters; - } + if (object instanceof String && item.getUserData(JavaCompletionUtil.SUPER_METHOD_PARAMETERS) == Boolean.TRUE) { + return MyResult.superMethodParameters; + } + if (myCompletionType == CompletionType.SMART) { if (item.getUserData(CollectionsUtilityMethodsProvider.COLLECTION_FACTORY) != null) { return MyResult.collectionFactory; } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/SameSignatureCallParametersProvider.java b/java/java-impl/src/com/intellij/codeInsight/completion/SameSignatureCallParametersProvider.java index e0cabe46b9ae..3597e2cb00d4 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/SameSignatureCallParametersProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/SameSignatureCallParametersProvider.java @@ -23,6 +23,7 @@ import com.intellij.codeInsight.lookup.TailTypeDecorator; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.patterns.PsiElementPattern; import com.intellij.psi.*; import com.intellij.psi.util.PsiSuperMethodUtil; import com.intellij.psi.util.PsiTreeUtil; @@ -37,10 +38,17 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import static com.intellij.patterns.PlatformPatterns.psiElement; + /** * @author peter */ class SameSignatureCallParametersProvider extends CompletionProvider { + static final PsiElementPattern.Capture IN_CALL_ARGUMENT = + psiElement().beforeLeaf(psiElement(JavaTokenType.RPARENTH)).afterLeaf("(").withParent( + psiElement(PsiReferenceExpression.class).withParent( + psiElement(PsiExpressionList.class).withParent(PsiCall.class))); + @Override protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, diff --git a/java/java-tests/testData/codeInsight/completion/normal/SameSignature.java b/java/java-tests/testData/codeInsight/completion/normal/SameSignature.java new file mode 100644 index 000000000000..a2ca02f04dfa --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/SameSignature.java @@ -0,0 +1,9 @@ +import java.io.File; + +class Zoo { + private Zoo delegate; + @Override + public void foo(String s, File file) { + delegate.foo(s); + } +} diff --git a/java/java-tests/testData/codeInsight/completion/normal/SameSignature_after.java b/java/java-tests/testData/codeInsight/completion/normal/SameSignature_after.java new file mode 100644 index 000000000000..57788a97801e --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/SameSignature_after.java @@ -0,0 +1,9 @@ +import java.io.File; + +class Zoo { + private Zoo delegate; + @Override + public void foo(String s, File file) { + delegate.foo(s, file); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index 52c4f5610a69..eeb6589257e7 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -1283,4 +1283,11 @@ public class ListUtils { assert !('return' in myFixture.lookupElementStrings) } + public void testSameSignature() { + configure() + lookup.setCurrentItem(myItems[1]) + myFixture.type('\n') + checkResult() + } + }