FIR: ensure STATUS resolve phase before reading valueClassRepresentation

This commit is contained in:
Jinseong Jeon
2022-10-26 22:58:45 -07:00
committed by Ilya Kirillov
parent 542ca68aba
commit 7f6cad6fb3
4 changed files with 10 additions and 9 deletions
@@ -1,2 +0,0 @@
KtType: MyInt
PsiType: PsiType:int
@@ -1,2 +1,2 @@
KtType: MyInt
PsiType: PsiType:MyInt
PsiType: PsiType:int
@@ -13,10 +13,7 @@ import org.jetbrains.kotlin.descriptors.ValueClassKind
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.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.declarations.utils.*
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.resolve.directExpansionType
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
@@ -569,7 +566,12 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty
}
override fun TypeConstructorMarker.getValueClassProperties(): List<Pair<Name, SimpleTypeMarker>>? {
return toFirRegularClass()?.valueClassRepresentation?.underlyingPropertyNamesToTypes
val firClass = toFirRegularClass() ?: return null
// NB: [FirRegularClass.valueClassRepresentation] is updated by [FirStatusResolveTransformer].
if (firClass.isInline) {
firClass.symbol.lazyResolveToPhase(FirResolvePhase.STATUS)
}
return firClass.valueClassRepresentation?.underlyingPropertyNamesToTypes
}
override fun TypeConstructorMarker.isInnerClass(): Boolean {
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.caches.firCachesFactory
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.utils.isInline
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirStatement
@@ -111,7 +112,7 @@ open class FirStatusResolveTransformer(
*/
if (computationStatus != StatusComputationSession.StatusComputationStatus.Computed) {
regularClass.transformStatus(this, statusResolver.resolveStatus(regularClass, containingClass, isLocal = false))
if (regularClass.status.isInline) {
if (regularClass.isInline) {
regularClass.valueClassRepresentation = computeValueClassRepresentation(regularClass, session)
}
}