[Tests] Fix stdlib in common diagnostic tests modules

This commit is contained in:
Kirill Rakhman
2023-04-03 13:09:27 +02:00
committed by Space Team
parent 09474758ab
commit e93628d0e6
3 changed files with 61 additions and 24 deletions
@@ -65,7 +65,6 @@ import org.jetbrains.kotlin.resolve.TopDownAnalysisMode
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider
import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
@@ -426,8 +425,8 @@ class ClassicFrontendFacade(
compilerEnvironment, compilerEnvironment,
dependenciesContainer = CommonDependenciesContainerImpl(moduleDescriptor) dependenciesContainer = CommonDependenciesContainerImpl(moduleDescriptor)
) { ) {
// TODO val factory = testServices.compilerConfigurationProvider.getPackagePartProviderFactory(module)
MetadataPartProvider.Empty factory(it.moduleContentScope)
} }
} }
@@ -17,19 +17,19 @@ import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.container.topologicalSort import org.jetbrains.kotlin.container.topologicalSort
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.session.FirCommonSessionFactory
import org.jetbrains.kotlin.fir.session.FirJvmSessionFactory import org.jetbrains.kotlin.fir.session.FirJvmSessionFactory
import org.jetbrains.kotlin.fir.session.FirNativeSessionFactory import org.jetbrains.kotlin.fir.session.FirNativeSessionFactory
import org.jetbrains.kotlin.fir.session.FirSessionConfigurator import org.jetbrains.kotlin.fir.session.FirSessionConfigurator
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.platform.isCommon
@@ -191,9 +191,9 @@ open class FirFrontendFacade(
val compilerConfigurationProvider = testServices.compilerConfigurationProvider val compilerConfigurationProvider = testServices.compilerConfigurationProvider
val projectEnvironment: AbstractProjectEnvironment? val projectEnvironment: AbstractProjectEnvironment?
val languageVersionSettings = module.languageVersionSettings val languageVersionSettings = module.languageVersionSettings
val isCommon = module.targetPlatform.isCommon()
when { when {
// TODO: use common session for common target platform when it's implemented isCommon || module.targetPlatform.isJvm() -> {
module.targetPlatform.isCommon() || module.targetPlatform.isJvm() -> {
val packagePartProviderFactory = compilerConfigurationProvider.getPackagePartProviderFactory(module) val packagePartProviderFactory = compilerConfigurationProvider.getPackagePartProviderFactory(module)
projectEnvironment = VfsBasedProjectEnvironment( projectEnvironment = VfsBasedProjectEnvironment(
project, VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL), project, VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL),
@@ -201,17 +201,32 @@ open class FirFrontendFacade(
val projectFileSearchScope = PsiBasedProjectFileSearchScope(ProjectScope.getLibrariesScope(project)) val projectFileSearchScope = PsiBasedProjectFileSearchScope(ProjectScope.getLibrariesScope(project))
val packagePartProvider = projectEnvironment.getPackagePartProvider(projectFileSearchScope) val packagePartProvider = projectEnvironment.getPackagePartProvider(projectFileSearchScope)
FirJvmSessionFactory.createLibrarySession( if (isCommon) {
moduleName, FirCommonSessionFactory.createLibrarySession(
sessionProvider, mainModuleName = moduleName,
moduleDataProvider, sessionProvider = sessionProvider,
projectEnvironment, moduleDataProvider = moduleDataProvider,
extensionRegistrars, projectEnvironment = projectEnvironment,
projectFileSearchScope, extensionRegistrars = extensionRegistrars,
packagePartProvider, librariesScope = projectFileSearchScope,
languageVersionSettings, resolvedKLibs = emptyList(),
registerExtraComponents = ::registerExtraComponents, packageAndMetadataPartProvider = packagePartProvider as PackageAndMetadataPartProvider,
) languageVersionSettings = languageVersionSettings,
registerExtraComponents = ::registerExtraComponents
)
} else {
FirJvmSessionFactory.createLibrarySession(
moduleName,
sessionProvider,
moduleDataProvider,
projectEnvironment,
extensionRegistrars,
projectFileSearchScope,
packagePartProvider,
languageVersionSettings,
registerExtraComponents = ::registerExtraComponents,
)
}
} }
module.targetPlatform.isJs() -> { module.targetPlatform.isJs() -> {
projectEnvironment = null projectEnvironment = null
@@ -318,8 +333,19 @@ open class FirFrontendFacade(
): FirSession { ): FirSession {
val languageVersionSettings = module.languageVersionSettings val languageVersionSettings = module.languageVersionSettings
return when { return when {
// TODO: use common session for common target platform when it's implemented targetPlatform.isCommon() -> {
targetPlatform.isCommon() || targetPlatform.isJvm() -> { FirCommonSessionFactory.createModuleBasedSession(
moduleData = moduleData,
sessionProvider = sessionProvider,
projectEnvironment = projectEnvironment!!,
incrementalCompilationContext = null,
extensionRegistrars = extensionRegistrars,
languageVersionSettings = languageVersionSettings,
registerExtraComponents = ::registerExtraComponents,
init = sessionConfigurator,
)
}
targetPlatform.isJvm() -> {
FirJvmSessionFactory.createModuleBasedSession( FirJvmSessionFactory.createModuleBasedSession(
moduleData, moduleData,
sessionProvider, sessionProvider,
@@ -328,11 +354,9 @@ open class FirFrontendFacade(
incrementalCompilationContext = null, incrementalCompilationContext = null,
extensionRegistrars, extensionRegistrars,
languageVersionSettings, languageVersionSettings,
lookupTracker = null,
enumWhenTracker = null,
needRegisterJavaElementFinder = true, needRegisterJavaElementFinder = true,
registerExtraComponents = ::registerExtraComponents, registerExtraComponents = ::registerExtraComponents,
sessionConfigurator, init = sessionConfigurator,
) )
} }
targetPlatform.isJs() -> { targetPlatform.isJs() -> {
@@ -5,12 +5,17 @@
package org.jetbrains.kotlin.test.services.configuration package org.jetbrains.kotlin.test.services.configuration
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.config.AnalysisFlag import org.jetbrains.kotlin.config.AnalysisFlag
import org.jetbrains.kotlin.config.AnalysisFlags.allowFullyQualifiedNameInKClass import org.jetbrains.kotlin.config.AnalysisFlags.allowFullyQualifiedNameInKClass
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.CompilerConfigurationKey import org.jetbrains.kotlin.config.CompilerConfigurationKey
import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_STDLIB
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.model.TestModule
@@ -37,5 +42,14 @@ class CommonEnvironmentConfigurator(testServices: TestServices) : EnvironmentCon
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
configuration.put(key as CompilerConfigurationKey<Any>, value) configuration.put(key as CompilerConfigurationKey<Any>, value)
} }
if (module.targetPlatform in CommonPlatforms.allDefaultTargetPlatforms) {
if (WITH_STDLIB in module.directives) {
configuration.add(
CLIConfigurationKeys.CONTENT_ROOTS,
JvmClasspathRoot(ForTestCompileRuntime.stdlibCommonForTests())
)
}
}
} }
} }