mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
[java-highlighting] IDEA-315943 support non-sealed for compiled classes
GitOrigin-RevId: 36503f8638c9fa57ba640f014091f1da888d8fab
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9dbb69a667
commit
9fc5ecba31
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user