[Test] Add ability to provide additional analysis flags in EnvironmentConfigurator
This commit is contained in:
committed by
TeamCityServer
parent
c4691de72d
commit
e287742842
+8
-1
@@ -10,6 +10,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.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
|
||||||
|
|
||||||
@@ -48,7 +49,7 @@ class LanguageVersionSettingsBuilder {
|
|||||||
analysisFlags[flag] = value
|
analysisFlags[flag] = value
|
||||||
}
|
}
|
||||||
|
|
||||||
fun configureUsingDirectives(directives: RegisteredDirectives) {
|
fun configureUsingDirectives(directives: RegisteredDirectives, environmentConfigurators: List<EnvironmentConfigurator>) {
|
||||||
val apiVersion = directives.singleOrZeroValue(LanguageSettingsDirectives.API_VERSION)
|
val apiVersion = directives.singleOrZeroValue(LanguageSettingsDirectives.API_VERSION)
|
||||||
if (apiVersion != null) {
|
if (apiVersion != null) {
|
||||||
this.apiVersion = apiVersion
|
this.apiVersion = apiVersion
|
||||||
@@ -74,6 +75,12 @@ class LanguageVersionSettingsBuilder {
|
|||||||
|
|
||||||
analysisFlags.forEach { withFlag(it.first, it.second) }
|
analysisFlags.forEach { withFlag(it.first, it.second) }
|
||||||
|
|
||||||
|
environmentConfigurators.forEach {
|
||||||
|
it.provideAdditionalAnalysisFlags(directives).entries.forEach { (flag, value) ->
|
||||||
|
withFlag(flag, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
directives[LanguageSettingsDirectives.LANGUAGE].forEach { parseLanguageFeature(it) }
|
directives[LanguageSettingsDirectives.LANGUAGE].forEach { parseLanguageFeature(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -6,8 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.test.services
|
package org.jetbrains.kotlin.test.services
|
||||||
|
|
||||||
import com.intellij.mock.MockProject
|
import com.intellij.mock.MockProject
|
||||||
|
import org.jetbrains.kotlin.config.AnalysisFlag
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.test.directives.model.ComposedRegisteredDirectives
|
|
||||||
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
|
||||||
@@ -23,4 +23,8 @@ abstract class EnvironmentConfigurator(protected val testServices: TestServices)
|
|||||||
get() = testServices.moduleStructure
|
get() = testServices.moduleStructure
|
||||||
|
|
||||||
open fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule, project: MockProject) {}
|
open fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule, project: MockProject) {}
|
||||||
|
|
||||||
|
open fun provideAdditionalAnalysisFlags(directives: RegisteredDirectives): Map<AnalysisFlag<*>, Any?> {
|
||||||
|
return emptyMap()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-10
@@ -49,11 +49,20 @@ class TestConfigurationImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val environmentConfigurators: List<EnvironmentConfigurator> =
|
||||||
|
environmentConfigurators.map { it.invoke(testServices) }.also { configurators ->
|
||||||
|
configurators.flatMapTo(allDirectives) { it.directivesContainers }
|
||||||
|
for (configurator in configurators) {
|
||||||
|
configurator.additionalServices.forEach { testServices.register(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override val moduleStructureExtractor: ModuleStructureExtractor = ModuleStructureExtractorImpl(
|
override val moduleStructureExtractor: ModuleStructureExtractor = ModuleStructureExtractorImpl(
|
||||||
testServices,
|
testServices,
|
||||||
additionalSourceProviders.map { it.invoke(testServices) }.also {
|
additionalSourceProviders.map { it.invoke(testServices) }.also {
|
||||||
it.flatMapTo(allDirectives) { provider -> provider.directives }
|
it.flatMapTo(allDirectives) { provider -> provider.directives }
|
||||||
}
|
},
|
||||||
|
this.environmentConfigurators
|
||||||
)
|
)
|
||||||
|
|
||||||
override val metaTestConfigurators: List<MetaTestConfigurator> = metaTestConfigurators.map {
|
override val metaTestConfigurators: List<MetaTestConfigurator> = metaTestConfigurators.map {
|
||||||
@@ -75,15 +84,7 @@ class TestConfigurationImpl(
|
|||||||
val sourceFileProvider = SourceFileProviderImpl(sourceFilePreprocessors)
|
val sourceFileProvider = SourceFileProviderImpl(sourceFilePreprocessors)
|
||||||
register(SourceFileProvider::class, sourceFileProvider)
|
register(SourceFileProvider::class, sourceFileProvider)
|
||||||
|
|
||||||
val configurators = environmentConfigurators.map { it.invoke(this) }
|
val environmentProvider = CompilerConfigurationProviderImpl(rootDisposable, this@TestConfigurationImpl.environmentConfigurators)
|
||||||
configurators.flatMapTo(allDirectives) { it.directivesContainers }
|
|
||||||
for (configurator in configurators) {
|
|
||||||
configurator.additionalServices.forEach { register(it) }
|
|
||||||
}
|
|
||||||
val environmentProvider = CompilerConfigurationProviderImpl(
|
|
||||||
rootDisposable,
|
|
||||||
configurators
|
|
||||||
)
|
|
||||||
register(CompilerConfigurationProvider::class, environmentProvider)
|
register(CompilerConfigurationProvider::class, environmentProvider)
|
||||||
|
|
||||||
register(AssertionsService::class, assertions)
|
register(AssertionsService::class, assertions)
|
||||||
|
|||||||
+3
-2
@@ -24,7 +24,8 @@ import java.io.File
|
|||||||
|
|
||||||
class ModuleStructureExtractorImpl(
|
class ModuleStructureExtractorImpl(
|
||||||
testServices: TestServices,
|
testServices: TestServices,
|
||||||
additionalSourceProviders: List<AdditionalSourceProvider>
|
additionalSourceProviders: List<AdditionalSourceProvider>,
|
||||||
|
private val environmentConfigurators: List<EnvironmentConfigurator>
|
||||||
) : ModuleStructureExtractor(testServices, additionalSourceProviders) {
|
) : ModuleStructureExtractor(testServices, additionalSourceProviders) {
|
||||||
companion object {
|
companion object {
|
||||||
private val allowedExtensionsForFiles = listOf(".kt", ".kts", ".java")
|
private val allowedExtensionsForFiles = listOf(".kt", ".kts", ".java")
|
||||||
@@ -210,7 +211,7 @@ class ModuleStructureExtractorImpl(
|
|||||||
private fun finishModule() {
|
private fun finishModule() {
|
||||||
finishFile()
|
finishFile()
|
||||||
val moduleDirectives = directivesBuilder.build() + testServices.defaultDirectives + globalDirectives
|
val moduleDirectives = directivesBuilder.build() + testServices.defaultDirectives + globalDirectives
|
||||||
currentModuleLanguageVersionSettingsBuilder.configureUsingDirectives(moduleDirectives)
|
currentModuleLanguageVersionSettingsBuilder.configureUsingDirectives(moduleDirectives, environmentConfigurators)
|
||||||
val moduleName = currentModuleName ?: defaultModuleName
|
val moduleName = currentModuleName ?: defaultModuleName
|
||||||
val testModule = TestModule(
|
val testModule = TestModule(
|
||||||
name = moduleName,
|
name = moduleName,
|
||||||
|
|||||||
Reference in New Issue
Block a user