Uast: fixing WrappedUAnnotation identifiers
This commit is contained in:
committed by
Igor Yakovlev
parent
4b8f1bb362
commit
e53db4c771
+1
-1
@@ -25,7 +25,7 @@ class KtLightPsiJavaCodeReferenceElement(
|
||||
override fun advancedResolve(incompleteCode: Boolean): JavaResolveResult =
|
||||
delegate?.advancedResolve(incompleteCode) ?: JavaResolveResult.EMPTY
|
||||
|
||||
override fun getReferenceNameElement(): PsiElement? = ktElement
|
||||
override fun getReferenceNameElement(): PsiElement? = delegate?.referenceNameElement
|
||||
|
||||
override fun getTypeParameters(): Array<PsiType> = delegate?.typeParameters ?: emptyArray()
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.intellij.psi.util.PsiTypesUtil
|
||||
import org.jetbrains.annotations.NotNull
|
||||
import org.jetbrains.annotations.Nullable
|
||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
@@ -31,6 +32,7 @@ import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.typeUtil.TypeNullability
|
||||
import org.jetbrains.kotlin.types.typeUtil.nullability
|
||||
import org.jetbrains.kotlin.utils.SmartList
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
import org.jetbrains.uast.*
|
||||
import org.jetbrains.uast.internal.acceptList
|
||||
import org.jetbrains.uast.kotlin.declarations.KotlinUIdentifier
|
||||
@@ -123,13 +125,19 @@ abstract class AbstractKotlinUVariable(givenParent: UElement?) : KotlinAbstractU
|
||||
|
||||
override val javaPsi: PsiAnnotation = psiAnnotation
|
||||
override val psi: PsiAnnotation = javaPsi
|
||||
override val sourcePsi: PsiElement? = null
|
||||
override val sourcePsi: PsiElement? = psiAnnotation.safeAs<KtLightAbstractAnnotation>()?.kotlinOrigin
|
||||
|
||||
override val attributeValues: List<UNamedExpression> by lz {
|
||||
psi.parameterList.attributes.map { WrappedUNamedExpression(it, this) }
|
||||
}
|
||||
|
||||
override val uastAnchor by lazy { KotlinUIdentifier(javaPsi.nameReferenceElement?.referenceNameElement, null, this) }
|
||||
override val uastAnchor by lazy {
|
||||
KotlinUIdentifier(
|
||||
{ javaPsi.nameReferenceElement?.referenceNameElement },
|
||||
sourcePsi.safeAs<KtAnnotationEntry>()?.typeReference?.nameElement,
|
||||
this
|
||||
)
|
||||
}
|
||||
|
||||
class WrappedUNamedExpression(pair: PsiNameValuePair, override val uastParent: UElement?) : UNamedExpression {
|
||||
override val name: String? = pair.name
|
||||
|
||||
+10
-6
@@ -34,12 +34,16 @@ class UastLightIdentifier(lightOwner: PsiNameIdentifierOwner, ktDeclaration: KtD
|
||||
override fun getContainingFile(): PsiFile = unwrapFakeFileForLightClass(super.getContainingFile())
|
||||
}
|
||||
|
||||
class KotlinUIdentifier private constructor(
|
||||
override val javaPsi: PsiElement?,
|
||||
class KotlinUIdentifier constructor(
|
||||
javaPsiSupplier: () -> PsiElement?,
|
||||
override val sourcePsi: PsiElement?,
|
||||
override val psi: PsiElement?,
|
||||
givenParent: UElement?
|
||||
) : UIdentifier(psi, givenParent) {
|
||||
) : UIdentifier(sourcePsi, givenParent) {
|
||||
|
||||
override val javaPsi: PsiElement? by lazy(javaPsiSupplier) // don't know any real need to call it in production
|
||||
|
||||
override val psi: PsiElement?
|
||||
get() = javaPsi ?: sourcePsi
|
||||
|
||||
init {
|
||||
if (ApplicationManager.getApplication().isUnitTestMode && !acceptableSourcePsi(sourcePsi))
|
||||
@@ -72,6 +76,6 @@ class KotlinUIdentifier private constructor(
|
||||
return null
|
||||
}
|
||||
|
||||
constructor(javaPsi: PsiElement?, sourcePsi: PsiElement?, uastParent: UElement?) : this(javaPsi, sourcePsi, javaPsi, uastParent)
|
||||
constructor(sourcePsi: PsiElement?, uastParent: UElement?) : this(null, sourcePsi, sourcePsi, uastParent)
|
||||
constructor(javaPsi: PsiElement?, sourcePsi: PsiElement?, uastParent: UElement?) : this({ javaPsi }, sourcePsi, uastParent)
|
||||
constructor(sourcePsi: PsiElement?, uastParent: UElement?) : this({ null }, sourcePsi, uastParent)
|
||||
}
|
||||
Reference in New Issue
Block a user