From eb6f30dcd45ac999564bdcb718af088d7e5464ac Mon Sep 17 00:00:00 2001 From: Marco Pennekamp Date: Wed, 31 Jan 2024 21:14:40 +0100 Subject: [PATCH] [LL] Update stub-based deserialization of enum entry annotation arguments - This mirrors the changes to `AbstractAnnotationDeserializer` in the scope of KT-64975. ^KT-63330 fixed ^KT-64975 --- .../StubBasedAnnotationDeserializer.kt | 31 +++---------------- .../annotationWithEnumEntryArgument.txt | 4 +-- 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedAnnotationDeserializer.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedAnnotationDeserializer.kt index 5fca632a945..0f90b37f4ce 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedAnnotationDeserializer.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedAnnotationDeserializer.kt @@ -10,16 +10,11 @@ import org.jetbrains.kotlin.KtRealPsiSourceElement import org.jetbrains.kotlin.constant.* import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.declarations.collectEnumEntries import org.jetbrains.kotlin.fir.expressions.FirAnnotation -import org.jetbrains.kotlin.fir.expressions.FirLiteralExpression import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.expressions.FirLiteralExpression import org.jetbrains.kotlin.fir.expressions.buildUnaryArgumentList import org.jetbrains.kotlin.fir.expressions.builder.* -import org.jetbrains.kotlin.fir.references.builder.buildFromMissingDependenciesNamedReference -import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference -import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.lexer.KtTokens @@ -207,25 +202,9 @@ class StubBasedAnnotationDeserializer( ).apply { this.replaceConeTypeOrNull(typeRef.type) } } - private fun PsiElement.toEnumEntryReferenceExpression(classId: ClassId, entryName: Name): FirExpression { - return buildPropertyAccessExpression { - source = KtRealPsiSourceElement(this@toEnumEntryReferenceExpression) - val enumLookupTag = classId.toLookupTag() - val enumSymbol = enumLookupTag.toSymbol(session) - val firClass = enumSymbol?.fir as? FirRegularClass - val enumEntries = firClass?.collectEnumEntries() ?: emptyList() - val enumEntrySymbol = enumEntries.find { it.name == entryName } - calleeReference = enumEntrySymbol?.let { - buildResolvedNamedReference { - name = entryName - resolvedSymbol = it.symbol - } - } ?: buildFromMissingDependenciesNamedReference { - name = entryName - } - if (enumEntrySymbol != null) { - coneTypeOrNull = enumEntrySymbol.returnTypeRef.coneTypeOrNull - } + private fun PsiElement.toEnumEntryReferenceExpression(classId: ClassId, entryName: Name): FirExpression = + buildEnumEntryDeserializedAccessExpression { + enumClassId = classId + enumEntryName = entryName } - } } diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/deserialized/annotationWithEnumEntryArgument.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/deserialized/annotationWithEnumEntryArgument.txt index eab1b5c6aad..2a40d1f04fb 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/deserialized/annotationWithEnumEntryArgument.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/deserialized/annotationWithEnumEntryArgument.txt @@ -3,10 +3,10 @@ FIR element: FirPropertyImpl FIR source kind: KtRealSourceElementKind FIR element rendered: -[ResolvedTo(BODY_RESOLVE)] lval x: R|@R|Anno|(enumEntry = ) Usage| = R|/usage| +[ResolvedTo(BODY_RESOLVE)] lval x: R|@R|Anno|(enumEntry = /EnumClass.First) Usage| = R|/usage| FIR FILE: FILE: [ResolvedTo(IMPORTS)] main.kt public final [ResolvedTo(BODY_RESOLVE)] fun foo(): R|kotlin/Unit| { - [ResolvedTo(BODY_RESOLVE)] lval x: R|@R|Anno|(enumEntry = ) Usage| = R|/usage| + [ResolvedTo(BODY_RESOLVE)] lval x: R|@R|Anno|(enumEntry = /EnumClass.First) Usage| = R|/usage| }