[java-inspection] IDEA-340576 Uncompilable code generated for switch pattern matching

- class, which has permitted list, doesn't have `sealed` modifier, process this class as sealed

GitOrigin-RevId: afaccb6f6479c90ad431b9300a586854e89ea204
This commit is contained in:
Mikhail Pyltsin
2023-12-14 14:02:59 +01:00
committed by intellij-monorepo-bot
parent 43ad0b4707
commit ed67eee493
3 changed files with 33 additions and 1 deletions

View File

@@ -73,10 +73,13 @@ public final class CreateSwitchBranchesUtil {
PsiClass selectorClass = PsiUtil.resolveClassInClassTypeOnly(switchExpression != null ? switchExpression.getType() : null);
boolean hasSealedClass = selectorClass != null &&
(selectorClass.hasModifierProperty(PsiModifier.SEALED) ||
selectorClass.getPermitsList() != null ||
(selectorClass instanceof PsiTypeParameter typeParameter &&
ContainerUtil.exists(typeParameter.getExtendsListTypes(), extType -> {
PsiClass psiClass = PsiUtil.resolveClassInClassTypeOnly(extType);
return psiClass != null && psiClass.hasModifierProperty(PsiModifier.SEALED);
return psiClass != null &&
(psiClass.hasModifierProperty(PsiModifier.SEALED) ||
psiClass.getPermitsList() != null);
})));
boolean isPatternsGenerated = selectorClass != null && !selectorClass.isEnum() && hasSealedClass;
if (body == null) {

View File

@@ -0,0 +1,15 @@
// "Create missing switch branch 'Outer.Book'" "true-preview"
class Outer {
interface SaleItem permits Book {
}
record Book(String title, String author, double price) implements SaleItem {
}
int calc(SaleItem item) {
return switch (item) {
case Book book -> 0;
};
}
}

View File

@@ -0,0 +1,14 @@
// "Create missing switch branch 'Outer.Book'" "true-preview"
class Outer {
interface SaleItem permits Book {
}
record Book(String title, String author, double price) implements SaleItem {
}
int calc(SaleItem item) {
return switch (it<caret>em) {
};
}
}