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 separateModules = groupedByModule.size == 1 && groupedByModule.keys.single() == null
|
||||||
val result = analyzeModuleContents(
|
val result = analyzeModuleContents(
|
||||||
moduleContext, ktFiles, CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
|
moduleContext, ktFiles, CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
|
||||||
languageVersionSettings, separateModules
|
languageVersionSettings, separateModules, loadJvmTarget(testFilesInModule)
|
||||||
)
|
)
|
||||||
if (oldModule != result.moduleDescriptor) {
|
if (oldModule != result.moduleDescriptor) {
|
||||||
// For common modules, we use DefaultAnalyzerFacade who creates ModuleDescriptor instances by itself
|
// 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>) {
|
private fun checkDynamicCallDescriptors(expectedFile: File, testFiles: List<TestFile>) {
|
||||||
val serializer = RecursiveDescriptorComparator(RECURSIVE_ALL)
|
val serializer = RecursiveDescriptorComparator(RECURSIVE_ALL)
|
||||||
|
|
||||||
@@ -276,7 +294,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
files: List<KtFile>,
|
files: List<KtFile>,
|
||||||
moduleTrace: BindingTrace,
|
moduleTrace: BindingTrace,
|
||||||
languageVersionSettings: LanguageVersionSettings,
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
separateModules: Boolean
|
separateModules: Boolean,
|
||||||
|
jvmTarget: JvmTarget
|
||||||
): AnalysisResult {
|
): AnalysisResult {
|
||||||
@Suppress("NAME_SHADOWING")
|
@Suppress("NAME_SHADOWING")
|
||||||
var files = files
|
var files = files
|
||||||
@@ -293,7 +312,10 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
moduleContext.project,
|
moduleContext.project,
|
||||||
files,
|
files,
|
||||||
moduleTrace,
|
moduleTrace,
|
||||||
environment.configuration.copy().apply { this.languageVersionSettings = languageVersionSettings },
|
environment.configuration.copy().apply {
|
||||||
|
this.languageVersionSettings = languageVersionSettings
|
||||||
|
this.put(JVMConfigurationKeys.JVM_TARGET, jvmTarget)
|
||||||
|
},
|
||||||
environment::createPackagePartProvider
|
environment::createPackagePartProvider
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -329,7 +351,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
ExpectActualTracker.DoNothing,
|
ExpectActualTracker.DoNothing,
|
||||||
environment.createPackagePartProvider(moduleContentScope),
|
environment.createPackagePartProvider(moduleContentScope),
|
||||||
moduleClassResolver,
|
moduleClassResolver,
|
||||||
JvmTarget.JVM_1_6,
|
jvmTarget,
|
||||||
languageVersionSettings
|
languageVersionSettings
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.checkers
|
|||||||
import com.intellij.openapi.util.text.StringUtil
|
import com.intellij.openapi.util.text.StringUtil
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.context.ModuleContext
|
import org.jetbrains.kotlin.context.ModuleContext
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
@@ -59,7 +60,8 @@ abstract class AbstractDiagnosticsTestWithJsStdLib : AbstractDiagnosticsTest() {
|
|||||||
files: List<KtFile>,
|
files: List<KtFile>,
|
||||||
moduleTrace: BindingTrace,
|
moduleTrace: BindingTrace,
|
||||||
languageVersionSettings: LanguageVersionSettings,
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
separateModules: Boolean
|
separateModules: Boolean,
|
||||||
|
jvmTarget: JvmTarget
|
||||||
): JsAnalysisResult {
|
): JsAnalysisResult {
|
||||||
// TODO: support LANGUAGE directive in JS diagnostic tests
|
// TODO: support LANGUAGE directive in JS diagnostic tests
|
||||||
moduleTrace.record<ModuleDescriptor, ModuleKind>(MODULE_KIND, moduleContext.module, getModuleKind(files))
|
moduleTrace.record<ModuleDescriptor, ModuleKind>(MODULE_KIND, moduleContext.module, getModuleKind(files))
|
||||||
|
|||||||
+4
-2
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.checkers
|
package org.jetbrains.kotlin.checkers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.context.ModuleContext
|
import org.jetbrains.kotlin.context.ModuleContext
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.hasError
|
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.hasError
|
||||||
@@ -32,9 +33,10 @@ abstract class AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation : Abstra
|
|||||||
files: List<KtFile>,
|
files: List<KtFile>,
|
||||||
moduleTrace: BindingTrace,
|
moduleTrace: BindingTrace,
|
||||||
languageVersionSettings: LanguageVersionSettings,
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
separateModules: Boolean
|
separateModules: Boolean,
|
||||||
|
jvmTarget: JvmTarget
|
||||||
): JsAnalysisResult {
|
): 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
|
val diagnostics = analysisResult.bindingTrace.bindingContext.diagnostics
|
||||||
|
|
||||||
if (!hasError(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.BaseDiagnosticsTest.TestModule
|
||||||
import org.jetbrains.kotlin.checkers.CheckerTestUtil.ActualDiagnostic
|
import org.jetbrains.kotlin.checkers.CheckerTestUtil.ActualDiagnostic
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
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.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||||
@@ -46,6 +47,8 @@ import java.util.*
|
|||||||
import java.util.regex.Pattern
|
import java.util.regex.Pattern
|
||||||
import kotlin.reflect.jvm.javaField
|
import kotlin.reflect.jvm.javaField
|
||||||
|
|
||||||
|
internal const val JVM_TARGET = "JVM_TARGET"
|
||||||
|
|
||||||
abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, TestFile>() {
|
abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, TestFile>() {
|
||||||
protected lateinit var environment: KotlinCoreEnvironment
|
protected lateinit var environment: KotlinCoreEnvironment
|
||||||
|
|
||||||
@@ -125,6 +128,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
|
|||||||
private val createKtFile: Lazy<KtFile?>
|
private val createKtFile: Lazy<KtFile?>
|
||||||
private val whatDiagnosticsToConsider: Condition<Diagnostic>
|
private val whatDiagnosticsToConsider: Condition<Diagnostic>
|
||||||
val customLanguageVersionSettings: LanguageVersionSettings?
|
val customLanguageVersionSettings: LanguageVersionSettings?
|
||||||
|
val jvmTarget: JvmTarget?
|
||||||
val declareCheckType: Boolean
|
val declareCheckType: Boolean
|
||||||
val declareFlexibleType: Boolean
|
val declareFlexibleType: Boolean
|
||||||
val checkLazyLog: Boolean
|
val checkLazyLog: Boolean
|
||||||
@@ -137,6 +141,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
|
|||||||
this.declareCheckType = CHECK_TYPE_DIRECTIVE in directives
|
this.declareCheckType = CHECK_TYPE_DIRECTIVE in directives
|
||||||
this.whatDiagnosticsToConsider = parseDiagnosticFilterDirective(directives, declareCheckType)
|
this.whatDiagnosticsToConsider = parseDiagnosticFilterDirective(directives, declareCheckType)
|
||||||
this.customLanguageVersionSettings = parseLanguageVersionSettings(directives)
|
this.customLanguageVersionSettings = parseLanguageVersionSettings(directives)
|
||||||
|
this.jvmTarget = parseJvmTarget(directives)
|
||||||
this.checkLazyLog = CHECK_LAZY_LOG_DIRECTIVE in directives || CHECK_LAZY_LOG_DEFAULT
|
this.checkLazyLog = CHECK_LAZY_LOG_DIRECTIVE in directives || CHECK_LAZY_LOG_DEFAULT
|
||||||
this.declareFlexibleType = EXPLICIT_FLEXIBLE_TYPES_DIRECTIVE in directives
|
this.declareFlexibleType = EXPLICIT_FLEXIBLE_TYPES_DIRECTIVE in directives
|
||||||
this.markDynamicCalls = MARK_DYNAMIC_CALLS_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