Attached library resolver to messge collector
This commit is contained in:
committed by
alexander-gorshenev
parent
47fba2ee4b
commit
71eb413350
@@ -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.arguments.K2JsArgumentConstants
|
||||||
import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot
|
import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.*
|
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.MessageCollector
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageUtil
|
import org.jetbrains.kotlin.cli.common.messages.MessageUtil
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
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.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
|
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
|
||||||
import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer
|
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.EcmaVersion
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||||
import org.jetbrains.kotlin.js.config.JsConfig
|
import org.jetbrains.kotlin.js.config.JsConfig
|
||||||
import org.jetbrains.kotlin.js.config.SourceMapSourceEmbedding
|
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.metadata.deserialization.BinaryVersion
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
||||||
|
import org.jetbrains.kotlin.util.Logger
|
||||||
import org.jetbrains.kotlin.utils.JsMetadataVersion
|
import org.jetbrains.kotlin.utils.JsMetadataVersion
|
||||||
import org.jetbrains.kotlin.utils.KotlinPaths
|
import org.jetbrains.kotlin.utils.KotlinPaths
|
||||||
import org.jetbrains.kotlin.utils.join
|
import org.jetbrains.kotlin.utils.join
|
||||||
@@ -142,7 +142,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
// TODO: Handle non-empty main call arguments
|
// TODO: Handle non-empty main call arguments
|
||||||
val mainCallArguments = if (K2JsArgumentConstants.NO_CALL == arguments.main) null else emptyList<String>()
|
val mainCallArguments = if (K2JsArgumentConstants.NO_CALL == arguments.main) null else emptyList<String>()
|
||||||
|
|
||||||
val resolvedLibraries = jsResolveLibraries(libraries)
|
val resolvedLibraries = jsResolveLibraries(libraries, messageCollectorLogger(configuration))
|
||||||
|
|
||||||
val friendAbsolutePaths = friendLibraries.map { File(it).absolutePath }
|
val friendAbsolutePaths = friendLibraries.map { File(it).absolutePath }
|
||||||
val friendDependencies = resolvedLibraries.getFullList().filter {
|
val friendDependencies = resolvedLibraries.getFullList().filter {
|
||||||
@@ -336,3 +336,15 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -52,6 +52,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
|||||||
import org.jetbrains.kotlin.resolve.BindingContextUtils
|
import org.jetbrains.kotlin.resolve.BindingContextUtils
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
import org.jetbrains.kotlin.util.Logger
|
||||||
import org.jetbrains.kotlin.utils.DFS
|
import org.jetbrains.kotlin.utils.DFS
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import org.jetbrains.kotlin.konan.file.File as KFile
|
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)
|
class KotlinFileSerializedData(val metadata: ByteArray, val irData: SerializedIrFile)
|
||||||
|
|
||||||
// TODO: This is a temporary set of library resolver policies for js compiler.
|
// TODO: This is a temporary set of library resolver policies for js compiler.
|
||||||
fun jsResolveLibraries(libraries: List<String>): KotlinLibraryResolveResult {
|
fun jsResolveLibraries(libraries: List<String>, logger: Logger): KotlinLibraryResolveResult {
|
||||||
|
|
||||||
val unresolvedLibraries = libraries.map { UnresolvedLibrary(it ,null) }
|
val unresolvedLibraries = libraries.map { UnresolvedLibrary(it ,null) }
|
||||||
val libraryAbsolutePaths = libraries.map{ File(it).absolutePath }
|
val libraryAbsolutePaths = libraries.map{ File(it).absolutePath }
|
||||||
// Configure the resolver to only work with absolute paths for now.
|
// Configure the resolver to only work with absolute paths for now.
|
||||||
@@ -92,8 +92,8 @@ fun jsResolveLibraries(libraries: List<String>): KotlinLibraryResolveResult {
|
|||||||
directLibs = libraryAbsolutePaths,
|
directLibs = libraryAbsolutePaths,
|
||||||
distributionKlib = null,
|
distributionKlib = null,
|
||||||
localKotlinDir = null,
|
localKotlinDir = null,
|
||||||
skipCurrentDir = false
|
skipCurrentDir = false,
|
||||||
// TODO: pass logger attached to message collector here.
|
logger = logger
|
||||||
).libraryResolver()
|
).libraryResolver()
|
||||||
val resolvedLibraries =
|
val resolvedLibraries =
|
||||||
libraryResolver.resolveWithDependencies(
|
libraryResolver.resolveWithDependencies(
|
||||||
@@ -105,7 +105,6 @@ fun jsResolveLibraries(libraries: List<String>): KotlinLibraryResolveResult {
|
|||||||
return resolvedLibraries
|
return resolvedLibraries
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun generateKLib(
|
fun generateKLib(
|
||||||
project: Project,
|
project: Project,
|
||||||
files: List<KtFile>,
|
files: List<KtFile>,
|
||||||
|
|||||||
@@ -13,14 +13,11 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
|||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.config.*
|
import org.jetbrains.kotlin.config.*
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
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.KotlinLibraryResolveResult
|
||||||
import org.jetbrains.kotlin.library.resolver.impl.libraryResolver
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource
|
import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource
|
||||||
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
||||||
|
import org.jetbrains.kotlin.util.Logger
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
fun buildConfiguration(environment: KotlinCoreEnvironment, moduleName: String): CompilerConfiguration {
|
fun buildConfiguration(environment: KotlinCoreEnvironment, moduleName: String): CompilerConfiguration {
|
||||||
@@ -116,7 +113,16 @@ fun main(args: Array<String>) {
|
|||||||
if (outputPath == null) {
|
if (outputPath == null) {
|
||||||
error("Please set path to .klm file: `-o some/dir/module-name.klm`")
|
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))
|
buildKLib(File(outputPath).absolutePath, listOfKtFilesFrom(inputFiles), outputPath, resolvedLibraries, listOfKtFilesFrom(commonSources))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.PhaseConfig
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap
|
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.compile
|
||||||
import org.jetbrains.kotlin.ir.backend.js.generateKLib
|
import org.jetbrains.kotlin.ir.backend.js.generateKLib
|
||||||
import org.jetbrains.kotlin.ir.backend.js.jsPhases
|
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.config.JsConfig
|
||||||
import org.jetbrains.kotlin.js.facade.MainCallParameters
|
import org.jetbrains.kotlin.js.facade.MainCallParameters
|
||||||
import org.jetbrains.kotlin.js.facade.TranslationUnit
|
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.name.FqName
|
||||||
import org.jetbrains.kotlin.test.TargetBackend
|
import org.jetbrains.kotlin.test.TargetBackend
|
||||||
import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull
|
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")
|
compilationCache[it] ?: error("Can't find compiled module for dependency $it")
|
||||||
}).map { File(it).absolutePath }
|
}).map { File(it).absolutePath }
|
||||||
|
|
||||||
val resolvedLibraries = jsResolveLibraries(allKlibPaths)
|
val resolvedLibraries = jsResolveLibraries(allKlibPaths, messageCollectorLogger(config.configuration))
|
||||||
|
|
||||||
val actualOutputFile = outputFile.absolutePath.let {
|
val actualOutputFile = outputFile.absolutePath.let {
|
||||||
if (!isMainModule) it.replace("_v5.js", "/") else it
|
if (!isMainModule) it.replace("_v5.js", "/") else it
|
||||||
|
|||||||
Reference in New Issue
Block a user