KotlinReferencesSearcher: remove enclosing read action, use queryParameters.getOptimizer().searchWord
#KT-7917 Fixed
This commit is contained in:
+28
-8
@@ -18,12 +18,17 @@ package org.jetbrains.kotlin.idea.search.ideaExtensions
|
|||||||
|
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
import com.intellij.openapi.application.QueryExecutorBase
|
import com.intellij.openapi.application.QueryExecutorBase
|
||||||
|
import com.intellij.openapi.progress.ProgressManager
|
||||||
import com.intellij.openapi.util.Computable
|
import com.intellij.openapi.util.Computable
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
|
import com.intellij.psi.search.RequestResultProcessor
|
||||||
import com.intellij.psi.search.searches.ReferencesSearch
|
import com.intellij.psi.search.searches.ReferencesSearch
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import com.intellij.util.Processor
|
import com.intellij.util.Processor
|
||||||
import org.jetbrains.kotlin.asJava.*
|
import org.jetbrains.kotlin.asJava.KotlinLightMethod
|
||||||
|
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||||
|
import org.jetbrains.kotlin.asJava.namedUnwrappedElement
|
||||||
|
import org.jetbrains.kotlin.idea.references.matchesTarget
|
||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.*
|
import org.jetbrains.kotlin.idea.search.usagesSearch.*
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
@@ -37,14 +42,29 @@ public class KotlinReferencesSearcher : QueryExecutorBase<PsiReference, Referenc
|
|||||||
val unwrappedElement = element.namedUnwrappedElement
|
val unwrappedElement = element.namedUnwrappedElement
|
||||||
if (unwrappedElement == null || !ProjectRootsUtil.isInProjectOrLibSource(unwrappedElement)) return
|
if (unwrappedElement == null || !ProjectRootsUtil.isInProjectOrLibSource(unwrappedElement)) return
|
||||||
|
|
||||||
ApplicationManager.getApplication().runReadAction(object : Runnable {
|
val words = unwrappedElement.getSpecialNamesToSearch()
|
||||||
override fun run() {
|
|
||||||
val searchHelper = KotlinPsiSearchHelper(queryParameters.getElementToSearch().getProject())
|
val resultProcessor = object : RequestResultProcessor() {
|
||||||
val searchTarget = UsagesSearchTarget(unwrappedElement, queryParameters.getEffectiveSearchScope(), UsagesSearchLocation.EVERYWHERE, false)
|
private val referenceService = PsiReferenceService.getService()
|
||||||
val requestItem = UsagesSearchRequestItem(searchTarget, unwrappedElement.getSpecialNamesToSearch(), isTargetUsage, null)
|
|
||||||
searchHelper.processFilesWithText(requestItem, consumer)
|
override fun processTextOccurrence(element: PsiElement, offsetInElement: Int, consumer: Processor<PsiReference>): Boolean {
|
||||||
|
return referenceService.getReferences(element, PsiReferenceService.Hints.NO_HINTS).all { ref ->
|
||||||
|
ProgressManager.checkCanceled()
|
||||||
|
|
||||||
|
when {
|
||||||
|
!ReferenceRange.containsOffsetInElement(ref, offsetInElement) -> true
|
||||||
|
!ref.matchesTarget(unwrappedElement) -> true
|
||||||
|
else -> consumer.process(ref)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
|
||||||
|
words.forEach { word ->
|
||||||
|
queryParameters.getOptimizer().searchWord(word, queryParameters.getEffectiveSearchScope(),
|
||||||
|
UsagesSearchLocation.EVERYWHERE.searchContext, true, unwrappedElement,
|
||||||
|
resultProcessor)
|
||||||
|
}
|
||||||
|
|
||||||
searchLightElements(queryParameters, element)
|
searchLightElements(queryParameters, element)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user