FIR: Split EnvironmentConfigurator to an interface and abstract class
It is needed to make it easier to write wrappers for configurators
This commit is contained in:
+2
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
|
|||||||
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
|
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.model.singleOrZeroValue
|
import org.jetbrains.kotlin.test.directives.model.singleOrZeroValue
|
||||||
import org.jetbrains.kotlin.test.services.DefaultsDsl
|
import org.jetbrains.kotlin.test.services.DefaultsDsl
|
||||||
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.AbstractEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.util.LANGUAGE_FEATURE_PATTERN
|
import org.jetbrains.kotlin.test.util.LANGUAGE_FEATURE_PATTERN
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ class LanguageVersionSettingsBuilder {
|
|||||||
|
|
||||||
fun configureUsingDirectives(
|
fun configureUsingDirectives(
|
||||||
directives: RegisteredDirectives,
|
directives: RegisteredDirectives,
|
||||||
environmentConfigurators: List<EnvironmentConfigurator>,
|
environmentConfigurators: List<AbstractEnvironmentConfigurator>,
|
||||||
targetBackend: TargetBackend?
|
targetBackend: TargetBackend?
|
||||||
) {
|
) {
|
||||||
val apiVersion = directives.singleOrZeroValue(LanguageSettingsDirectives.API_VERSION)
|
val apiVersion = directives.singleOrZeroValue(LanguageSettingsDirectives.API_VERSION)
|
||||||
|
|||||||
+12
-4
@@ -17,13 +17,21 @@ import org.jetbrains.kotlin.test.directives.model.singleOrZeroValue
|
|||||||
import org.jetbrains.kotlin.test.model.ServicesAndDirectivesContainer
|
import org.jetbrains.kotlin.test.model.ServicesAndDirectivesContainer
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
|
|
||||||
abstract class EnvironmentConfigurator(protected val testServices: TestServices) : ServicesAndDirectivesContainer {
|
abstract class AbstractEnvironmentConfigurator : ServicesAndDirectivesContainer {
|
||||||
|
abstract fun configureCompileConfigurationWithAdditionalConfigurationKeys(configuration: CompilerConfiguration, module: TestModule)
|
||||||
|
|
||||||
|
abstract fun provideAdditionalAnalysisFlags(directives: RegisteredDirectives, languageVersion: LanguageVersion): Map<AnalysisFlag<*>, Any?>
|
||||||
|
|
||||||
|
abstract fun registerCompilerExtensions(project: Project, module: TestModule)
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class EnvironmentConfigurator(protected val testServices: TestServices) : AbstractEnvironmentConfigurator() {
|
||||||
protected val moduleStructure: TestModuleStructure
|
protected val moduleStructure: TestModuleStructure
|
||||||
get() = testServices.moduleStructure
|
get() = testServices.moduleStructure
|
||||||
|
|
||||||
protected open fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) {}
|
protected open fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) {}
|
||||||
|
|
||||||
fun configureCompileConfigurationWithAdditionalConfigurationKeys(
|
final override fun configureCompileConfigurationWithAdditionalConfigurationKeys(
|
||||||
configuration: CompilerConfiguration,
|
configuration: CompilerConfiguration,
|
||||||
module: TestModule,
|
module: TestModule,
|
||||||
) {
|
) {
|
||||||
@@ -35,14 +43,14 @@ abstract class EnvironmentConfigurator(protected val testServices: TestServices)
|
|||||||
|
|
||||||
open fun DirectiveToConfigurationKeyExtractor.provideConfigurationKeys() {}
|
open fun DirectiveToConfigurationKeyExtractor.provideConfigurationKeys() {}
|
||||||
|
|
||||||
open fun provideAdditionalAnalysisFlags(
|
override fun provideAdditionalAnalysisFlags(
|
||||||
directives: RegisteredDirectives,
|
directives: RegisteredDirectives,
|
||||||
languageVersion: LanguageVersion
|
languageVersion: LanguageVersion
|
||||||
): Map<AnalysisFlag<*>, Any?> {
|
): Map<AnalysisFlag<*>, Any?> {
|
||||||
return emptyMap()
|
return emptyMap()
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun registerCompilerExtensions(project: Project) {}
|
override fun registerCompilerExtensions(project: Project, module: TestModule) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
class DirectiveToConfigurationKeyExtractor {
|
class DirectiveToConfigurationKeyExtractor {
|
||||||
+6
-6
@@ -28,7 +28,7 @@ class TestConfigurationBuilder {
|
|||||||
|
|
||||||
private val sourcePreprocessors: MutableList<Constructor<SourceFilePreprocessor>> = mutableListOf()
|
private val sourcePreprocessors: MutableList<Constructor<SourceFilePreprocessor>> = mutableListOf()
|
||||||
private val additionalMetaInfoProcessors: MutableList<Constructor<AdditionalMetaInfoProcessor>> = mutableListOf()
|
private val additionalMetaInfoProcessors: MutableList<Constructor<AdditionalMetaInfoProcessor>> = mutableListOf()
|
||||||
private val environmentConfigurators: MutableList<Constructor<EnvironmentConfigurator>> = mutableListOf()
|
private val environmentConfigurators: MutableList<Constructor<AbstractEnvironmentConfigurator>> = mutableListOf()
|
||||||
private val preAnalysisHandlers: MutableList<Constructor<PreAnalysisHandler>> = mutableListOf()
|
private val preAnalysisHandlers: MutableList<Constructor<PreAnalysisHandler>> = mutableListOf()
|
||||||
|
|
||||||
private val additionalSourceProviders: MutableList<Constructor<AdditionalSourceProvider>> = mutableListOf()
|
private val additionalSourceProviders: MutableList<Constructor<AdditionalSourceProvider>> = mutableListOf()
|
||||||
@@ -46,7 +46,7 @@ class TestConfigurationBuilder {
|
|||||||
private val configurationsByNegativeTestDataCondition: MutableList<Pair<Regex, TestConfigurationBuilder.() -> Unit>> = mutableListOf()
|
private val configurationsByNegativeTestDataCondition: MutableList<Pair<Regex, TestConfigurationBuilder.() -> Unit>> = mutableListOf()
|
||||||
private val additionalServices: MutableList<ServiceRegistrationData> = mutableListOf()
|
private val additionalServices: MutableList<ServiceRegistrationData> = mutableListOf()
|
||||||
|
|
||||||
private var compilerConfigurationProvider: ((Disposable, List<EnvironmentConfigurator>) -> CompilerConfigurationProvider)? = null
|
private var compilerConfigurationProvider: ((Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider)? = null
|
||||||
private var runtimeClasspathProviders: MutableList<Constructor<RuntimeClasspathProvider>> = mutableListOf()
|
private var runtimeClasspathProviders: MutableList<Constructor<RuntimeClasspathProvider>> = mutableListOf()
|
||||||
|
|
||||||
lateinit var testInfo: KotlinTestInfo
|
lateinit var testInfo: KotlinTestInfo
|
||||||
@@ -157,7 +157,7 @@ class TestConfigurationBuilder {
|
|||||||
this.directives += directives
|
this.directives += directives
|
||||||
}
|
}
|
||||||
|
|
||||||
fun useConfigurators(vararg environmentConfigurators: Constructor<EnvironmentConfigurator>) {
|
fun useConfigurators(vararg environmentConfigurators: Constructor<AbstractEnvironmentConfigurator>) {
|
||||||
this.environmentConfigurators += environmentConfigurators
|
this.environmentConfigurators += environmentConfigurators
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +184,7 @@ class TestConfigurationBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@TestInfrastructureInternals
|
@TestInfrastructureInternals
|
||||||
fun useCustomCompilerConfigurationProvider(provider: (Disposable, List<EnvironmentConfigurator>) -> CompilerConfigurationProvider) {
|
fun useCustomCompilerConfigurationProvider(provider: (Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider) {
|
||||||
compilerConfigurationProvider = provider
|
compilerConfigurationProvider = provider
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,7 +256,7 @@ class TestConfigurationBuilder {
|
|||||||
get() = builder.sourcePreprocessors
|
get() = builder.sourcePreprocessors
|
||||||
val additionalMetaInfoProcessors: List<Constructor<AdditionalMetaInfoProcessor>>
|
val additionalMetaInfoProcessors: List<Constructor<AdditionalMetaInfoProcessor>>
|
||||||
get() = builder.additionalMetaInfoProcessors
|
get() = builder.additionalMetaInfoProcessors
|
||||||
val environmentConfigurators: List<Constructor<EnvironmentConfigurator>>
|
val environmentConfigurators: List<Constructor<AbstractEnvironmentConfigurator>>
|
||||||
get() = builder.environmentConfigurators
|
get() = builder.environmentConfigurators
|
||||||
val preAnalysisHandlers: List<Constructor<PreAnalysisHandler>>
|
val preAnalysisHandlers: List<Constructor<PreAnalysisHandler>>
|
||||||
get() = builder.preAnalysisHandlers
|
get() = builder.preAnalysisHandlers
|
||||||
@@ -286,7 +286,7 @@ class TestConfigurationBuilder {
|
|||||||
val additionalServices: List<ServiceRegistrationData>
|
val additionalServices: List<ServiceRegistrationData>
|
||||||
get() = builder.additionalServices
|
get() = builder.additionalServices
|
||||||
|
|
||||||
val compilerConfigurationProvider: ((Disposable, List<EnvironmentConfigurator>) -> CompilerConfigurationProvider)?
|
val compilerConfigurationProvider: ((Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider)?
|
||||||
get() = builder.compilerConfigurationProvider
|
get() = builder.compilerConfigurationProvider
|
||||||
val runtimeClasspathProviders: List<Constructor<RuntimeClasspathProvider>>
|
val runtimeClasspathProviders: List<Constructor<RuntimeClasspathProvider>>
|
||||||
get() = builder.runtimeClasspathProviders
|
get() = builder.runtimeClasspathProviders
|
||||||
|
|||||||
+3
-3
@@ -30,7 +30,7 @@ class TestConfigurationImpl(
|
|||||||
|
|
||||||
sourcePreprocessors: List<Constructor<SourceFilePreprocessor>>,
|
sourcePreprocessors: List<Constructor<SourceFilePreprocessor>>,
|
||||||
additionalMetaInfoProcessors: List<Constructor<AdditionalMetaInfoProcessor>>,
|
additionalMetaInfoProcessors: List<Constructor<AdditionalMetaInfoProcessor>>,
|
||||||
environmentConfigurators: List<Constructor<EnvironmentConfigurator>>,
|
environmentConfigurators: List<Constructor<AbstractEnvironmentConfigurator>>,
|
||||||
|
|
||||||
additionalSourceProviders: List<Constructor<AdditionalSourceProvider>>,
|
additionalSourceProviders: List<Constructor<AdditionalSourceProvider>>,
|
||||||
preAnalysisHandlers: List<Constructor<PreAnalysisHandler>>,
|
preAnalysisHandlers: List<Constructor<PreAnalysisHandler>>,
|
||||||
@@ -38,7 +38,7 @@ class TestConfigurationImpl(
|
|||||||
metaTestConfigurators: List<Constructor<MetaTestConfigurator>>,
|
metaTestConfigurators: List<Constructor<MetaTestConfigurator>>,
|
||||||
afterAnalysisCheckers: List<Constructor<AfterAnalysisChecker>>,
|
afterAnalysisCheckers: List<Constructor<AfterAnalysisChecker>>,
|
||||||
|
|
||||||
compilerConfigurationProvider: ((Disposable, List<EnvironmentConfigurator>) -> CompilerConfigurationProvider)?,
|
compilerConfigurationProvider: ((Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider)?,
|
||||||
runtimeClasspathProviders: List<Constructor<RuntimeClasspathProvider>>,
|
runtimeClasspathProviders: List<Constructor<RuntimeClasspathProvider>>,
|
||||||
|
|
||||||
override val metaInfoHandlerEnabled: Boolean,
|
override val metaInfoHandlerEnabled: Boolean,
|
||||||
@@ -70,7 +70,7 @@ class TestConfigurationImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val environmentConfigurators: List<EnvironmentConfigurator> =
|
private val environmentConfigurators: List<AbstractEnvironmentConfigurator> =
|
||||||
environmentConfigurators
|
environmentConfigurators
|
||||||
.map { it.invoke(testServices) }
|
.map { it.invoke(testServices) }
|
||||||
.also { it.registerDirectivesAndServices() }
|
.also { it.registerDirectivesAndServices() }
|
||||||
|
|||||||
+2
-2
@@ -61,7 +61,7 @@ val TestServices.compilerConfigurationProvider: CompilerConfigurationProvider by
|
|||||||
|
|
||||||
open class CompilerConfigurationProviderImpl(
|
open class CompilerConfigurationProviderImpl(
|
||||||
override val testRootDisposable: Disposable,
|
override val testRootDisposable: Disposable,
|
||||||
val configurators: List<EnvironmentConfigurator>
|
val configurators: List<AbstractEnvironmentConfigurator>
|
||||||
) : CompilerConfigurationProvider() {
|
) : CompilerConfigurationProvider() {
|
||||||
private val cache: MutableMap<TestModule, KotlinCoreEnvironment> = mutableMapOf()
|
private val cache: MutableMap<TestModule, KotlinCoreEnvironment> = mutableMapOf()
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ open class CompilerConfigurationProviderImpl(
|
|||||||
projectEnv,
|
projectEnv,
|
||||||
initialConfiguration,
|
initialConfiguration,
|
||||||
configFiles
|
configFiles
|
||||||
).also { configurators.forEach { it.registerCompilerExtensions(project) } }
|
).also { configurators.forEach { it.registerCompilerExtensions(project, module) } }
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestInfrastructureInternals
|
@TestInfrastructureInternals
|
||||||
|
|||||||
+1
-1
@@ -42,7 +42,7 @@ class ModuleStructureExtractorImpl(
|
|||||||
testServices: TestServices,
|
testServices: TestServices,
|
||||||
additionalSourceProviders: List<AdditionalSourceProvider>,
|
additionalSourceProviders: List<AdditionalSourceProvider>,
|
||||||
moduleStructureTransformers: List<ModuleStructureTransformer>,
|
moduleStructureTransformers: List<ModuleStructureTransformer>,
|
||||||
private val environmentConfigurators: List<EnvironmentConfigurator>
|
private val environmentConfigurators: List<AbstractEnvironmentConfigurator>
|
||||||
) : ModuleStructureExtractor(testServices, additionalSourceProviders, moduleStructureTransformers) {
|
) : ModuleStructureExtractor(testServices, additionalSourceProviders, moduleStructureTransformers) {
|
||||||
companion object {
|
companion object {
|
||||||
private val allowedExtensionsForFiles = listOf(".kt", ".kts", ".java", ".js", ".mjs")
|
private val allowedExtensionsForFiles = listOf(".kt", ".kts", ".java", ".js", ".mjs")
|
||||||
|
|||||||
+1
-1
@@ -39,7 +39,7 @@ class AtomicfuRuntimeClasspathProvider(testServices: TestServices) : RuntimeClas
|
|||||||
}
|
}
|
||||||
|
|
||||||
class AtomicfuEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
|
class AtomicfuEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
|
||||||
override fun registerCompilerExtensions(project: Project) {
|
override fun registerCompilerExtensions(project: Project, module: TestModule) {
|
||||||
IrGenerationExtension.registerExtension(project, AtomicfuLoweringExtension())
|
IrGenerationExtension.registerExtension(project, AtomicfuLoweringExtension())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
-1
@@ -10,11 +10,12 @@ import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
|||||||
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
|
||||||
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
|
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) {
|
override fun registerCompilerExtensions(project: Project, module: TestModule) {
|
||||||
FirExtensionRegistrar.registerExtension(project, FirPluginPrototypeExtensionRegistrar())
|
FirExtensionRegistrar.registerExtension(project, FirPluginPrototypeExtensionRegistrar())
|
||||||
IrGenerationExtension.registerExtension(project, GeneratedDeclarationsIrBodyFiller())
|
IrGenerationExtension.registerExtension(project, GeneratedDeclarationsIrBodyFiller())
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -58,7 +58,7 @@ internal fun TestConfigurationBuilder.configureForKotlinxSerialization(libraries
|
|||||||
configuration.addJvmClasspathRoots(librariesPaths)
|
configuration.addJvmClasspathRoots(librariesPaths)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun registerCompilerExtensions(project: Project) {
|
override fun registerCompilerExtensions(project: Project, module: TestModule) {
|
||||||
SerializationComponentRegistrar.registerExtensions(project)
|
SerializationComponentRegistrar.registerExtensions(project)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -31,7 +31,7 @@ class ParcelizeEnvironmentConfigurator(
|
|||||||
configuration.addJvmClasspathRoots(listOf(runtimeLibrary, androidExtensionsRuntimeLibrary, androidApiJar))
|
configuration.addJvmClasspathRoots(listOf(runtimeLibrary, androidExtensionsRuntimeLibrary, androidApiJar))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun registerCompilerExtensions(project: Project) {
|
override fun registerCompilerExtensions(project: Project, module: TestModule) {
|
||||||
if (useFirExtension) {
|
if (useFirExtension) {
|
||||||
FirExtensionRegistrar.registerExtension(project, FirParcelizeExtensionRegistrar())
|
FirExtensionRegistrar.registerExtension(project, FirParcelizeExtensionRegistrar())
|
||||||
IrGenerationExtension.registerExtension(project, ParcelizeFirIrGeneratorExtension())
|
IrGenerationExtension.registerExtension(project, ParcelizeFirIrGeneratorExtension())
|
||||||
|
|||||||
+2
-1
@@ -11,11 +11,12 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
|
import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
|
||||||
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
|
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) {
|
override fun registerCompilerExtensions(project: Project, module: TestModule) {
|
||||||
SyntheticResolveExtension.registerExtension(project, SerializableLike())
|
SyntheticResolveExtension.registerExtension(project, SerializableLike())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user