Support JVM_TARGET in diagnostic tests
This commit is contained in:
+26
-4
@@ -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<TestFile>): 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<TestFile>) {
|
||||
val serializer = RecursiveDescriptorComparator(RECURSIVE_ALL)
|
||||
|
||||
@@ -276,7 +294,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
||||
files: List<KtFile>,
|
||||
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
|
||||
)
|
||||
|
||||
|
||||
+3
-1
@@ -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<KtFile>,
|
||||
moduleTrace: BindingTrace,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
separateModules: Boolean
|
||||
separateModules: Boolean,
|
||||
jvmTarget: JvmTarget
|
||||
): JsAnalysisResult {
|
||||
// TODO: support LANGUAGE directive in JS diagnostic tests
|
||||
moduleTrace.record<ModuleDescriptor, ModuleKind>(MODULE_KIND, moduleContext.module, getModuleKind(files))
|
||||
|
||||
+4
-2
@@ -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<KtFile>,
|
||||
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)) {
|
||||
|
||||
@@ -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<TestModule, TestFile>() {
|
||||
protected lateinit var environment: KotlinCoreEnvironment
|
||||
|
||||
@@ -125,6 +128,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
|
||||
private val createKtFile: Lazy<KtFile?>
|
||||
private val whatDiagnosticsToConsider: Condition<Diagnostic>
|
||||
val customLanguageVersionSettings: LanguageVersionSettings?
|
||||
val jvmTarget: JvmTarget?
|
||||
val declareCheckType: Boolean
|
||||
val declareFlexibleType: Boolean
|
||||
val checkLazyLog: Boolean
|
||||
@@ -137,6 +141,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
|
||||
this.declareCheckType = CHECK_TYPE_DIRECTIVE in directives
|
||||
this.whatDiagnosticsToConsider = parseDiagnosticFilterDirective(directives, declareCheckType)
|
||||
this.customLanguageVersionSettings = parseLanguageVersionSettings(directives)
|
||||
this.jvmTarget = parseJvmTarget(directives)
|
||||
this.checkLazyLog = CHECK_LAZY_LOG_DIRECTIVE in directives || CHECK_LAZY_LOG_DEFAULT
|
||||
this.declareFlexibleType = EXPLICIT_FLEXIBLE_TYPES_DIRECTIVE in directives
|
||||
this.markDynamicCalls = MARK_DYNAMIC_CALLS_DIRECTIVE in directives
|
||||
@@ -413,4 +418,6 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseJvmTarget(directiveMap: Map<String, String>) = directiveMap[JVM_TARGET]?.let { JvmTarget.fromString(it) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user