From 8bf8b7b35ba4f6235c2ad84f5bc7079e39927160 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 30 May 2023 16:49:29 +0900 Subject: [PATCH] [LL API] Minor, prettify deserialized callable loading --- ...mStubBasedFirDeserializedSymbolProvider.kt | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt index d36beb9c2e4..a791633df7f 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.stubBased.deserialization import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirKotlinSymbolProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirKotlinSymbolNamesProvider @@ -29,6 +30,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragment import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty +import java.util.ArrayList typealias DeserializedTypeAliasPostProcessor = (FirTypeAliasSymbol) -> Unit @@ -140,32 +142,41 @@ internal open class JvmStubBasedFirDeserializedSymbolProvider( foundFunctions: Collection?, ): List { val topLevelFunctions = foundFunctions ?: declarationProvider.getTopLevelFunctions(callableId) - val result = ArrayList(topLevelFunctions.size) - topLevelFunctions - .mapNotNullTo(result) { function -> + + return ArrayList(topLevelFunctions.size).apply { + for (function in topLevelFunctions) { val file = function.containingKtFile - val virtualFile = file.virtualFile - if (virtualFile.extension == MetadataPackageFragment.METADATA_FILE_EXTENSION) return@mapNotNullTo null - if (initialOrigin != FirDeclarationOrigin.BuiltIns && file.packageFqName.asString() - .replace(".", "/") + "/" + virtualFile.nameWithoutExtension in KotlinBuiltins - ) return@mapNotNullTo null + val virtualFile = file.virtualFile.takeIf { it.extension != MetadataPackageFragment.METADATA_FILE_EXTENSION } ?: continue + val facadeClassName = computeFacadeClassName(file, virtualFile) + + if (initialOrigin != FirDeclarationOrigin.BuiltIns && facadeClassName.internalName in KotlinBuiltins) continue + val symbol = FirNamedFunctionSymbol(callableId) - val rootContext = - StubBasedFirDeserializationContext.createRootContext(session, moduleData, callableId, function, symbol, initialOrigin) - rootContext.memberDeserializer.loadFunction(function, null, session, symbol).symbol + val rootContext = StubBasedFirDeserializationContext + .createRootContext(session, moduleData, callableId, function, symbol, initialOrigin) + + add(rootContext.memberDeserializer.loadFunction(function, null, session, symbol).symbol) } - return result + } } private fun loadPropertiesByCallableId(callableId: CallableId, foundProperties: Collection?): List { val topLevelProperties = foundProperties ?: declarationProvider.getTopLevelProperties(callableId) - return topLevelProperties - .map { property -> + + return buildList { + for (property in topLevelProperties) { val symbol = FirPropertySymbol(callableId) - val rootContext = - StubBasedFirDeserializationContext.createRootContext(session, moduleData, callableId, property, symbol, initialOrigin) - rootContext.memberDeserializer.loadProperty(property, null, symbol).symbol + val rootContext = StubBasedFirDeserializationContext + .createRootContext(session, moduleData, callableId, property, symbol, initialOrigin) + + add(rootContext.memberDeserializer.loadProperty(property, null, symbol).symbol) } + } + } + + private fun computeFacadeClassName(file: KtFile, virtualFile: VirtualFile = file.virtualFile): JvmClassName { + val internalName = file.packageFqName.asString().replace(".", "/") + "/" + virtualFile.nameWithoutExtension + return JvmClassName.byInternalName(internalName) } private fun getClass(