diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/AbstractExpectedTypeSkipper.java b/java/java-impl/src/com/intellij/codeInsight/completion/AbstractExpectedTypeSkipper.java index e5b53a62007d..63f5922ec9b4 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/AbstractExpectedTypeSkipper.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/AbstractExpectedTypeSkipper.java @@ -45,7 +45,7 @@ public class AbstractExpectedTypeSkipper extends CompletionPreselectSkipper { } private static Result getSkippingStatus(final LookupElement item, final CompletionLocation location) { - if (location.getCompletionType() != CompletionType.SMART) return Result.ACCEPT; + if (location.getCompletionType() != CompletionType.SMART && !hasEmptyPrefix(location)) return Result.ACCEPT; final PsiExpression expression = PsiTreeUtil.getParentOfType(location.getCompletionParameters().getPosition(), PsiExpression.class); if (!(expression instanceof PsiNewExpression)) return Result.ACCEPT; @@ -95,4 +95,7 @@ public class AbstractExpectedTypeSkipper extends CompletionPreselectSkipper { return Result.ACCEPT; } + private static boolean hasEmptyPrefix(CompletionLocation location) { + return location.getCompletionParameters().getPosition().getTextRange().getStartOffset() == location.getCompletionParameters().getOffset(); + } } diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferMultiMethodInterfaceAfterNew.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferMultiMethodInterfaceAfterNew.java new file mode 100644 index 000000000000..0f8db123edfc --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DispreferMultiMethodInterfaceAfterNew.java @@ -0,0 +1,15 @@ +class Test { + Intf i = new +} + +interface Intf { + void foo(); + void bar(); + void goo(); +} + +class IntfImpl implements Intf { + public void foo() {} + public void bar() {} + public void goo() {} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionOrderingTest.groovy b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionOrderingTest.groovy index c6fbe1ce90e1..cbd701823147 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionOrderingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionOrderingTest.groovy @@ -383,6 +383,8 @@ interface TxANotAnno {} final LookupImpl lookup = invokeCompletion("/../smartTypeSorting/JComponentAddNew.java") assertPreferredItems(0, "FooBean3", "JComponent", "Component") incUseCount(lookup, 2) //Component + assertPreferredItems(1, "Component", "FooBean3", "JComponent") + incUseCount(lookup, 0) //Component assertPreferredItems(0, "Component", "FooBean3", "JComponent") } @@ -857,4 +859,8 @@ class Foo { checkPreferredItems 0, 'final', 'find1' } + void testDispreferMultiMethodInterfaceAfterNew() { + checkPreferredItems 1, 'Intf', 'IntfImpl' + } + }