From 71eb4133501f0b7164a015b04ea8f6f26d8979e4 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Mon, 7 Oct 2019 15:25:00 +0300 Subject: [PATCH] Attached library resolver to messge collector --- .../jetbrains/kotlin/cli/js/K2JsIrCompiler.kt | 26 ++++++++++++++----- .../jetbrains/kotlin/ir/backend/js/klib.kt | 9 +++---- .../test/GenerateIrRuntime.kt | 16 ++++++++---- .../kotlin/js/test/BasicIrBoxTest.kt | 8 ++---- 4 files changed, 36 insertions(+), 23 deletions(-) diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index b2a0335e717..7eadde7cc57 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.* +import org.jetbrains.kotlin.cli.common.messages.GroupingMessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageUtil import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles @@ -28,19 +29,18 @@ import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer -import org.jetbrains.kotlin.ir.backend.js.* +import org.jetbrains.kotlin.ir.backend.js.compile +import org.jetbrains.kotlin.ir.backend.js.generateKLib +import org.jetbrains.kotlin.ir.backend.js.jsPhases +import org.jetbrains.kotlin.ir.backend.js.jsResolveLibraries import org.jetbrains.kotlin.js.config.EcmaVersion import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.js.config.JsConfig import org.jetbrains.kotlin.js.config.SourceMapSourceEmbedding -import org.jetbrains.kotlin.library.resolver.impl.libraryResolver -import org.jetbrains.kotlin.library.KotlinLibrary -import org.jetbrains.kotlin.library.KotlinLibrarySearchPathResolver -import org.jetbrains.kotlin.library.UnresolvedLibrary -import org.jetbrains.kotlin.library.toUnresolvedLibraries import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.serialization.js.ModuleKind +import org.jetbrains.kotlin.util.Logger import org.jetbrains.kotlin.utils.JsMetadataVersion import org.jetbrains.kotlin.utils.KotlinPaths import org.jetbrains.kotlin.utils.join @@ -142,7 +142,7 @@ class K2JsIrCompiler : CLICompiler() { // TODO: Handle non-empty main call arguments val mainCallArguments = if (K2JsArgumentConstants.NO_CALL == arguments.main) null else emptyList() - val resolvedLibraries = jsResolveLibraries(libraries) + val resolvedLibraries = jsResolveLibraries(libraries, messageCollectorLogger(configuration)) val friendAbsolutePaths = friendLibraries.map { File(it).absolutePath } val friendDependencies = resolvedLibraries.getFullList().filter { @@ -336,3 +336,15 @@ class K2JsIrCompiler : CLICompiler() { } } } + +fun messageCollectorLogger(configuration: CompilerConfiguration) = object : Logger { + val collector = configuration[CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY]!! + override fun warning(message: String)= collector.report(STRONG_WARNING, message) + override fun error(message: String) = collector.report(ERROR, message) + override fun log(message: String) = collector.report(LOGGING, message) + override fun fatal(message: String): Nothing { + collector.report(ERROR, message) + (collector as? GroupingMessageCollector)?.flush() + kotlin.error(message) + } +} \ No newline at end of file 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 0184958904e..498f4236921 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 @@ -52,6 +52,7 @@ 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.Logger import org.jetbrains.kotlin.utils.DFS import java.io.File import org.jetbrains.kotlin.konan.file.File as KFile @@ -82,8 +83,7 @@ private val CompilerConfiguration.metadataVersion class KotlinFileSerializedData(val metadata: ByteArray, val irData: SerializedIrFile) // TODO: This is a temporary set of library resolver policies for js compiler. -fun jsResolveLibraries(libraries: List): KotlinLibraryResolveResult { - +fun jsResolveLibraries(libraries: List, logger: Logger): KotlinLibraryResolveResult { val unresolvedLibraries = libraries.map { UnresolvedLibrary(it ,null) } val libraryAbsolutePaths = libraries.map{ File(it).absolutePath } // Configure the resolver to only work with absolute paths for now. @@ -92,8 +92,8 @@ fun jsResolveLibraries(libraries: List): KotlinLibraryResolveResult { directLibs = libraryAbsolutePaths, distributionKlib = null, localKotlinDir = null, - skipCurrentDir = false - // TODO: pass logger attached to message collector here. + skipCurrentDir = false, + logger = logger ).libraryResolver() val resolvedLibraries = libraryResolver.resolveWithDependencies( @@ -105,7 +105,6 @@ fun jsResolveLibraries(libraries: List): KotlinLibraryResolveResult { return resolvedLibraries } - fun generateKLib( project: Project, files: List, diff --git a/compiler/ir/serialization.js/test/GenerateIrRuntime.kt b/compiler/ir/serialization.js/test/GenerateIrRuntime.kt index 4b8d0300d6e..a5b7570ff47 100644 --- a/compiler/ir/serialization.js/test/GenerateIrRuntime.kt +++ b/compiler/ir/serialization.js/test/GenerateIrRuntime.kt @@ -13,14 +13,11 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.library.KotlinLibrary -import org.jetbrains.kotlin.library.KotlinLibrarySearchPathResolver -import org.jetbrains.kotlin.library.UnresolvedLibrary import org.jetbrains.kotlin.library.resolver.KotlinLibraryResolveResult -import org.jetbrains.kotlin.library.resolver.impl.libraryResolver import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource import org.jetbrains.kotlin.serialization.js.ModuleKind +import org.jetbrains.kotlin.util.Logger import java.io.File fun buildConfiguration(environment: KotlinCoreEnvironment, moduleName: String): CompilerConfiguration { @@ -116,7 +113,16 @@ fun main(args: Array) { if (outputPath == null) { error("Please set path to .klm file: `-o some/dir/module-name.klm`") } - val resolvedLibraries = jsResolveLibraries(dependencies) + + val resolvedLibraries = jsResolveLibraries( + dependencies, + object : Logger { + override fun log(message: String) = println(message) + override fun error(message: String) = kotlin.error(message) + override fun warning(message: String) = println(message) + override fun fatal(message: String) = kotlin.error(message) + } + ) buildKLib(File(outputPath).absolutePath, listOfKtFilesFrom(inputFiles), outputPath, resolvedLibraries, listOfKtFilesFrom(commonSources)) } diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicIrBoxTest.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicIrBoxTest.kt index 5796f365a6d..77b05739dcd 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicIrBoxTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicIrBoxTest.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.js.test import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap +import org.jetbrains.kotlin.cli.js.messageCollectorLogger import org.jetbrains.kotlin.ir.backend.js.compile import org.jetbrains.kotlin.ir.backend.js.generateKLib import org.jetbrains.kotlin.ir.backend.js.jsPhases @@ -15,11 +16,6 @@ import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.js.config.JsConfig import org.jetbrains.kotlin.js.facade.MainCallParameters import org.jetbrains.kotlin.js.facade.TranslationUnit -import org.jetbrains.kotlin.library.KotlinLibrary -import org.jetbrains.kotlin.library.KotlinLibrarySearchPathResolver -import org.jetbrains.kotlin.library.UnresolvedLibrary -import org.jetbrains.kotlin.library.resolver.impl.libraryResolver -import org.jetbrains.kotlin.library.toUnresolvedLibraries import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull @@ -89,7 +85,7 @@ abstract class BasicIrBoxTest( compilationCache[it] ?: error("Can't find compiled module for dependency $it") }).map { File(it).absolutePath } - val resolvedLibraries = jsResolveLibraries(allKlibPaths) + val resolvedLibraries = jsResolveLibraries(allKlibPaths, messageCollectorLogger(config.configuration)) val actualOutputFile = outputFile.absolutePath.let { if (!isMainModule) it.replace("_v5.js", "/") else it