[Test] Save TargetBackend instead of BackendKind in TestModule

This commit is contained in:
Dmitriy Novozhilov
2020-12-24 13:37:03 +03:00
committed by TeamCityServer
parent 3c2079c926
commit d547ce7c42
18 changed files with 81 additions and 62 deletions
@@ -6,14 +6,11 @@
package org.jetbrains.kotlin.test package org.jetbrains.kotlin.test
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
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.* import org.jetbrains.kotlin.test.model.*
import org.jetbrains.kotlin.test.services.MetaTestConfigurator import org.jetbrains.kotlin.test.services.MetaTestConfigurator
import org.jetbrains.kotlin.test.services.ModuleStructureExtractor import org.jetbrains.kotlin.test.services.ModuleStructureExtractor
import org.jetbrains.kotlin.test.services.SourceFilePreprocessor
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
typealias Constructor<T> = (TestServices) -> T typealias Constructor<T> = (TestServices) -> T
@@ -55,7 +55,7 @@ class TestRunner(private val testConfiguration: TestConfiguration) {
var failedException: Throwable? = null var failedException: Throwable? = null
try { try {
for (module in modules) { for (module in modules) {
processModule(module, dependencyProvider, moduleStructure) processModule(services, module, dependencyProvider, moduleStructure)
} }
} catch (e: Throwable) { } catch (e: Throwable) {
failedException = e failedException = e
@@ -87,6 +87,7 @@ class TestRunner(private val testConfiguration: TestConfiguration) {
} }
private fun processModule( private fun processModule(
services: TestServices,
module: TestModule, module: TestModule,
dependencyProvider: DependencyProviderImpl, dependencyProvider: DependencyProviderImpl,
moduleStructure: TestModuleStructure moduleStructure: TestModuleStructure
@@ -105,7 +106,7 @@ class TestRunner(private val testConfiguration: TestConfiguration) {
} }
} }
val backendKind = module.backendKind val backendKind = services.backendKindExtractor.backendKind(module.targetBackend)
if (!backendKind.shouldRunAnalysis) return if (!backendKind.shouldRunAnalysis) return
val backendInputInfo = testConfiguration.getFacade(frontendKind, backendKind) val backendInputInfo = testConfiguration.getFacade(frontendKind, backendKind)
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.test.directives package org.jetbrains.kotlin.test.directives
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
object ModuleStructureDirectives : SimpleDirectivesContainer() { object ModuleStructureDirectives : SimpleDirectivesContainer() {
@@ -45,7 +46,7 @@ object ModuleStructureDirectives : SimpleDirectivesContainer() {
""".trimIndent() """.trimIndent()
) )
val TARGET_BACKEND_KIND by stringDirective( val TARGET_BACKEND_KIND by enumDirective<TargetBackend>(
""" """
Usage: // TARGET_BACKEND: {Backend} Usage: // TARGET_BACKEND: {Backend}
Declares backend for analyzing current module Declares backend for analyzing current module
@@ -7,14 +7,15 @@ package org.jetbrains.kotlin.test.model
import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
import java.io.File import java.io.File
data class TestModule( data class TestModule(
val name: String, val name: String,
val targetPlatform: TargetPlatform, val targetPlatform: TargetPlatform,
val targetBackend: TargetBackend?,
val frontendKind: FrontendKind<*>, val frontendKind: FrontendKind<*>,
val backendKind: BackendKind<*>,
val files: List<TestFile>, val files: List<TestFile>,
val dependencies: List<DependencyDescription>, val dependencies: List<DependencyDescription>,
val directives: RegisteredDirectives, val directives: RegisteredDirectives,
@@ -0,0 +1,15 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.test.services
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.model.BackendKind
abstract class BackendKindExtractor(protected val testServices: TestServices) : TestService {
abstract fun backendKind(targetBackend: TargetBackend?): BackendKind<*>
}
val TestServices.backendKindExtractor: BackendKindExtractor by TestServices.testServiceAccessor()
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.test.services
import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.builders.LanguageVersionSettingsBuilder import org.jetbrains.kotlin.test.builders.LanguageVersionSettingsBuilder
import org.jetbrains.kotlin.test.model.BackendKind
import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendKind import org.jetbrains.kotlin.test.model.FrontendKind
@@ -18,11 +18,11 @@ import org.jetbrains.kotlin.test.model.FrontendKind
* - default libraries * - default libraries
*/ */
class DefaultsProvider( class DefaultsProvider(
val defaultBackend: BackendKind<*>,
val defaultFrontend: FrontendKind<*>, val defaultFrontend: FrontendKind<*>,
val defaultLanguageSettings: LanguageVersionSettings, val defaultLanguageSettings: LanguageVersionSettings,
private val defaultLanguageSettingsBuilder: LanguageVersionSettingsBuilder, private val defaultLanguageSettingsBuilder: LanguageVersionSettingsBuilder,
val defaultPlatform: TargetPlatform, val defaultPlatform: TargetPlatform,
val defaultTargetBackend: TargetBackend?,
val defaultDependencyKind: DependencyKind val defaultDependencyKind: DependencyKind
) : TestService { ) : TestService {
fun newLanguageSettingsBuilder(): LanguageVersionSettingsBuilder { fun newLanguageSettingsBuilder(): LanguageVersionSettingsBuilder {
@@ -5,14 +5,10 @@
package org.jetbrains.kotlin.test.backend package org.jetbrains.kotlin.test.backend
import org.jetbrains.kotlin.platform.js.isJs
import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.model.AfterAnalysisChecker import org.jetbrains.kotlin.test.model.AfterAnalysisChecker
import org.jetbrains.kotlin.test.model.BackendKinds
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.moduleStructure import org.jetbrains.kotlin.test.services.moduleStructure
import org.jetbrains.kotlin.test.util.joinToArrayString import org.jetbrains.kotlin.test.util.joinToArrayString
@@ -25,7 +21,7 @@ class BlackBoxCodegenSuppressor(testServices: TestServices) : AfterAnalysisCheck
val moduleStructure = testServices.moduleStructure val moduleStructure = testServices.moduleStructure
val ignoredBackends = moduleStructure.modules.flatMap { it.directives[CodegenTestDirectives.IGNORE_BACKEND] } val ignoredBackends = moduleStructure.modules.flatMap { it.directives[CodegenTestDirectives.IGNORE_BACKEND] }
if (ignoredBackends.isEmpty()) return failedAssertions if (ignoredBackends.isEmpty()) return failedAssertions
val targetBackends = moduleStructure.modules.flatMap { it.targetBackends } val targetBackends = moduleStructure.modules.map { it.targetBackend }
val matchedBackend = ignoredBackends.intersect(targetBackends) val matchedBackend = ignoredBackends.intersect(targetBackends)
if (ignoredBackends.contains(TargetBackend.ANY)) { if (ignoredBackends.contains(TargetBackend.ANY)) {
return processAssertions(failedAssertions) return processAssertions(failedAssertions)
@@ -50,19 +46,4 @@ class BlackBoxCodegenSuppressor(testServices: TestServices) : AfterAnalysisCheck
listOf(AssertionError(message)) listOf(AssertionError(message))
} }
} }
private val TestModule.targetBackends: List<TargetBackend>
get() = when (backendKind) {
BackendKinds.ClassicBackend -> when {
targetPlatform.isJvm() -> listOf(TargetBackend.JVM, TargetBackend.JVM_OLD)
targetPlatform.isJs() -> listOf(TargetBackend.JS)
else -> emptyList()
}
BackendKinds.IrBackend -> when {
targetPlatform.isJvm() -> listOf(TargetBackend.JVM_IR)
targetPlatform.isJs() -> listOf(TargetBackend.JS_IR)
else -> emptyList()
}
else -> emptyList()
}
} }
@@ -11,16 +11,16 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.fir.PrivateForInline import org.jetbrains.kotlin.fir.PrivateForInline
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.services.DefaultsDsl import org.jetbrains.kotlin.test.services.DefaultsDsl
import org.jetbrains.kotlin.test.services.DefaultsProvider import org.jetbrains.kotlin.test.services.DefaultsProvider
import org.jetbrains.kotlin.test.model.BackendKind
import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendKind import org.jetbrains.kotlin.test.model.FrontendKind
@DefaultsDsl @DefaultsDsl
class DefaultsProviderBuilder { class DefaultsProviderBuilder {
lateinit var backend: BackendKind<*>
lateinit var frontend: FrontendKind<*> lateinit var frontend: FrontendKind<*>
var targetBackend: TargetBackend? = null
lateinit var targetPlatform: TargetPlatform lateinit var targetPlatform: TargetPlatform
lateinit var dependencyKind: DependencyKind lateinit var dependencyKind: DependencyKind
@@ -40,11 +40,11 @@ class DefaultsProviderBuilder {
@OptIn(PrivateForInline::class) @OptIn(PrivateForInline::class)
fun build(): DefaultsProvider { fun build(): DefaultsProvider {
return DefaultsProvider( return DefaultsProvider(
backend,
frontend, frontend,
languageVersionSettings ?: LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE), languageVersionSettings ?: LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE),
languageVersionSettingsBuilder ?: LanguageVersionSettingsBuilder(), languageVersionSettingsBuilder ?: LanguageVersionSettingsBuilder(),
targetPlatform, targetPlatform,
targetBackend,
dependencyKind dependencyKind
) )
} }
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHan
import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler
import org.jetbrains.kotlin.test.frontend.classic.handlers.FirTestDataConsistencyHandler import org.jetbrains.kotlin.test.frontend.classic.handlers.FirTestDataConsistencyHandler
import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor
import org.jetbrains.kotlin.test.model.BackendKind
import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendKinds import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider
@@ -33,7 +32,6 @@ abstract class AbstractDiagnosticTest : AbstractKotlinCompilerTest() {
override fun TestConfigurationBuilder.configuration() { override fun TestConfigurationBuilder.configuration() {
globalDefaults { globalDefaults {
frontend = FrontendKinds.ClassicFrontend frontend = FrontendKinds.ClassicFrontend
backend = BackendKind.NoBackend
targetPlatform = JvmPlatforms.defaultJvmPlatform targetPlatform = JvmPlatforms.defaultJvmPlatform
dependencyKind = DependencyKind.Source dependencyKind = DependencyKind.Source
} }
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler
import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler
import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor
import org.jetbrains.kotlin.test.model.BackendKind
import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendKinds import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider
@@ -22,7 +21,6 @@ abstract class AbstractDiagnosticsNativeTest : AbstractKotlinCompilerTest() {
override fun TestConfigurationBuilder.configuration() { override fun TestConfigurationBuilder.configuration() {
globalDefaults { globalDefaults {
frontend = FrontendKinds.ClassicFrontend frontend = FrontendKinds.ClassicFrontend
backend = BackendKind.NoBackend
targetPlatform = NativePlatforms.unspecifiedNativePlatform targetPlatform = NativePlatforms.unspecifiedNativePlatform
dependencyKind = DependencyKind.Source dependencyKind = DependencyKind.Source
} }
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHan
import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler
import org.jetbrains.kotlin.test.frontend.classic.handlers.DynamicCallsDumpHandler import org.jetbrains.kotlin.test.frontend.classic.handlers.DynamicCallsDumpHandler
import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor
import org.jetbrains.kotlin.test.model.BackendKind
import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendKinds import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider
@@ -24,7 +23,6 @@ abstract class AbstractDiagnosticsTestWithJsStdLib : AbstractKotlinCompilerTest(
override fun TestConfigurationBuilder.configuration() { override fun TestConfigurationBuilder.configuration() {
globalDefaults { globalDefaults {
frontend = FrontendKinds.ClassicFrontend frontend = FrontendKinds.ClassicFrontend
backend = BackendKind.NoBackend
targetPlatform = JsPlatforms.defaultJsPlatform targetPlatform = JsPlatforms.defaultJsPlatform
dependencyKind = DependencyKind.Source dependencyKind = DependencyKind.Source
} }
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.test.runners package org.jetbrains.kotlin.test.runners
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.backend.classic.ClassicJvmBackendFacade import org.jetbrains.kotlin.test.backend.classic.ClassicJvmBackendFacade
import org.jetbrains.kotlin.test.backend.handlers.JvmBackendDiagnosticsHandler import org.jetbrains.kotlin.test.backend.handlers.JvmBackendDiagnosticsHandler
import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade
@@ -17,8 +18,6 @@ import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler
import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler
import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor
import org.jetbrains.kotlin.test.model.BackendKind
import org.jetbrains.kotlin.test.model.BackendKinds
import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendKinds import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider
@@ -26,12 +25,12 @@ import org.jetbrains.kotlin.test.services.CoroutineHelpersSourceFilesProvider
import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator
abstract class AbstractDiagnosticsTestWithJvmBackend : AbstractKotlinCompilerTest() { abstract class AbstractDiagnosticsTestWithJvmBackend : AbstractKotlinCompilerTest() {
abstract val targetBackendKind: BackendKind<*> abstract val targetBackend: TargetBackend
override fun TestConfigurationBuilder.configuration() { override fun TestConfigurationBuilder.configuration() {
globalDefaults { globalDefaults {
frontend = FrontendKinds.ClassicFrontend frontend = FrontendKinds.ClassicFrontend
backend = targetBackendKind targetBackend = this@AbstractDiagnosticsTestWithJvmBackend.targetBackend
targetPlatform = JvmPlatforms.defaultJvmPlatform targetPlatform = JvmPlatforms.defaultJvmPlatform
dependencyKind = DependencyKind.Binary dependencyKind = DependencyKind.Binary
} }
@@ -74,11 +73,11 @@ abstract class AbstractDiagnosticsTestWithJvmBackend : AbstractKotlinCompilerTes
} }
abstract class AbstractDiagnosticsTestWithOldJvmBackend : AbstractDiagnosticsTestWithJvmBackend() { abstract class AbstractDiagnosticsTestWithOldJvmBackend : AbstractDiagnosticsTestWithJvmBackend() {
override val targetBackendKind: BackendKind<*> override val targetBackend: TargetBackend
get() = BackendKinds.ClassicBackend get() = TargetBackend.JVM_OLD
} }
abstract class AbstractDiagnosticsTestWithJvmIrBackend : AbstractDiagnosticsTestWithJvmBackend() { abstract class AbstractDiagnosticsTestWithJvmIrBackend : AbstractDiagnosticsTestWithJvmBackend() {
override val targetBackendKind: BackendKind<*> override val targetBackend: TargetBackend
get() = BackendKinds.IrBackend get() = TargetBackend.JVM_IR
} }
@@ -12,12 +12,12 @@ import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.COMPARE_WIT
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.FIR_DUMP import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.FIR_DUMP
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.USE_LIGHT_TREE import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.USE_LIGHT_TREE
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.WITH_EXTENDED_CHECKERS import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.WITH_EXTENDED_CHECKERS
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.JDK_KIND
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.WITH_REFLECT
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.WITH_STDLIB import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.WITH_STDLIB
import org.jetbrains.kotlin.test.frontend.fir.FirFailingTestSuppressor import org.jetbrains.kotlin.test.frontend.fir.FirFailingTestSuppressor
import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade
import org.jetbrains.kotlin.test.frontend.fir.handlers.* import org.jetbrains.kotlin.test.frontend.fir.handlers.*
import org.jetbrains.kotlin.test.model.BackendKind
import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendKinds import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider
@@ -29,7 +29,6 @@ abstract class AbstractFirDiagnosticTest : AbstractKotlinCompilerTest() {
override fun TestConfigurationBuilder.configuration() { override fun TestConfigurationBuilder.configuration() {
globalDefaults { globalDefaults {
frontend = FrontendKinds.FIR frontend = FrontendKinds.FIR
backend = BackendKind.NoBackend
targetPlatform = JvmPlatforms.defaultJvmPlatform targetPlatform = JvmPlatforms.defaultJvmPlatform
dependencyKind = DependencyKind.Source dependencyKind = DependencyKind.Source
} }
@@ -84,9 +83,9 @@ abstract class AbstractFirDiagnosticTest : AbstractKotlinCompilerTest() {
forTestsMatching("compiler/testData/diagnostics/tests/testsWithJava15/*") { forTestsMatching("compiler/testData/diagnostics/tests/testsWithJava15/*") {
defaultDirectives { defaultDirectives {
JvmEnvironmentConfigurationDirectives.JDK_KIND with TestJdkKind.FULL_JDK_15 JDK_KIND with TestJdkKind.FULL_JDK_15
+WITH_STDLIB +WITH_STDLIB
+JvmEnvironmentConfigurationDirectives.WITH_REFLECT +WITH_REFLECT
} }
} }
} }
@@ -34,7 +34,6 @@ abstract class AbstractForeignAnnotationsTestBase : AbstractKotlinCompilerTest()
override fun TestConfigurationBuilder.configuration() { override fun TestConfigurationBuilder.configuration() {
globalDefaults { globalDefaults {
frontend = FrontendKinds.ClassicFrontend frontend = FrontendKinds.ClassicFrontend
backend = BackendKind.NoBackend
targetPlatform = JvmPlatforms.defaultJvmPlatform targetPlatform = JvmPlatforms.defaultJvmPlatform
dependencyKind = DependencyKind.Source dependencyKind = DependencyKind.Source
} }
@@ -14,9 +14,11 @@ import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
import org.jetbrains.kotlin.test.preprocessors.MetaInfosCleanupPreprocessor import org.jetbrains.kotlin.test.preprocessors.MetaInfosCleanupPreprocessor
import org.jetbrains.kotlin.test.services.* import org.jetbrains.kotlin.test.services.*
import org.jetbrains.kotlin.test.services.impl.TemporaryDirectoryManagerImpl import org.jetbrains.kotlin.test.services.impl.TemporaryDirectoryManagerImpl
import org.jetbrains.kotlin.test.services.BackendKindExtractor
import org.jetbrains.kotlin.test.services.JUnit5Assertions import org.jetbrains.kotlin.test.services.JUnit5Assertions
import org.jetbrains.kotlin.test.services.SourceFilePreprocessor import org.jetbrains.kotlin.test.services.SourceFilePreprocessor
import org.jetbrains.kotlin.test.services.KotlinTestInfo import org.jetbrains.kotlin.test.services.KotlinTestInfo
import org.jetbrains.kotlin.test.services.impl.BackendKindExtractorImpl
import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.AbstractTypeChecker
import org.jetbrains.kotlin.types.FlexibleTypeImpl import org.jetbrains.kotlin.types.FlexibleTypeImpl
import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.BeforeEach
@@ -37,6 +39,7 @@ abstract class AbstractKotlinCompilerTest {
private val configuration: TestConfigurationBuilder.() -> Unit = { private val configuration: TestConfigurationBuilder.() -> Unit = {
assertions = JUnit5Assertions assertions = JUnit5Assertions
useAdditionalService<TemporaryDirectoryManager>(::TemporaryDirectoryManagerImpl) useAdditionalService<TemporaryDirectoryManager>(::TemporaryDirectoryManagerImpl)
useAdditionalService<BackendKindExtractor>(::BackendKindExtractorImpl)
useSourcePreprocessor(*defaultPreprocessors.toTypedArray()) useSourcePreprocessor(*defaultPreprocessors.toTypedArray())
useDirectives(*defaultDirectiveContainers.toTypedArray()) useDirectives(*defaultDirectiveContainers.toTypedArray())
configureDebugFlags() configureDebugFlags()
@@ -104,7 +104,7 @@ class JvmEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfig
configuration.put(JVMConfigurationKeys.ENABLE_JVM_PREVIEW, true) configuration.put(JVMConfigurationKeys.ENABLE_JVM_PREVIEW, true)
} }
val isIr = module.backendKind == BackendKinds.IrBackend val isIr = module.targetBackend?.isIR == true
configuration.put(JVMConfigurationKeys.IR, isIr) configuration.put(JVMConfigurationKeys.IR, isIr)
if (JvmEnvironmentConfigurationDirectives.SKIP_JAVA_SOURCES !in module.directives) { if (JvmEnvironmentConfigurationDirectives.SKIP_JAVA_SOURCES !in module.directives) {
@@ -0,0 +1,33 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.test.services.impl
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.model.BackendKind
import org.jetbrains.kotlin.test.model.BackendKinds
import org.jetbrains.kotlin.test.services.BackendKindExtractor
import org.jetbrains.kotlin.test.services.TestServices
class BackendKindExtractorImpl(testServices: TestServices) : BackendKindExtractor(testServices) {
override fun backendKind(targetBackend: TargetBackend?): BackendKind<*> {
return when (targetBackend) {
TargetBackend.ANY,
TargetBackend.JVM,
TargetBackend.JVM_OLD,
TargetBackend.ANDROID,
TargetBackend.JVM_MULTI_MODULE_OLD_AGAINST_IR -> BackendKinds.ClassicBackend
TargetBackend.JVM_IR,
TargetBackend.JVM_MULTI_MODULE_IR_AGAINST_OLD,
TargetBackend.JS,
TargetBackend.JS_IR,
TargetBackend.JS_IR_ES6,
TargetBackend.WASM -> BackendKinds.IrBackend
null -> BackendKind.NoBackend
}
}
}
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.platform.konan.NativePlatforms import org.jetbrains.kotlin.platform.konan.NativePlatforms
import org.jetbrains.kotlin.test.Assertions import org.jetbrains.kotlin.test.Assertions
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.builders.LanguageVersionSettingsBuilder import org.jetbrains.kotlin.test.builders.LanguageVersionSettingsBuilder
import org.jetbrains.kotlin.test.directives.ModuleStructureDirectives import org.jetbrains.kotlin.test.directives.ModuleStructureDirectives
import org.jetbrains.kotlin.test.directives.model.ComposedRegisteredDirectives import org.jetbrains.kotlin.test.directives.model.ComposedRegisteredDirectives
@@ -62,7 +63,7 @@ class ModuleStructureExtractorImpl(
private var currentModuleName: String? = null private var currentModuleName: String? = null
private var currentModuleTargetPlatform: TargetPlatform? = null private var currentModuleTargetPlatform: TargetPlatform? = null
private var currentModuleFrontendKind: FrontendKind<*>? = null private var currentModuleFrontendKind: FrontendKind<*>? = null
private var currentModuleBackendKind: BackendKind<*>? = null private var currentModuleTargetBackend: TargetBackend? = null
private var currentModuleLanguageVersionSettingsBuilder: LanguageVersionSettingsBuilder = initLanguageSettingsBuilder() private var currentModuleLanguageVersionSettingsBuilder: LanguageVersionSettingsBuilder = initLanguageSettingsBuilder()
private var dependenciesOfCurrentModule = mutableListOf<DependencyDescription>() private var dependenciesOfCurrentModule = mutableListOf<DependencyDescription>()
private var filesOfCurrentModule = mutableListOf<TestFile>() private var filesOfCurrentModule = mutableListOf<TestFile>()
@@ -172,12 +173,7 @@ class ModuleStructureExtractorImpl(
} }
} }
ModuleStructureDirectives.TARGET_BACKEND_KIND -> { ModuleStructureDirectives.TARGET_BACKEND_KIND -> {
val name = values.singleOrNull() as? String ?: assertions.fail { currentModuleTargetBackend = values.single() as TargetBackend
"Target backend specified incorrectly\nUsage: ${directive.description}"
}
currentModuleBackendKind = BackendKinds.fromString(name) ?: assertions.fail {
"Unknown backend: $name"
}
} }
ModuleStructureDirectives.FILE -> { ModuleStructureDirectives.FILE -> {
if (currentFileName != null) { if (currentFileName != null) {
@@ -216,8 +212,8 @@ class ModuleStructureExtractorImpl(
val testModule = TestModule( val testModule = TestModule(
name = moduleName, name = moduleName,
targetPlatform = currentModuleTargetPlatform ?: parseModulePlatformByName(moduleName) ?: defaultsProvider.defaultPlatform, targetPlatform = currentModuleTargetPlatform ?: parseModulePlatformByName(moduleName) ?: defaultsProvider.defaultPlatform,
targetBackend = currentModuleTargetBackend ?: defaultsProvider.defaultTargetBackend,
frontendKind = currentModuleFrontendKind ?: defaultsProvider.defaultFrontend, frontendKind = currentModuleFrontendKind ?: defaultsProvider.defaultFrontend,
backendKind = currentModuleBackendKind ?: defaultsProvider.defaultBackend,
files = filesOfCurrentModule, files = filesOfCurrentModule,
dependencies = dependenciesOfCurrentModule, dependencies = dependenciesOfCurrentModule,
directives = moduleDirectives, directives = moduleDirectives,
@@ -272,8 +268,8 @@ class ModuleStructureExtractorImpl(
firstFileInModule = true firstFileInModule = true
currentModuleName = null currentModuleName = null
currentModuleTargetPlatform = null currentModuleTargetPlatform = null
currentModuleTargetBackend = null
currentModuleFrontendKind = null currentModuleFrontendKind = null
currentModuleBackendKind = null
currentModuleLanguageVersionSettingsBuilder = initLanguageSettingsBuilder() currentModuleLanguageVersionSettingsBuilder = initLanguageSettingsBuilder()
filesOfCurrentModule = mutableListOf() filesOfCurrentModule = mutableListOf()
dependenciesOfCurrentModule = mutableListOf() dependenciesOfCurrentModule = mutableListOf()