java sealed types: forbid non-sealed classes without sealed supers (IDEA-243536)

GitOrigin-RevId: ce7b48fc5df80edf0a4efc987a23850aff993f6c
This commit is contained in:
Anna Kozlova
2020-06-16 00:04:15 +03:00
committed by intellij-monorepo-bot
parent 2dcab690d5
commit 7c64f7f035
2 changed files with 9 additions and 0 deletions
@@ -988,6 +988,11 @@ public class HighlightUtil {
isAllowed &= !privateOrProtected;
}
}
if (PsiModifier.NON_SEALED.equals(modifier) && !aClass.hasModifierProperty(PsiModifier.SEALED)) {
isAllowed = Arrays.stream(aClass.getSuperTypes())
.map(PsiClassType::resolve)
.anyMatch(superClass -> superClass != null && superClass.hasModifierProperty(PsiModifier.SEALED));
}
}
else if (modifierOwner instanceof PsiMethod) {
PsiMethod method = (PsiMethod)modifierOwner;
@@ -13,3 +13,7 @@ sealed interface IA permits IB, IC {}
final class IB implements IA {}
sealed interface IC extends IA {}
class ICSameFile implements IC {}
sealed interface ID0 {}
non-sealed interface ID1 extends ID0 {}
<error descr="Modifier 'non-sealed' not allowed here">non-sealed</error> interface ID extends ID1 {}