[light classes] create enum references as PsiReferenceExpressions to better mimic java psi, see e.g. `PsiJvmConversionHelper#getAnnotationAttributeValue(PsiAnnotationMemberValue)`
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 d5b20dc..2509f3b 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 @@ 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 @@ 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 @@ override fun getReferenceName(): String? = psiReference.referenceName override fun <T> getCopyableUserData(key: Key<T>): T? = null override fun <T> putCopyableUserData(key: Key<T>, 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 e16ecd9..cdf6865 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 @@ 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)