KotlinReferencesSearcher: remove enclosing read action, use queryParameters.getOptimizer().searchWord

#KT-7917 Fixed
This commit is contained in:
Dmitry Jemerov
2015-06-02 20:35:09 +02:00
parent 527751e967
commit 7d02b522db
@@ -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)
} }