FIR: ensure STATUS resolve phase before reading valueClassRepresentation
This commit is contained in:
committed by
Ilya Kirillov
parent
542ca68aba
commit
7f6cad6fb3
-2
@@ -1,2 +0,0 @@
|
|||||||
KtType: MyInt
|
|
||||||
PsiType: PsiType:int
|
|
||||||
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
KtType: MyInt
|
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.descriptors.valueClassLoweringKind
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.expandedConeType
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
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.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.directExpansionType
|
import org.jetbrains.kotlin.fir.resolve.directExpansionType
|
||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
@@ -569,7 +566,12 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun TypeConstructorMarker.getValueClassProperties(): List<Pair<Name, SimpleTypeMarker>>? {
|
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 {
|
override fun TypeConstructorMarker.isInnerClass(): Boolean {
|
||||||
|
|||||||
+2
-1
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
|
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.declarations.utils.isLocal
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||||
@@ -111,7 +112,7 @@ open class FirStatusResolveTransformer(
|
|||||||
*/
|
*/
|
||||||
if (computationStatus != StatusComputationSession.StatusComputationStatus.Computed) {
|
if (computationStatus != StatusComputationSession.StatusComputationStatus.Computed) {
|
||||||
regularClass.transformStatus(this, statusResolver.resolveStatus(regularClass, containingClass, isLocal = false))
|
regularClass.transformStatus(this, statusResolver.resolveStatus(regularClass, containingClass, isLocal = false))
|
||||||
if (regularClass.status.isInline) {
|
if (regularClass.isInline) {
|
||||||
regularClass.valueClassRepresentation = computeValueClassRepresentation(regularClass, session)
|
regularClass.valueClassRepresentation = computeValueClassRepresentation(regularClass, session)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user