From 9eb2672282a152ab8c560b975ceddd148bc109da Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Sat, 10 Sep 2022 15:51:55 +0200 Subject: [PATCH] [lc] decompiled: improve stub search for fields ^KT-53934 --- ...KotlinDeclarationInCompiledFileSearcher.kt | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/origin/KotlinDeclarationInCompiledFileSearcher.kt b/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/origin/KotlinDeclarationInCompiledFileSearcher.kt index 36c994e1b04..4eaa14e2dd9 100644 --- a/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/origin/KotlinDeclarationInCompiledFileSearcher.kt +++ b/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/origin/KotlinDeclarationInCompiledFileSearcher.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.load.kotlin.MemberSignature import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.allConstructors import org.jetbrains.kotlin.type.MapPsiToAsmDesc @@ -54,16 +55,19 @@ abstract class KotlinDeclarationInCompiledFileSearcher { } } ?: return null - return if (member is PsiMethod && member.isConstructor) { - container.takeIf { it.name == memberName }?.allConstructors?.singleOrNull() - } else { - val declarations = container.declarations - val names: Collection = if (member is PsiMethod) - member.syntheticAccessors.map(Name::asString) + memberName - else - listOf(memberName) + if (member is PsiMethod && member.isConstructor) { + return container.takeIf { it.name == memberName }?.allConstructors?.singleOrNull() + } - declarations.singleOrNull { declaration -> declaration.name in names } + val declarations = container.declarations + return when (member) { + is PsiMethod -> { + val names = member.syntheticAccessors.map(Name::asString) + memberName + declarations.singleOrNull { it.name in names } + } + + is PsiField -> declarations.singleOrNull { it !is KtNamedFunction && it.name == memberName } + else -> declarations.singleOrNull { it.name == memberName } } }