From 6331a135c8c7a966d2688326bf203b1873734dc5 Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Fri, 15 Jan 2021 17:41:10 +0100 Subject: [PATCH] Add LightClassUtil.getLightClassMethodsByName to avoid resolving all lightClassMethods and filtration later on --- .../src/org/jetbrains/kotlin/asJava/LightClassUtil.kt | 7 ++++++- .../jetbrains/kotlin/idea/caches/KotlinShortNamesCache.kt | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt index bac4675f137..84cc7f22440 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt @@ -124,13 +124,18 @@ object LightClassUtil { return getPsiMethodWrappers(function).toList() } + fun getLightClassMethodsByName(function: KtFunction, name: String): Sequence { + return getPsiMethodWrappers(function, name) + } + private fun getPsiMethodWrapper(declaration: KtDeclaration): PsiMethod? { return getPsiMethodWrappers(declaration).firstOrNull() } - private fun getPsiMethodWrappers(declaration: KtDeclaration): Sequence = + private fun getPsiMethodWrappers(declaration: KtDeclaration, name: String? = null): Sequence = getWrappingClasses(declaration).flatMap { it.methods.asSequence() } .filterIsInstance() + .filter { name == null || name == it.name } .filter { it.kotlinOrigin === declaration || it.navigationElement === declaration } private fun getWrappingClass(declaration: KtDeclaration): PsiClass? { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/KotlinShortNamesCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/KotlinShortNamesCache.kt index c8afb190af6..09839a242fd 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/KotlinShortNamesCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/KotlinShortNamesCache.kt @@ -192,7 +192,7 @@ class KotlinShortNamesCache(private val project: Project) : PsiShortNamesCache() filter, KtNamedFunction::class.java ) { ktNamedFunction -> - val methods = LightClassUtil.getLightClassMethods(ktNamedFunction).filter { it.name == name } + val methods = LightClassUtil.getLightClassMethodsByName(ktNamedFunction, name) return@processElements methods.all { method -> processor.process(method) }