From f3bc533073c3488cc4219d00ef0c0ac3df232bc1 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Fri, 17 Jan 2020 17:00:52 +0300 Subject: [PATCH] Move tools to resolveSingleFileKlib --- .../kotlin/library/SearchPathResolver.kt | 23 +++++++++++++++++++ .../konan/NativeDistributionCommonizer.kt | 4 ++-- .../targets/native/tasks/KotlinNativeTasks.kt | 5 ++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt index f4106e4acf7..98c73c8c5e5 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt @@ -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( return true } +} + +class SingleKlibComponentResolver( + klibFile: String, + knownAbiVersions: List?, + logger: Logger +) : KotlinLibraryProperResolverWithAttributes( + 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) } \ No newline at end of file diff --git a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionCommonizer.kt b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionCommonizer.kt index 781a53d7ad5..4a4f04e63df 100644 --- a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionCommonizer.kt +++ b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionCommonizer.kt @@ -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") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index 0dc1ac05b23..8a3d88a0b84 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -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(