[java-highlighting] IDEA-315943 support non-sealed for compiled classes

GitOrigin-RevId: 36503f8638c9fa57ba640f014091f1da888d8fab
This commit is contained in:
Mikhail Pyltsin
2023-03-24 22:21:20 +01:00
committed by intellij-monorepo-bot
parent 9dbb69a667
commit 9fc5ecba31
2 changed files with 19 additions and 3 deletions

View File

@@ -423,11 +423,13 @@ public final class TypeConversionUtil {
@NotNull PsiClass psiClass,
@NotNull List<PsiClass> sealedClasses) {
if (subClass == null) return false;
if (subClass.hasModifierProperty(PsiModifier.NON_SEALED) || InheritanceUtil.isInheritorOrSelf(subClass, psiClass, true)) return true;
if (subClass.hasModifierProperty(PsiModifier.SEALED)) {
sealedClasses.add(subClass);
return false;
}
return false;
//DON'T use `hasModifierProperty(PsiModifier.NON_SEALED)`, because compiled classes don't have this modifier
return !subClass.hasModifierProperty(PsiModifier.FINAL) ||
InheritanceUtil.isInheritorOrSelf(subClass, psiClass, true);
}
@NotNull

View File

@@ -117,5 +117,19 @@ interface Foo {
E e = (E) i;
}
}
static class CastWithNonSealed {
protected interface ReferenceInt{}
sealed class SealedA permits FinalB, NonSealedC, SealedD{
}
final class FinalB extends SealedA{}
non-sealed class NonSealedC extends SealedA{}
sealed class SealedD extends SealedA permits finalF{}
final class finalF extends SealedD{}
public void castToInt(SealedA sealedA){
ReferenceInt referenceInt = (ReferenceInt) sealedA;
}
}
}