diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt index bde434f4369..73731e24897 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt @@ -63,6 +63,7 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory val mangler = JvmManglerDesc(MainFunctionDetector(state.bindingContext, state.languageVersionSettings)) val psi2ir = Psi2IrTranslator(state.languageVersionSettings, Psi2IrConfiguration(ignoreErrors)) val symbolTable = SymbolTable(JvmIdSignatureDescriptor(mangler), IrFactoryImpl, JvmNameProvider) + val messageLogger = state.configuration[IrMessageLogger.IR_MESSAGE_LOGGER] ?: IrMessageLogger.None val psi2irContext = psi2ir.createGeneratorContext(state.module, state.bindingContext, symbolTable, extensions) val pluginExtensions = IrGenerationExtension.getInstances(state.project) val functionFactory = IrFunctionFactory(psi2irContext.irBuiltIns, symbolTable) @@ -85,7 +86,7 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory } val irLinker = JvmIrLinker( psi2irContext.moduleDescriptor, - EmptyLoggingContext, + messageLogger, psi2irContext.irBuiltIns, symbolTable, functionFactory, @@ -98,7 +99,15 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory psi2irContext.run { val symbols = BuiltinSymbolsBase(irBuiltIns, moduleDescriptor.builtIns, symbolTable.lazyWrapper) IrPluginContextImpl( - moduleDescriptor, bindingContext, languageVersionSettings, symbolTable, typeTranslator, irBuiltIns, irLinker, symbols + moduleDescriptor, + bindingContext, + languageVersionSettings, + symbolTable, + typeTranslator, + irBuiltIns, + irLinker, + messageLogger, + symbols ) } } diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt index 59b502dd7b6..b949cff18ac 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt @@ -5,8 +5,6 @@ package org.jetbrains.kotlin.backend.common.serialization -import org.jetbrains.kotlin.backend.common.LoggingContext -import org.jetbrains.kotlin.backend.common.ir.ir2string import org.jetbrains.kotlin.backend.common.lower.InnerClassesSupport import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideClassFilter @@ -111,7 +109,7 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.MemberAccessCommo import org.jetbrains.kotlin.backend.common.serialization.proto.PublicIdSignature as ProtoPublicIdSignature abstract class IrFileDeserializer( - val logger: LoggingContext, + val messageLogger: IrMessageLogger, val builtIns: IrBuiltIns, val symbolTable: SymbolTable, protected var deserializeBodies: Boolean, diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt index 716f5d77497..8af40c9a503 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileSerializer.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.backend.common.serialization -import org.jetbrains.kotlin.backend.common.LoggingContext import org.jetbrains.kotlin.backend.common.ir.ir2string import org.jetbrains.kotlin.backend.common.serialization.encodings.* import org.jetbrains.kotlin.descriptors.* @@ -104,7 +103,7 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.NullableIrExpress import org.jetbrains.kotlin.backend.common.serialization.proto.PublicIdSignature as ProtoPublicIdSignature open class IrFileSerializer( - val logger: LoggingContext, + val messageLogger: IrMessageLogger, private val declarationTable: DeclarationTable, private val expectDescriptorToSymbol: MutableMap, private val bodiesOnlyForInlines: Boolean = false, diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt index a95fced8663..2e6657240a4 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt @@ -5,14 +5,14 @@ package org.jetbrains.kotlin.backend.common.serialization -import org.jetbrains.kotlin.backend.common.LoggingContext import org.jetbrains.kotlin.builtins.FunctionInterfacePackageFragment import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.ir.util.IrMessageLogger import org.jetbrains.kotlin.library.SerializedIrFile import org.jetbrains.kotlin.library.SerializedIrModule -abstract class IrModuleSerializer(protected val logger: LoggingContext) { +abstract class IrModuleSerializer(protected val messageLogger: IrMessageLogger) { abstract fun createSerializerForFile(file: IrFile): F /** diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt index 8ceda6f526c..432fd54ea8c 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.backend.common.serialization -import org.jetbrains.kotlin.backend.common.LoggingContext import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder import org.jetbrains.kotlin.backend.common.overrides.FileLocalAwareLinker import org.jetbrains.kotlin.backend.common.serialization.encodings.BinarySymbolData @@ -20,11 +19,13 @@ import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl -import org.jetbrains.kotlin.ir.descriptors.* +import org.jetbrains.kotlin.ir.descriptors.IrAbstractFunctionFactory +import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrLoop import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl import org.jetbrains.kotlin.ir.linkage.IrDeserializer +import org.jetbrains.kotlin.ir.linkage.KotlinIrLinkerInternalException import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.impl.* import org.jetbrains.kotlin.ir.types.IrType @@ -49,7 +50,7 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.IrType as ProtoTy abstract class KotlinIrLinker( private val currentModule: ModuleDescriptor?, - val logger: LoggingContext, + val messageLogger: IrMessageLogger, val builtIns: IrBuiltIns, val symbolTable: SymbolTable, private val exportedDependencies: List @@ -110,7 +111,7 @@ abstract class KotlinIrLinker( private val moduleDeserializationState = ModuleDeserializationState() private val moduleReversedFileIndex = mutableMapOf() override val moduleDependencies by lazy { - moduleDescriptor.allDependencyModules.filter { it != moduleDescriptor }.map { resolveModuleDeserializer(it) } + moduleDescriptor.allDependencyModules.filter { it != moduleDescriptor }.map { resolveModuleDeserializer(it, null) } } override fun init(delegate: IrModuleDeserializer) { @@ -128,7 +129,7 @@ abstract class KotlinIrLinker( fileToDeserializerMap.values.forEach { it.deserializeExpectActualMapping() } } - override fun referenceSimpleFunctionByLocalSignature(file: IrFile, idSignature: IdSignature) : IrSimpleFunctionSymbol = + override fun referenceSimpleFunctionByLocalSignature(file: IrFile, idSignature: IdSignature): IrSimpleFunctionSymbol = fileToDeserializerMap[file]?.referenceSimpleFunctionByLocalSignature(idSignature) ?: error("No deserializer for file $file in module ${moduleDescriptor.name}") @@ -240,7 +241,7 @@ abstract class KotlinIrLinker( allowErrorNodes: Boolean ) : IrFileDeserializer( - logger, + messageLogger, builtIns, symbolTable, !onlyHeaders, @@ -358,7 +359,11 @@ abstract class KotlinIrLinker( val topLevelSig = idSig.topLevelSignature() if (topLevelSig in moduleDeserializer) return moduleDeserializer - return moduleDeserializer.moduleDependencies.firstOrNull { topLevelSig in it } ?: handleNoModuleDeserializerFound(idSig) + return moduleDeserializer.moduleDependencies.firstOrNull { topLevelSig in it } ?: handleNoModuleDeserializerFound( + idSig, + moduleDeserializer.moduleDescriptor, + moduleDeserializer.moduleDependencies + ) } private fun referenceIrSymbolData(symbol: IrSymbol, signature: IdSignature) { @@ -469,12 +474,33 @@ abstract class KotlinIrLinker( return codedInputStream } - protected open fun handleNoModuleDeserializerFound(idSignature: IdSignature): IrModuleDeserializer { - error("Deserializer for declaration $idSignature is not found") + protected open fun handleNoModuleDeserializerFound(idSignature: IdSignature, currentModule: ModuleDescriptor, dependencies: Collection): IrModuleDeserializer { + val message = buildString { + append("Module $currentModule has reference $idSignature, unfortunately neither itself nor its dependencies ") + dependencies.joinTo(this, "\n\t", "[\n\t", "\n]") + append(" contain this declaration") + append("\n") + append("Please check that project configuration is correct and has required dependencies.") + } + messageLogger.report(IrMessageLogger.Severity.ERROR, message, null) + + throw KotlinIrLinkerInternalException } - protected open fun resolveModuleDeserializer(moduleDescriptor: ModuleDescriptor): IrModuleDeserializer { - return deserializersForModules[moduleDescriptor] ?: error("No module deserializer found for $moduleDescriptor") + protected open fun resolveModuleDeserializer(module: ModuleDescriptor, signature: IdSignature?): IrModuleDeserializer { + return deserializersForModules[module] ?: run { + val message = buildString { + append("Could not load module ") + append(module) + signature?.let { + append("; It was an attempt to find deserializer for ") + append(it) + } + } + messageLogger.report(IrMessageLogger.Severity.ERROR, message, null) + + throw KotlinIrLinkerInternalException + } } protected abstract fun createModuleDeserializer( @@ -542,7 +568,7 @@ abstract class KotlinIrLinker( val descriptor = symbol.descriptor - val moduleDeserializer = resolveModuleDeserializer(descriptor.module) + val moduleDeserializer = resolveModuleDeserializer(descriptor.module, symbol.signature) // moduleDeserializer.deserializeIrSymbol(signature, symbol.kind()) moduleDeserializer.declareIrSymbol(symbol) @@ -602,14 +628,16 @@ abstract class KotlinIrLinker( override fun tryReferencingSimpleFunctionByLocalSignature(parent: IrDeclaration, idSignature: IdSignature): IrSimpleFunctionSymbol? { if (idSignature.isPublic) return null - return deserializersForModules[parent.file.packageFragmentDescriptor.containingDeclaration]?.referenceSimpleFunctionByLocalSignature(parent.file, idSignature) - ?: error("No module deserializer for ${parent.render()}") + val file = parent.file + val moduleDescriptor = file.packageFragmentDescriptor.containingDeclaration + return resolveModuleDeserializer(moduleDescriptor, null).referenceSimpleFunctionByLocalSignature(file, idSignature) } override fun tryReferencingPropertyByLocalSignature(parent: IrDeclaration, idSignature: IdSignature): IrPropertySymbol? { if (idSignature.isPublic) return null - return deserializersForModules[parent.file.packageFragmentDescriptor.containingDeclaration]?.referencePropertyByLocalSignature(parent.file, idSignature) - ?: error("No module deserializer for ${parent.render()}") + val file = parent.file + val moduleDescriptor = file.packageFragmentDescriptor.containingDeclaration + return resolveModuleDeserializer(moduleDescriptor, null).referencePropertyByLocalSignature(file, idSignature) } protected open fun createCurrentModuleDeserializer(moduleFragment: IrModuleFragment, dependencies: Collection): IrModuleDeserializer = @@ -619,7 +647,7 @@ abstract class KotlinIrLinker( linkerExtensions = extensions if (moduleFragment != null) { val currentModuleDependencies = moduleFragment.descriptor.allDependencyModules.map { - deserializersForModules[it] ?: error("No deserializer found for $it") + resolveModuleDeserializer(it, null) } val currentModuleDeserializer = createCurrentModuleDeserializer(moduleFragment, currentModuleDependencies) deserializersForModules[moduleFragment.descriptor] = diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index 27f26a0ac7c..e6c635b1315 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt @@ -82,12 +82,6 @@ val KotlinLibrary.isBuiltIns: Boolean fun loadKlib(klibPath: String) = resolveSingleFileKlib(KFile(KFile(klibPath).absolutePath)) -val emptyLoggingContext = object : LoggingContext { - override var inVerbosePhase = false - - override fun log(message: () -> String) {} -} - private val CompilerConfiguration.metadataVersion get() = get(CommonConfigurationKeys.METADATA_VERSION) as? KlibMetadataVersion ?: KlibMetadataVersion.INSTANCE @@ -109,6 +103,7 @@ fun generateKLib( ) { val incrementalDataProvider = configuration.get(JSConfigurationKeys.INCREMENTAL_DATA_PROVIDER) val errorPolicy = configuration.get(JSConfigurationKeys.ERROR_TOLERANCE_POLICY) ?: ErrorTolerancePolicy.DEFAULT + val messageLogger = configuration.get(IrMessageLogger.IR_MESSAGE_LOGGER) ?: IrMessageLogger.None val icData: List val serializedIrFiles: List? @@ -154,7 +149,7 @@ fun generateKLib( } val irLinker = JsIrLinker( psi2IrContext.moduleDescriptor, - emptyLoggingContext, + messageLogger, psi2IrContext.irBuiltIns, psi2IrContext.symbolTable, functionFactory, @@ -166,7 +161,7 @@ fun generateKLib( irLinker.deserializeOnlyHeaderModule(depsDescriptors.getModuleDescriptor(it), it) } - val moduleFragment = psi2IrContext.generateModuleFragmentWithPlugins(project, files, irLinker, expectDescriptorToSymbol) + val moduleFragment = psi2IrContext.generateModuleFragmentWithPlugins(project, files, irLinker, messageLogger, expectDescriptorToSymbol) moduleFragment.acceptVoid(ManglerChecker(JsManglerIr, Ir2DescriptorManglerAdapter(JsManglerDesc))) if (configuration.getBoolean(JSConfigurationKeys.FAKE_OVERRIDE_VALIDATOR)) { @@ -184,6 +179,7 @@ fun generateKLib( moduleName, project, configuration, + messageLogger, psi2IrContext.bindingContext, files, outputKlibPath, @@ -225,6 +221,7 @@ fun loadIr( ): IrModuleInfo { val depsDescriptors = ModulesStructure(project, mainModule, analyzer, configuration, allDependencies, friendDependencies) val errorPolicy = configuration.get(JSConfigurationKeys.ERROR_TOLERANCE_POLICY) ?: ErrorTolerancePolicy.DEFAULT + val messageLogger = configuration.get(IrMessageLogger.IR_MESSAGE_LOGGER) ?: IrMessageLogger.None when (mainModule) { is MainModule.SourceFiles -> { @@ -236,12 +233,12 @@ fun loadIr( val feContext = psi2IrContext.run { JsIrLinker.JsFePluginContext(moduleDescriptor, bindingContext, symbolTable, typeTranslator, irBuiltIns) } - val irLinker = JsIrLinker(psi2IrContext.moduleDescriptor, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, feContext, null) + val irLinker = JsIrLinker(psi2IrContext.moduleDescriptor, messageLogger, irBuiltIns, symbolTable, functionFactory, feContext, null) val deserializedModuleFragments = sortDependencies(allDependencies.getFullList(), depsDescriptors.descriptors).map { irLinker.deserializeIrModuleHeader(depsDescriptors.getModuleDescriptor(it), it) } - val moduleFragment = psi2IrContext.generateModuleFragmentWithPlugins(project, mainModule.files, irLinker) + val moduleFragment = psi2IrContext.generateModuleFragmentWithPlugins(project, mainModule.files, irLinker, messageLogger) symbolTable.noUnboundLeft("Unbound symbols left after linker") // TODO: not sure whether this check should be enabled by default. Add configuration key for it. @@ -273,7 +270,7 @@ fun loadIr( val irBuiltIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable) val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) val irLinker = - JsIrLinker(null, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, null, null) + JsIrLinker(null, messageLogger, irBuiltIns, symbolTable, functionFactory, null, null) val deserializedModuleFragments = sortDependencies(allDependencies.getFullList(), depsDescriptors.descriptors).map { val strategy = @@ -315,6 +312,7 @@ fun GeneratorContext.generateModuleFragmentWithPlugins( project: Project, files: List, irLinker: IrDeserializer, + messageLogger: IrMessageLogger, expectDescriptorToSymbol: MutableMap? = null ): IrModuleFragment { val psi2Ir = Psi2IrTranslator(languageVersionSettings, configuration) @@ -466,6 +464,7 @@ fun serializeModuleIntoKlib( moduleName: String, project: Project, configuration: CompilerConfiguration, + messageLogger: IrMessageLogger, bindingContext: BindingContext, files: List, klibPath: String, @@ -481,7 +480,7 @@ fun serializeModuleIntoKlib( val serializedIr = JsIrModuleSerializer( - emptyLoggingContext, + messageLogger, moduleFragment.irBuiltins, expectDescriptorToSymbol = expectDescriptorToSymbol, skipExpects = !configuration.expectActualLinker diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrFileSerializer.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrFileSerializer.kt index 1f3af3546ee..c5c28cff376 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrFileSerializer.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrFileSerializer.kt @@ -5,23 +5,23 @@ package org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir -import org.jetbrains.kotlin.backend.common.LoggingContext -import org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable +import org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.IrAnnotationContainer import org.jetbrains.kotlin.ir.symbols.IrSymbol +import org.jetbrains.kotlin.ir.util.IrMessageLogger import org.jetbrains.kotlin.ir.util.hasAnnotation import org.jetbrains.kotlin.name.FqName class JsIrFileSerializer( - logger: LoggingContext, + messageLogger: IrMessageLogger, declarationTable: DeclarationTable, expectDescriptorToSymbol: MutableMap, skipExpects: Boolean, bodiesOnlyForInlines: Boolean = false ) : IrFileSerializer( - logger, + messageLogger, declarationTable, expectDescriptorToSymbol, bodiesOnlyForInlines = bodiesOnlyForInlines, diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt index de2b78291f3..33423e36a90 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrLinker.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir -import org.jetbrains.kotlin.backend.common.LoggingContext import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder import org.jetbrains.kotlin.backend.common.serialization.* import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer @@ -14,6 +13,7 @@ import org.jetbrains.kotlin.ir.builders.TranslationPluginContext import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.descriptors.IrAbstractFunctionFactory import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns +import org.jetbrains.kotlin.ir.util.IrMessageLogger import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.TypeTranslator @@ -23,11 +23,11 @@ import org.jetbrains.kotlin.library.containsErrorCode import org.jetbrains.kotlin.resolve.BindingContext class JsIrLinker( - private val currentModule: ModuleDescriptor?, logger: LoggingContext, builtIns: IrBuiltIns, symbolTable: SymbolTable, + private val currentModule: ModuleDescriptor?, messageLogger: IrMessageLogger, builtIns: IrBuiltIns, symbolTable: SymbolTable, override val functionalInterfaceFactory: IrAbstractFunctionFactory, override val translationPluginContext: TranslationPluginContext?, private val icData: ICData? = null -) : KotlinIrLinker(currentModule, logger, builtIns, symbolTable, emptyList()) { +) : KotlinIrLinker(currentModule, messageLogger, builtIns, symbolTable, emptyList()) { override val fakeOverrideBuilder = FakeOverrideBuilder(this, symbolTable, IdSignatureSerializer(JsManglerIr), builtIns) diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrModuleSerializer.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrModuleSerializer.kt index f2f10ca418b..49a7d708b8b 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrModuleSerializer.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrModuleSerializer.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir -import org.jetbrains.kotlin.backend.common.LoggingContext import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable import org.jetbrains.kotlin.backend.common.serialization.IrModuleSerializer import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer @@ -13,17 +12,18 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.symbols.IrSymbol +import org.jetbrains.kotlin.ir.util.IrMessageLogger class JsIrModuleSerializer( - logger: LoggingContext, + messageLogger: IrMessageLogger, irBuiltIns: IrBuiltIns, private val expectDescriptorToSymbol: MutableMap, val skipExpects: Boolean -) : IrModuleSerializer(logger) { +) : IrModuleSerializer(messageLogger) { private val signaturer = IdSignatureSerializer(JsManglerIr) private val globalDeclarationTable = JsGlobalDeclarationTable(signaturer, irBuiltIns) override fun createSerializerForFile(file: IrFile): JsIrFileSerializer = - JsIrFileSerializer(logger, DeclarationTable(globalDeclarationTable), expectDescriptorToSymbol, skipExpects = skipExpects) + JsIrFileSerializer(messageLogger, DeclarationTable(globalDeclarationTable), expectDescriptorToSymbol, skipExpects = skipExpects) } \ No newline at end of file diff --git a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt index cb81822cb83..77746c688d6 100644 --- a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt +++ b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.ir.backend.jvm.serialization -import org.jetbrains.kotlin.backend.common.LoggingContext import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder import org.jetbrains.kotlin.backend.common.serialization.* import org.jetbrains.kotlin.backend.common.serialization.encodings.BinarySymbolData @@ -24,6 +23,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.isPublicApi import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator import org.jetbrains.kotlin.ir.util.IdSignature +import org.jetbrains.kotlin.ir.util.IrMessageLogger import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.library.IrLibrary import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor @@ -34,14 +34,14 @@ import org.jetbrains.kotlin.name.Name @OptIn(ObsoleteDescriptorBasedAPI::class) class JvmIrLinker( currentModule: ModuleDescriptor?, - logger: LoggingContext, + messageLogger: IrMessageLogger, builtIns: IrBuiltIns, symbolTable: SymbolTable, override val functionalInterfaceFactory: IrAbstractFunctionFactory, override val translationPluginContext: TranslationPluginContext?, private val stubGenerator: DeclarationStubGenerator, private val manglerDesc: JvmManglerDesc -) : KotlinIrLinker(currentModule, logger, builtIns, symbolTable, emptyList()) { +) : KotlinIrLinker(currentModule, messageLogger, builtIns, symbolTable, emptyList()) { override val fakeOverrideBuilder = FakeOverrideBuilder(this, symbolTable, IdSignatureSerializer(JvmManglerIr), builtIns) diff --git a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt index d3683821783..d6d220ad8b9 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt @@ -12,7 +12,6 @@ import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.psi.PsiManager import org.jetbrains.kotlin.analyzer.AnalysisResult -import org.jetbrains.kotlin.backend.common.LoggingContext import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.phaser.invokeToplevel import org.jetbrains.kotlin.backend.common.serialization.KlibIrVersion @@ -30,7 +29,6 @@ import org.jetbrains.kotlin.descriptors.konan.kotlinLibrary import org.jetbrains.kotlin.incremental.ChangedFiles import org.jetbrains.kotlin.incremental.EmptyICReporter import org.jetbrains.kotlin.incremental.IncrementalJsCompilerRunner -import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.multiproject.EmptyModulesApiHistory import org.jetbrains.kotlin.incremental.withJsIC import org.jetbrains.kotlin.ir.backend.js.* @@ -65,18 +63,14 @@ import org.junit.Before import org.junit.Ignore import org.junit.Test import java.io.File -import kotlin.io.path.* +import kotlin.io.path.ExperimentalPathApi +import kotlin.io.path.createTempDirectory +import kotlin.io.path.createTempFile import org.jetbrains.kotlin.konan.file.File as KonanFile @OptIn(ExperimentalPathApi::class) @Ignore class GenerateIrRuntime { - private val lookupTracker: LookupTracker = LookupTracker.DO_NOTHING - private val logger = object : LoggingContext { - override var inVerbosePhase = false - override fun log(message: () -> String) {} - } - fun loadKlib(klibPath: String, isPacked: Boolean) = createKotlinLibrary(KonanFile("$klibPath${if (isPacked) ".klib" else ""}")) private fun buildConfiguration(environment: KotlinCoreEnvironment): CompilerConfiguration { @@ -462,7 +456,7 @@ class GenerateIrRuntime { val irLinker = JsIrLinker( psi2IrContext.moduleDescriptor, - emptyLoggingContext, + IrMessageLogger.None, psi2IrContext.irBuiltIns, psi2IrContext.symbolTable, functionFactory, @@ -482,6 +476,7 @@ class GenerateIrRuntime { moduleName, project, configuration, + IrMessageLogger.None, bindingContext, files, tmpKlibDir, @@ -504,7 +499,7 @@ class GenerateIrRuntime { private fun doSerializeIrModule(module: IrModuleFragment): SerializedIrModule { - val serializedIr = JsIrModuleSerializer(logger, module.irBuiltins, mutableMapOf(), true).serializedIrModule(module) + val serializedIr = JsIrModuleSerializer(IrMessageLogger.None, module.irBuiltins, mutableMapOf(), true).serializedIrModule(module) return serializedIr } @@ -524,7 +519,7 @@ class GenerateIrRuntime { val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) irBuiltIns.functionFactory = functionFactory - val jsLinker = JsIrLinker(moduleDescriptor, logger, irBuiltIns, symbolTable, functionFactory, null) + val jsLinker = JsIrLinker(moduleDescriptor, IrMessageLogger.None, irBuiltIns, symbolTable, functionFactory, null) val moduleFragment = jsLinker.deserializeFullModule(moduleDescriptor, moduleDescriptor.kotlinLibrary) jsLinker.init(null, emptyList()) @@ -554,7 +549,7 @@ class GenerateIrRuntime { val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) irBuiltIns.functionFactory = functionFactory - val jsLinker = JsIrLinker(moduleDescriptor, logger, irBuiltIns, symbolTable, functionFactory, null) + val jsLinker = JsIrLinker(moduleDescriptor, IrMessageLogger.None, irBuiltIns, symbolTable, functionFactory, null) val moduleFragment = jsLinker.deserializeFullModule(moduleDescriptor, moduleDescriptor.kotlinLibrary) // Create stubs diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt index 8244f5d5a2f..eac1a5c4fc9 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.konan.kotlinLibrary import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext -import org.jetbrains.kotlin.ir.backend.js.emptyLoggingContext import org.jetbrains.kotlin.ir.backend.js.generateJsCode import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker import org.jetbrains.kotlin.ir.backend.js.utils.NameTables @@ -34,6 +33,7 @@ class JsScriptDependencyCompiler( fun compile(dependencies: List): String { val builtIns: KotlinBuiltIns = dependencies.single { it.allDependencyModules.isEmpty() }.builtIns val languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT + val messageLogger = configuration[IrMessageLogger.IR_MESSAGE_LOGGER] ?: IrMessageLogger.None val moduleName = Name.special("") val storageManager = LockBasedStorageManager.NO_LOCKS val moduleDescriptor = ModuleDescriptorImpl(moduleName, storageManager, builtIns, null).also { @@ -48,7 +48,7 @@ class JsScriptDependencyCompiler( val irBuiltIns = IrBuiltIns(builtIns, typeTranslator, symbolTable) val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) irBuiltIns.functionFactory = functionFactory - val jsLinker = JsIrLinker(null, emptyLoggingContext, irBuiltIns, symbolTable, functionFactory, null) + val jsLinker = JsIrLinker(null, messageLogger, irBuiltIns, symbolTable, functionFactory, null) val irDependencies = dependencies.map { jsLinker.deserializeFullModule(it, it.kotlinLibrary) } val moduleFragment = irDependencies.last()