[KLIB Resolver] Report KLIB resolver issues as compiler messages
The reason of this change is to make messages (especially warnings) that are reported by the KLIB resolver become visible to the end user. This can be achieved to forwarding such messages to the appropriate compiler's components such as `org.jetbrains.kotlin.cli.common.messages.MessageCollector` and `org.jetbrains.kotlin.ir.util.IrMessageLogger`. Also: The default `DummyLogger` should be used as minimal as possible. Because it just forwards messages to the standard output (console) where they can remain unattended. When the compiler is executed from the Gradle plugin such messages appear only in DEBUG Gradle's log. ^KT-63573
This commit is contained in:
committed by
Space Team
parent
8430be39c9
commit
46081f968d
@@ -8,6 +8,7 @@ import org.jetbrains.kotlin.backend.common.CommonKLibResolver
|
||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||
import org.jetbrains.kotlin.backend.common.serialization.IrInterningService
|
||||
import org.jetbrains.kotlin.backend.common.serialization.cityHash64String
|
||||
import org.jetbrains.kotlin.backend.common.toLogger
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.ir.backend.js.*
|
||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsGenerationGranularity
|
||||
@@ -91,7 +92,11 @@ class CacheUpdater(
|
||||
// libraries in topological order: [stdlib, ..., main]
|
||||
val libraryDependencies = stopwatch.measure("Resolving and loading klib dependencies") {
|
||||
val zipAccessor = compilerConfiguration.get(JSConfigurationKeys.ZIP_FILE_SYSTEM_ACCESSOR)
|
||||
val allResolvedDependencies = CommonKLibResolver.resolve(allModules, compilerConfiguration.resolverLogger, zipAccessor)
|
||||
val allResolvedDependencies = CommonKLibResolver.resolve(
|
||||
allModules,
|
||||
compilerConfiguration.irMessageLogger.toLogger(),
|
||||
zipAccessor
|
||||
)
|
||||
|
||||
val libraries = allResolvedDependencies.getFullList(TopologicalLibraryOrder).let { resolvedLibraries ->
|
||||
val mainLibraryIndex = resolvedLibraries.indexOfLast {
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.backend.common
|
||||
|
||||
import org.jetbrains.kotlin.analyzer.CompilationErrorException
|
||||
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||
import org.jetbrains.kotlin.ir.util.IrMessageLogger.Severity.*
|
||||
import org.jetbrains.kotlin.util.DummyLogger
|
||||
import org.jetbrains.kotlin.util.Logger
|
||||
|
||||
/**
|
||||
* An adapter for the [Logger] interface that reports all messages to compiler's [IrMessageLogger].
|
||||
*/
|
||||
private class IrMessageLoggerAdapter(private val irMessageLogger: IrMessageLogger) : Logger {
|
||||
override fun log(message: String) = irMessageLogger.report(INFO, message, null)
|
||||
override fun warning(message: String) = irMessageLogger.report(WARNING, message, null)
|
||||
override fun error(message: String) = irMessageLogger.report(ERROR, message, null)
|
||||
|
||||
override fun fatal(message: String): Nothing {
|
||||
error(message)
|
||||
throw CompilationErrorException()
|
||||
}
|
||||
}
|
||||
|
||||
fun IrMessageLogger.toLogger(): Logger {
|
||||
return if (this != IrMessageLogger.None) IrMessageLoggerAdapter(this) else DummyLogger
|
||||
}
|
||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.backend.common.serialization.mangle.ManglerChecker
|
||||
import org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor.Ir2DescriptorManglerAdapter
|
||||
import org.jetbrains.kotlin.backend.common.serialization.metadata.*
|
||||
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
|
||||
import org.jetbrains.kotlin.backend.common.toLogger
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.config.*
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
@@ -70,8 +71,6 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.BindingContextUtils
|
||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.util.DummyLogger
|
||||
import org.jetbrains.kotlin.util.Logger
|
||||
import org.jetbrains.kotlin.utils.DFS
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
||||
import org.jetbrains.kotlin.utils.memoryOptimizedFilter
|
||||
@@ -103,21 +102,6 @@ private val CompilerConfiguration.metadataVersion
|
||||
internal val SerializedIrFile.fileMetadata: ByteArray
|
||||
get() = backendSpecificMetadata ?: error("Expect file caches to have backendSpecificMetadata, but '$path' doesn't")
|
||||
|
||||
val CompilerConfiguration.resolverLogger: Logger
|
||||
get() = when (val messageLogger = this[IrMessageLogger.IR_MESSAGE_LOGGER]) {
|
||||
null -> DummyLogger
|
||||
else -> object : Logger {
|
||||
override fun log(message: String) = messageLogger.report(IrMessageLogger.Severity.INFO, message, null)
|
||||
override fun error(message: String) = messageLogger.report(IrMessageLogger.Severity.ERROR, message, null)
|
||||
override fun warning(message: String) = messageLogger.report(IrMessageLogger.Severity.WARNING, message, null)
|
||||
|
||||
override fun fatal(message: String): Nothing {
|
||||
messageLogger.report(IrMessageLogger.Severity.ERROR, message, null)
|
||||
throw CompilationErrorException()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class KotlinFileSerializedData(val metadata: ByteArray, val irData: SerializedIrFile)
|
||||
|
||||
fun generateKLib(
|
||||
@@ -485,7 +469,7 @@ class ModulesStructure(
|
||||
|
||||
val allDependenciesResolution = CommonKLibResolver.resolveWithoutDependencies(
|
||||
dependencies,
|
||||
compilerConfiguration.resolverLogger,
|
||||
compilerConfiguration.irMessageLogger.toLogger(),
|
||||
compilerConfiguration.get(JSConfigurationKeys.ZIP_FILE_SYSTEM_ACCESSOR)
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user