mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
[java-highlighting] IDEA-324654 IDEA-324675 Take into account the hierarchy for coverage
GitOrigin-RevId: 37d211b59419aa50a106c47ac897e704bed32ca7
This commit is contained in:
committed by
intellij-monorepo-bot
parent
89a74caded
commit
11a07b9e2c
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -181,6 +181,8 @@ public class LightPatternsForSwitchHighlightingTest extends LightJavaCodeInsight
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testCoverWithHierarchy() {doTest();}
|
||||
|
||||
private void doTest() {
|
||||
myFixture.configureByFile(getTestName(false) + ".java");
|
||||
myFixture.checkHighlighting();
|
||||
|
||||
Reference in New Issue
Block a user