[Test] Pass CompilerConfiguration to AbstractEnvironmentConfigurator.registerCompilerExtensions

This is needed to provide ability to configure extensions depending on
  configuration of specific test
This commit is contained in:
Dmitriy Novozhilov
2022-04-07 15:05:54 +04:00
committed by teamcity
parent 400ad6a01e
commit afad6a564a
8 changed files with 18 additions and 15 deletions
@@ -58,9 +58,9 @@ private class EnabledByDirectiveConfiguratorDecorator(
languageVersion: LanguageVersion languageVersion: LanguageVersion
): Map<AnalysisFlag<*>, Any?> = original.provideAdditionalAnalysisFlags(directives, languageVersion) ): Map<AnalysisFlag<*>, Any?> = original.provideAdditionalAnalysisFlags(directives, languageVersion)
override fun registerCompilerExtensions(project: Project, module: TestModule) { override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
if (directive !in module.directives) return if (directive !in module.directives) return
original.registerCompilerExtensions(project, module) original.registerCompilerExtensions(project, module, configuration)
} }
} }
@@ -22,7 +22,7 @@ abstract class AbstractEnvironmentConfigurator : ServicesAndDirectivesContainer
abstract fun provideAdditionalAnalysisFlags(directives: RegisteredDirectives, languageVersion: LanguageVersion): Map<AnalysisFlag<*>, Any?> abstract fun provideAdditionalAnalysisFlags(directives: RegisteredDirectives, languageVersion: LanguageVersion): Map<AnalysisFlag<*>, Any?>
abstract fun registerCompilerExtensions(project: Project, module: TestModule) abstract fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration)
} }
abstract class EnvironmentConfigurator(protected val testServices: TestServices) : AbstractEnvironmentConfigurator() { abstract class EnvironmentConfigurator(protected val testServices: TestServices) : AbstractEnvironmentConfigurator() {
@@ -50,7 +50,7 @@ abstract class EnvironmentConfigurator(protected val testServices: TestServices)
return emptyMap() return emptyMap()
} }
override fun registerCompilerExtensions(project: Project, module: TestModule) {} override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {}
} }
class DirectiveToConfigurationKeyExtractor { class DirectiveToConfigurationKeyExtractor {
@@ -91,14 +91,14 @@ open class CompilerConfigurationProviderImpl(
testServices.applicationDisposableProvider.getApplicationRootDisposable(), testServices.applicationDisposableProvider.getApplicationRootDisposable(),
CompilerConfiguration() CompilerConfiguration()
) )
val initialConfiguration = createCompilerConfiguration(module) val configuration = createCompilerConfiguration(module)
val projectEnv = KotlinCoreEnvironment.ProjectEnvironment(testRootDisposable, applicationEnvironment, initialConfiguration) val projectEnv = KotlinCoreEnvironment.ProjectEnvironment(testRootDisposable, applicationEnvironment, configuration)
val project = projectEnv.project val project = projectEnv.project
return KotlinCoreEnvironment.createForTests( return KotlinCoreEnvironment.createForTests(
projectEnv, projectEnv,
initialConfiguration, configuration,
configFiles configFiles
).also { configurators.forEach { it.registerCompilerExtensions(project, module) } } ).also { configurators.forEach { it.registerCompilerExtensions(project, module, configuration) } }
} }
@TestInfrastructureInternals @TestInfrastructureInternals
@@ -7,6 +7,7 @@ package org.jetbrains.kotlinx.atomicfu
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.js.test.ir.AbstractJsIrTest import org.jetbrains.kotlin.js.test.ir.AbstractJsIrTest
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.model.TestModule
@@ -39,7 +40,7 @@ class AtomicfuRuntimeClasspathProvider(testServices: TestServices) : RuntimeClas
} }
class AtomicfuEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) { class AtomicfuEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
override fun registerCompilerExtensions(project: Project, module: TestModule) { override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
IrGenerationExtension.registerExtension(project, AtomicfuLoweringExtension()) IrGenerationExtension.registerExtension(project, AtomicfuLoweringExtension())
} }
} }
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.plugin.services
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.plugin.FirPluginPrototypeExtensionRegistrar import org.jetbrains.kotlin.fir.plugin.FirPluginPrototypeExtensionRegistrar
import org.jetbrains.kotlin.ir.plugin.GeneratedDeclarationsIrBodyFiller import org.jetbrains.kotlin.ir.plugin.GeneratedDeclarationsIrBodyFiller
@@ -15,7 +16,7 @@ import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
class ExtensionRegistrarConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) { class ExtensionRegistrarConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
override fun registerCompilerExtensions(project: Project, module: TestModule) { override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
FirExtensionRegistrar.registerExtension(project, FirPluginPrototypeExtensionRegistrar()) FirExtensionRegistrar.registerExtension(project, FirPluginPrototypeExtensionRegistrar())
IrGenerationExtension.registerExtension(project, GeneratedDeclarationsIrBodyFiller()) IrGenerationExtension.registerExtension(project, GeneratedDeclarationsIrBodyFiller())
} }
@@ -58,7 +58,7 @@ internal fun TestConfigurationBuilder.configureForKotlinxSerialization(libraries
configuration.addJvmClasspathRoots(librariesPaths) configuration.addJvmClasspathRoots(librariesPaths)
} }
override fun registerCompilerExtensions(project: Project, module: TestModule) { override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
SerializationComponentRegistrar.registerExtensions(project) SerializationComponentRegistrar.registerExtensions(project)
} }
} }
@@ -31,7 +31,7 @@ class ParcelizeEnvironmentConfigurator(
configuration.addJvmClasspathRoots(listOf(runtimeLibrary, androidExtensionsRuntimeLibrary, androidApiJar)) configuration.addJvmClasspathRoots(listOf(runtimeLibrary, androidExtensionsRuntimeLibrary, androidApiJar))
} }
override fun registerCompilerExtensions(project: Project, module: TestModule) { override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
if (useFirExtension) { if (useFirExtension) {
FirExtensionRegistrar.registerExtension(project, FirParcelizeExtensionRegistrar()) FirExtensionRegistrar.registerExtension(project, FirParcelizeExtensionRegistrar())
IrGenerationExtension.registerExtension(project, ParcelizeFirIrGeneratorExtension()) IrGenerationExtension.registerExtension(project, ParcelizeFirIrGeneratorExtension())
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.parcelize.test.services package org.jetbrains.kotlin.parcelize.test.services
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -16,7 +17,7 @@ import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
class SerializableLikeExtensionProvider(testServices: TestServices) : EnvironmentConfigurator(testServices) { class SerializableLikeExtensionProvider(testServices: TestServices) : EnvironmentConfigurator(testServices) {
override fun registerCompilerExtensions(project: Project, module: TestModule) { override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
SyntheticResolveExtension.registerExtension(project, SerializableLike()) SyntheticResolveExtension.registerExtension(project, SerializableLike())
} }