Propagate language version settings into IR type translator

This commit is contained in:
Mikhail Zarechenskiy
2018-07-24 02:27:55 +03:00
parent 165218890f
commit dddaa74dac
14 changed files with 62 additions and 19 deletions
@@ -85,6 +85,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
val modules = createModules(groupedByModule, context.storageManager)
val moduleBindings = HashMap<TestModule?, BindingContext>()
val languageVersionSettingsByModule = HashMap<TestModule?, LanguageVersionSettings>()
for ((testModule, testFilesInModule) in groupedByModule) {
val ktFiles = getKtFiles(testFilesInModule, true)
@@ -98,6 +100,9 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
if (coroutinesPackage.contains("experimental")) LanguageVersion.KOTLIN_1_2 else LanguageVersion.KOTLIN_1_3
)
else loadLanguageVersionSettings(testFilesInModule)
languageVersionSettingsByModule[testModule] = languageVersionSettings
val moduleContext = context.withProject(project).withModule(oldModule)
val separateModules = groupedByModule.size == 1 && groupedByModule.keys.single() == null
@@ -184,7 +189,9 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
exceptionFromLazyResolveLogValidation?.let { throw it }
exceptionFromDynamicCallDescriptorsValidation?.let { throw it }
performAdditionalChecksAfterDiagnostics(testDataFile, files, groupedByModule, modules, moduleBindings)
performAdditionalChecksAfterDiagnostics(
testDataFile, files, groupedByModule, modules, moduleBindings, languageVersionSettingsByModule
)
}
protected open fun getExpectedDiagnosticsFile(testDataFile: File): File {
@@ -212,7 +219,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
testFiles: List<TestFile>,
moduleFiles: Map<TestModule?, List<TestFile>>,
moduleDescriptors: Map<TestModule?, ModuleDescriptorImpl>,
moduleBindings: Map<TestModule?, BindingContext>
moduleBindings: Map<TestModule?, BindingContext>,
languageVersionSettingsByModule: Map<TestModule?, LanguageVersionSettings>
) {
// To be overridden by diagnostic-like tests.
}
@@ -108,6 +108,8 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
}
class TestModule(val name: String) : Comparable<TestModule> {
lateinit var languageVersionSettings: LanguageVersionSettings
private val dependencies = ArrayList<TestModule>()
fun getDependencies(): MutableList<TestModule> = dependencies
@@ -20,6 +20,8 @@ import junit.framework.TestCase
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.codegen.CodegenTestCase
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
@@ -88,7 +90,12 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
protected fun generateIrModule(ignoreErrors: Boolean = false, shouldGenerate: (KtFile) -> Boolean = { true }): IrModuleFragment {
assert(myFiles != null) { "myFiles not initialized" }
assert(myEnvironment != null) { "myEnvironment not initialized" }
return generateIrModule(myFiles.psiFiles, myEnvironment, Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors)), shouldGenerate)
return generateIrModule(
myFiles.psiFiles,
myEnvironment,
Psi2IrTranslator(myEnvironment.configuration.languageVersionSettings, Psi2IrConfiguration(ignoreErrors)),
shouldGenerate
)
}
protected fun generateIrFilesAsSingleModule(testFiles: List<TestFile>, ignoreErrors: Boolean = false): Map<TestFile, IrFile> {
@@ -133,9 +140,12 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
ktFiles: List<KtFile>,
moduleDescriptor: ModuleDescriptor,
bindingContext: BindingContext,
languageVersionSettings: LanguageVersionSettings,
ignoreErrors: Boolean = false
) =
generateIrModule(ktFiles, moduleDescriptor, bindingContext, Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors)))
generateIrModule(
ktFiles, moduleDescriptor, bindingContext, Psi2IrTranslator(languageVersionSettings, Psi2IrConfiguration(ignoreErrors))
)
fun generateIrModule(
ktFiles: List<KtFile>,
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir
import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.ir.util.dump
import org.jetbrains.kotlin.resolve.BindingContext
@@ -29,14 +30,18 @@ abstract class AbstractPsi2IrDiagnosticsTest : AbstractDiagnosticsTest() {
testFiles: List<TestFile>,
moduleFiles: Map<TestModule?, List<TestFile>>,
moduleDescriptors: Map<TestModule?, ModuleDescriptorImpl>,
moduleBindings: Map<TestModule?, BindingContext>
moduleBindings: Map<TestModule?, BindingContext>,
languageVersionSettingsByModule: Map<TestModule?, LanguageVersionSettings>
) {
val actualIrDump = StringBuilder()
for (module in moduleFiles.keys) {
val ktFiles = moduleFiles[module]?.mapNotNull { it.ktFile } ?: continue
val moduleDescriptor = moduleDescriptors[module] ?: continue
val moduleBindingContext = moduleBindings[module] ?: continue
val irModule = AbstractIrGeneratorTestCase.generateIrModule(ktFiles, moduleDescriptor, moduleBindingContext, true)
val languageVersionSettings = languageVersionSettingsByModule[module] ?: continue
val irModule = AbstractIrGeneratorTestCase.generateIrModule(
ktFiles, moduleDescriptor, moduleBindingContext, languageVersionSettings, true
)
actualIrDump.append(irModule.dump())
}