FIR: use symbol modality to ensure the retrieval of lazily resolved status

^KT-57578
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt
index 831e69e..5054517 100644
--- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt
+++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt
@@ -523,9 +523,11 @@
         // The counterpart in K1, [ClassicTypeSystemContext], uses [ClassDescriptor.isFinalClass] in `ModalityUtils.kt`,
         // which filters out `enum` class. It seems [ClassDescriptor.isFinalOrEnum] is for truly `final` class.
         // That is, the overall API name---isFinalClassOr...---is misleading.
-        return (firRegularClass.modality == Modality.FINAL && !firRegularClass.classKind.isEnumClass) ||
-                firRegularClass.classKind.isEnumEntry ||
-                firRegularClass.classKind.isAnnotationClass
+        val classKind = firRegularClass.classKind
+        return classKind.isEnumEntry ||
+                classKind.isAnnotationClass ||
+                classKind.isObject ||
+                classKind.isClass && firRegularClass.symbol.modality == Modality.FINAL
     }
 
     override fun KotlinTypeMarker.hasAnnotation(fqName: FqName): Boolean {
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/wildcardOptimization.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/wildcardOptimization.fir.java
deleted file mode 100644
index 77f4c7d..0000000
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/wildcardOptimization.fir.java
+++ /dev/null
@@ -1,102 +0,0 @@
-public final class Container /* Container*/ {
-  @org.jetbrains.annotations.NotNull()
-  public final In<Final> notDeepIn();//  notDeepIn()
-
-  @org.jetbrains.annotations.NotNull()
-  public final Inv<? super Out<? extends Open>> skipWildcardsUntilInProjection();//  skipWildcardsUntilInProjection()
-
-  @org.jetbrains.annotations.NotNull()
-  public final Inv<In<Out<? extends Open>>> skipAllInvWildcards();//  skipAllInvWildcards()
-
-  @org.jetbrains.annotations.NotNull()
-  public final Inv<OutPair<Open, Out<Out<Open>>>> skipAllOutInvWildcards();//  skipAllOutInvWildcards()
-
-  @org.jetbrains.annotations.NotNull()
-  public final Out<In<Out<? extends Final>>> skipWildcardsUntilIn1();//  skipWildcardsUntilIn1()
-
-  @org.jetbrains.annotations.NotNull()
-  public final Out<In<Out<? extends Open>>> skipWildcardsUntilIn0();//  skipWildcardsUntilIn0()
-
-  @org.jetbrains.annotations.NotNull()
-  public final Out<In<OutPair<? extends Final, ? extends Out<? extends Open>>>> skipWildcardsUntilIn2();//  skipWildcardsUntilIn2()
-
-  public  Container();//  .ctor()
-
-  public final <Q extends Final> void typeParameter(@org.jetbrains.annotations.NotNull() Out<? extends Q>, @org.jetbrains.annotations.NotNull() In<? super Q>);// <Q extends Final>  typeParameter(Out<? extends Q>, In<? super Q>)
-
-  public final void arrayOfOutFinal(@org.jetbrains.annotations.NotNull() Out<Final>[]);//  arrayOfOutFinal(Out<Final>[])
-
-  public final void arrayOfOutOpen(@org.jetbrains.annotations.NotNull() Out<Open>[]);//  arrayOfOutOpen(Out<Open>[])
-
-  public final void deepFinal(@org.jetbrains.annotations.NotNull() Out<? extends Out<? extends Out<? extends Final>>>);//  deepFinal(Out<? extends Out<? extends Out<? extends Final>>>)
-
-  public final void deepOpen(@org.jetbrains.annotations.NotNull() Out<? extends Out<? extends Out<? extends Open>>>);//  deepOpen(Out<? extends Out<? extends Out<? extends Open>>>)
-
-  public final void finalClassArgument(@org.jetbrains.annotations.NotNull() Out<? extends Final>, @org.jetbrains.annotations.NotNull() In<? super Final>);//  finalClassArgument(Out<? extends Final>, In<? super Final>)
-
-  public final void inAny(@org.jetbrains.annotations.NotNull() In<java.lang.Object>);//  inAny(In<java.lang.Object>)
-
-  public final void inFinal(@org.jetbrains.annotations.NotNull() In<? super Final>);//  inFinal(In<? super Final>)
-
-  public final void inOutFinal(@org.jetbrains.annotations.NotNull() In<? super Out<? extends Final>>);//  inOutFinal(In<? super Out<? extends Final>>)
-
-  public final void invFinal(@org.jetbrains.annotations.NotNull() Inv<Final>);//  invFinal(Inv<Final>)
-
-  public final void invIn(@org.jetbrains.annotations.NotNull() Out<? extends Inv<? super Final>>);//  invIn(Out<? extends Inv<? super Final>>)
-
-  public final void invInAny(@org.jetbrains.annotations.NotNull() Out<Inv<? super java.lang.Object>>);//  invInAny(Out<Inv<? super java.lang.Object>>)
-
-  public final void invInOutFinal(@org.jetbrains.annotations.NotNull() Inv<In<Out<? extends Final>>>);//  invInOutFinal(Inv<In<Out<? extends Final>>>)
-
-  public final void invInOutOpen(@org.jetbrains.annotations.NotNull() Inv<In<Out<? extends Open>>>);//  invInOutOpen(Inv<In<Out<? extends Open>>>)
-
-  public final void invInv(@org.jetbrains.annotations.NotNull() Out<Inv<Open>>);//  invInv(Out<Inv<Open>>)
-
-  public final void invOpen(@org.jetbrains.annotations.NotNull() Inv<Open>);//  invOpen(Inv<Open>)
-
-  public final void invOut(@org.jetbrains.annotations.NotNull() Out<? extends Inv<? extends Open>>);//  invOut(Out<? extends Inv<? extends Open>>)
-
-  public final void invOutFinal(@org.jetbrains.annotations.NotNull() Inv<Out<Final>>);//  invOutFinal(Inv<Out<Final>>)
-
-  public final void invOutFinal(@org.jetbrains.annotations.NotNull() Out<? extends Inv<? extends Final>>);//  invOutFinal(Out<? extends Inv<? extends Final>>)
-
-  public final void invOutOpen(@org.jetbrains.annotations.NotNull() Inv<Out<Open>>);//  invOutOpen(Inv<Out<Open>>)
-
-  public final void invOutProjectedOutFinal(@org.jetbrains.annotations.NotNull() Inv<? extends Out<? extends Final>>);//  invOutProjectedOutFinal(Inv<? extends Out<? extends Final>>)
-
-  public final void oneArgumentFinal(@org.jetbrains.annotations.NotNull() OutPair<? extends Final, ? extends Open>);//  oneArgumentFinal(OutPair<? extends Final, ? extends Open>)
-
-  public final void openClassArgument(@org.jetbrains.annotations.NotNull() Out<? extends Open>, @org.jetbrains.annotations.NotNull() In<? super Open>);//  openClassArgument(Out<? extends Open>, In<? super Open>)
-
-  public final void outIn(@org.jetbrains.annotations.NotNull() Out<? extends In<? super Final>>);//  outIn(Out<? extends In<? super Final>>)
-
-  public final void outInAny(@org.jetbrains.annotations.NotNull() Out<In<java.lang.Object>>);//  outInAny(Out<In<java.lang.Object>>)
-
-  public final void outOfArrayOpen(@org.jetbrains.annotations.NotNull() Out<Open[]>);//  outOfArrayOpen(Out<Open[]>)
-
-  public final void outOfArrayOutOpen(@org.jetbrains.annotations.NotNull() Out<? extends Open[]>);//  outOfArrayOutOpen(Out<? extends Open[]>)
-}
-
-public final class Final /* Final*/ {
-  public  Final();//  .ctor()
-}
-
-public final class In /* In*/<Z>  {
-  public  In();//  .ctor()
-}
-
-public final class Inv /* Inv*/<E>  {
-  public  Inv();//  .ctor()
-}
-
-public class Open /* Open*/ {
-  public  Open();//  .ctor()
-}
-
-public final class Out /* Out*/<T>  {
-  public  Out();//  .ctor()
-}
-
-public final class OutPair /* OutPair*/<Final, Y>  {
-  public  OutPair();//  .ctor()
-}