diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java index 13a66d12e9de..78f869ff31fe 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java @@ -81,8 +81,11 @@ public class JavaCompletionSorting { } } ContainerUtil.addIfNotNull(afterPrefix, recursion(parameters, expectedTypes)); - Collections.addAll(afterPrefix, new PreferSimilarlyEnding(expectedTypes), - new PreferNonGeneric(), new PreferAccessible(position), new PreferSimple()); + afterPrefix.add(new PreferSimilarlyEnding(expectedTypes)); + if (ContainerUtil.or(expectedTypes, info -> !info.getType().equals(PsiType.VOID))) { + afterPrefix.add(new PreferNonGeneric()); + } + Collections.addAll(afterPrefix, new PreferAccessible(position), new PreferSimple()); sorter = sorter.weighAfter("prefix", afterPrefix.toArray(new LookupElementWeigher[afterPrefix.size()])); sorter = sorter.weighAfter("proximity", afterProximity.toArray(new LookupElementWeigher[afterProximity.size()])); diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/GenericityDoesNotMatterWhenNoTypeIsExpected.java b/java/java-tests/testData/codeInsight/completion/normalSorting/GenericityDoesNotMatterWhenNoTypeIsExpected.java new file mode 100644 index 000000000000..218027188b5c --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/GenericityDoesNotMatterWhenNoTypeIsExpected.java @@ -0,0 +1,9 @@ +class Test { + + void nonGeneric() {} + T generic() {} + + { + this. + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/Normal8CompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/Normal8CompletionTest.groovy index 29a40fe7071c..7cf3edae78e0 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/Normal8CompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/Normal8CompletionTest.groovy @@ -219,7 +219,7 @@ class Test88 { public void testAllCollectors() { configureByTestName() - myFixture.assertPreferredCompletionItems 0, 'collect(Collectors.toCollection())', 'collect', 'collect', 'collect(Collectors.toList())', 'collect(Collectors.toSet())' + myFixture.assertPreferredCompletionItems 0, 'collect', 'collect', 'collect(Collectors.toCollection())', 'collect(Collectors.toList())', 'collect(Collectors.toSet())' selectItem(myItems.find { it.lookupString.contains('toCollection') }) checkResultByFile(getTestName(false) + "_after.java") } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy index 2aeb10b51b01..00fc2da57eb7 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy @@ -99,6 +99,10 @@ public class NormalCompletionOrderingTest extends CompletionSortingTestCase { checkPreferredItems(0, "getService", "getService", "class"); } + public void testGenericityDoesNotMatterWhenNoTypeIsExpected() { + checkPreferredItems 0, "generic", "nonGeneric", "clone", "equals" + } + public void testClassStaticMembersInVoidContext() throws Throwable { checkPreferredItems(0, "booleanMethod", "voidMethod", "AN_OBJECT", "BOOLEAN", "class"); }