From 7ec55f885d54ab572223cca35bed7e58f46a5ff1 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Fri, 9 Sep 2022 19:06:40 +0200 Subject: [PATCH] [lc] decompiled: fix and add new heuristics for stub-only search support members and constructors ^KT-53934 --- ...clarationInCompiledFileSearcherFE10Impl.kt | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/analysis/decompiled/light-classes-for-decompiled-fe10/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/fe10/KotlinDeclarationInCompiledFileSearcherFE10Impl.kt b/analysis/decompiled/light-classes-for-decompiled-fe10/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/fe10/KotlinDeclarationInCompiledFileSearcherFE10Impl.kt index 1b4669d8b70..c9ccc3e3ab5 100644 --- a/analysis/decompiled/light-classes-for-decompiled-fe10/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/fe10/KotlinDeclarationInCompiledFileSearcherFE10Impl.kt +++ b/analysis/decompiled/light-classes-for-decompiled-fe10/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/fe10/KotlinDeclarationInCompiledFileSearcherFE10Impl.kt @@ -1,11 +1,12 @@ /* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.analysis.decompiled.light.classes.fe10 import com.intellij.psi.PsiMember +import com.intellij.psi.PsiMethod import org.jetbrains.kotlin.analysis.decompiled.light.classes.origin.KotlinDeclarationInCompiledFileSearcher import org.jetbrains.kotlin.analysis.decompiler.psi.file.KtClsFile import org.jetbrains.kotlin.analysis.decompiler.psi.text.BySignatureIndexer @@ -14,27 +15,30 @@ import org.jetbrains.kotlin.analysis.decompiler.psi.text.relativeClassName import org.jetbrains.kotlin.load.kotlin.MemberSignature import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.psi.KtDeclarationContainer +import org.jetbrains.kotlin.psi.allConstructors -class KotlinDeclarationInCompiledFileSearcherFE10Impl: KotlinDeclarationInCompiledFileSearcher() { +class KotlinDeclarationInCompiledFileSearcherFE10Impl : KotlinDeclarationInCompiledFileSearcher() { override fun findDeclarationInCompiledFile(file: KtClsFile, member: PsiMember, signature: MemberSignature): KtDeclaration? { val relativeClassName = member.relativeClassName() val key = ClassNameAndSignature(relativeClassName, signature) val memberName = member.name - if (memberName != null && !file.isContentsLoaded && file.hasDeclarationWithKey(BySignatureIndexer, key)) { - val container: KtDeclarationContainer? = if (relativeClassName.isEmpty()) - file + val topClassOrObject = file.declarations.singleOrNull() as? KtClassOrObject + val container: KtClassOrObject? = if (relativeClassName.isEmpty()) + topClassOrObject else { - val topClassOrObject = file.declarations.singleOrNull() as? KtClassOrObject relativeClassName.fold(topClassOrObject) { classOrObject, name -> classOrObject?.declarations?.singleOrNull { it.name == name.asString() } as? KtClassOrObject } } - val declaration = container?.declarations?.singleOrNull { - it.name == memberName + val declaration = if (member is PsiMethod && member.isConstructor) { + container?.takeIf { it.name == memberName }?.allConstructors?.singleOrNull() + } else { + container?.declarations?.singleOrNull { + it.name == memberName + } } if (declaration != null) {