[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
+2
-15
@@ -5,8 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.backend.konan
|
||||
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.cli.common.messages.getLogger
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.konan.file.File
|
||||
import org.jetbrains.kotlin.konan.library.defaultResolver
|
||||
@@ -15,7 +14,6 @@ import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import org.jetbrains.kotlin.library.UnresolvedLibrary
|
||||
import org.jetbrains.kotlin.library.metadata.resolver.impl.libraryResolver
|
||||
import org.jetbrains.kotlin.library.toUnresolvedLibraries
|
||||
import org.jetbrains.kotlin.util.Logger
|
||||
|
||||
class KonanLibrariesResolveSupport(
|
||||
configuration: CompilerConfiguration,
|
||||
@@ -34,24 +32,13 @@ class KonanLibrariesResolveSupport(
|
||||
private val unresolvedLibraries = libraryNames.toUnresolvedLibraries
|
||||
|
||||
private val repositories = configuration.getList(KonanConfigKeys.REPOSITORIES)
|
||||
private val resolverLogger =
|
||||
object : Logger {
|
||||
private val collector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
||||
override fun warning(message: String)= collector.report(CompilerMessageSeverity.STRONG_WARNING, message)
|
||||
override fun error(message: String) = collector.report(CompilerMessageSeverity.ERROR, message)
|
||||
override fun log(message: String) = collector.report(CompilerMessageSeverity.LOGGING, message)
|
||||
override fun fatal(message: String): Nothing {
|
||||
collector.report(CompilerMessageSeverity.ERROR, message)
|
||||
throw KonanCompilationException()
|
||||
}
|
||||
}
|
||||
|
||||
private val resolver = defaultResolver(
|
||||
repositories,
|
||||
libraryNames.filter { it.contains(File.separator) } + includedLibraryFiles.map { it.absolutePath },
|
||||
target,
|
||||
distribution,
|
||||
resolverLogger
|
||||
configuration.getLogger()
|
||||
).libraryResolver(resolveManifestDependenciesLenient)
|
||||
|
||||
// We pass included libraries by absolute paths to avoid repository-based resolution for them.
|
||||
|
||||
+11
-4
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.gradle.plugin.konan.tasks
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.file.DirectoryProperty
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.konan.KonanCliCompilerRunner
|
||||
import org.jetbrains.kotlin.konan.library.defaultResolver
|
||||
@@ -17,6 +16,7 @@ import org.jetbrains.kotlin.konan.target.Distribution
|
||||
import org.jetbrains.kotlin.konan.target.PlatformManager
|
||||
import org.jetbrains.kotlin.library.uniqueName
|
||||
import org.jetbrains.kotlin.*
|
||||
import org.jetbrains.kotlin.util.Logger
|
||||
import java.io.File
|
||||
|
||||
enum class KonanCacheKind(val outputKind: CompilerOutputKind) {
|
||||
@@ -54,9 +54,16 @@ abstract class KonanCacheTask : DefaultTask() {
|
||||
private fun readKlibUniqNameFromManifest(): String {
|
||||
val konanHome = compilerDistributionPath.get().absolutePath
|
||||
val resolver = defaultResolver(
|
||||
emptyList(),
|
||||
PlatformManager(konanHome).targetByName(target),
|
||||
Distribution(konanHome)
|
||||
repositories = emptyList(),
|
||||
directLibs = emptyList(),
|
||||
target = PlatformManager(konanHome).targetByName(target),
|
||||
distribution = Distribution(konanHome),
|
||||
logger = object : Logger {
|
||||
override fun log(message: String) = logger.info(message)
|
||||
override fun warning(message: String) = logger.warn(message)
|
||||
override fun error(message: String): Unit = logger.error(message)
|
||||
override fun fatal(message: String): Nothing = kotlin.error(message)
|
||||
}
|
||||
)
|
||||
return resolver.resolve(originalKlib.asFile.get().absolutePath).uniqueName
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user