[FIR] fix resolve contract violation from ConeTypeContext.getValueClassProperties
^KT-54890
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt
index 0685b1a..a29d4bb 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt
@@ -27,10 +27,12 @@
import org.jetbrains.kotlin.descriptors.java.JavaVisibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.jvm.jvmTypeMapper
+import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
+import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
import org.jetbrains.kotlin.load.kotlin.getOptimalModeForReturnType
@@ -197,6 +199,8 @@
if (!allowErrorTypes && (this is ConeErrorType)) return null
+ (this as? ConeClassLikeType)?.lookupTag?.toSymbol(session)?.lazyResolveToPhase(FirResolvePhase.STATUS)
+
val signatureWriter = BothSignatureWriter(BothSignatureWriter.Mode.SKIP_CHECKS)
//TODO Check thread safety
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 04f5d1b..16a50af 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
@@ -13,7 +13,10 @@
import org.jetbrains.kotlin.descriptors.valueClassLoweringKind
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
-import org.jetbrains.kotlin.fir.declarations.utils.*
+import org.jetbrains.kotlin.fir.declarations.utils.expandedConeType
+import org.jetbrains.kotlin.fir.declarations.utils.isInner
+import org.jetbrains.kotlin.fir.declarations.utils.modality
+import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.resolve.directExpansionType
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
@@ -22,8 +25,8 @@
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
-import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.symbols.impl.*
+import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.name.*
import org.jetbrains.kotlin.types.TypeCheckerState
import org.jetbrains.kotlin.types.TypeCheckerState.SupertypesPolicy.DoCustomTransform
@@ -568,9 +571,6 @@
override fun TypeConstructorMarker.getValueClassProperties(): List<Pair<Name, SimpleTypeMarker>>? {
val firClass = toFirRegularClass() ?: return null
// NB: [FirRegularClass.valueClassRepresentation] is updated by [FirStatusResolveTransformer].
- if (firClass.isInline) {
- firClass.symbol.lazyResolveToPhase(FirResolvePhase.STATUS)
- }
return firClass.valueClassRepresentation?.underlyingPropertyNamesToTypes
}
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/wildcardOptimization.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/wildcardOptimization.fir.java
index bf08dad..77f4c7d 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/wildcardOptimization.fir.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/wildcardOptimization.fir.java
@@ -44,13 +44,13 @@
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<? extends Inv<? super java.lang.Object>>);// invInAny(Out<? extends Inv<? super java.lang.Object>>)
+ 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<? extends Inv<Open>>);// invInv(Out<? extends Inv<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>)
@@ -70,7 +70,7 @@
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<? extends In<java.lang.Object>>);// outInAny(Out<? extends In<java.lang.Object>>)
+ 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[]>)
diff --git a/compiler/testData/diagnostics/tests/inlineClasses/lateinitInlineClassesOn.kt b/compiler/testData/diagnostics/tests/inlineClasses/lateinitInlineClassesOn.kt
index b1bc0d2..9c7f5f9 100644
--- a/compiler/testData/diagnostics/tests/inlineClasses/lateinitInlineClassesOn.kt
+++ b/compiler/testData/diagnostics/tests/inlineClasses/lateinitInlineClassesOn.kt
@@ -1,4 +1,3 @@
-// FIR_DISABLE_LAZY_RESOLVE_CHECKS
// WITH_STDLIB
// SKIP_TXT
// !LANGUAGE: +InlineLateinit
diff --git a/compiler/testData/diagnostics/tests/inlineClasses/recursiveInlineClasses.kt b/compiler/testData/diagnostics/tests/inlineClasses/recursiveInlineClasses.kt
index 3c09575..8368691 100644
--- a/compiler/testData/diagnostics/tests/inlineClasses/recursiveInlineClasses.kt
+++ b/compiler/testData/diagnostics/tests/inlineClasses/recursiveInlineClasses.kt
@@ -1,4 +1,3 @@
-// FIR_DISABLE_LAZY_RESOLVE_CHECKS
// FIR_IDENTICAL
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
diff --git a/compiler/testData/diagnostics/tests/valueClasses/recursiveMultiFieldValueClasses.kt b/compiler/testData/diagnostics/tests/valueClasses/recursiveMultiFieldValueClasses.kt
index e8d68db..39ed198 100644
--- a/compiler/testData/diagnostics/tests/valueClasses/recursiveMultiFieldValueClasses.kt
+++ b/compiler/testData/diagnostics/tests/valueClasses/recursiveMultiFieldValueClasses.kt
@@ -1,4 +1,3 @@
-// FIR_DISABLE_LAZY_RESOLVE_CHECKS
// FIR_IDENTICAL
// WITH_STDLIB
// TARGET_BACKEND: JVM_IR
diff --git a/compiler/testData/diagnostics/tests/valueClasses/recursiveValueClasses.kt b/compiler/testData/diagnostics/tests/valueClasses/recursiveValueClasses.kt
index 359582a..a68d056 100644
--- a/compiler/testData/diagnostics/tests/valueClasses/recursiveValueClasses.kt
+++ b/compiler/testData/diagnostics/tests/valueClasses/recursiveValueClasses.kt
@@ -1,4 +1,3 @@
-// FIR_DISABLE_LAZY_RESOLVE_CHECKS
// FIR_IDENTICAL
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/usageOfResultTypeInReturnType.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/usageOfResultTypeInReturnType.kt
index 6ae1cf7..7027238 100644
--- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/usageOfResultTypeInReturnType.kt
+++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/usageOfResultTypeInReturnType.kt
@@ -1,4 +1,3 @@
-// FIR_DISABLE_LAZY_RESOLVE_CHECKS
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_EXPRESSION, -UNUSED_VARIABLE
// !LANGUAGE: +InlineClasses -AllowResultInReturnType, -JvmInlineValueClasses
diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/usageOfResultTypeInReturnType_1_4.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/usageOfResultTypeInReturnType_1_4.kt
index 8143417..b9a60ab 100644
--- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/usageOfResultTypeInReturnType_1_4.kt
+++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/usageOfResultTypeInReturnType_1_4.kt
@@ -1,4 +1,3 @@
-// FIR_DISABLE_LAZY_RESOLVE_CHECKS
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_EXPRESSION, -UNUSED_VARIABLE
// !LANGUAGE: +InlineClasses +AllowResultInReturnType, -JvmInlineValueClasses