FIR: Add IncrementalPackagePartsProvider usage in cli...
also refactor IncrementalPackagePartsProvider and parents to simplify usage
This commit is contained in:
@@ -38,7 +38,7 @@ class JvmPackagePartProvider(
|
|||||||
languageVersionSettings: LanguageVersionSettings,
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
private val scope: GlobalSearchScope
|
private val scope: GlobalSearchScope
|
||||||
) : JvmPackagePartProviderBase<VirtualFile>() {
|
) : JvmPackagePartProviderBase<VirtualFile>() {
|
||||||
private val deserializationConfiguration = CompilerDeserializationConfiguration(languageVersionSettings)
|
override val deserializationConfiguration = CompilerDeserializationConfiguration(languageVersionSettings)
|
||||||
|
|
||||||
override val loadedModules: MutableList<ModuleMappingInfo<VirtualFile>> = SmartList()
|
override val loadedModules: MutableList<ModuleMappingInfo<VirtualFile>> = SmartList()
|
||||||
|
|
||||||
|
|||||||
+11
-1
@@ -61,6 +61,7 @@ import org.jetbrains.kotlin.fir.createSessionWithDependencies
|
|||||||
import org.jetbrains.kotlin.ir.backend.jvm.jvmResolveLibraries
|
import org.jetbrains.kotlin.ir.backend.jvm.jvmResolveLibraries
|
||||||
import org.jetbrains.kotlin.javac.JavacWrapper
|
import org.jetbrains.kotlin.javac.JavacWrapper
|
||||||
import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityManager
|
import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityManager
|
||||||
|
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider
|
||||||
import org.jetbrains.kotlin.modules.Module
|
import org.jetbrains.kotlin.modules.Module
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -308,6 +309,8 @@ object KotlinToJVMBytecodeCompiler {
|
|||||||
val projectConfiguration = environment.configuration
|
val projectConfiguration = environment.configuration
|
||||||
val localFileSystem = VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL)
|
val localFileSystem = VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL)
|
||||||
val outputs = newLinkedHashMapWithExpectedSize<Module, GenerationState>(chunk.size)
|
val outputs = newLinkedHashMapWithExpectedSize<Module, GenerationState>(chunk.size)
|
||||||
|
val targetIds = environment.configuration.get(JVMConfigurationKeys.MODULES)?.map(::TargetId)
|
||||||
|
val incrementalComponents = environment.configuration.get(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS)
|
||||||
for (module in chunk) {
|
for (module in chunk) {
|
||||||
performanceManager?.notifyAnalysisStarted()
|
performanceManager?.notifyAnalysisStarted()
|
||||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
||||||
@@ -334,7 +337,14 @@ object KotlinToJVMBytecodeCompiler {
|
|||||||
sourceScope,
|
sourceScope,
|
||||||
librariesScope,
|
librariesScope,
|
||||||
lookupTracker = environment.configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER),
|
lookupTracker = environment.configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER),
|
||||||
environment::createPackagePartProvider
|
getPackagePartProvider = { environment.createPackagePartProvider(it) },
|
||||||
|
getAdditionalModulePackagePartProvider = {
|
||||||
|
if (targetIds == null || incrementalComponents == null) null
|
||||||
|
else IncrementalPackagePartProvider(
|
||||||
|
environment.createPackagePartProvider(it),
|
||||||
|
targetIds.map(incrementalComponents::getIncrementalCache)
|
||||||
|
)
|
||||||
|
}
|
||||||
) {
|
) {
|
||||||
if (extendedAnalysisMode) {
|
if (extendedAnalysisMode) {
|
||||||
registerExtendedCommonCheckers()
|
registerExtendedCommonCheckers()
|
||||||
|
|||||||
+1
-1
@@ -217,7 +217,7 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
|
|
||||||
val partProvider = packagePartProvider(sourceScope).let { fragment ->
|
val partProvider = packagePartProvider(sourceScope).let { fragment ->
|
||||||
if (targetIds == null || incrementalComponents == null) fragment
|
if (targetIds == null || incrementalComponents == null) fragment
|
||||||
else IncrementalPackagePartProvider(fragment, targetIds.map(incrementalComponents::getIncrementalCache), storageManager)
|
else IncrementalPackagePartProvider(fragment, targetIds.map(incrementalComponents::getIncrementalCache))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note that it's necessary to create container for sources _after_ creation of container for dependencies because
|
// Note that it's necessary to create container for sources _after_ creation of container for dependencies because
|
||||||
|
|||||||
@@ -19,8 +19,6 @@ import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationChecker
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExpressionCheckers
|
import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExpressionCheckers
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkersComponent
|
import org.jetbrains.kotlin.fir.analysis.checkersComponent
|
||||||
import org.jetbrains.kotlin.fir.analysis.extensions.additionalCheckers
|
import org.jetbrains.kotlin.fir.analysis.extensions.additionalCheckers
|
||||||
import org.jetbrains.kotlin.fir.caches.FirCachesFactory
|
|
||||||
import org.jetbrains.kotlin.fir.caches.FirThreadUnsafeCachesFactory
|
|
||||||
import org.jetbrains.kotlin.fir.checkers.registerCommonCheckers
|
import org.jetbrains.kotlin.fir.checkers.registerCommonCheckers
|
||||||
import org.jetbrains.kotlin.fir.checkers.registerJvmCheckers
|
import org.jetbrains.kotlin.fir.checkers.registerJvmCheckers
|
||||||
import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
|
import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
|
||||||
@@ -67,6 +65,8 @@ object FirSessionFactory {
|
|||||||
sessionProvider: FirProjectSessionProvider,
|
sessionProvider: FirProjectSessionProvider,
|
||||||
scope: GlobalSearchScope,
|
scope: GlobalSearchScope,
|
||||||
project: Project,
|
project: Project,
|
||||||
|
additionalPackagePartProvider: PackagePartProvider? = null,
|
||||||
|
additionalScope: GlobalSearchScope? = null,
|
||||||
dependenciesProvider: FirSymbolProvider? = null,
|
dependenciesProvider: FirSymbolProvider? = null,
|
||||||
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||||
lookupTracker: LookupTracker? = null,
|
lookupTracker: LookupTracker? = null,
|
||||||
@@ -83,14 +83,25 @@ object FirSessionFactory {
|
|||||||
val firProvider = FirProviderImpl(this, kotlinScopeProvider)
|
val firProvider = FirProviderImpl(this, kotlinScopeProvider)
|
||||||
register(FirProvider::class, firProvider)
|
register(FirProvider::class, firProvider)
|
||||||
|
|
||||||
|
val deserializedJvmSymbolsProvider =
|
||||||
|
if (additionalPackagePartProvider == null) null
|
||||||
|
else {
|
||||||
|
val javaSymbolProvider = JavaSymbolProvider(this, project, additionalScope ?: scope)
|
||||||
|
|
||||||
|
makeDeserializedJvmSymbolsProvider(
|
||||||
|
project, additionalScope ?: scope, additionalPackagePartProvider, javaSymbolProvider, kotlinScopeProvider
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
register(
|
register(
|
||||||
FirSymbolProvider::class,
|
FirSymbolProvider::class,
|
||||||
FirCompositeSymbolProvider(
|
FirCompositeSymbolProvider(
|
||||||
this,
|
this,
|
||||||
listOf(
|
listOfNotNull(
|
||||||
firProvider.symbolProvider,
|
firProvider.symbolProvider,
|
||||||
JavaSymbolProvider(this, project, scope),
|
JavaSymbolProvider(this, project, scope),
|
||||||
dependenciesProvider ?: FirDependenciesSymbolProviderImpl(this)
|
dependenciesProvider ?: FirDependenciesSymbolProviderImpl(this),
|
||||||
|
deserializedJvmSymbolsProvider
|
||||||
)
|
)
|
||||||
) as FirSymbolProvider
|
) as FirSymbolProvider
|
||||||
)
|
)
|
||||||
@@ -113,12 +124,6 @@ object FirSessionFactory {
|
|||||||
packagePartProvider: PackagePartProvider,
|
packagePartProvider: PackagePartProvider,
|
||||||
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||||
): FirLibrarySession {
|
): FirLibrarySession {
|
||||||
val javaClassFinder = JavaClassFinderImpl().apply {
|
|
||||||
this.setProjectInstance(project)
|
|
||||||
this.setScope(scope)
|
|
||||||
}
|
|
||||||
|
|
||||||
val kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(scope)
|
|
||||||
return FirLibrarySession(moduleInfo, sessionProvider).apply {
|
return FirLibrarySession(moduleInfo, sessionProvider).apply {
|
||||||
registerThreadUnsafeCaches()
|
registerThreadUnsafeCaches()
|
||||||
registerCommonComponents(languageVersionSettings)
|
registerCommonComponents(languageVersionSettings)
|
||||||
@@ -127,17 +132,14 @@ object FirSessionFactory {
|
|||||||
|
|
||||||
val kotlinScopeProvider = KotlinScopeProvider(::wrapScopeWithJvmMapped)
|
val kotlinScopeProvider = KotlinScopeProvider(::wrapScopeWithJvmMapped)
|
||||||
|
|
||||||
|
val deserializedJvmSymbolsProvider = makeDeserializedJvmSymbolsProvider(
|
||||||
|
project, scope, packagePartProvider, javaSymbolProvider, kotlinScopeProvider
|
||||||
|
)
|
||||||
|
|
||||||
val symbolProvider = FirCompositeSymbolProvider(
|
val symbolProvider = FirCompositeSymbolProvider(
|
||||||
this,
|
this,
|
||||||
listOf(
|
listOf(
|
||||||
KotlinDeserializedJvmSymbolsProvider(
|
deserializedJvmSymbolsProvider,
|
||||||
this, project,
|
|
||||||
packagePartProvider,
|
|
||||||
javaSymbolProvider,
|
|
||||||
kotlinClassFinder,
|
|
||||||
javaClassFinder,
|
|
||||||
kotlinScopeProvider
|
|
||||||
),
|
|
||||||
FirBuiltinSymbolProvider(this, kotlinScopeProvider),
|
FirBuiltinSymbolProvider(this, kotlinScopeProvider),
|
||||||
FirCloneableSymbolProvider(this, kotlinScopeProvider),
|
FirCloneableSymbolProvider(this, kotlinScopeProvider),
|
||||||
javaSymbolProvider,
|
javaSymbolProvider,
|
||||||
@@ -149,6 +151,25 @@ object FirSessionFactory {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun FirSession.makeDeserializedJvmSymbolsProvider(
|
||||||
|
project: Project,
|
||||||
|
scope: GlobalSearchScope,
|
||||||
|
packagePartProvider: PackagePartProvider,
|
||||||
|
javaSymbolProvider: JavaSymbolProvider,
|
||||||
|
kotlinScopeProvider: KotlinScopeProvider
|
||||||
|
): KotlinDeserializedJvmSymbolsProvider {
|
||||||
|
|
||||||
|
val kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(scope)
|
||||||
|
val javaClassFinder = JavaClassFinderImpl().apply {
|
||||||
|
this.setProjectInstance(project)
|
||||||
|
this.setScope(scope)
|
||||||
|
}
|
||||||
|
|
||||||
|
return KotlinDeserializedJvmSymbolsProvider(
|
||||||
|
this, project, packagePartProvider, javaSymbolProvider, kotlinClassFinder, javaClassFinder, kotlinScopeProvider
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@TestOnly
|
@TestOnly
|
||||||
fun createEmptySession(): FirSession {
|
fun createEmptySession(): FirSession {
|
||||||
return object : FirSession(null) {}
|
return object : FirSession(null) {}
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ fun createSessionWithDependencies(
|
|||||||
sourceScope: GlobalSearchScope,
|
sourceScope: GlobalSearchScope,
|
||||||
librariesScope: GlobalSearchScope,
|
librariesScope: GlobalSearchScope,
|
||||||
lookupTracker: LookupTracker?,
|
lookupTracker: LookupTracker?,
|
||||||
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
getPackagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||||
|
getAdditionalModulePackagePartProvider: (GlobalSearchScope) -> PackagePartProvider?,
|
||||||
sessionConfigurator: FirSessionFactory.FirSessionConfigurator.() -> Unit = {}
|
sessionConfigurator: FirSessionFactory.FirSessionConfigurator.() -> Unit = {}
|
||||||
): FirSession {
|
): FirSession {
|
||||||
return createSessionWithDependencies(
|
return createSessionWithDependencies(
|
||||||
@@ -36,7 +37,8 @@ fun createSessionWithDependencies(
|
|||||||
sourceScope,
|
sourceScope,
|
||||||
librariesScope,
|
librariesScope,
|
||||||
lookupTracker,
|
lookupTracker,
|
||||||
packagePartProvider,
|
getPackagePartProvider,
|
||||||
|
getAdditionalModulePackagePartProvider,
|
||||||
sessionConfigurator
|
sessionConfigurator
|
||||||
) {
|
) {
|
||||||
FirJvmModuleInfo(name, it, friendPaths, outputDirectory)
|
FirJvmModuleInfo(name, it, friendPaths, outputDirectory)
|
||||||
@@ -50,7 +52,8 @@ fun createSessionWithDependencies(
|
|||||||
sourceScope: GlobalSearchScope,
|
sourceScope: GlobalSearchScope,
|
||||||
librariesScope: GlobalSearchScope,
|
librariesScope: GlobalSearchScope,
|
||||||
lookupTracker: LookupTracker?,
|
lookupTracker: LookupTracker?,
|
||||||
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
getPackagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||||
|
getAdditionalModulePackagePartProvider: (GlobalSearchScope) -> PackagePartProvider?,
|
||||||
sessionConfigurator: FirSessionFactory.FirSessionConfigurator.() -> Unit = {}
|
sessionConfigurator: FirSessionFactory.FirSessionConfigurator.() -> Unit = {}
|
||||||
): FirSession {
|
): FirSession {
|
||||||
return createSessionWithDependencies(
|
return createSessionWithDependencies(
|
||||||
@@ -60,7 +63,8 @@ fun createSessionWithDependencies(
|
|||||||
sourceScope,
|
sourceScope,
|
||||||
librariesScope,
|
librariesScope,
|
||||||
lookupTracker,
|
lookupTracker,
|
||||||
packagePartProvider,
|
getPackagePartProvider,
|
||||||
|
getAdditionalModulePackagePartProvider,
|
||||||
sessionConfigurator
|
sessionConfigurator
|
||||||
) {
|
) {
|
||||||
FirJvmModuleInfo(module, it)
|
FirJvmModuleInfo(module, it)
|
||||||
@@ -74,7 +78,8 @@ private inline fun createSessionWithDependencies(
|
|||||||
sourceScope: GlobalSearchScope,
|
sourceScope: GlobalSearchScope,
|
||||||
librariesScope: GlobalSearchScope,
|
librariesScope: GlobalSearchScope,
|
||||||
lookupTracker: LookupTracker?,
|
lookupTracker: LookupTracker?,
|
||||||
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
getPackagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||||
|
getAdditionalModulePackagePartProvider: (GlobalSearchScope) -> PackagePartProvider?,
|
||||||
noinline sessionConfigurator: FirSessionFactory.FirSessionConfigurator.() -> Unit,
|
noinline sessionConfigurator: FirSessionFactory.FirSessionConfigurator.() -> Unit,
|
||||||
moduleInfoProvider: (dependencies: List<ModuleInfo>) -> ModuleInfo,
|
moduleInfoProvider: (dependencies: List<ModuleInfo>) -> ModuleInfo,
|
||||||
): FirSession {
|
): FirSession {
|
||||||
@@ -82,13 +87,15 @@ private inline fun createSessionWithDependencies(
|
|||||||
val librariesModuleInfo = FirJvmModuleInfo.createForLibraries(moduleName)
|
val librariesModuleInfo = FirJvmModuleInfo.createForLibraries(moduleName)
|
||||||
FirSessionFactory.createLibrarySession(
|
FirSessionFactory.createLibrarySession(
|
||||||
librariesModuleInfo, provider, librariesScope,
|
librariesModuleInfo, provider, librariesScope,
|
||||||
project, packagePartProvider(librariesScope)
|
project, getPackagePartProvider(librariesScope)
|
||||||
)
|
)
|
||||||
return FirSessionFactory.createJavaModuleBasedSession(
|
return FirSessionFactory.createJavaModuleBasedSession(
|
||||||
moduleInfoProvider(listOf(librariesModuleInfo)),
|
moduleInfoProvider(listOf(librariesModuleInfo)),
|
||||||
provider,
|
provider,
|
||||||
sourceScope,
|
sourceScope,
|
||||||
project,
|
project,
|
||||||
|
additionalPackagePartProvider = getAdditionalModulePackagePartProvider(sourceScope),
|
||||||
|
additionalScope = librariesScope,
|
||||||
languageVersionSettings = languageVersionSettings,
|
languageVersionSettings = languageVersionSettings,
|
||||||
lookupTracker = lookupTracker,
|
lookupTracker = lookupTracker,
|
||||||
init = sessionConfigurator
|
init = sessionConfigurator
|
||||||
|
|||||||
+11
-6
@@ -24,16 +24,21 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping
|
|||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.ClassData
|
import org.jetbrains.kotlin.serialization.deserialization.ClassData
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
|
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
|
||||||
|
|
||||||
class IncrementalPackagePartProvider(
|
class IncrementalPackagePartProvider(
|
||||||
private val parent: PackagePartProvider,
|
private val parent: PackagePartProvider,
|
||||||
incrementalCaches: List<IncrementalCache>,
|
incrementalCaches: List<IncrementalCache>
|
||||||
storageManager: StorageManager
|
|
||||||
) : PackagePartProvider {
|
) : PackagePartProvider {
|
||||||
|
|
||||||
lateinit var deserializationConfiguration: DeserializationConfiguration
|
lateinit var deserializationConfiguration: DeserializationConfiguration
|
||||||
|
|
||||||
private val moduleMappings = storageManager.createLazyValue {
|
init {
|
||||||
|
(parent as? JvmPackagePartProviderBase<*>)?.deserializationConfiguration?.let {
|
||||||
|
deserializationConfiguration = it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val moduleMappings by lazy {
|
||||||
incrementalCaches.map { cache ->
|
incrementalCaches.map { cache ->
|
||||||
ModuleMapping.loadModuleMapping(cache.getModuleMappingData(), "<incremental>", deserializationConfiguration) { version ->
|
ModuleMapping.loadModuleMapping(cache.getModuleMappingData(), "<incremental>", deserializationConfiguration) { version ->
|
||||||
// Incremental compilation should fall back to full rebuild if the minor component of the metadata version has changed
|
// Incremental compilation should fall back to full rebuild if the minor component of the metadata version has changed
|
||||||
@@ -43,7 +48,7 @@ class IncrementalPackagePartProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun findPackageParts(packageFqName: String): List<String> {
|
override fun findPackageParts(packageFqName: String): List<String> {
|
||||||
return (moduleMappings().mapNotNull { it.findPackageParts(packageFqName) }.flatMap { it.parts } +
|
return (moduleMappings.mapNotNull { it.findPackageParts(packageFqName) }.flatMap { it.parts } +
|
||||||
parent.findPackageParts(packageFqName)).distinct()
|
parent.findPackageParts(packageFqName)).distinct()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,6 +57,6 @@ class IncrementalPackagePartProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getAllOptionalAnnotationClasses(): List<ClassData> =
|
override fun getAllOptionalAnnotationClasses(): List<ClassData> =
|
||||||
moduleMappings().flatMap((JvmPackagePartProviderBase)::getAllOptionalAnnotationClasses) +
|
moduleMappings.flatMap((JvmPackagePartProviderBase)::getAllOptionalAnnotationClasses) +
|
||||||
parent.getAllOptionalAnnotationClasses()
|
parent.getAllOptionalAnnotationClasses()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ object GenerationUtils {
|
|||||||
val scope = GlobalSearchScope.filesScope(project, files.map { it.virtualFile })
|
val scope = GlobalSearchScope.filesScope(project, files.map { it.virtualFile })
|
||||||
.uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(project))
|
.uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(project))
|
||||||
val librariesScope = ProjectScope.getLibrariesScope(project)
|
val librariesScope = ProjectScope.getLibrariesScope(project)
|
||||||
val session = createSessionForTests(project, scope, librariesScope, "main", packagePartProvider = packagePartProvider)
|
val session = createSessionForTests(project, scope, librariesScope, "main", getPackagePartProvider = packagePartProvider)
|
||||||
|
|
||||||
// TODO: add running checkers and check that it's safe to compile
|
// TODO: add running checkers and check that it's safe to compile
|
||||||
val firAnalyzerFacade = FirAnalyzerFacade(session, configuration.languageVersionSettings, files)
|
val firAnalyzerFacade = FirAnalyzerFacade(session, configuration.languageVersionSettings, files)
|
||||||
|
|||||||
@@ -37,7 +37,8 @@ fun createSessionForTests(
|
|||||||
moduleName: String = "TestModule",
|
moduleName: String = "TestModule",
|
||||||
friendPaths: List<String> = emptyList(),
|
friendPaths: List<String> = emptyList(),
|
||||||
lookupTracker: LookupTracker? = null,
|
lookupTracker: LookupTracker? = null,
|
||||||
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider
|
getPackagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||||
|
getAdditionalModulePackagePartProvider: (GlobalSearchScope) -> PackagePartProvider? = { null }
|
||||||
): FirSession {
|
): FirSession {
|
||||||
return createSessionWithDependencies(
|
return createSessionWithDependencies(
|
||||||
Name.identifier(moduleName),
|
Name.identifier(moduleName),
|
||||||
@@ -48,7 +49,8 @@ fun createSessionForTests(
|
|||||||
sourceScope,
|
sourceScope,
|
||||||
librariesScope,
|
librariesScope,
|
||||||
lookupTracker,
|
lookupTracker,
|
||||||
packagePartProvider
|
getPackagePartProvider,
|
||||||
|
getAdditionalModulePackagePartProvider
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping
|
|||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.ClassData
|
import org.jetbrains.kotlin.serialization.deserialization.ClassData
|
||||||
|
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider
|
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider
|
||||||
|
|
||||||
abstract class JvmPackagePartProviderBase<MappingsKey> : PackagePartProvider, MetadataPartProvider {
|
abstract class JvmPackagePartProviderBase<MappingsKey> : PackagePartProvider, MetadataPartProvider {
|
||||||
@@ -18,6 +19,8 @@ abstract class JvmPackagePartProviderBase<MappingsKey> : PackagePartProvider, Me
|
|||||||
|
|
||||||
protected abstract val loadedModules: MutableList<ModuleMappingInfo<MappingsKey>>
|
protected abstract val loadedModules: MutableList<ModuleMappingInfo<MappingsKey>>
|
||||||
|
|
||||||
|
abstract val deserializationConfiguration : DeserializationConfiguration
|
||||||
|
|
||||||
override fun findPackageParts(packageFqName: String): List<String> {
|
override fun findPackageParts(packageFqName: String): List<String> {
|
||||||
val rootToPackageParts: Collection<PackageParts> = getPackageParts(packageFqName)
|
val rootToPackageParts: Collection<PackageParts> = getPackageParts(packageFqName)
|
||||||
if (rootToPackageParts.isEmpty()) return emptyList()
|
if (rootToPackageParts.isEmpty()) return emptyList()
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ class PackagePartFromClassLoaderProvider(
|
|||||||
languageVersionSettings: LanguageVersionSettings,
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
messageCollector: MessageCollector
|
messageCollector: MessageCollector
|
||||||
) : JvmPackagePartProviderBase<String>() {
|
) : JvmPackagePartProviderBase<String>() {
|
||||||
private val deserializationConfiguration = CompilerDeserializationConfiguration(languageVersionSettings)
|
override val deserializationConfiguration = CompilerDeserializationConfiguration(languageVersionSettings)
|
||||||
|
|
||||||
override val loadedModules: MutableList<ModuleMappingInfo<String>> = SmartList()
|
override val loadedModules: MutableList<ModuleMappingInfo<String>> = SmartList()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user