[FIR] Use KlibBasedSymbolProvider in FirCommonSessionFactory

Unify logic of KLib resolving (Common and JS)

^KT-56354 Fixed
This commit is contained in:
Ivan Kochurkin
2023-03-01 14:20:49 +01:00
committed by Space Team
parent d829f8b684
commit de5b475f7a
17 changed files with 163 additions and 74 deletions
@@ -197,6 +197,7 @@ fun <F> prepareCommonSessions(
extensionRegistrars: List<FirExtensionRegistrar>,
librariesScope: AbstractProjectFileSearchScope,
libraryList: DependencyListForCliModule,
resolvedLibraries: List<KotlinResolvedLibrary>,
isCommonSource: (F) -> Boolean,
fileBelongsToModule: (F, String) -> Boolean,
createProviderAndScopeForIncrementalCompilation: (List<F>) -> IncrementalCompilationContext?,
@@ -210,6 +211,7 @@ fun <F> prepareCommonSessions(
libraryList.moduleDataProvider,
projectEnvironment,
librariesScope,
resolvedLibraries,
projectEnvironment.getPackagePartProvider(librariesScope) as PackageAndMetadataPartProvider,
configuration.languageVersionSettings,
registerExtraComponents = {},
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.cli.metadata
import com.intellij.openapi.vfs.StandardFileSystems
import com.intellij.openapi.vfs.VirtualFileManager
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
import org.jetbrains.kotlin.backend.common.CommonJsKLibResolver
import org.jetbrains.kotlin.cli.common.*
import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
@@ -17,6 +18,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.collectSources
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.createContextForIncrementalCompilation
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.createIncrementalCompilationScope
import org.jetbrains.kotlin.cli.jvm.compiler.toAbstractProjectEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots
import org.jetbrains.kotlin.config.CommonConfigurationKeys
@@ -36,12 +38,13 @@ import org.jetbrains.kotlin.fir.pipeline.resolveAndCheckFir
import org.jetbrains.kotlin.fir.serialization.FirElementAwareSerializableStringTable
import org.jetbrains.kotlin.fir.serialization.FirKLibSerializerExtension
import org.jetbrains.kotlin.fir.serialization.serializeSingleFirFile
import org.jetbrains.kotlin.library.SerializedMetadata
import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.metadata.KlibMetadataHeaderFlags
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
import org.jetbrains.kotlin.modules.TargetId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.util.DummyLogger
import java.io.File
internal class FirMetadataSerializer(
@@ -71,6 +74,12 @@ internal class FirMetadataSerializer(
val diagnosticsReporter = DiagnosticReporterFactory.createPendingReporter()
val klibFiles = configuration.get(CLIConfigurationKeys.CONTENT_ROOTS).orEmpty()
.filterIsInstance<JvmClasspathRoot>()
.filter { it.file.isDirectory || it.file.extension == "klib" }
.map { it.file.absolutePath }
val resolvedLibraries = CommonJsKLibResolver.resolve(klibFiles, DummyLogger).getFullResolvedList()
val outputs = if (isLightTree) {
val projectEnvironment = environment.toAbstractProjectEnvironment() as VfsBasedProjectEnvironment
var librariesScope = projectEnvironment.getSearchScopeForProjectLibraries()
@@ -83,8 +92,8 @@ internal class FirMetadataSerializer(
incrementalExcludesScope = null
)?.also { librariesScope -= it }
val sessionsWithSources = prepareCommonSessions(
ltFiles, configuration, projectEnvironment, rootModuleName, extensionRegistrars,
librariesScope, libraryList, groupedSources.isCommonSourceForLt, groupedSources.fileBelongsToModuleForLt,
ltFiles, configuration, projectEnvironment, rootModuleName, extensionRegistrars, librariesScope,
libraryList, resolvedLibraries, groupedSources.isCommonSourceForLt, groupedSources.fileBelongsToModuleForLt,
createProviderAndScopeForIncrementalCompilation = { files ->
createContextForIncrementalCompilation(
configuration,
@@ -121,7 +130,7 @@ internal class FirMetadataSerializer(
}
val sessionsWithSources = prepareCommonSessions(
psiFiles, configuration, projectEnvironment, rootModuleName, extensionRegistrars,
librariesScope, libraryList, isCommonSourceForPsi, fileBelongsToModuleForPsi,
librariesScope, libraryList, resolvedLibraries, isCommonSourceForPsi, fileBelongsToModuleForPsi,
createProviderAndScopeForIncrementalCompilation = { providerAndScopeForIncrementalCompilation }
)
@@ -184,5 +193,4 @@ internal class FirMetadataSerializer(
buildKotlinMetadataLibrary(configuration, serializedMetadata, destDir)
}
}
}