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
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.library.KotlinLibrary
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.impl.libraryResolver
import org.jetbrains.kotlin.util.Logger
import java.io.File
class JsLibraryResolver(
repositories: List<String>,
@@ -33,9 +33,11 @@ class JsLibraryResolver(
distributionKlib,
localKotlinDir,
skipCurrentDir,
logger,
::createKotlinLibrary
)
logger
) {
// 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.
fun jsResolveLibraries(libraries: List<String>, logger: Logger): KotlinLibraryResolveResult {
@@ -60,4 +62,4 @@ fun jsResolveLibraries(libraries: List<String>, logger: Logger): KotlinLibraryRe
noEndorsedLibs = true
)
return resolvedLibraries
}
}
@@ -21,33 +21,14 @@ interface SearchPathResolverWithAttributes<L: KotlinLibrary>: SearchPathResolver
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.
open class KotlinLibrarySearchPathResolver<L: KotlinLibrary>(
abstract class KotlinLibrarySearchPathResolver<L: KotlinLibrary>(
repositories: List<String>,
directLibs: List<String>,
val distributionKlib: String?,
val localKotlinDir: String?,
val skipCurrentDir: Boolean,
override val logger: Logger,
open val libraryBuilder: (File, Boolean) -> L
override val logger: Logger
) : SearchPathResolver<L> {
val localHead: File?
@@ -63,6 +44,8 @@ open class KotlinLibrarySearchPathResolver<L: KotlinLibrary>(
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 {
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,
// such as abi version.
// JS and Native resolvers are inherited from this one.
open class KotlinLibraryProperResolverWithAttributes<L: KotlinLibrary>(
abstract class KotlinLibraryProperResolverWithAttributes<L: KotlinLibrary>(
repositories: List<String>,
directLibs: List<String>,
override val knownAbiVersions: List<KotlinAbiVersion>?,
@@ -187,9 +170,8 @@ open class KotlinLibraryProperResolverWithAttributes<L: KotlinLibrary>(
distributionKlib: String?,
localKotlinDir: String?,
skipCurrentDir: Boolean,
override val logger: Logger,
override val libraryBuilder: (File, Boolean) -> L
) : KotlinLibrarySearchPathResolver<L>(repositories, directLibs, distributionKlib, localKotlinDir, skipCurrentDir, logger, libraryBuilder),
override val logger: Logger
) : KotlinLibrarySearchPathResolver<L>(repositories, directLibs, distributionKlib, localKotlinDir, skipCurrentDir, logger),
SearchPathResolverWithAttributes<L>
{
override fun libraryMatch(candidate: L, unresolved: UnresolvedLibrary): Boolean {