[java-highlighting] IDEA-324654 IDEA-324675 Take into account the hierarchy for coverage

GitOrigin-RevId: 37d211b59419aa50a106c47ac897e704bed32ca7
This commit is contained in:
Mikhail Pyltsin
2023-07-09 13:34:16 +02:00
committed by intellij-monorepo-bot
parent 89a74caded
commit 11a07b9e2c
3 changed files with 28 additions and 1 deletions

View File

@@ -479,6 +479,11 @@ public class SwitchBlockHighlightingModel {
@NotNull List<? extends PsiCaseLabelElement> elements) {
LinkedHashMap<PsiClass, PsiPattern> patternClasses = findPatternClasses(elements);
List<PsiEnumConstant> enumConstants = StreamEx.of(elements).map(element -> getEnumConstant(element)).nonNull().toList();
List<PsiPrimaryPattern> unconditionalPatterns =
ContainerUtil.mapNotNull(elements, element -> JavaPsiPatternUtil.findUnconditionalPattern(element));
List<PsiTypeTestPattern> typeTestPatterns =
ContainerUtil.filterIsInstance(unconditionalPatterns, PsiTypeTestPattern.class);
PsiClass selectorClass = PsiUtil.resolveClassInClassTypeOnly(TypeConversionUtil.erasure(selectorType));
if (selectorClass == null) return Collections.emptySet();
Queue<PsiClass> nonVisited = new ArrayDeque<>();
@@ -503,7 +508,9 @@ public class SwitchBlockHighlightingModel {
}
else {
visited.add(psiClass);
if (!(psiClass.isEnum() && findMissingEnumConstant(psiClass, enumConstants).isEmpty())) {
if (!ContainerUtil.exists(typeTestPatterns,
pattern -> JavaPsiPatternUtil.isUnconditionalForType(pattern, TypeUtils.getType(psiClass), true)) &&
!(psiClass.isEnum() && findMissingEnumConstant(psiClass, enumConstants).isEmpty())) {
missingClasses.add(psiClass);
}
}

View File

@@ -0,0 +1,18 @@
class Main {
sealed interface T permits T1, T2 {
}
final class T1 implements T {
}
interface B{}
final class T2 implements T, B {
}
public static void test2(T t) {
switch (t) {
case T1 t1-> System.out.println(1);
case B t2-> System.out.println(1);
}
}
}

View File

@@ -181,6 +181,8 @@ public class LightPatternsForSwitchHighlightingTest extends LightJavaCodeInsight
doTest();
}
public void testCoverWithHierarchy() {doTest();}
private void doTest() {
myFixture.configureByFile(getTestName(false) + ".java");
myFixture.checkHighlighting();