From 9b28609d5759e1cc629a6f86839186591dd0a457 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 21 May 2015 21:29:58 +0300 Subject: [PATCH] Optimized matchesTarget for "(" references --- .../kotlin/idea/references/referenceUtil.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt index ef039dd9874..7a3432b4f89 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt @@ -19,10 +19,12 @@ package org.jetbrains.kotlin.idea.references import com.intellij.psi.* import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention +import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunctionName import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType +import org.jetbrains.kotlin.resolve.dataClassUtils.isComponentLike import org.jetbrains.kotlin.utils.emptyOrSingletonList import java.util.HashSet @@ -55,6 +57,17 @@ public fun PsiReference.matchesTarget(candidateTarget: PsiElement): Boolean { if (!canBeReferenceTo(candidateTarget)) return false val unwrappedCandidate = candidateTarget.unwrapped?.getOriginalElement() ?: return false + + // Optimizations + when (this) { + is JetInvokeFunctionReference -> { + if (candidateTarget !is JetNamedFunction) return false + } + is JetMultiDeclarationReference -> { + if (candidateTarget !is JetNamedFunction && candidateTarget !is JetParameter) return false + } + } + val targets = unwrappedTargets if (unwrappedCandidate in targets) return true