JVM_IR KT-42020 special IdSignature for some fake override members

This commit is contained in:
Dmitry Petrov
2020-12-14 11:53:13 +03:00
parent 12cfba9ca9
commit b0f6461fa9
22 changed files with 1487 additions and 20 deletions
@@ -19,14 +19,19 @@ package org.jetbrains.kotlin.ir
import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensions
import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
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.idea.MainFunctionDetector
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmManglerDesc
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.util.IdSignatureComposer
import org.jetbrains.kotlin.ir.util.NameProvider
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList
@@ -36,11 +41,11 @@ import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
import org.jetbrains.kotlin.psi2ir.generators.GeneratorExtensions
import org.jetbrains.kotlin.resolve.AnalyzingUtils
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.KotlinTestUtils.getAnnotationsJar
import org.jetbrains.kotlin.test.TargetBackend
import java.io.File
import java.util.*
@@ -95,7 +100,12 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
}
protected open fun doGenerateIrModule(psi2IrTranslator: Psi2IrTranslator): IrModuleFragment =
generateIrModuleWithJvmResolve(myFiles.psiFiles, myEnvironment, psi2IrTranslator)
generateIrModuleWithJvmResolve(
myFiles.psiFiles,
myEnvironment,
psi2IrTranslator,
myEnvironment.configuration.languageVersionSettings
)
protected fun generateIrFilesAsSingleModule(testFiles: List<TestFile>, ignoreErrors: Boolean = false): Map<TestFile, IrFile> {
val irModule = generateIrModule(ignoreErrors)
@@ -118,22 +128,31 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
moduleDescriptors = emptyList(),
friendModuleDescriptors = emptyList()
),
psi2ir, ktFilesToAnalyze, GeneratorExtensions()
psi2ir, ktFilesToAnalyze, GeneratorExtensions(),
createIdSignatureComposer = { IdSignatureDescriptor(JsManglerDesc) }
)
fun generateIrModuleWithJvmResolve(
ktFilesToAnalyze: List<KtFile>, environment: KotlinCoreEnvironment, psi2ir: Psi2IrTranslator
): IrModuleFragment =
generateIrModule(
ktFilesToAnalyze: List<KtFile>,
environment: KotlinCoreEnvironment,
psi2ir: Psi2IrTranslator,
languageVersionSettings: LanguageVersionSettings
): IrModuleFragment {
return generateIrModule(
JvmResolveUtil.analyze(ktFilesToAnalyze, environment), psi2ir, ktFilesToAnalyze,
JvmGeneratorExtensions(generateFacades = false)
JvmGeneratorExtensions(generateFacades = false),
createIdSignatureComposer = { bindingContext ->
JvmIdSignatureDescriptor(JvmManglerDesc(MainFunctionDetector(bindingContext, languageVersionSettings)))
}
)
}
private fun generateIrModule(
analysisResult: AnalysisResult,
psi2ir: Psi2IrTranslator,
ktFilesToAnalyze: List<KtFile>,
generatorExtensions: GeneratorExtensions
generatorExtensions: GeneratorExtensions,
createIdSignatureComposer: (BindingContext) -> IdSignatureComposer
): IrModuleFragment {
val (bindingContext, moduleDescriptor) = analysisResult
if (!psi2ir.configuration.ignoreErrors) {
@@ -143,7 +162,8 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
val context = psi2ir.createGeneratorContext(
moduleDescriptor,
bindingContext,
SymbolTable(IdSignatureDescriptor(JsManglerDesc), IrFactoryImpl, NameProvider.DEFAULT),
// SymbolTable(IdSignatureDescriptor(JsManglerDesc), IrFactoryImpl, NameProvider.DEFAULT),
SymbolTable(createIdSignatureComposer(bindingContext), IrFactoryImpl, NameProvider.DEFAULT),
generatorExtensions
)
val irProviders = generateTypicalIrProviderList(