From df075547640104db51da919707627478a798ecf1 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 18 Apr 2016 15:45:57 +0300 Subject: [PATCH] Find Usages: Start read action for derived class search #KT-11845 Fixed --- ChangeLog.md | 1 + .../handlers/KotlinFindClassUsagesHandler.kt | 26 ++++++++++--------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 6246cf4199e..162645720dc 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -25,6 +25,7 @@ Issues fixed: - [KT-11659](https://youtrack.jetbrains.com/issue/KT-11659) Generate abstract overrides for Any members inside of Kotlin interfaces - [KT-11866](https://youtrack.jetbrains.com/issue/KT-11866) Suggest "Create secondary constructor" when constructors exist but are not applicable - [KT-11908](https://youtrack.jetbrains.com/issue/KT-11866) Allow properties with custom setters to be used in generated equals/hashCode/toString +- [KT-11845](https://youtrack.jetbrains.com/issue/KT-11845) Fixed exception on attempt to find derived classes #### Debugger diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt index 88a09fe1d8d..0d07aa648dc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt @@ -76,20 +76,22 @@ class KotlinFindClassUsagesHandler( fun processInheritors(): Boolean { val request = HierarchySearchRequest(element, options.searchScope, options.isCheckDeepInheritance) - return request.searchInheritors().forEach( - PsiElementProcessorAdapter( - object : PsiElementProcessor { - override fun execute(element: PsiClass): Boolean { - val isInterface = element.isInterface - return when { - isInterface && options.isDerivedInterfaces || !isInterface && options.isDerivedClasses -> - KotlinFindUsagesHandler.processUsage(processor, element.navigationElement) - else -> true + return runReadAction { + request.searchInheritors().forEach( + PsiElementProcessorAdapter( + object : PsiElementProcessor { + override fun execute(element: PsiClass): Boolean { + val isInterface = element.isInterface + return when { + isInterface && options.isDerivedInterfaces || !isInterface && options.isDerivedClasses -> + KotlinFindUsagesHandler.processUsage(processor, element.navigationElement) + else -> true + } } } - } - ) - ) + ) + ) + } } val classOrObject = element as KtClassOrObject