From 0eb90cccd1257bd9c6882a1a6ed06cd6baba5f07 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Thu, 16 Feb 2023 15:16:00 +0100 Subject: [PATCH] [SLC] enum entries should be psi reference instead of psi expression ^KT-56728 Fixed --- .../annotations/SymbolAnnotationValues.kt | 21 +++++++++++++++++++ .../light/classes/symbol/symbolLightUtils.kt | 4 ++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolAnnotationValues.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolAnnotationValues.kt index 3896b73a8c9..49eaf4bc44b 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolAnnotationValues.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolAnnotationValues.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations +import com.intellij.openapi.util.Key +import com.intellij.openapi.util.NlsSafe import com.intellij.psi.* import org.jetbrains.kotlin.asJava.elements.KtLightElementBase import org.jetbrains.kotlin.light.classes.symbol.toArrayIfNotEmptyOrDefault @@ -61,6 +63,25 @@ internal class SymbolPsiExpression( override fun getText(): String = psiExpression.text } +internal class SymbolPsiReference( + override val kotlinOrigin: KtElement?, + lightParent: PsiElement, + private val psiReference: PsiJavaCodeReferenceElement, +) : SymbolPsiAnnotationMemberValue(kotlinOrigin, lightParent), + PsiJavaCodeReferenceElement, PsiJavaReference by psiReference { + override fun getText(): String = psiReference.text + + override fun getReferenceNameElement(): PsiElement? = psiReference.referenceNameElement + override fun getParameterList(): PsiReferenceParameterList? = psiReference.parameterList + override fun getTypeParameters(): Array = psiReference.typeParameters + override fun isQualified(): Boolean = psiReference.isQualified + override fun getQualifiedName(): String? = psiReference.qualifiedName + override fun getQualifier(): PsiElement? = psiReference.qualifier + override fun getReferenceName(): String? = psiReference.referenceName + override fun getCopyableUserData(key: Key): T? = null + override fun putCopyableUserData(key: Key, value: T?) {} +} + internal class SymbolPsiLiteral( override val kotlinOrigin: KtElement?, lightParent: PsiElement, diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt index 9d2e198949c..f4008710723 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt @@ -196,8 +196,8 @@ internal fun KtAnnotationValue.toAnnotationMemberValue(parent: PsiElement): PsiA is KtEnumEntryAnnotationValue -> { val fqName = this.callableId?.asSingleFqName()?.asString() ?: return null - val psiExpression = PsiElementFactory.getInstance(parent.project).createExpressionFromText(fqName, parent) - SymbolPsiExpression(sourcePsi, parent, psiExpression) + val psiReference = PsiElementFactory.getInstance(parent.project).createReferenceFromText(fqName, parent) + SymbolPsiReference(sourcePsi, parent, psiReference) } KtUnsupportedAnnotationValue -> null