[light classes] create enum references as PsiReferenceExpressions
to better mimic java psi, see e.g. `PsiJvmConversionHelper#getAnnotationAttributeValue(PsiAnnotationMemberValue)`
This commit is contained in:
+12
-2
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations
|
|||||||
import com.intellij.openapi.util.Key
|
import com.intellij.openapi.util.Key
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.impl.light.LightTypeElement
|
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.asJava.elements.KtLightElementBase
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.toArrayIfNotEmptyOrDefault
|
import org.jetbrains.kotlin.light.classes.symbol.toArrayIfNotEmptyOrDefault
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
@@ -80,9 +81,9 @@ private class LightTypeElementWithParent(private val lightParent: PsiElement, ty
|
|||||||
internal class SymbolPsiReference(
|
internal class SymbolPsiReference(
|
||||||
override val kotlinOrigin: KtElement?,
|
override val kotlinOrigin: KtElement?,
|
||||||
lightParent: PsiElement,
|
lightParent: PsiElement,
|
||||||
private val psiReference: PsiJavaCodeReferenceElement,
|
private val psiReference: PsiReferenceExpression,
|
||||||
) : SymbolPsiAnnotationMemberValue(kotlinOrigin, lightParent),
|
) : SymbolPsiAnnotationMemberValue(kotlinOrigin, lightParent),
|
||||||
PsiJavaCodeReferenceElement, PsiJavaReference by psiReference {
|
PsiReferenceExpression, PsiJavaReference by psiReference {
|
||||||
override fun getText(): String = psiReference.text
|
override fun getText(): String = psiReference.text
|
||||||
|
|
||||||
override fun getReferenceNameElement(): PsiElement? = psiReference.referenceNameElement
|
override fun getReferenceNameElement(): PsiElement? = psiReference.referenceNameElement
|
||||||
@@ -94,6 +95,15 @@ internal class SymbolPsiReference(
|
|||||||
override fun getReferenceName(): String? = psiReference.referenceName
|
override fun getReferenceName(): String? = psiReference.referenceName
|
||||||
override fun <T> getCopyableUserData(key: Key<T>): T? = null
|
override fun <T> getCopyableUserData(key: Key<T>): T? = null
|
||||||
override fun <T> putCopyableUserData(key: Key<T>, value: T?) {}
|
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(
|
internal class SymbolPsiLiteral(
|
||||||
|
|||||||
+1
-1
@@ -200,7 +200,7 @@ internal fun KtAnnotationValue.toAnnotationMemberValue(parent: PsiElement): PsiA
|
|||||||
private fun KtEnumEntryAnnotationValue.asPsiReferenceExpression(parent: PsiElement): SymbolPsiReference? {
|
private fun KtEnumEntryAnnotationValue.asPsiReferenceExpression(parent: PsiElement): SymbolPsiReference? {
|
||||||
val fqName = this.callableId?.asSingleFqName()?.asString() ?: return null
|
val fqName = this.callableId?.asSingleFqName()?.asString() ?: return null
|
||||||
val psiReference = parent.project.withElementFactorySafe {
|
val psiReference = parent.project.withElementFactorySafe {
|
||||||
createReferenceFromText(fqName, parent)
|
createExpressionFromText(fqName, parent) as PsiReferenceExpression
|
||||||
} ?: return null
|
} ?: return null
|
||||||
|
|
||||||
return SymbolPsiReference(sourcePsi, parent, psiReference)
|
return SymbolPsiReference(sourcePsi, parent, psiReference)
|
||||||
|
|||||||
Reference in New Issue
Block a user