diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMethodCallElement.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMethodCallElement.java index f90ede5ddc2b..518656d0c463 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMethodCallElement.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMethodCallElement.java @@ -178,6 +178,15 @@ public class JavaMethodCallElement extends LookupItem implements Type } PsiCallExpression methodCall = findCallAtOffset(context, context.getOffset(refStart)); + // make sure this is the method call we've just added, not the enclosing one + if (methodCall != null) { + PsiElement completedElement = methodCall instanceof PsiMethodCallExpression ? + ((PsiMethodCallExpression)methodCall).getMethodExpression().getReferenceNameElement() : null; + TextRange completedElementRange = completedElement == null ? null : completedElement.getTextRange(); + if (completedElementRange == null || completedElementRange.getStartOffset() != context.getStartOffset()) { + methodCall = null; + } + } if (methodCall != null) { CompletionMemory.registerChosenMethod(method, methodCall); handleNegation(context, document, method, methodCall); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionHintsTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionHintsTest.java index b0a417be6f0f..658cb634cc47 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionHintsTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionHintsTest.java @@ -106,6 +106,22 @@ public class CompletionHintsTest extends LightFixtureCompletionTestCase { myFixture.checkResult("class C { void m() { Character.toChars(123, , ) } }"); } + public void testNoHintsForMethodReference() { + myFixture.configureByText(JavaFileType.INSTANCE, "class C {\n" + + " interface I { void i(int p); }\n" + + " void referenced(int a) {}\n" + + " void m(I lambda) {}\n" + + " void m2() { m(this::) }\n" + + "}"); + complete("referenced"); + myFixture.checkResultWithInlays("class C {\n" + + " interface I { void i(int p); }\n" + + " void referenced(int a) {}\n" + + " void m(I lambda) {}\n" + + " void m2() { m(this::referenced) }\n" + + "}"); + } + private void showParameterInfo() { myFixture.performEditorAction("ParameterInfo"); UIUtil.dispatchAllInvocationEvents();