diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt index a1abd983aeb..83f3d3b03aa 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt @@ -105,7 +105,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { val separateModules = groupedByModule.size == 1 && groupedByModule.keys.single() == null val result = analyzeModuleContents( moduleContext, ktFiles, CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(), - languageVersionSettings, separateModules + languageVersionSettings, separateModules, loadJvmTarget(testFilesInModule) ) if (oldModule != result.moduleDescriptor) { // For common modules, we use DefaultAnalyzerFacade who creates ModuleDescriptor instances by itself @@ -239,6 +239,24 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { ) } + protected open fun loadJvmTarget(module: List): JvmTarget { + var result: JvmTarget? = null + for (file in module) { + val current = file.jvmTarget + if (current != null) { + if (result != null && result != current) { + Assert.fail( + "More than one file in the module has $JVM_TARGET directive specified. " + + "This is not supported. Please move all directives into one file" + ) + } + result = current + } + } + + return result ?: JvmTarget.JVM_1_6 + } + private fun checkDynamicCallDescriptors(expectedFile: File, testFiles: List) { val serializer = RecursiveDescriptorComparator(RECURSIVE_ALL) @@ -276,7 +294,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { files: List, moduleTrace: BindingTrace, languageVersionSettings: LanguageVersionSettings, - separateModules: Boolean + separateModules: Boolean, + jvmTarget: JvmTarget ): AnalysisResult { @Suppress("NAME_SHADOWING") var files = files @@ -293,7 +312,10 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { moduleContext.project, files, moduleTrace, - environment.configuration.copy().apply { this.languageVersionSettings = languageVersionSettings }, + environment.configuration.copy().apply { + this.languageVersionSettings = languageVersionSettings + this.put(JVMConfigurationKeys.JVM_TARGET, jvmTarget) + }, environment::createPackagePartProvider ) } @@ -329,7 +351,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { ExpectActualTracker.DoNothing, environment.createPackagePartProvider(moduleContentScope), moduleClassResolver, - JvmTarget.JVM_1_6, + jvmTarget, languageVersionSettings ) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.kt index d059d040c28..7ed3aa50f69 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.checkers import com.intellij.openapi.util.text.StringUtil import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.config.CommonConfigurationKeys +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.descriptors.ModuleDescriptor @@ -59,7 +60,8 @@ abstract class AbstractDiagnosticsTestWithJsStdLib : AbstractDiagnosticsTest() { files: List, moduleTrace: BindingTrace, languageVersionSettings: LanguageVersionSettings, - separateModules: Boolean + separateModules: Boolean, + jvmTarget: JvmTarget ): JsAnalysisResult { // TODO: support LANGUAGE directive in JS diagnostic tests moduleTrace.record(MODULE_KIND, moduleContext.module, getModuleKind(files)) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation.kt index c09ee9490e2..94f6bb253e0 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.checkers +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.hasError @@ -32,9 +33,10 @@ abstract class AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation : Abstra files: List, moduleTrace: BindingTrace, languageVersionSettings: LanguageVersionSettings, - separateModules: Boolean + separateModules: Boolean, + jvmTarget: JvmTarget ): JsAnalysisResult { - val analysisResult = super.analyzeModuleContents(moduleContext, files, moduleTrace, languageVersionSettings, separateModules) + val analysisResult = super.analyzeModuleContents(moduleContext, files, moduleTrace, languageVersionSettings, separateModules, jvmTarget) val diagnostics = analysisResult.bindingTrace.bindingContext.diagnostics if (!hasError(diagnostics)) { diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt index 8db4d27c073..88f07fdf07e 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest.TestFile import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest.TestModule import org.jetbrains.kotlin.checkers.CheckerTestUtil.ActualDiagnostic import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl @@ -46,6 +47,8 @@ import java.util.* import java.util.regex.Pattern import kotlin.reflect.jvm.javaField +internal const val JVM_TARGET = "JVM_TARGET" + abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava() { protected lateinit var environment: KotlinCoreEnvironment @@ -125,6 +128,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava private val whatDiagnosticsToConsider: Condition val customLanguageVersionSettings: LanguageVersionSettings? + val jvmTarget: JvmTarget? val declareCheckType: Boolean val declareFlexibleType: Boolean val checkLazyLog: Boolean @@ -137,6 +141,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava) = directiveMap[JVM_TARGET]?.let { JvmTarget.fromString(it) } }