Extended logger capabilities

This commit is contained in:
Alexander Gorshenev
2019-05-21 20:03:32 +03:00
committed by alexander-gorshenev
parent 97b345c88d
commit 41237c05bb
4 changed files with 30 additions and 13 deletions
@@ -6,11 +6,10 @@
package org.jetbrains.kotlin.backend.konan
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.STRONG_WARNING
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.*
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
@@ -23,6 +22,8 @@ import org.jetbrains.kotlin.konan.properties.loadProperties
import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.library.resolver.TopologicalLibraryOrder
import org.jetbrains.kotlin.konan.library.toUnresolvedLibraries
import org.jetbrains.kotlin.konan.util.Logger
import kotlin.system.exitProcess
class KonanConfig(val project: Project, val configuration: CompilerConfiguration) {
@@ -80,7 +81,16 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
private val unresolvedLibraries = libraryNames.toUnresolvedLibraries
private val repositories = configuration.getList(KonanConfigKeys.REPOSITORIES)
private fun resolverLogger(msg: String) = configuration.report(STRONG_WARNING, msg)
private val resolverLogger =
object : Logger {
override fun warning(message: String)= configuration.report(STRONG_WARNING, message)
override fun error(message: String) = configuration.report(ERROR, message)
override fun log(message: String) = configuration.report(LOGGING, message)
override fun fatal(message: String): Nothing {
configuration.report(ERROR, message)
exitProcess(1)
}
}
private val compatibleCompilerVersions: List<KonanVersion> =
configuration.getList(KonanConfigKeys.COMPATIBLE_COMPILER_VERSIONS).map { it.parseKonanVersion() }
@@ -91,7 +101,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
target,
distribution,
compatibleCompilerVersions + KonanVersion.CURRENT,
::resolverLogger
resolverLogger
).libraryResolver()
internal val resolvedLibraries by lazy {
@@ -2,7 +2,6 @@ package org.jetbrains.kotlin.konan.library
import org.jetbrains.kotlin.konan.library.resolver.KonanLibraryResolver
import org.jetbrains.kotlin.konan.library.resolver.impl.KonanLibraryResolverImpl
import org.jetbrains.kotlin.konan.KonanAbiVersion
fun SearchPathResolverWithTarget.libraryResolver(): KonanLibraryResolver =
KonanLibraryResolverImpl(this)
@@ -66,7 +66,7 @@ internal class KonanLibraryResolverImpl(
}
private fun warnOnLibraryDuplicates(duplicatedPaths: Iterable<String>) {
duplicatedPaths.forEach { logger("library included more than once: $it") }
duplicatedPaths.forEach { logger.warning("library included more than once: $it") }
}
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.konan.util.DependencyProcessor
import org.jetbrains.kotlin.konan.KonanAbiVersion
import org.jetbrains.kotlin.konan.library.unpackZippedKonanLibraryTo
import org.jetbrains.kotlin.konan.utils.KonanFactories.DefaultDeserializedDescriptorFactory
import org.jetbrains.kotlin.konan.util.Logger
import org.jetbrains.kotlin.metadata.konan.KonanProtoBuf
import org.jetbrains.kotlin.serialization.konan.parseModuleHeader
import org.jetbrains.kotlin.storage.LockBasedStorageManager
@@ -72,9 +73,15 @@ fun warn(text: String) {
println("warning: $text")
}
fun error(text: String) {
println("error: $text")
exitProcess(1)
fun error(text: String): Nothing {
kotlin.error("error: $text")
}
object KlibToolLogger : Logger {
override fun warning(message: String) = org.jetbrains.kotlin.cli.klib.warn(message)
override fun error(message: String) = org.jetbrains.kotlin.cli.klib.warn(message)
override fun fatal(message: String) = org.jetbrains.kotlin.cli.klib.error(message)
override fun log(message: String) = println(message)
}
val defaultRepository = File(DependencyProcessor.localKonanDir.resolve("klib").absolutePath)
@@ -153,7 +160,8 @@ class Library(val name: String, val requestedRepository: String?, val target: St
val resolver = resolverByName(
emptyList(),
distributionKlib = Distribution().klib,
skipCurrentDir = true)
skipCurrentDir = true,
logger = KlibToolLogger)
resolver.defaultLinks(false, true)
.mapTo(defaultModules) {
DefaultDeserializedDescriptorFactory.createDescriptor(
@@ -173,12 +181,12 @@ val currentLanguageVersion = LanguageVersion.LATEST_STABLE
val currentApiVersion = ApiVersion.LATEST_STABLE
fun libraryInRepo(repository: File, name: String) =
resolverByName(listOf(repository.absolutePath), skipCurrentDir = true).resolve(name)
resolverByName(listOf(repository.absolutePath), skipCurrentDir = true, logger = KlibToolLogger).resolve(name)
fun libraryInCurrentDir(name: String) = resolverByName(emptyList()).resolve(name)
fun libraryInCurrentDir(name: String) = resolverByName(emptyList(), logger = KlibToolLogger).resolve(name)
fun libraryInRepoOrCurrentDir(repository: File, name: String) =
resolverByName(listOf(repository.absolutePath)).resolve(name)
resolverByName(listOf(repository.absolutePath), logger = KlibToolLogger).resolve(name)
fun main(args: Array<String>) {
val command = Command(args)