From 47fba2ee4b19b894e231a37d8b96ac6fbfd59e7d Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Mon, 7 Oct 2019 01:07:22 +0300 Subject: [PATCH] A couple of fixes for js library resolver --- .../jetbrains/kotlin/cli/js/K2JsIrCompiler.kt | 12 +-------- .../jetbrains/kotlin/ir/backend/js/klib.kt | 26 +++++++++++++++++++ .../test/GenerateIrRuntime.kt | 14 +--------- .../kotlin/js/test/BasicIrBoxTest.kt | 19 ++------------ 4 files changed, 30 insertions(+), 41 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 59e570cb83b..b2a0335e717 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 @@ -142,17 +142,7 @@ class K2JsIrCompiler : CLICompiler() { // TODO: Handle non-empty main call arguments val mainCallArguments = if (K2JsArgumentConstants.NO_CALL == arguments.main) null else emptyList() - val unresolvedLibraries = libraries.toUnresolvedLibraries - // Configure resolver to only understands absolute path libraries. - val libraryResolver = KotlinLibrarySearchPathResolver( - repositories = emptyList(), - directLibs = libraries, - distributionKlib = null, - localKotlinDir = null, - skipCurrentDir = true - // TODO: pass logger attached to message collector here. - ).libraryResolver() - val resolvedLibraries = libraryResolver.resolveWithDependencies(unresolvedLibraries, true, true, true) + val resolvedLibraries = jsResolveLibraries(libraries) val friendAbsolutePaths = friendLibraries.map { File(it).absolutePath } val friendDependencies = resolvedLibraries.getFullList().filter { 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 b8f4cda8d86..0184958904e 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 @@ -41,6 +41,7 @@ import org.jetbrains.kotlin.library.impl.buildKoltinLibrary import org.jetbrains.kotlin.library.impl.createKotlinLibrary import org.jetbrains.kotlin.library.resolver.KotlinLibraryResolveResult import org.jetbrains.kotlin.library.resolver.TopologicalLibraryOrder +import org.jetbrains.kotlin.library.resolver.impl.libraryResolver import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus import org.jetbrains.kotlin.psi.KtFile @@ -80,6 +81,31 @@ 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 { + + 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. + val libraryResolver = KotlinLibrarySearchPathResolver( + repositories = emptyList(), + directLibs = libraryAbsolutePaths, + distributionKlib = null, + localKotlinDir = null, + skipCurrentDir = false + // TODO: pass logger attached to message collector here. + ).libraryResolver() + val resolvedLibraries = + libraryResolver.resolveWithDependencies( + unresolvedLibraries = unresolvedLibraries, + noStdLib = true, + noDefaultLibs = true, + noEndorsedLibs = true + ) + 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 5c4fd711f7e..4b8d0300d6e 100644 --- a/compiler/ir/serialization.js/test/GenerateIrRuntime.kt +++ b/compiler/ir/serialization.js/test/GenerateIrRuntime.kt @@ -116,19 +116,7 @@ fun main(args: Array) { if (outputPath == null) { error("Please set path to .klm file: `-o some/dir/module-name.klm`") } - - val dependencyAbsolutePaths = dependencies.map{ File(it).absolutePath } - val unresolvedLibraries = dependencies.map { UnresolvedLibrary(it, null) } - // Configure the resolver to only understand absolute path libraries. - val libraryResolver = KotlinLibrarySearchPathResolver( - repositories = emptyList(), - directLibs = dependencyAbsolutePaths, - distributionKlib = null, - localKotlinDir = null, - skipCurrentDir = true - // TODO: pass logger attached to message collector here. - ).libraryResolver() - val resolvedLibraries = libraryResolver.resolveWithDependencies(unresolvedLibraries, true, true, true) + val resolvedLibraries = jsResolveLibraries(dependencies) 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 e37d17faae3..5796f365a6d 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 @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap 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.JSConfigurationKeys import org.jetbrains.kotlin.js.config.JsConfig import org.jetbrains.kotlin.js.facade.MainCallParameters @@ -87,24 +88,8 @@ abstract class BasicIrBoxTest( val allKlibPaths = (runtimeKlibs + transitiveLibraries.map { compilationCache[it] ?: error("Can't find compiled module for dependency $it") }).map { File(it).absolutePath } - val unresolvedLibraries = allKlibPaths.toUnresolvedLibraries - // Configure the resolver to only work with absolute paths for now. - val libraryResolver = KotlinLibrarySearchPathResolver( - repositories = emptyList(), - directLibs = allKlibPaths, - distributionKlib = null, - localKotlinDir = null, - skipCurrentDir = true - // TODO: pass logger attached to message collector here. - ).libraryResolver() - val resolvedLibraries = - libraryResolver.resolveWithDependencies( - unresolvedLibraries = unresolvedLibraries, - noStdLib = true, - noDefaultLibs = true, - noEndorsedLibs = true - ) + val resolvedLibraries = jsResolveLibraries(allKlibPaths) val actualOutputFile = outputFile.absolutePath.let { if (!isMainModule) it.replace("_v5.js", "/") else it