[SLC] enum entries should be psi reference instead of psi expression

^KT-56728 Fixed
This commit is contained in:
Dmitrii Gridin
2023-02-16 15:16:00 +01:00
committed by Space Team
parent e65c863f8c
commit 0eb90cccd1
2 changed files with 23 additions and 2 deletions
@@ -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<PsiType> = 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 <T> getCopyableUserData(key: Key<T>): T? = null
override fun <T> putCopyableUserData(key: Key<T>, value: T?) {}
}
internal class SymbolPsiLiteral(
override val kotlinOrigin: KtElement?,
lightParent: PsiElement,
@@ -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