From 3012815f5fa77f6e8da8bd8a070dad478a31cb8b Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 21 Jul 2015 18:11:37 +0200 Subject: [PATCH] create KotlinReferenceUsageInfo in read action --- .../findUsages/handlers/KotlinFindUsagesHandler.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindUsagesHandler.kt index 6318c323845..e5bbf5be8b5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindUsagesHandler.kt @@ -90,10 +90,15 @@ public abstract class KotlinFindUsagesHandler(psiElement: T, companion object { - protected fun processUsage(processor: Processor, ref: PsiReference): Boolean - = processor.process(KotlinReferenceUsageInfo(ref)) + protected fun processUsage(processor: Processor, ref: PsiReference): Boolean = + processor.processIfNotNull { if (ref.element.valid) KotlinReferenceUsageInfo(ref) else null } - protected fun processUsage(processor: Processor, element: PsiElement): Boolean - = processor.process(UsageInfo(element)) + protected fun processUsage(processor: Processor, element: PsiElement): Boolean = + processor.processIfNotNull { if (element.valid) UsageInfo(element) else null } + + private fun Processor.processIfNotNull(callback: () -> UsageInfo?): Boolean { + val usageInfo = runReadAction(callback) + return if (usageInfo != null) process(usageInfo) else true + } } }