diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java index cb586f1a2ec0..f8e6e4f91ba8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -276,6 +276,11 @@ public final class JavaCompletionContributor extends CompletionContributor imple !JavaResolveUtil.isAccessible(field, field.getContainingClass(), field.getModifierList(), context, null, null)) { return false; } + + PsiClass aClass = PsiUtil.resolveClassInClassTypeOnly(field.getType()); + if (aClass != null && aClass.isEnum()) { + return false; + } variable = field; } else if (element instanceof PsiLocalVariable local) { diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch3.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch3.java new file mode 100644 index 000000000000..648bc8f24d9b --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch3.java @@ -0,0 +1,10 @@ +class Main { + interface I{} + enum EN implements I{AAA} + + public static void test3(I en) { + switch (en) { + case EN.A + } + } +} diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch3_after.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch3_after.java new file mode 100644 index 000000000000..52bd226ae628 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch3_after.java @@ -0,0 +1,10 @@ +class Main { + interface I{} + enum EN implements I{AAA} + + public static void test3(I en) { + switch (en) { + case EN.AAA -> + } + } +} diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch4.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch4.java new file mode 100644 index 000000000000..783bf4cffabc --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch4.java @@ -0,0 +1,11 @@ +class Main { + interface I{} + enum ENNN implements I{AAA} + + public static void test3(ENNN en) { + switch (en) { + case ENNN.AA + } + } +} + diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch4_after.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch4_after.java new file mode 100644 index 000000000000..f3f2b21e41fa --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitch4_after.java @@ -0,0 +1,11 @@ +class Main { + interface I{} + enum ENNN implements I{AAA} + + public static void test3(ENNN en) { + switch (en) { + case ENNN.AAA -> + } + } +} + diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitchInJava20.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitchInJava20.java new file mode 100644 index 000000000000..8b2ae53ad11d --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitchInJava20.java @@ -0,0 +1,11 @@ +class Main { + interface I{} + enum ENNN implements I{AAA} + + public static void test3(I en) { + switch (en) { + case ENNN.AA + } + } +} + diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitchInJava20_after.java b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitchInJava20_after.java new file mode 100644 index 000000000000..98433ac9211b --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/QualifierEnumConstantInSwitchInJava20_after.java @@ -0,0 +1,11 @@ +class Main { + interface I{} + enum ENNN implements I{AAA} + + public static void test3(I en) { + switch (en) { + case ENNN.AA + } + } +} + diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalSwitchCompletionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalSwitchCompletionTest.java index 37e81b2545b5..b62fc7e898a3 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalSwitchCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalSwitchCompletionTest.java @@ -2,6 +2,8 @@ package com.intellij.java.codeInsight.completion; import com.intellij.codeInsight.template.impl.LiveTemplateCompletionContributor; +import com.intellij.pom.java.LanguageLevel; +import com.intellij.testFramework.IdeaTestUtil; import com.intellij.testFramework.LightProjectDescriptor; import com.intellij.testFramework.NeedsIndex; import org.jetbrains.annotations.NotNull; @@ -81,6 +83,11 @@ public class NormalSwitchCompletionTest extends NormalCompletionTestCase { public void testQualifierEnumConstantInSwitch1() { doTest(); } public void testQualifierEnumConstantInSwitch2() { doTest(); } + public void testQualifierEnumConstantInSwitch3() { doTest(); } + public void testQualifierEnumConstantInSwitch4() { doTest(); } + public void testQualifierEnumConstantInSwitchInJava20() { + IdeaTestUtil.withLevel(myFixture.getModule(), LanguageLevel.JDK_19, () -> doTest()); + } public void testClassPatternInSwitch1() { doTest(); } public void testClassPatternInSwitch2() { doTest(); } private void doTestPostfixCompletion() {