From 7f6cad6fb3cf550e34197092b06fae691eb9a5f9 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Wed, 26 Oct 2022 22:58:45 -0700 Subject: [PATCH] FIR: ensure STATUS resolve phase before reading valueClassRepresentation --- .../parameter_jvmInline.descriptors.txt | 2 -- .../psiType/forDeclaration/parameter_jvmInline.txt | 2 +- .../jetbrains/kotlin/fir/types/ConeTypeContext.kt | 12 +++++++----- .../transformers/FirStatusResolveTransformer.kt | 3 ++- 4 files changed, 10 insertions(+), 9 deletions(-) delete mode 100644 analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/parameter_jvmInline.descriptors.txt diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/parameter_jvmInline.descriptors.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/parameter_jvmInline.descriptors.txt deleted file mode 100644 index 9f7c3cfdee9..00000000000 --- a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/parameter_jvmInline.descriptors.txt +++ /dev/null @@ -1,2 +0,0 @@ -KtType: MyInt -PsiType: PsiType:int diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/parameter_jvmInline.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/parameter_jvmInline.txt index 87b51fd5592..9f7c3cfdee9 100644 --- a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/parameter_jvmInline.txt +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/parameter_jvmInline.txt @@ -1,2 +1,2 @@ KtType: MyInt -PsiType: PsiType:MyInt +PsiType: PsiType:int 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 f8ec5daa635..f01347ca8b3 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,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>? { - 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 { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt index 1299cf52527..0949321f9bb 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt @@ -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) } }