Propagate language version settings into IR type translator
This commit is contained in:
@@ -28,7 +28,9 @@ class JsIntrinsics(
|
|||||||
val context: JsIrBackendContext
|
val context: JsIrBackendContext
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val stubBuilder = DeclarationStubGenerator(module, context.symbolTable, JsLoweredDeclarationOrigin.JS_INTRINSICS_STUB)
|
private val stubBuilder = DeclarationStubGenerator(
|
||||||
|
module, context.symbolTable, JsLoweredDeclarationOrigin.JS_INTRINSICS_STUB, irBuiltIns.languageVersionSettings
|
||||||
|
)
|
||||||
|
|
||||||
// Equality operations:
|
// Equality operations:
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project
|
|||||||
import org.jetbrains.kotlin.backend.common.lower.*
|
import org.jetbrains.kotlin.backend.common.lower.*
|
||||||
import org.jetbrains.kotlin.backend.common.runOnFilePostfix
|
import org.jetbrains.kotlin.backend.common.runOnFilePostfix
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.*
|
import org.jetbrains.kotlin.ir.backend.js.lower.*
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.inline.*
|
import org.jetbrains.kotlin.ir.backend.js.lower.inline.*
|
||||||
@@ -44,7 +45,7 @@ fun compile(
|
|||||||
|
|
||||||
TopDownAnalyzerFacadeForJS.checkForErrors(files, analysisResult.bindingContext)
|
TopDownAnalyzerFacadeForJS.checkForErrors(files, analysisResult.bindingContext)
|
||||||
|
|
||||||
val psi2IrTranslator = Psi2IrTranslator()
|
val psi2IrTranslator = Psi2IrTranslator(configuration.languageVersionSettings)
|
||||||
val psi2IrContext = psi2IrTranslator.createGeneratorContext(analysisResult.moduleDescriptor, analysisResult.bindingContext)
|
val psi2IrContext = psi2IrTranslator.createGeneratorContext(analysisResult.moduleDescriptor, analysisResult.bindingContext)
|
||||||
|
|
||||||
val moduleFragment = psi2IrTranslator.generateModuleFragment(psi2IrContext, files).removeDuplicates()
|
val moduleFragment = psi2IrTranslator.generateModuleFragment(psi2IrContext, files).removeDuplicates()
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
|
|||||||
object JvmBackendFacade {
|
object JvmBackendFacade {
|
||||||
|
|
||||||
fun doGenerateFiles(files: Collection<KtFile>, state: GenerationState, errorHandler: CompilationErrorHandler) {
|
fun doGenerateFiles(files: Collection<KtFile>, state: GenerationState, errorHandler: CompilationErrorHandler) {
|
||||||
val psi2ir = Psi2IrTranslator()
|
val psi2ir = Psi2IrTranslator(state.languageVersionSettings)
|
||||||
val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext)
|
val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext)
|
||||||
val irModuleFragment = psi2ir.generateModuleFragment(psi2irContext, files)
|
val irModuleFragment = psi2ir.generateModuleFragment(psi2irContext, files)
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ object JvmIrCodegenFactory : CodegenFactory {
|
|||||||
override fun generateModule(state: GenerationState, files: Collection<KtFile?>, errorHandler: CompilationErrorHandler) {
|
override fun generateModule(state: GenerationState, files: Collection<KtFile?>, errorHandler: CompilationErrorHandler) {
|
||||||
assert(!files.any { it == null })
|
assert(!files.any { it == null })
|
||||||
|
|
||||||
val psi2ir = Psi2IrTranslator()
|
val psi2ir = Psi2IrTranslator(state.languageVersionSettings)
|
||||||
val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext)
|
val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext)
|
||||||
val irModuleFragment = psi2ir.generateModuleFragment(psi2irContext, files as Collection<KtFile>)
|
val irModuleFragment = psi2ir.generateModuleFragment(psi2irContext, files as Collection<KtFile>)
|
||||||
JvmBackendFacade.doGenerateFilesInternal(state, errorHandler, irModuleFragment, psi2irContext)
|
JvmBackendFacade.doGenerateFilesInternal(state, errorHandler, irModuleFragment, psi2irContext)
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.psi2ir
|
package org.jetbrains.kotlin.psi2ir
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||||
@@ -29,7 +30,10 @@ import org.jetbrains.kotlin.psi2ir.transformations.insertImplicitCasts
|
|||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.utils.SmartList
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
|
|
||||||
class Psi2IrTranslator(val configuration: Psi2IrConfiguration = Psi2IrConfiguration()) {
|
class Psi2IrTranslator(
|
||||||
|
val languageVersionSettings: LanguageVersionSettings,
|
||||||
|
val configuration: Psi2IrConfiguration = Psi2IrConfiguration()
|
||||||
|
) {
|
||||||
interface PostprocessingStep {
|
interface PostprocessingStep {
|
||||||
fun postprocess(context: GeneratorContext, irElement: IrElement)
|
fun postprocess(context: GeneratorContext, irElement: IrElement)
|
||||||
}
|
}
|
||||||
@@ -46,7 +50,7 @@ class Psi2IrTranslator(val configuration: Psi2IrConfiguration = Psi2IrConfigurat
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun createGeneratorContext(moduleDescriptor: ModuleDescriptor, bindingContext: BindingContext) =
|
fun createGeneratorContext(moduleDescriptor: ModuleDescriptor, bindingContext: BindingContext) =
|
||||||
GeneratorContext(configuration, moduleDescriptor, bindingContext)
|
GeneratorContext(configuration, moduleDescriptor, bindingContext, languageVersionSettings)
|
||||||
|
|
||||||
fun generateModuleFragment(context: GeneratorContext, ktFiles: Collection<KtFile>): IrModuleFragment {
|
fun generateModuleFragment(context: GeneratorContext, ktFiles: Collection<KtFile>): IrModuleFragment {
|
||||||
val moduleGenerator = ModuleGenerator(context)
|
val moduleGenerator = ModuleGenerator(context)
|
||||||
|
|||||||
+3
-1
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.psi2ir.generators
|
package org.jetbrains.kotlin.psi2ir.generators
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.ReflectionTypes
|
import org.jetbrains.kotlin.builtins.ReflectionTypes
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.NotFoundClasses
|
import org.jetbrains.kotlin.descriptors.NotFoundClasses
|
||||||
import org.jetbrains.kotlin.ir.builders.IrGeneratorContext
|
import org.jetbrains.kotlin.ir.builders.IrGeneratorContext
|
||||||
@@ -33,11 +34,12 @@ class GeneratorContext(
|
|||||||
val configuration: Psi2IrConfiguration,
|
val configuration: Psi2IrConfiguration,
|
||||||
val moduleDescriptor: ModuleDescriptor,
|
val moduleDescriptor: ModuleDescriptor,
|
||||||
val bindingContext: BindingContext,
|
val bindingContext: BindingContext,
|
||||||
|
val languageVersionSettings: LanguageVersionSettings,
|
||||||
val symbolTable: SymbolTable = SymbolTable()
|
val symbolTable: SymbolTable = SymbolTable()
|
||||||
) : IrGeneratorContext() {
|
) : IrGeneratorContext() {
|
||||||
|
|
||||||
val constantValueGenerator: ConstantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
|
val constantValueGenerator: ConstantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
|
||||||
val typeTranslator: TypeTranslator = TypeTranslator(symbolTable)
|
val typeTranslator: TypeTranslator = TypeTranslator(symbolTable, languageVersionSettings)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
typeTranslator.constantValueGenerator = constantValueGenerator
|
typeTranslator.constantValueGenerator = constantValueGenerator
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ class IrBuiltIns(
|
|||||||
private val typeTranslator: TypeTranslator,
|
private val typeTranslator: TypeTranslator,
|
||||||
outerSymbolTable: SymbolTable? = null
|
outerSymbolTable: SymbolTable? = null
|
||||||
) {
|
) {
|
||||||
|
val languageVersionSettings = typeTranslator.languageVersionSettings
|
||||||
|
|
||||||
private val builtInsModule = builtIns.builtInsModule
|
private val builtInsModule = builtIns.builtInsModule
|
||||||
|
|
||||||
@@ -39,7 +40,8 @@ class IrBuiltIns(
|
|||||||
val irBuiltInsExternalPackageFragment = IrExternalPackageFragmentImpl(IrExternalPackageFragmentSymbolImpl(packageFragment))
|
val irBuiltInsExternalPackageFragment = IrExternalPackageFragmentImpl(IrExternalPackageFragmentSymbolImpl(packageFragment))
|
||||||
|
|
||||||
private val symbolTable = outerSymbolTable ?: SymbolTable()
|
private val symbolTable = outerSymbolTable ?: SymbolTable()
|
||||||
private val stubBuilder = DeclarationStubGenerator(builtInsModule, symbolTable, IrDeclarationOrigin.IR_BUILTINS_STUB)
|
private val stubBuilder =
|
||||||
|
DeclarationStubGenerator(builtInsModule, symbolTable, IrDeclarationOrigin.IR_BUILTINS_STUB, languageVersionSettings)
|
||||||
|
|
||||||
private fun ClassDescriptor.toIrSymbol() = symbolTable.referenceClass(this)
|
private fun ClassDescriptor.toIrSymbol() = symbolTable.referenceClass(this)
|
||||||
private fun KotlinType.toIrType() = typeTranslator.translateType(this)
|
private fun KotlinType.toIrType() = typeTranslator.translateType(this)
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.util
|
package org.jetbrains.kotlin.ir.util
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
@@ -34,9 +35,10 @@ import org.jetbrains.kotlin.types.KotlinType
|
|||||||
class DeclarationStubGenerator(
|
class DeclarationStubGenerator(
|
||||||
moduleDescriptor: ModuleDescriptor,
|
moduleDescriptor: ModuleDescriptor,
|
||||||
val symbolTable: SymbolTable,
|
val symbolTable: SymbolTable,
|
||||||
val origin: IrDeclarationOrigin
|
val origin: IrDeclarationOrigin,
|
||||||
|
val languageVersionSettings: LanguageVersionSettings
|
||||||
) {
|
) {
|
||||||
private val typeTranslator = TypeTranslator(symbolTable)
|
private val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings)
|
||||||
private val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
|
private val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
|||||||
+3
-1
@@ -29,7 +29,9 @@ class ExternalDependenciesGenerator(
|
|||||||
val symbolTable: SymbolTable,
|
val symbolTable: SymbolTable,
|
||||||
val irBuiltIns: IrBuiltIns
|
val irBuiltIns: IrBuiltIns
|
||||||
) {
|
) {
|
||||||
private val stubGenerator = DeclarationStubGenerator(moduleDescriptor, symbolTable, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB)
|
private val stubGenerator = DeclarationStubGenerator(
|
||||||
|
moduleDescriptor, symbolTable, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, irBuiltIns.languageVersionSettings
|
||||||
|
)
|
||||||
|
|
||||||
fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment) {
|
fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment) {
|
||||||
DependencyGenerationTask(irModule).run()
|
DependencyGenerationTask(irModule).run()
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.util
|
package org.jetbrains.kotlin.ir.util
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
@@ -20,7 +22,8 @@ import org.jetbrains.kotlin.types.*
|
|||||||
import org.jetbrains.kotlin.types.typesApproximation.approximateCapturedTypes
|
import org.jetbrains.kotlin.types.typesApproximation.approximateCapturedTypes
|
||||||
|
|
||||||
class TypeTranslator(
|
class TypeTranslator(
|
||||||
private val symbolTable: SymbolTable
|
private val symbolTable: SymbolTable,
|
||||||
|
val languageVersionSettings: LanguageVersionSettings
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val typeParametersResolver = ScopedTypeParametersResolver()
|
private val typeParametersResolver = ScopedTypeParametersResolver()
|
||||||
@@ -50,7 +53,7 @@ class TypeTranslator(
|
|||||||
|
|
||||||
private fun translateType(ktType0: KotlinType, variance: Variance): IrTypeProjection {
|
private fun translateType(ktType0: KotlinType, variance: Variance): IrTypeProjection {
|
||||||
// TODO "old" JVM BE does this for reified type arguments. Is it ok for arbitrary subexpressions?
|
// TODO "old" JVM BE does this for reified type arguments. Is it ok for arbitrary subexpressions?
|
||||||
|
|
||||||
val ktTypeUpper =
|
val ktTypeUpper =
|
||||||
if (ktType0.constructor.isDenotable)
|
if (ktType0.constructor.isDenotable)
|
||||||
ktType0
|
ktType0
|
||||||
|
|||||||
+10
-2
@@ -85,6 +85,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
val modules = createModules(groupedByModule, context.storageManager)
|
val modules = createModules(groupedByModule, context.storageManager)
|
||||||
val moduleBindings = HashMap<TestModule?, BindingContext>()
|
val moduleBindings = HashMap<TestModule?, BindingContext>()
|
||||||
|
|
||||||
|
val languageVersionSettingsByModule = HashMap<TestModule?, LanguageVersionSettings>()
|
||||||
|
|
||||||
for ((testModule, testFilesInModule) in groupedByModule) {
|
for ((testModule, testFilesInModule) in groupedByModule) {
|
||||||
val ktFiles = getKtFiles(testFilesInModule, true)
|
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
|
if (coroutinesPackage.contains("experimental")) LanguageVersion.KOTLIN_1_2 else LanguageVersion.KOTLIN_1_3
|
||||||
)
|
)
|
||||||
else loadLanguageVersionSettings(testFilesInModule)
|
else loadLanguageVersionSettings(testFilesInModule)
|
||||||
|
|
||||||
|
languageVersionSettingsByModule[testModule] = languageVersionSettings
|
||||||
|
|
||||||
val moduleContext = context.withProject(project).withModule(oldModule)
|
val moduleContext = context.withProject(project).withModule(oldModule)
|
||||||
|
|
||||||
val separateModules = groupedByModule.size == 1 && groupedByModule.keys.single() == null
|
val separateModules = groupedByModule.size == 1 && groupedByModule.keys.single() == null
|
||||||
@@ -184,7 +189,9 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
exceptionFromLazyResolveLogValidation?.let { throw it }
|
exceptionFromLazyResolveLogValidation?.let { throw it }
|
||||||
exceptionFromDynamicCallDescriptorsValidation?.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 {
|
protected open fun getExpectedDiagnosticsFile(testDataFile: File): File {
|
||||||
@@ -212,7 +219,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
testFiles: List<TestFile>,
|
testFiles: List<TestFile>,
|
||||||
moduleFiles: Map<TestModule?, List<TestFile>>,
|
moduleFiles: Map<TestModule?, List<TestFile>>,
|
||||||
moduleDescriptors: Map<TestModule?, ModuleDescriptorImpl>,
|
moduleDescriptors: Map<TestModule?, ModuleDescriptorImpl>,
|
||||||
moduleBindings: Map<TestModule?, BindingContext>
|
moduleBindings: Map<TestModule?, BindingContext>,
|
||||||
|
languageVersionSettingsByModule: Map<TestModule?, LanguageVersionSettings>
|
||||||
) {
|
) {
|
||||||
// To be overridden by diagnostic-like tests.
|
// To be overridden by diagnostic-like tests.
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,6 +108,8 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
|
|||||||
}
|
}
|
||||||
|
|
||||||
class TestModule(val name: String) : Comparable<TestModule> {
|
class TestModule(val name: String) : Comparable<TestModule> {
|
||||||
|
lateinit var languageVersionSettings: LanguageVersionSettings
|
||||||
|
|
||||||
private val dependencies = ArrayList<TestModule>()
|
private val dependencies = ArrayList<TestModule>()
|
||||||
|
|
||||||
fun getDependencies(): MutableList<TestModule> = dependencies
|
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.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
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.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
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 {
|
protected fun generateIrModule(ignoreErrors: Boolean = false, shouldGenerate: (KtFile) -> Boolean = { true }): IrModuleFragment {
|
||||||
assert(myFiles != null) { "myFiles not initialized" }
|
assert(myFiles != null) { "myFiles not initialized" }
|
||||||
assert(myEnvironment != null) { "myEnvironment 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> {
|
protected fun generateIrFilesAsSingleModule(testFiles: List<TestFile>, ignoreErrors: Boolean = false): Map<TestFile, IrFile> {
|
||||||
@@ -133,9 +140,12 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
|
|||||||
ktFiles: List<KtFile>,
|
ktFiles: List<KtFile>,
|
||||||
moduleDescriptor: ModuleDescriptor,
|
moduleDescriptor: ModuleDescriptor,
|
||||||
bindingContext: BindingContext,
|
bindingContext: BindingContext,
|
||||||
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
ignoreErrors: Boolean = false
|
ignoreErrors: Boolean = false
|
||||||
) =
|
) =
|
||||||
generateIrModule(ktFiles, moduleDescriptor, bindingContext, Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors)))
|
generateIrModule(
|
||||||
|
ktFiles, moduleDescriptor, bindingContext, Psi2IrTranslator(languageVersionSettings, Psi2IrConfiguration(ignoreErrors))
|
||||||
|
)
|
||||||
|
|
||||||
fun generateIrModule(
|
fun generateIrModule(
|
||||||
ktFiles: List<KtFile>,
|
ktFiles: List<KtFile>,
|
||||||
|
|||||||
+7
-2
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.ir
|
package org.jetbrains.kotlin.ir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest
|
import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.ir.util.dump
|
import org.jetbrains.kotlin.ir.util.dump
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
@@ -29,14 +30,18 @@ abstract class AbstractPsi2IrDiagnosticsTest : AbstractDiagnosticsTest() {
|
|||||||
testFiles: List<TestFile>,
|
testFiles: List<TestFile>,
|
||||||
moduleFiles: Map<TestModule?, List<TestFile>>,
|
moduleFiles: Map<TestModule?, List<TestFile>>,
|
||||||
moduleDescriptors: Map<TestModule?, ModuleDescriptorImpl>,
|
moduleDescriptors: Map<TestModule?, ModuleDescriptorImpl>,
|
||||||
moduleBindings: Map<TestModule?, BindingContext>
|
moduleBindings: Map<TestModule?, BindingContext>,
|
||||||
|
languageVersionSettingsByModule: Map<TestModule?, LanguageVersionSettings>
|
||||||
) {
|
) {
|
||||||
val actualIrDump = StringBuilder()
|
val actualIrDump = StringBuilder()
|
||||||
for (module in moduleFiles.keys) {
|
for (module in moduleFiles.keys) {
|
||||||
val ktFiles = moduleFiles[module]?.mapNotNull { it.ktFile } ?: continue
|
val ktFiles = moduleFiles[module]?.mapNotNull { it.ktFile } ?: continue
|
||||||
val moduleDescriptor = moduleDescriptors[module] ?: continue
|
val moduleDescriptor = moduleDescriptors[module] ?: continue
|
||||||
val moduleBindingContext = moduleBindings[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())
|
actualIrDump.append(irModule.dump())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user