diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java index 9761c51aca08..1cb0667bd7e8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java @@ -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() { + @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)) { diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet.java new file mode 100644 index 000000000000..f70f2eaa011d --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet.java @@ -0,0 +1,7 @@ +import java.util.Set; + +class Foo { + { + Set s = em + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet_after.java new file mode 100644 index 000000000000..a9f9ca9f5fa4 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestEmptySet_after.java @@ -0,0 +1,8 @@ +import java.util.Collections; +import java.util.Set; + +class Foo { + { + Set s = Collections.emptySet() + } +} \ No newline at end of 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 6444c21173bb..3de5d0e61add 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -1308,4 +1308,11 @@ public class ListUtils { assert p.typeText == 'Foo' } + public void testSuggestEmptySet() { + configure() + assert 'emptySet' == myFixture.lookupElementStrings[0] + type '\n' + checkResult() + } + }