diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionStatistician.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionStatistician.java index cb5385cf3220..9807fd713e48 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionStatistician.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionStatistician.java @@ -53,8 +53,13 @@ public class JavaCompletionStatistician extends CompletionStatistician{ final ExpectedTypeInfo firstInfo = infos != null && infos.length > 0 ? infos[0] : null; String key2 = JavaStatisticsManager.getMemberUseKey2((PsiMember)o); if (o instanceof PsiClass) { + if (PreferByKindWeigher.isInMethodTypeArg(position)) { + return StatisticsInfo.EMPTY; + } + PsiType expectedType = firstInfo != null ? firstInfo.getDefaultType() : null; - return new StatisticsInfo(JavaStatisticsManager.getAfterNewKey(expectedType), key2); + String context = JavaClassNameCompletionContributor.AFTER_NEW.accepts(position) ? JavaStatisticsManager.getAfterNewKey(expectedType) : ""; + return new StatisticsInfo(context, key2); } PsiClass containingClass = ((PsiMember)o).getContainingClass(); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java b/java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java index 6ba811171c38..f088de126832 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java @@ -269,12 +269,15 @@ public class PreferByKindWeigher extends LookupElementWeigher { } if (JavaKeywordCompletion.PRIMITIVE_TYPES.contains(keyword) || PsiKeyword.VOID.equals(keyword)) { boolean inCallArg = psiElement().withParents(PsiReferenceExpression.class, PsiExpressionList.class).accepts(myPosition); - boolean inTypeArg = psiElement().inside(PsiReferenceParameterList.class).accepts(myPosition); - return inCallArg || inTypeArg ? ThreeState.NO : ThreeState.UNSURE; + return inCallArg || isInMethodTypeArg(myPosition) ? ThreeState.NO : ThreeState.UNSURE; } return ThreeState.UNSURE; } + static boolean isInMethodTypeArg(PsiElement position) { + return psiElement().inside(PsiReferenceParameterList.class).accepts(position); + } + private static boolean isOnTopLevelInVoidMethod(PsiStatement statement) { if (!(statement.getParent() instanceof PsiCodeBlock)) return false; diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/ClassNameStatisticsDoesntDependOnExpectedType.java b/java/java-tests/testData/codeInsight/completion/normalSorting/ClassNameStatisticsDoesntDependOnExpectedType.java new file mode 100644 index 000000000000..86def230dcd9 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/ClassNameStatisticsDoesntDependOnExpectedType.java @@ -0,0 +1,10 @@ +public class Usage { + { + int a = ConUt + } + +} + + +class ConflictsUtil { static int foo() {} } +class ContainerUtil { static int foo() {} } \ No newline at end of file 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 88a306aabdca..78f3ec3d0886 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy @@ -758,4 +758,13 @@ class ContainerUtil extends ContainerUtilRt { assert LookupElementPresentation.renderElement(myFixture.lookupElements[0]).tailText.contains('java.lang') } + void testClassNameStatisticsDoesntDependOnExpectedType() { + checkPreferredItems 0, 'ConflictsUtil', 'ContainerUtil' + myFixture.lookup.currentItem = myFixture.lookupElements[1] + myFixture.type('\n.foo();\nlong l = ConUt') + myFixture.completeBasic() + + assertPreferredItems 0, 'ContainerUtil', 'ConflictsUtil' + } + }