Move tools to resolveSingleFileKlib

This commit is contained in:
Alexander Gorshenev
2020-01-17 17:00:52 +03:00
committed by alexander-gorshenev
parent ccf084b1a5
commit f3bc533073
3 changed files with 28 additions and 4 deletions
@@ -2,6 +2,7 @@ package org.jetbrains.kotlin.library
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.library.impl.createKotlinLibraryComponents
import org.jetbrains.kotlin.library.impl.isPre_1_4_Library
import org.jetbrains.kotlin.util.*
@@ -224,4 +225,26 @@ abstract class KotlinLibraryProperResolverWithAttributes<L: KotlinLibrary>(
return true
}
}
class SingleKlibComponentResolver(
klibFile: String,
knownAbiVersions: List<KotlinAbiVersion>?,
logger: Logger
) : KotlinLibraryProperResolverWithAttributes<KotlinLibrary>(
emptyList(), listOf(klibFile), knownAbiVersions, emptyList(),
null, null, true, logger, emptyList()
) {
override fun libraryComponentBuilder(file: File, isDefault: Boolean) = createKotlinLibraryComponents(file, isDefault)
}
fun resolveSingleFileKlib(libraryFile: File,
logger: Logger = object : Logger {
override fun log(message: String) {}
override fun error(message: String) = kotlin.error("e: $message")
override fun warning(message: String) {}
override fun fatal(message: String) = kotlin.error("e: $message")
}
): KotlinLibrary {
return SingleKlibComponentResolver(libraryFile.absolutePath, emptyList(), logger).resolve(libraryFile.absolutePath)
}
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.SerializedMetadata
import org.jetbrains.kotlin.library.impl.BaseWriterImpl
import org.jetbrains.kotlin.library.impl.KoltinLibraryWriterImpl
import org.jetbrains.kotlin.library.impl.createKotlinLibrary
import org.jetbrains.kotlin.library.resolveSingleFileKlib
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.konan.impl.KlibResolvedModuleDescriptorsFactoryImpl
import org.jetbrains.kotlin.storage.LockBasedStorageManager
@@ -143,7 +143,7 @@ class NativeDistributionCommonizer(
if (!location.isDirectory)
handleError("library not found: $location")
val library = createKotlinLibrary(KFile(location.path))
val library = resolveSingleFileKlib(KFile(location.path))
if (library.versions.metadataVersion == null)
handleError("library does not have metadata version specified in manifest: $location")
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.konan.target.CompilerOutputKind.*
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.impl.createKotlinLibrary
import org.jetbrains.kotlin.library.resolveSingleFileKlib
import org.jetbrains.kotlin.library.uniqueName
import org.jetbrains.kotlin.library.unresolvedDependencies
import java.io.File
@@ -728,7 +729,7 @@ class CacheBuilder(val project: Project, val binary: NativeBinary) {
cacheDirectory.mkdirs()
val artifactsLibraries = artifactsToAddToCache
.map { createKotlinLibrary(org.jetbrains.kotlin.konan.file.File(it.file.absolutePath)) }
.map { resolveSingleFileKlib(org.jetbrains.kotlin.konan.file.File(it.file.absolutePath)) }
.associateBy { it.uniqueName }
// Top sort artifacts.
@@ -797,7 +798,7 @@ class CacheBuilder(val project: Project, val binary: NativeBinary) {
val platformLib = platformLibs[platformLibName] ?: error("$platformLibName is not found in platform libs")
if (File(rootCacheDirectory, platformLibName.cachedName).exists())
return
for (dependency in createKotlinLibrary(org.jetbrains.kotlin.konan.file.File(platformLib.absolutePath)).unresolvedDependencies)
for (dependency in resolveSingleFileKlib(org.jetbrains.kotlin.konan.file.File(platformLib.absolutePath)).unresolvedDependencies)
ensureCompilerProvidedLibPrecached(dependency.path, platformLibs, visitedLibs)
project.logger.info("Compiling $platformLibName (${visitedLibs.size}/${platformLibs.size}) to cache")
val args = mutableListOf(