referenceUtil: cleanup code

This commit is contained in:
Dmitry Gridin
2019-10-11 20:28:45 +07:00
parent 20784d50ff
commit 348d2376b1
@@ -52,13 +52,10 @@ import java.util.*
// For property accessor return enclosing property // For property accessor return enclosing property
val PsiReference.unwrappedTargets: Set<PsiElement> val PsiReference.unwrappedTargets: Set<PsiElement>
get() { get() {
fun PsiElement.adjust(): PsiElement? { fun PsiElement.adjust(): PsiElement? = when (val target = unwrapped?.originalElement) {
val target = unwrapped?.originalElement is KtPropertyAccessor -> target.getNonStrictParentOfType<KtProperty>()
return when {
target is KtPropertyAccessor -> target.getNonStrictParentOfType<KtProperty>()
else -> target else -> target
} }
}
return when (this) { return when (this) {
is PsiPolyVariantReference -> multiResolve(false).mapNotNullTo(HashSet<PsiElement>()) { it.element?.adjust() } is PsiPolyVariantReference -> multiResolve(false).mapNotNullTo(HashSet<PsiElement>()) { it.element?.adjust() }
@@ -107,8 +104,7 @@ fun PsiReference.matchesTarget(candidateTarget: PsiElement): Boolean {
} }
if (element is KtLabelReferenceExpression) { if (element is KtLabelReferenceExpression) {
val labelParent = (element.parent as? KtContainerNode)?.parent when ((element.parent as? KtContainerNode)?.parent) {
when (labelParent) {
is KtReturnExpression -> unwrappedTargets.forEach { is KtReturnExpression -> unwrappedTargets.forEach {
if (it !is KtFunctionLiteral && !(it is KtNamedFunction && it.name.isNullOrEmpty())) return@forEach if (it !is KtFunctionLiteral && !(it is KtNamedFunction && it.name.isNullOrEmpty())) return@forEach
it as KtFunction it as KtFunction
@@ -205,13 +201,11 @@ val KDocName.mainReference: KDocReference
get() = references.firstIsInstance() get() = references.firstIsInstance()
val KtElement.mainReference: KtReference? val KtElement.mainReference: KtReference?
get() { get() = when (this) {
return when { is KtReferenceExpression -> mainReference
this is KtReferenceExpression -> mainReference is KDocName -> mainReference
this is KDocName -> mainReference
else -> references.firstIsInstanceOrNull<KtReference>() else -> references.firstIsInstanceOrNull<KtReference>()
} }
}
fun KtElement.resolveMainReferenceToDescriptors(): Collection<DeclarationDescriptor> { fun KtElement.resolveMainReferenceToDescriptors(): Collection<DeclarationDescriptor> {
val bindingContext = analyze(BodyResolveMode.PARTIAL) val bindingContext = analyze(BodyResolveMode.PARTIAL)
@@ -229,8 +223,7 @@ fun KtExpression.readWriteAccess(useResolveForReadWrite: Boolean) = readWriteAcc
fun KtExpression.readWriteAccessWithFullExpression(useResolveForReadWrite: Boolean): Pair<ReferenceAccess, KtExpression> { fun KtExpression.readWriteAccessWithFullExpression(useResolveForReadWrite: Boolean): Pair<ReferenceAccess, KtExpression> {
var expression = getQualifiedExpressionForSelectorOrThis() var expression = getQualifiedExpressionForSelectorOrThis()
loop@ while (true) { loop@ while (true) {
val parent = expression.parent when (val parent = expression.parent) {
when (parent) {
is KtParenthesizedExpression, is KtAnnotatedExpression, is KtLabeledExpression -> expression = parent as KtExpression is KtParenthesizedExpression, is KtAnnotatedExpression, is KtLabeledExpression -> expression = parent as KtExpression
else -> break@loop else -> break@loop
} }