[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
): 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
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 registerCompilerExtensions(project: Project, module: TestModule)
abstract fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration)
}
abstract class EnvironmentConfigurator(protected val testServices: TestServices) : AbstractEnvironmentConfigurator() {
@@ -50,7 +50,7 @@ abstract class EnvironmentConfigurator(protected val testServices: TestServices)
return emptyMap()
}
override fun registerCompilerExtensions(project: Project, module: TestModule) {}
override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {}
}
class DirectiveToConfigurationKeyExtractor {
@@ -91,14 +91,14 @@ open class CompilerConfigurationProviderImpl(
testServices.applicationDisposableProvider.getApplicationRootDisposable(),
CompilerConfiguration()
)
val initialConfiguration = createCompilerConfiguration(module)
val projectEnv = KotlinCoreEnvironment.ProjectEnvironment(testRootDisposable, applicationEnvironment, initialConfiguration)
val configuration = createCompilerConfiguration(module)
val projectEnv = KotlinCoreEnvironment.ProjectEnvironment(testRootDisposable, applicationEnvironment, configuration)
val project = projectEnv.project
return KotlinCoreEnvironment.createForTests(
projectEnv,
initialConfiguration,
configuration,
configFiles
).also { configurators.forEach { it.registerCompilerExtensions(project, module) } }
).also { configurators.forEach { it.registerCompilerExtensions(project, module, configuration) } }
}
@TestInfrastructureInternals
@@ -7,6 +7,7 @@ package org.jetbrains.kotlinx.atomicfu
import com.intellij.openapi.project.Project
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.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.model.TestModule
@@ -39,7 +40,7 @@ class AtomicfuRuntimeClasspathProvider(testServices: TestServices) : RuntimeClas
}
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())
}
}
}
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.plugin.services
import com.intellij.openapi.project.Project
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.plugin.FirPluginPrototypeExtensionRegistrar
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
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())
IrGenerationExtension.registerExtension(project, GeneratedDeclarationsIrBodyFiller())
}
@@ -58,7 +58,7 @@ internal fun TestConfigurationBuilder.configureForKotlinxSerialization(libraries
configuration.addJvmClasspathRoots(librariesPaths)
}
override fun registerCompilerExtensions(project: Project, module: TestModule) {
override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
SerializationComponentRegistrar.registerExtensions(project)
}
}
@@ -31,7 +31,7 @@ class ParcelizeEnvironmentConfigurator(
configuration.addJvmClasspathRoots(listOf(runtimeLibrary, androidExtensionsRuntimeLibrary, androidApiJar))
}
override fun registerCompilerExtensions(project: Project, module: TestModule) {
override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
if (useFirExtension) {
FirExtensionRegistrar.registerExtension(project, FirParcelizeExtensionRegistrar())
IrGenerationExtension.registerExtension(project, ParcelizeFirIrGeneratorExtension())
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.parcelize.test.services
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.name.FqName
@@ -16,7 +17,7 @@ import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
import org.jetbrains.kotlin.test.services.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())
}