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 package org.jetbrains.kotlin.backend.konan
import com.intellij.openapi.project.Project 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.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity 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.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.descriptors.ModuleDescriptor 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.target.*
import org.jetbrains.kotlin.konan.library.resolver.TopologicalLibraryOrder import org.jetbrains.kotlin.konan.library.resolver.TopologicalLibraryOrder
import org.jetbrains.kotlin.konan.library.toUnresolvedLibraries 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) { 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 unresolvedLibraries = libraryNames.toUnresolvedLibraries
private val repositories = configuration.getList(KonanConfigKeys.REPOSITORIES) 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> = private val compatibleCompilerVersions: List<KonanVersion> =
configuration.getList(KonanConfigKeys.COMPATIBLE_COMPILER_VERSIONS).map { it.parseKonanVersion() } configuration.getList(KonanConfigKeys.COMPATIBLE_COMPILER_VERSIONS).map { it.parseKonanVersion() }
@@ -91,7 +101,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
target, target,
distribution, distribution,
compatibleCompilerVersions + KonanVersion.CURRENT, compatibleCompilerVersions + KonanVersion.CURRENT,
::resolverLogger resolverLogger
).libraryResolver() ).libraryResolver()
internal val resolvedLibraries by lazy { 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.KonanLibraryResolver
import org.jetbrains.kotlin.konan.library.resolver.impl.KonanLibraryResolverImpl import org.jetbrains.kotlin.konan.library.resolver.impl.KonanLibraryResolverImpl
import org.jetbrains.kotlin.konan.KonanAbiVersion
fun SearchPathResolverWithTarget.libraryResolver(): KonanLibraryResolver = fun SearchPathResolverWithTarget.libraryResolver(): KonanLibraryResolver =
KonanLibraryResolverImpl(this) KonanLibraryResolverImpl(this)
@@ -66,7 +66,7 @@ internal class KonanLibraryResolverImpl(
} }
private fun warnOnLibraryDuplicates(duplicatedPaths: Iterable<String>) { 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.KonanAbiVersion
import org.jetbrains.kotlin.konan.library.unpackZippedKonanLibraryTo import org.jetbrains.kotlin.konan.library.unpackZippedKonanLibraryTo
import org.jetbrains.kotlin.konan.utils.KonanFactories.DefaultDeserializedDescriptorFactory 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.metadata.konan.KonanProtoBuf
import org.jetbrains.kotlin.serialization.konan.parseModuleHeader import org.jetbrains.kotlin.serialization.konan.parseModuleHeader
import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.LockBasedStorageManager
@@ -72,9 +73,15 @@ fun warn(text: String) {
println("warning: $text") println("warning: $text")
} }
fun error(text: String) { fun error(text: String): Nothing {
println("error: $text") kotlin.error("error: $text")
exitProcess(1) }
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) 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( val resolver = resolverByName(
emptyList(), emptyList(),
distributionKlib = Distribution().klib, distributionKlib = Distribution().klib,
skipCurrentDir = true) skipCurrentDir = true,
logger = KlibToolLogger)
resolver.defaultLinks(false, true) resolver.defaultLinks(false, true)
.mapTo(defaultModules) { .mapTo(defaultModules) {
DefaultDeserializedDescriptorFactory.createDescriptor( DefaultDeserializedDescriptorFactory.createDescriptor(
@@ -173,12 +181,12 @@ val currentLanguageVersion = LanguageVersion.LATEST_STABLE
val currentApiVersion = ApiVersion.LATEST_STABLE val currentApiVersion = ApiVersion.LATEST_STABLE
fun libraryInRepo(repository: File, name: String) = 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) = 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>) { fun main(args: Array<String>) {
val command = Command(args) val command = Command(args)