From e81099ca9629cc2718d34ea1360c1dad3d26c01b Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 5 Jun 2023 18:29:10 +0200 Subject: [PATCH] [light classes] create enum references as PsiReferenceExpressions to better mimic java psi, see e.g. `PsiJvmConversionHelper#getAnnotationAttributeValue(PsiAnnotationMemberValue)` --- .../symbol/annotations/SymbolAnnotationValues.kt | 14 ++++++++++++-- .../light/classes/symbol/symbolLightUtils.kt | 2 +- 2 files changed, 13 insertions(+), 3 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 d5b20dc6f8f..2509f3bef93 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 @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations import com.intellij.openapi.util.Key import com.intellij.psi.* import com.intellij.psi.impl.light.LightTypeElement +import org.jetbrains.kotlin.asJava.classes.cannotModify import org.jetbrains.kotlin.asJava.elements.KtLightElementBase import org.jetbrains.kotlin.light.classes.symbol.toArrayIfNotEmptyOrDefault import org.jetbrains.kotlin.psi.KtElement @@ -80,9 +81,9 @@ private class LightTypeElementWithParent(private val lightParent: PsiElement, ty internal class SymbolPsiReference( override val kotlinOrigin: KtElement?, lightParent: PsiElement, - private val psiReference: PsiJavaCodeReferenceElement, + private val psiReference: PsiReferenceExpression, ) : SymbolPsiAnnotationMemberValue(kotlinOrigin, lightParent), - PsiJavaCodeReferenceElement, PsiJavaReference by psiReference { + PsiReferenceExpression, PsiJavaReference by psiReference { override fun getText(): String = psiReference.text override fun getReferenceNameElement(): PsiElement? = psiReference.referenceNameElement @@ -94,6 +95,15 @@ internal class SymbolPsiReference( override fun getReferenceName(): String? = psiReference.referenceName override fun getCopyableUserData(key: Key): T? = null override fun putCopyableUserData(key: Key, value: T?) {} + override fun getQualifierExpression(): PsiExpression? = psiReference.qualifierExpression + override fun bindToElementViaStaticImport(qualifierClass: PsiClass): PsiElement = + cannotModify() + + override fun setQualifierExpression(newQualifier: PsiExpression?) { + cannotModify() + } + + override fun getType(): PsiType? = psiReference.type } internal class SymbolPsiLiteral( 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 e16ecd9d9d5..cdf686598c1 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 @@ -200,7 +200,7 @@ internal fun KtAnnotationValue.toAnnotationMemberValue(parent: PsiElement): PsiA private fun KtEnumEntryAnnotationValue.asPsiReferenceExpression(parent: PsiElement): SymbolPsiReference? { val fqName = this.callableId?.asSingleFqName()?.asString() ?: return null val psiReference = parent.project.withElementFactorySafe { - createReferenceFromText(fqName, parent) + createExpressionFromText(fqName, parent) as PsiReferenceExpression } ?: return null return SymbolPsiReference(sourcePsi, parent, psiReference)