From 8de680314eaf41b77879143a3fd0dd8d51754acc Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Mon, 11 Mar 2024 20:04:38 +0100 Subject: [PATCH] [SLC] reuse `toLightClass` for inner classes creation This means: * We will call `checkCanceled` under the hood. * We will cache and reuse the result of conversion. ^KTIJ-28688 --- .../classes/symbol/classes/symbolLightClassUtils.kt | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt index 44779bcb24a..eda32cf5124 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt @@ -53,6 +53,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClass import org.jetbrains.kotlin.psi.psiUtil.isObjectLiteral import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind +import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.addToStdlib.applyIf import java.util.* @@ -546,16 +547,12 @@ internal fun KtSymbolWithMembers.createInnerClasses( containingClass: SymbolLightClassBase, classOrObject: KtClassOrObject? ): List { - val result = ArrayList() + val result = SmartList() - // workaround for ClassInnerStuffCache not supporting classes with null names, see KT-13927 - // inner classes with null names can't be searched for and can't be used from java anyway - // we can't prohibit creating light classes with null names either since they can contain members - - getStaticDeclaredMemberScope().getClassifierSymbols().filterIsInstance().mapTo(result) { + getStaticDeclaredMemberScope().getClassifierSymbols().filterIsInstance().mapNotNullTo(result) { val classOrObjectDeclaration = it.sourcePsiSafe() if (classOrObjectDeclaration != null) { - createLightClassNoCache(classOrObjectDeclaration, containingClass.ktModule) + classOrObjectDeclaration.toLightClass() as? SymbolLightClassBase } else { createLightClassNoCache(it, ktModule = containingClass.ktModule, manager) }