suggest collection utility methods in basic completion on non-empty prefix

This commit is contained in:
peter
2012-03-09 21:05:12 +04:00
parent 9a93bae85e
commit 37e6704812
4 changed files with 40 additions and 1 deletions
@@ -15,9 +15,11 @@
*/
package com.intellij.codeInsight.completion;
import com.intellij.codeInsight.ExpectedTypeInfo;
import com.intellij.codeInsight.completion.impl.CamelHumpMatcher;
import com.intellij.codeInsight.lookup.AutoCompletionPolicy;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.filters.ElementFilter;
import com.intellij.psi.search.PsiShortNamesCache;
@@ -55,9 +57,11 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
return true;
}
private static void delegate(CompletionParameters parameters, CompletionResultSet result) {
private static void delegate(CompletionParameters parameters, final CompletionResultSet result) {
if (parameters.getCompletionType() == CompletionType.BASIC) {
PsiElement position = parameters.getPosition();
suggestCollectionUtilities(parameters, result, position);
if (parameters.getInvocationCount() <= 1 &&
JavaCompletionContributor.mayStartClassName(result, false) &&
JavaCompletionContributor.isClassNamePossible(position)) {
@@ -73,6 +77,19 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
}
}
private static void suggestCollectionUtilities(CompletionParameters parameters, final CompletionResultSet result, PsiElement position) {
if (StringUtil.isNotEmpty(result.getPrefixMatcher().getPrefix())) {
for (ExpectedTypeInfo info : JavaSmartCompletionContributor.getExpectedTypes(parameters)) {
new CollectionsUtilityMethodsProvider(position, info.getType(), info.getDefaultType(), new Consumer<LookupElement>() {
@Override
public void consume(LookupElement element) {
result.addElement(element);
}
}).addCompletions(true);
}
}
}
private static void suggestChainedCalls(CompletionParameters parameters, CompletionResultSet result, PsiElement position) {
PsiElement parent = position.getParent();
if (!(parent instanceof PsiJavaCodeReferenceElement)) {
@@ -0,0 +1,7 @@
import java.util.Set;
class Foo {
{
Set<String> s = em<caret>
}
}
@@ -0,0 +1,8 @@
import java.util.Collections;
import java.util.Set;
class Foo {
{
Set<String> s = Collections.emptySet()<caret>
}
}
@@ -1308,4 +1308,11 @@ public class ListUtils {
assert p.typeText == 'Foo'
}
public void testSuggestEmptySet() {
configure()
assert 'emptySet' == myFixture.lookupElementStrings[0]
type '\n'
checkResult()
}
}