From 73a484448179f169d239c8edc941a16c6e581f7b Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Mon, 3 Nov 2025 12:56:51 +0100 Subject: [PATCH] [java-completion] IDEA-381537 Unnecessary completion after constructor. Command Completion GitOrigin-RevId: 121925c75aebd3656a6cb4086a01e1b52cc4cafd --- .../completion/JavaMemberNameCompletionContributor.java | 4 +++- .../completion/normal/DotInsideConstructor.java | 9 +++++++++ .../completion/normal/DotInsideConstructor_after.java | 9 +++++++++ .../codeInsight/completion/NormalCompletionTest.java | 6 ++++++ 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/DotInsideConstructor.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/DotInsideConstructor_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java index 0009a97aa7e7..2b59710b78d1 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java @@ -82,7 +82,9 @@ public final class JavaMemberNameCompletionContributor extends CompletionContrib completeComponentName(lookupSet, component, result.getPrefixMatcher()); } - if (PsiJavaPatterns.psiElement().nameIdentifierOf(PsiJavaPatterns.psiMethod().withParent(PsiClass.class)).accepts(position)) { + if (PsiJavaPatterns.psiElement().nameIdentifierOf(PsiJavaPatterns.psiMethod().withParent(PsiClass.class)).accepts(position) && + !(PsiTreeUtil.prevVisibleLeaf(position) instanceof PsiJavaToken javaToken && + javaToken.getTokenType() == JavaTokenType.DOT)) { completeMethodName(lookupSet, parameters.getPosition().getParent(), result.getPrefixMatcher()); } diff --git a/java/java-tests/testData/codeInsight/completion/normal/DotInsideConstructor.java b/java/java-tests/testData/codeInsight/completion/normal/DotInsideConstructor.java new file mode 100644 index 000000000000..1be047c1bb5c --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/DotInsideConstructor.java @@ -0,0 +1,9 @@ +package org.example; + +public class Person { + private String a; + + public Person(String a).Pe { + this.a = a; + } +} diff --git a/java/java-tests/testData/codeInsight/completion/normal/DotInsideConstructor_after.java b/java/java-tests/testData/codeInsight/completion/normal/DotInsideConstructor_after.java new file mode 100644 index 000000000000..1be047c1bb5c --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/DotInsideConstructor_after.java @@ -0,0 +1,9 @@ +package org.example; + +public class Person { + private String a; + + public Person(String a).Pe { + this.a = a; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.java index 3f9a70365bf6..65f0b653303e 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.java @@ -3258,4 +3258,10 @@ public class NormalCompletionTest extends NormalCompletionTestCase { myFixture.completeBasic(); myFixture.checkResultByFile(getTestName(false) + "_after.java"); } + + public void testDotInsideConstructor() { + configureByTestName(); + myFixture.completeBasic(); + myFixture.checkResultByFile(getTestName(false) + "_after.java"); + } }