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| }