mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Java-Uast: properly unwrapping call expressions for lazy-parent (IDEA-181557)
This commit is contained in:
+16
@@ -31,6 +31,8 @@ class JavaUQualifiedReferenceExpression(
|
||||
JavaUSimpleNameReferenceExpression(psi.referenceNameElement, psi.referenceName ?: "<error>", this, psi)
|
||||
}
|
||||
|
||||
override fun convertParent(): UElement? = super.convertParent().let(this::unwrapCompositeQualifiedReference)
|
||||
|
||||
override val accessType: UastQualifiedExpressionAccessType
|
||||
get() = UastQualifiedExpressionAccessType.SIMPLE
|
||||
|
||||
@@ -38,4 +40,18 @@ class JavaUQualifiedReferenceExpression(
|
||||
get() = (psi.resolve() as? PsiNamedElement)?.name
|
||||
|
||||
override fun resolve() = psi.resolve()
|
||||
}
|
||||
|
||||
internal fun UElement.unwrapCompositeQualifiedReference(uParent: UElement?): UElement? = when (uParent) {
|
||||
is UQualifiedReferenceExpression -> {
|
||||
if (uParent.receiver == this || uParent.selector == this)
|
||||
uParent
|
||||
else {
|
||||
val selector = uParent.selector
|
||||
if (this is JavaUSimpleNameReferenceExpression || (selector is JavaUCallExpression && selector.valueArgumentCount > 0))
|
||||
selector
|
||||
else uParent.uastParent
|
||||
}
|
||||
}
|
||||
else -> uParent
|
||||
}
|
||||
+11
@@ -29,6 +29,17 @@ class JavaUSimpleNameReferenceExpression(
|
||||
override fun resolve() = (reference ?: psi as? PsiReference)?.resolve()
|
||||
override val resolvedName: String?
|
||||
get() = ((reference ?: psi as? PsiReference)?.resolve() as? PsiNamedElement)?.name
|
||||
|
||||
override fun getPsiParentForLazyConversion(): PsiElement? {
|
||||
val parent = super.getPsiParentForLazyConversion()
|
||||
if (parent is PsiReferenceExpression && parent.parent is PsiMethodCallExpression) {
|
||||
return parent.parent
|
||||
}
|
||||
return parent
|
||||
}
|
||||
|
||||
override fun convertParent(): UElement? = super.convertParent().let(this::unwrapCompositeQualifiedReference)
|
||||
|
||||
}
|
||||
|
||||
class JavaUTypeReferenceExpression(
|
||||
|
||||
Reference in New Issue
Block a user