AbstractFindUsagesTest: add read lock
This commit is contained in:
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.findUsages.handlers
|
|||||||
import com.intellij.find.findUsages.FindUsagesHandler
|
import com.intellij.find.findUsages.FindUsagesHandler
|
||||||
import com.intellij.find.findUsages.FindUsagesOptions
|
import com.intellij.find.findUsages.FindUsagesOptions
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.project.DumbService
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiReference
|
import com.intellij.psi.PsiReference
|
||||||
import com.intellij.psi.impl.light.LightMemberReference
|
import com.intellij.psi.impl.light.LightMemberReference
|
||||||
@@ -32,6 +31,7 @@ import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory
|
|||||||
import org.jetbrains.kotlin.idea.findUsages.KotlinReferencePreservingUsageInfo
|
import org.jetbrains.kotlin.idea.findUsages.KotlinReferencePreservingUsageInfo
|
||||||
import org.jetbrains.kotlin.idea.findUsages.KotlinReferenceUsageInfo
|
import org.jetbrains.kotlin.idea.findUsages.KotlinReferenceUsageInfo
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
|
import org.jetbrains.kotlin.idea.util.runReadActionInSmartMode
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
abstract class KotlinFindUsagesHandler<T : PsiElement>(
|
abstract class KotlinFindUsagesHandler<T : PsiElement>(
|
||||||
@@ -76,7 +76,7 @@ abstract class KotlinFindUsagesHandler<T : PsiElement>(
|
|||||||
|
|
||||||
private fun searchReferences(element: PsiElement, processor: Processor<UsageInfo>, options: FindUsagesOptions): Boolean {
|
private fun searchReferences(element: PsiElement, processor: Processor<UsageInfo>, options: FindUsagesOptions): Boolean {
|
||||||
val searcher = createSearcher(element, processor, options)
|
val searcher = createSearcher(element, processor, options)
|
||||||
if (!DumbService.getInstance(project).runReadActionInSmartMode<Boolean> { searcher.buildTaskList() }) return false
|
if (!project.runReadActionInSmartMode { searcher.buildTaskList() }) return false
|
||||||
return searcher.executeTasks()
|
return searcher.executeTasks()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
|||||||
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
||||||
import org.jetbrains.kotlin.idea.test.TestFixtureExtension
|
import org.jetbrains.kotlin.idea.test.TestFixtureExtension
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
|
import org.jetbrains.kotlin.idea.util.runReadActionInSmartMode
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
@@ -291,9 +292,10 @@ internal fun findUsages(
|
|||||||
val processor = CommonProcessors.CollectProcessor<UsageInfo>()
|
val processor = CommonProcessors.CollectProcessor<UsageInfo>()
|
||||||
for (psiElement in handler.primaryElements + handler.secondaryElements) {
|
for (psiElement in handler.primaryElements + handler.secondaryElements) {
|
||||||
if (highlightingMode) {
|
if (highlightingMode) {
|
||||||
//TODO: should findReferencesToHighlight work outside read-action or it makes no sense?
|
project.runReadActionInSmartMode {
|
||||||
for (reference in handler.findReferencesToHighlight(psiElement, options.searchScope)) {
|
for (reference in handler.findReferencesToHighlight(psiElement, options.searchScope)) {
|
||||||
processor.process(UsageInfo(reference))
|
processor.process(UsageInfo(reference))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ProgressManager.getInstance().run(object : Task(project, "", false) {
|
ProgressManager.getInstance().run(object : Task(project, "", false) {
|
||||||
|
|||||||
Reference in New Issue
Block a user