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 831e69e8400..5054517942d 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 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty // 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 77f4c7d0502..00000000000 --- 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 notDeepIn();// notDeepIn() - - @org.jetbrains.annotations.NotNull() - public final Inv> skipWildcardsUntilInProjection();// skipWildcardsUntilInProjection() - - @org.jetbrains.annotations.NotNull() - public final Inv>> skipAllInvWildcards();// skipAllInvWildcards() - - @org.jetbrains.annotations.NotNull() - public final Inv>>> skipAllOutInvWildcards();// skipAllOutInvWildcards() - - @org.jetbrains.annotations.NotNull() - public final Out>> skipWildcardsUntilIn1();// skipWildcardsUntilIn1() - - @org.jetbrains.annotations.NotNull() - public final Out>> skipWildcardsUntilIn0();// skipWildcardsUntilIn0() - - @org.jetbrains.annotations.NotNull() - public final Out>>> skipWildcardsUntilIn2();// skipWildcardsUntilIn2() - - public Container();// .ctor() - - public final void typeParameter(@org.jetbrains.annotations.NotNull() Out, @org.jetbrains.annotations.NotNull() In);// typeParameter(Out, In) - - public final void arrayOfOutFinal(@org.jetbrains.annotations.NotNull() Out[]);// arrayOfOutFinal(Out[]) - - public final void arrayOfOutOpen(@org.jetbrains.annotations.NotNull() Out[]);// arrayOfOutOpen(Out[]) - - public final void deepFinal(@org.jetbrains.annotations.NotNull() Out>>);// deepFinal(Out>>) - - public final void deepOpen(@org.jetbrains.annotations.NotNull() Out>>);// deepOpen(Out>>) - - public final void finalClassArgument(@org.jetbrains.annotations.NotNull() Out, @org.jetbrains.annotations.NotNull() In);// finalClassArgument(Out, In) - - public final void inAny(@org.jetbrains.annotations.NotNull() In);// inAny(In) - - public final void inFinal(@org.jetbrains.annotations.NotNull() In);// inFinal(In) - - public final void inOutFinal(@org.jetbrains.annotations.NotNull() In>);// inOutFinal(In>) - - public final void invFinal(@org.jetbrains.annotations.NotNull() Inv);// invFinal(Inv) - - public final void invIn(@org.jetbrains.annotations.NotNull() Out>);// invIn(Out>) - - public final void invInAny(@org.jetbrains.annotations.NotNull() Out>);// invInAny(Out>) - - public final void invInOutFinal(@org.jetbrains.annotations.NotNull() Inv>>);// invInOutFinal(Inv>>) - - public final void invInOutOpen(@org.jetbrains.annotations.NotNull() Inv>>);// invInOutOpen(Inv>>) - - public final void invInv(@org.jetbrains.annotations.NotNull() Out>);// invInv(Out>) - - public final void invOpen(@org.jetbrains.annotations.NotNull() Inv);// invOpen(Inv) - - public final void invOut(@org.jetbrains.annotations.NotNull() Out>);// invOut(Out>) - - public final void invOutFinal(@org.jetbrains.annotations.NotNull() Inv>);// invOutFinal(Inv>) - - public final void invOutFinal(@org.jetbrains.annotations.NotNull() Out>);// invOutFinal(Out>) - - public final void invOutOpen(@org.jetbrains.annotations.NotNull() Inv>);// invOutOpen(Inv>) - - public final void invOutProjectedOutFinal(@org.jetbrains.annotations.NotNull() Inv>);// invOutProjectedOutFinal(Inv>) - - public final void oneArgumentFinal(@org.jetbrains.annotations.NotNull() OutPair);// oneArgumentFinal(OutPair) - - public final void openClassArgument(@org.jetbrains.annotations.NotNull() Out, @org.jetbrains.annotations.NotNull() In);// openClassArgument(Out, In) - - public final void outIn(@org.jetbrains.annotations.NotNull() Out>);// outIn(Out>) - - public final void outInAny(@org.jetbrains.annotations.NotNull() Out>);// outInAny(Out>) - - public final void outOfArrayOpen(@org.jetbrains.annotations.NotNull() Out);// outOfArrayOpen(Out) - - public final void outOfArrayOutOpen(@org.jetbrains.annotations.NotNull() Out);// outOfArrayOutOpen(Out) -} - -public final class Final /* Final*/ { - public Final();// .ctor() -} - -public final class In /* In*/ { - public In();// .ctor() -} - -public final class Inv /* Inv*/ { - public Inv();// .ctor() -} - -public class Open /* Open*/ { - public Open();// .ctor() -} - -public final class Out /* Out*/ { - public Out();// .ctor() -} - -public final class OutPair /* OutPair*/ { - public OutPair();// .ctor() -}