Several more librry resolver tweaks.

Made library builder a member function.
Moved resolverByName() back to Native for now
This commit is contained in:
Alexander Gorshenev
2019-10-10 17:38:49 +03:00
committed by alexander-gorshenev
parent 55805ddeb8
commit f18a3f7fa9
2 changed files with 14 additions and 30 deletions
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.backend.js package org.jetbrains.kotlin.ir.backend.js
import org.jetbrains.kotlin.konan.KonanVersion import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.library.KotlinAbiVersion import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.KotlinLibraryProperResolverWithAttributes import org.jetbrains.kotlin.library.KotlinLibraryProperResolverWithAttributes
@@ -14,7 +15,6 @@ import org.jetbrains.kotlin.library.impl.createKotlinLibrary
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.library.resolver.impl.libraryResolver
import org.jetbrains.kotlin.util.Logger import org.jetbrains.kotlin.util.Logger
import java.io.File
class JsLibraryResolver( class JsLibraryResolver(
repositories: List<String>, repositories: List<String>,
@@ -33,9 +33,11 @@ class JsLibraryResolver(
distributionKlib, distributionKlib,
localKotlinDir, localKotlinDir,
skipCurrentDir, skipCurrentDir,
logger, logger
::createKotlinLibrary ) {
) // Stick with the default KotlinLibrary for now.
override fun libraryBuilder(file: File, isDefault: Boolean) = createKotlinLibrary(file, isDefault)
}
// 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>, logger: Logger): KotlinLibraryResolveResult { fun jsResolveLibraries(libraries: List<String>, logger: Logger): KotlinLibraryResolveResult {
@@ -21,33 +21,14 @@ interface SearchPathResolverWithAttributes<L: KotlinLibrary>: SearchPathResolver
val knownCompilerVersions: List<KonanVersion>? val knownCompilerVersions: List<KonanVersion>?
} }
fun resolverByName(
repositories: List<String>,
directLibs: List<String> = emptyList(),
distributionKlib: String? = null,
localKotlinDir: String? = null,
skipCurrentDir: Boolean = false,
logger: Logger
): SearchPathResolver<KotlinLibrary> =
KotlinLibrarySearchPathResolver(
repositories,
directLibs,
distributionKlib,
localKotlinDir,
skipCurrentDir,
logger,
::createKotlinLibrary
)
// This is a simple library resolver that only cares for file names. // This is a simple library resolver that only cares for file names.
open class KotlinLibrarySearchPathResolver<L: KotlinLibrary>( abstract class KotlinLibrarySearchPathResolver<L: KotlinLibrary>(
repositories: List<String>, repositories: List<String>,
directLibs: List<String>, directLibs: List<String>,
val distributionKlib: String?, val distributionKlib: String?,
val localKotlinDir: String?, val localKotlinDir: String?,
val skipCurrentDir: Boolean, val skipCurrentDir: Boolean,
override val logger: Logger, override val logger: Logger
open val libraryBuilder: (File, Boolean) -> L
) : SearchPathResolver<L> { ) : SearchPathResolver<L> {
val localHead: File? val localHead: File?
@@ -63,6 +44,8 @@ open class KotlinLibrarySearchPathResolver<L: KotlinLibrary>(
private val repoRoots: List<File> by lazy { repositories.map { File(it) } } private val repoRoots: List<File> by lazy { repositories.map { File(it) } }
abstract fun libraryBuilder(file: File, isDefault: Boolean): L
private val directLibraries: List<KotlinLibrary> by lazy { private val directLibraries: List<KotlinLibrary> by lazy {
directLibs.mapNotNull { found(File(it)) }.map { libraryBuilder(it, false) } directLibs.mapNotNull { found(File(it)) }.map { libraryBuilder(it, false) }
} }
@@ -179,7 +162,7 @@ fun KonanVersion.compatible(other: KonanVersion) =
// This is a library resolver aware of attributes shared between platforms, // This is a library resolver aware of attributes shared between platforms,
// such as abi version. // such as abi version.
// JS and Native resolvers are inherited from this one. // JS and Native resolvers are inherited from this one.
open class KotlinLibraryProperResolverWithAttributes<L: KotlinLibrary>( abstract class KotlinLibraryProperResolverWithAttributes<L: KotlinLibrary>(
repositories: List<String>, repositories: List<String>,
directLibs: List<String>, directLibs: List<String>,
override val knownAbiVersions: List<KotlinAbiVersion>?, override val knownAbiVersions: List<KotlinAbiVersion>?,
@@ -187,9 +170,8 @@ open class KotlinLibraryProperResolverWithAttributes<L: KotlinLibrary>(
distributionKlib: String?, distributionKlib: String?,
localKotlinDir: String?, localKotlinDir: String?,
skipCurrentDir: Boolean, skipCurrentDir: Boolean,
override val logger: Logger, override val logger: Logger
override val libraryBuilder: (File, Boolean) -> L ) : KotlinLibrarySearchPathResolver<L>(repositories, directLibs, distributionKlib, localKotlinDir, skipCurrentDir, logger),
) : KotlinLibrarySearchPathResolver<L>(repositories, directLibs, distributionKlib, localKotlinDir, skipCurrentDir, logger, libraryBuilder),
SearchPathResolverWithAttributes<L> SearchPathResolverWithAttributes<L>
{ {
override fun libraryMatch(candidate: L, unresolved: UnresolvedLibrary): Boolean { override fun libraryMatch(candidate: L, unresolved: UnresolvedLibrary): Boolean {