[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
This commit is contained in:
Marco Pennekamp
2024-01-31 21:14:40 +01:00
committed by Space Team
parent a38d613dc3
commit eb6f30dcd4
2 changed files with 7 additions and 28 deletions
@@ -10,16 +10,11 @@ import org.jetbrains.kotlin.KtRealPsiSourceElement
import org.jetbrains.kotlin.constant.* import org.jetbrains.kotlin.constant.*
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.fir.FirSession 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.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirLiteralExpression
import org.jetbrains.kotlin.fir.expressions.FirExpression 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.buildUnaryArgumentList
import org.jetbrains.kotlin.fir.expressions.builder.* 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.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
@@ -207,25 +202,9 @@ class StubBasedAnnotationDeserializer(
).apply { this.replaceConeTypeOrNull(typeRef.type) } ).apply { this.replaceConeTypeOrNull(typeRef.type) }
} }
private fun PsiElement.toEnumEntryReferenceExpression(classId: ClassId, entryName: Name): FirExpression { private fun PsiElement.toEnumEntryReferenceExpression(classId: ClassId, entryName: Name): FirExpression =
return buildPropertyAccessExpression { buildEnumEntryDeserializedAccessExpression {
source = KtRealPsiSourceElement(this@toEnumEntryReferenceExpression) enumClassId = classId
val enumLookupTag = classId.toLookupTag() enumEntryName = entryName
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
}
} }
}
} }
@@ -3,10 +3,10 @@ FIR element: FirPropertyImpl
FIR source kind: KtRealSourceElementKind FIR source kind: KtRealSourceElementKind
FIR element rendered: 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: FIR FILE:
FILE: [ResolvedTo(IMPORTS)] main.kt FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(BODY_RESOLVE)] fun foo(): R|kotlin/Unit| { 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|
} }