[java-completion] IDEA-324653 No completion for qualified Enum in switch

GitOrigin-RevId: 60392ce4c67348dfe05d558fc88f62884300f553
This commit is contained in:
Mikhail Pyltsin
2023-07-13 19:06:20 +00:00
committed by intellij-monorepo-bot
parent e8adfcce9b
commit b9abbe646c
10 changed files with 97 additions and 4 deletions
@@ -313,12 +313,17 @@ public final class JavaCompletionContributor extends CompletionContributor imple
return new OrFilter(new ClassFilter(PsiClass.class), constantVariablesFilter);
}
PsiClass typeClass = PsiUtil.resolveClassInType(selectorType);
ClassFilter inheritorsFilter = new ClassFilter(PsiClass.class) {
@Override
public boolean isAcceptable(Object element, PsiElement context) {
return element instanceof PsiClass psiClass && InheritanceUtil.isInheritorOrSelf(psiClass, typeClass, true);
return element instanceof PsiClass psiClass && TypeConversionUtil.areTypesConvertible(TypeUtils.getType(psiClass), selectorType);
}
};
ClassFilter enumInheritorsFilter = new ClassFilter(PsiField.class) {
@Override
public boolean isAcceptable(Object element, PsiElement context) {
return element instanceof PsiEnumConstant enumConstant && TypeConversionUtil.areTypesConvertible(enumConstant.getType(), selectorType);
}
};
@@ -327,7 +332,7 @@ public final class JavaCompletionContributor extends CompletionContributor imple
}
return selectorType instanceof PsiClassType
? inheritorsFilter
? new OrFilter(inheritorsFilter, enumInheritorsFilter)
: TrueFilter.INSTANCE;
}
@@ -0,0 +1,11 @@
class Main {
sealed interface I{}
enum ENNNNN implements I{AAA}
final class AAA implements I{}
public static void test3(I en) {
switch (en) {
case ENNN<caret>
}
}
}
@@ -0,0 +1,11 @@
class Main {
sealed interface I{}
enum ENNNNN implements I{AAA}
final class AAA implements I{}
public static void test3(I en) {
switch (en) {
case ENNNNN<caret>
}
}
}
@@ -0,0 +1,11 @@
class Main {
interface I{}
enum ENNNNN implements I{AAA}
final class AAAAAA implements I{}
public static void test3(I en) {
switch (en) {
case AAAA<caret>
}
}
}
@@ -0,0 +1,11 @@
class Main {
interface I{}
enum ENNNNN implements I{AAA}
final class AAAAAA implements I{}
public static void test3(I en) {
switch (en) {
case AAAAAA<caret>
}
}
}
@@ -0,0 +1,10 @@
class Main {
sealed interface I{}
enum EN implements I{AAA}
public static void test3(I en) {
switch (en) {
case EN.A<caret>
}
}
}
@@ -0,0 +1,10 @@
class Main {
sealed interface I{}
enum EN implements I{AAA}
public static void test3(I en) {
switch (en) {
case EN.AAA -> <caret>
}
}
}
@@ -0,0 +1,10 @@
class Main {
sealed interface I{}
enum EN implements I{AAA}
public static void test3(EN en) {
switch (en) {
case EN.A<caret>
}
}
}
@@ -0,0 +1,10 @@
class Main {
sealed interface I{}
enum EN implements I{AAA}
public static void test3(EN en) {
switch (en) {
case EN.AAA -> <caret>
}
}
}
@@ -79,6 +79,10 @@ public class NormalSwitchCompletionTest extends NormalCompletionTestCase {
public void testCompleteYieldInsideSwitch() { doTest(); }
public void testWhenInSwitchRule() { doTest(); }
public void testQualifierEnumConstantInSwitch1() { doTest(); }
public void testQualifierEnumConstantInSwitch2() { doTest(); }
public void testClassPatternInSwitch1() { doTest(); }
public void testClassPatternInSwitch2() { doTest(); }
private void doTestPostfixCompletion() {
LiveTemplateCompletionContributor.setShowTemplatesInTests(true, myFixture.getTestRootDisposable());
configure();