From da35f436b39dfb6105aa4059ebece886d3f94d10 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Sat, 27 May 2023 15:30:12 +0200 Subject: [PATCH] [FIR] refactoring, extract KtUserType -> FirUserTypeRef to a separate function in RawFirBuilder ^KT-58125 --- .../kotlin/fir/builder/RawFirBuilder.kt | 54 +++++++++++-------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index b7e38e720df..48e98794d15 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -1972,29 +1972,9 @@ open class RawFirBuilder( isMarkedNullable = isNullable } is KtUserType -> { - var referenceExpression = unwrappedElement.referenceExpression + val referenceExpression = unwrappedElement.referenceExpression if (referenceExpression != null) { - FirUserTypeRefBuilder().apply { - this.source = source - isMarkedNullable = isNullable - var ktQualifier: KtUserType? = unwrappedElement - - do { - val firQualifier = FirQualifierPartImpl( - referenceExpression!!.toFirSourceElement(), - referenceExpression!!.getReferencedNameAsName(), - FirTypeArgumentListImpl(ktQualifier?.typeArgumentList?.toKtPsiSourceElement() ?: source).apply { - typeArguments.appendTypeArguments(ktQualifier!!.typeArguments) - } - ) - qualifier.add(firQualifier) - - ktQualifier = ktQualifier!!.qualifier - referenceExpression = ktQualifier?.referenceExpression - } while (referenceExpression != null) - - qualifier.reverse() - } + convertKtTypeElement(source, isNullable, unwrappedElement, referenceExpression) } else { FirErrorTypeRefBuilder().apply { this.source = source @@ -2049,6 +2029,36 @@ open class RawFirBuilder( return firTypeBuilder.build() } + private fun convertKtTypeElement( + source: KtPsiSourceElement, + isNullable: Boolean, + ktUserType: KtUserType, + reference: KtSimpleNameExpression, + ): FirUserTypeRefBuilder { + var referenceExpression: KtSimpleNameExpression? = reference + return FirUserTypeRefBuilder().apply { + this.source = source + isMarkedNullable = isNullable + var ktQualifier: KtUserType? = ktUserType + + do { + val firQualifier = FirQualifierPartImpl( + referenceExpression!!.toFirSourceElement(), + referenceExpression!!.getReferencedNameAsName(), + FirTypeArgumentListImpl(ktQualifier?.typeArgumentList?.toKtPsiSourceElement() ?: source).apply { + typeArguments.appendTypeArguments(ktQualifier!!.typeArguments) + } + ) + qualifier.add(firQualifier) + + ktQualifier = ktQualifier!!.qualifier + referenceExpression = ktQualifier?.referenceExpression + } while (referenceExpression != null) + + qualifier.reverse() + } + } + override fun visitAnnotationEntry(annotationEntry: KtAnnotationEntry, data: FirElement?): FirElement { return buildAnnotationCall { source = annotationEntry.toFirSourceElement()