Added optimization for isReferenceTo. It quickly says false for
references from non-source code to anywhere except same file.
This commit is contained in:
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||||
import com.intellij.psi.impl.light.LightElement
|
import com.intellij.psi.impl.light.LightElement
|
||||||
import com.intellij.openapi.extensions.Extensions
|
import com.intellij.openapi.extensions.Extensions
|
||||||
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
import org.jetbrains.kotlin.plugin.references.SimpleNameReferenceExtension
|
import org.jetbrains.kotlin.plugin.references.SimpleNameReferenceExtension
|
||||||
|
|
||||||
public class JetSimpleNameReference(
|
public class JetSimpleNameReference(
|
||||||
@@ -45,6 +46,8 @@ public class JetSimpleNameReference(
|
|||||||
|
|
||||||
override fun isReferenceTo(element: PsiElement?): Boolean {
|
override fun isReferenceTo(element: PsiElement?): Boolean {
|
||||||
if (element != null) {
|
if (element != null) {
|
||||||
|
if (!canBeReferenceTo(element)) return false
|
||||||
|
|
||||||
val extensions = Extensions.getArea(element.getProject()).getExtensionPoint(
|
val extensions = Extensions.getArea(element.getProject()).getExtensionPoint(
|
||||||
SimpleNameReferenceExtension.EP_NAME).getExtensions()
|
SimpleNameReferenceExtension.EP_NAME).getExtensions()
|
||||||
for (extension in extensions) {
|
for (extension in extensions) {
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.references
|
|||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import org.jetbrains.kotlin.asJava.unwrapped
|
import org.jetbrains.kotlin.asJava.unwrapped
|
||||||
import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention
|
import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention
|
||||||
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
@@ -43,7 +44,16 @@ public val PsiReference.unwrappedTargets: Set<PsiElement>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
public fun PsiReference.canBeReferenceTo(candidateTarget: PsiElement): Boolean {
|
||||||
|
// optimization
|
||||||
|
return getElement().getContainingFile() == candidateTarget.getContainingFile()
|
||||||
|
|| ProjectRootsUtil.isInProjectOrLibSource(getElement())
|
||||||
|
}
|
||||||
|
|
||||||
public fun PsiReference.matchesTarget(candidateTarget: PsiElement): Boolean {
|
public fun PsiReference.matchesTarget(candidateTarget: PsiElement): Boolean {
|
||||||
|
if (!canBeReferenceTo(candidateTarget)) return false
|
||||||
|
|
||||||
val unwrappedCandidate = candidateTarget.unwrapped?.getOriginalElement() ?: return false
|
val unwrappedCandidate = candidateTarget.unwrapped?.getOriginalElement() ?: return false
|
||||||
val targets = unwrappedTargets
|
val targets = unwrappedTargets
|
||||||
if (unwrappedCandidate in targets) return true
|
if (unwrappedCandidate in targets) return true
|
||||||
|
|||||||
Reference in New Issue
Block a user