KLIB API constants clean-up

This commit is contained in:
Dmitriy Dolovov
2019-10-01 16:13:15 +07:00
committed by alexander-gorshenev
parent 781c73335d
commit 5985c0c02b
11 changed files with 49 additions and 63 deletions
@@ -21,8 +21,8 @@ import org.jetbrains.kotlin.storage.getValue
import org.jetbrains.kotlin.utils.Printer
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
// FIXME(ddol): decouple and move interop-specific logic back to Kotlin/Native.
open class KlibMetadataDeserializedPackageFragmentsFactoryImpl: KlibMetadataDeserializedPackageFragmentsFactory {
// TODO decouple and move interop-specific logic back to Kotlin/Native.
open class KlibMetadataDeserializedPackageFragmentsFactoryImpl : KlibMetadataDeserializedPackageFragmentsFactory {
override fun createDeserializedPackageFragments(
library: KotlinLibrary,
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.utils.Printer
// TODO: eliminate Native specifics.
class KlibResolvedModuleDescriptorsFactoryImpl(
override val moduleDescriptorFactory: KlibMetadataModuleDescriptorFactory
override val moduleDescriptorFactory: KlibMetadataModuleDescriptorFactory
): KlibResolvedModuleDescriptorsFactory {
override fun createResolved(
@@ -169,7 +169,7 @@ class ForwardDeclarationsPackageFragmentDescriptor(
override fun getMemberScope(): MemberScope = memberScope
}
// FIXME(ddol): decouple and move interop-specific logic back to Kotlin/Native.
// TODO decouple and move interop-specific logic back to Kotlin/Native.
internal object ForwardDeclarationsFqNames {
val packageName = FqName("kotlinx.cinterop")
@@ -54,7 +54,7 @@ import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion
import org.jetbrains.kotlin.idea.inspections.gradle.getResolvedVersionByModuleData
import org.jetbrains.kotlin.idea.platform.tooling
import org.jetbrains.kotlin.idea.roots.migrateNonJvmSourceFolders
import org.jetbrains.kotlin.konan.library.KLIB_FILE_EXTENSION
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
import org.jetbrains.kotlin.platform.IdePlatformKind
import org.jetbrains.kotlin.platform.impl.isCommon
import org.jetbrains.kotlin.platform.impl.isJavaScript
@@ -8,12 +8,11 @@ package org.jetbrains.kotlin.ide.konan
import com.intellij.ide.highlighter.ArchiveFileType
import com.intellij.openapi.fileTypes.FileTypeConsumer
import com.intellij.openapi.fileTypes.FileTypeFactory
import org.jetbrains.kotlin.konan.library.KLIB_FILE_EXTENSION
import org.jetbrains.kotlin.konan.library.KDEFINITIONS_FILE_EXTENSION
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
class KotlinNativeFileTypeFactory : FileTypeFactory() {
override fun createFileTypes(consumer: FileTypeConsumer) {
consumer.consume(ArchiveFileType.INSTANCE, KLIB_FILE_EXTENSION)
consumer.consume(NativeDefinitionsFileType, KDEFINITIONS_FILE_EXTENSION)
consumer.consume(NativeDefinitionsFileType, KOTLIN_NATIVE_DEFINITIONS_FILE_EXTENSION)
}
}
@@ -21,37 +21,36 @@ import javax.swing.Icon
import java.io.Reader
import org.jetbrains.kotlin.ide.konan.psi.*
import org.jetbrains.kotlin.idea.KotlinIcons
import org.jetbrains.kotlin.konan.library.KDEFINITIONS_FILE_EXTENSION
const val NATIVE_DEFINITIONS_ID = "KND"
const val NATIVE_DEFINITIONS_NAME = "Kotlin/Native Def"
const val NATIVE_DEFINITIONS_DESCRIPTION = "Definitions file for Kotlin/Native C interop"
const val KOTLIN_NATIVE_DEFINITIONS_FILE_EXTENSION = "def"
const val KOTLIN_NATIVE_DEFINITIONS_ID = "KND"
const val KOTLIN_NATIVE_DEFINITIONS_NAME = "Kotlin/Native Def"
const val KOTLIN_NATIVE_DEFINITIONS_DESCRIPTION = "Definitions file for Kotlin/Native C interop"
object NativeDefinitionsFileType : LanguageFileType(NativeDefinitionsLanguage.INSTANCE) {
override fun getName(): String = NATIVE_DEFINITIONS_NAME
override fun getName(): String = KOTLIN_NATIVE_DEFINITIONS_NAME
override fun getDescription(): String = NATIVE_DEFINITIONS_DESCRIPTION
override fun getDescription(): String = KOTLIN_NATIVE_DEFINITIONS_DESCRIPTION
override fun getDefaultExtension(): String = KDEFINITIONS_FILE_EXTENSION
override fun getDefaultExtension(): String = KOTLIN_NATIVE_DEFINITIONS_FILE_EXTENSION
override fun getIcon(): Icon = KotlinIcons.NATIVE
}
class NativeDefinitionsLanguage private constructor() : Language(NATIVE_DEFINITIONS_ID) {
class NativeDefinitionsLanguage private constructor() : Language(KOTLIN_NATIVE_DEFINITIONS_ID) {
companion object {
val INSTANCE = NativeDefinitionsLanguage()
}
override fun getDisplayName(): String = NATIVE_DEFINITIONS_NAME
override fun getDisplayName(): String = KOTLIN_NATIVE_DEFINITIONS_NAME
}
class NativeDefinitionsFile(viewProvider: FileViewProvider) : PsiFileBase(viewProvider, NativeDefinitionsLanguage.INSTANCE) {
override fun getFileType(): FileType = NativeDefinitionsFileType
override fun toString(): String = NATIVE_DEFINITIONS_DESCRIPTION
override fun toString(): String = KOTLIN_NATIVE_DEFINITIONS_DESCRIPTION
override fun getIcon(flags: Int): Icon? = super.getIcon(flags)
}
@@ -32,11 +32,13 @@ import org.jetbrains.kotlin.idea.caches.project.lazyClosure
import org.jetbrains.kotlin.idea.caches.resolve.BuiltInsCacheKey
import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.library.*
import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME
import org.jetbrains.kotlin.konan.library.KonanFactories
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
import org.jetbrains.kotlin.library.KLIB_METADATA_FILE_EXTENSION
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.impl.createKotlinLibrary
import org.jetbrains.kotlin.library.isInterop
import org.jetbrains.kotlin.library.metadata.parseModuleHeader
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind
import org.jetbrains.kotlin.platform.konan.KonanPlatforms
@@ -136,7 +138,7 @@ private fun createKotlinNativeBuiltIns(moduleInfo: ModuleInfo, projectContext: P
val project = projectContext.project
val storageManager = projectContext.storageManager
val stdlibInfo = moduleInfo.findNativeStdlib(project) ?: return DefaultBuiltIns.Instance
val stdlibInfo = moduleInfo.findNativeStdlib() ?: return DefaultBuiltIns.Instance
val konanLibrary = stdlibInfo.getCapability(NativeLibraryInfo.NATIVE_LIBRARY_CAPABILITY)!!
val builtInsModule = KonanFactories.DefaultDescriptorFactory.createDescriptorAndNewBuiltIns(
@@ -176,7 +178,7 @@ private fun createKotlinNativeBuiltIns(moduleInfo: ModuleInfo, projectContext: P
return builtInsModule.builtIns
}
private fun ModuleInfo.findNativeStdlib(project: Project): NativeLibraryInfo? =
private fun ModuleInfo.findNativeStdlib(): NativeLibraryInfo? =
dependencies().lazyClosure { it.dependencies() }
.filterIsInstance<NativeLibraryInfo>()
.firstOrNull { it.isStdlib }
@@ -9,7 +9,7 @@ import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.BaseComponent
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.containers.ContainerUtil.createConcurrentWeakValueMap
import org.jetbrains.kotlin.konan.library.KLIB_METADATA_FILE_EXTENSION
import org.jetbrains.kotlin.library.KLIB_METADATA_FILE_EXTENSION
import org.jetbrains.kotlin.library.KLIB_MODULE_METADATA_FILE_NAME
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
import org.jetbrains.kotlin.library.metadata.parseModuleHeader
@@ -9,7 +9,7 @@ import com.intellij.openapi.fileTypes.FileType
import com.intellij.openapi.fileTypes.FileTypeConsumer
import com.intellij.openapi.fileTypes.FileTypeFactory
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.konan.library.KLIB_METADATA_FILE_EXTENSION
import org.jetbrains.kotlin.library.KLIB_METADATA_FILE_EXTENSION
import org.jetbrains.kotlin.library.metadata.KlibMetadataSerializerProtocol
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
import org.jetbrains.kotlin.serialization.konan.NullFlexibleTypeDeserializer
@@ -43,10 +43,10 @@ object KotlinNativeMetaFileType : FileType {
override fun getName() = "KNM"
override fun getDescription() = "Kotlin/Native Metadata"
override fun getDefaultExtension() = KLIB_METADATA_FILE_EXTENSION
override fun getIcon() = null
override fun getIcon(): Nothing? = null
override fun isBinary() = true
override fun isReadOnly() = true
override fun getCharset(file: VirtualFile, content: ByteArray) = null
override fun getCharset(file: VirtualFile, content: ByteArray): Nothing? = null
const val STUB_VERSION = 2
}
@@ -7,30 +7,16 @@ package org.jetbrains.kotlin.konan.library
import java.io.File
const val KLIB_FILE_EXTENSION = "klib"
const val KLIB_FILE_EXTENSION_WITH_DOT = ".$KLIB_FILE_EXTENSION"
const val KLIB_METADATA_FILE_EXTENSION = "knm"
const val KLIB_METADATA_FILE_EXTENSION_WITH_DOT = ".$KLIB_METADATA_FILE_EXTENSION"
const val KDEFINITIONS_FILE_EXTENSION = "def"
const val KONAN_STDLIB_NAME = "stdlib"
const val KLIB_DIR_NAME = "klib"
const val KONAN_COMMON_LIBS_DIR_NAME = "common"
const val KONAN_PLATFORM_LIBS_DIR_NAME = "platform"
const val KONAN_DISTRIBUTION_KLIB_DIR = "klib"
const val KONAN_DISTRIBUTION_COMMON_LIBS_DIR = "common"
const val KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR = "platform"
const val KONAN_SOURCES_DIR_NAME = "sources"
const val KONAN_DISTRIBUTION_SOURCES_DIR = "sources"
val KONAN_COMMON_LIBS_PATH: File
get() = File(KLIB_DIR_NAME, KONAN_COMMON_LIBS_DIR_NAME)
fun konanCommonLibraryPath(libraryName: String) =
File(KONAN_DISTRIBUTION_KLIB_DIR, KONAN_DISTRIBUTION_COMMON_LIBS_DIR).resolve(libraryName)
val KONAN_ALL_PLATFORM_LIBS_PATH: File
get() = File(KLIB_DIR_NAME, KONAN_PLATFORM_LIBS_DIR_NAME)
fun konanCommonLibraryPath(libraryName: String): File = KONAN_COMMON_LIBS_PATH.resolve(libraryName)
fun konanSpecificPlatformLibrariesPath(platform: String): File = KONAN_ALL_PLATFORM_LIBS_PATH.resolve(platform)
fun konanPlatformLibraryPath(libraryName: String, platform: String): File = konanSpecificPlatformLibrariesPath(platform).resolve(libraryName)
fun konanPlatformLibraryPath(libraryName: String, platform: String) =
File(KONAN_DISTRIBUTION_KLIB_DIR, KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR).resolve(platform).resolve(libraryName)
@@ -64,7 +64,7 @@ private class FromDistributionLiteKonanLibraryProvider(customKonanHomeDir: File?
private val konanHomeDir: Path? by lazy {
customKonanHomeDir?.takeIf {
// small sanity check to ensure that it's a valid Kotlin/Native home directory
customKonanHomeDir.resolve(KLIB_DIR_NAME).isDirectory
customKonanHomeDir.resolve(KONAN_DISTRIBUTION_KLIB_DIR).isDirectory
}?.toPath()
}
@@ -105,11 +105,11 @@ private class FromDistributionLiteKonanLibraryProvider(customKonanHomeDir: File?
fun getDataDir(platformDir: File): File = platformDir.parentFile.parentFile
return when (parentDirName) {
KONAN_COMMON_LIBS_DIR_NAME -> null to getDataDir(parentDir)
KONAN_DISTRIBUTION_COMMON_LIBS_DIR -> null to getDataDir(parentDir)
else -> {
val grandParentDir = parentDir.parentFile ?: return null
when {
grandParentDir.name == KONAN_PLATFORM_LIBS_DIR_NAME -> parentDirName to getDataDir(grandParentDir)
grandParentDir.name == KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR -> parentDirName to getDataDir(grandParentDir)
else -> return null
}
}
@@ -117,7 +117,7 @@ private class FromDistributionLiteKonanLibraryProvider(customKonanHomeDir: File?
}
private fun getStdlibSources(dataDir: File): Collection<File> {
val sourcesDir = dataDir.resolve(KONAN_SOURCES_DIR_NAME).takeIf { it.isDirectory } ?: return emptyList()
val sourcesDir = dataDir.resolve(KONAN_DISTRIBUTION_SOURCES_DIR).takeIf { it.isDirectory } ?: return emptyList()
return sourcesDir.walkTopDown().maxDepth(1)
.filter { it.isFile }
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.konan.library.lite
import org.jetbrains.kotlin.konan.library.KLIB_DIR_NAME
import org.jetbrains.kotlin.konan.library.KONAN_COMMON_LIBS_DIR_NAME
import org.jetbrains.kotlin.konan.library.KONAN_PLATFORM_LIBS_DIR_NAME
import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_KLIB_DIR
import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_COMMON_LIBS_DIR
import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR
import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME
import org.junit.Assert.*
import org.junit.Test
@@ -71,8 +71,8 @@ class LiteKonanLibraryFacadeTests {
private fun getPotentialLibraryPathsOnLocalFS(): List<File> {
val roots = mutableListOf(externalLibsDir)
roots += klibDir.resolve(KONAN_COMMON_LIBS_DIR_NAME)
roots += klibDir.resolve(KONAN_PLATFORM_LIBS_DIR_NAME).listFiles(FileFilter { it.isDirectory }).toList()
roots += klibDir.resolve(KONAN_DISTRIBUTION_COMMON_LIBS_DIR)
roots += klibDir.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR).listFiles(FileFilter { it.isDirectory }).toList()
return roots.flatMap { it.listFiles().toList() }
}
@@ -81,10 +81,10 @@ class LiteKonanLibraryFacadeTests {
getPotentialLibraryPathsOnLocalFS().mapNotNull { libraryProvider.getLibrary(it) }.toLibraryMap()
private fun librariesExpectedInDistribution(): Map<File, FakeLibraryForTest> = listOf(
FakeLibraryForTest(klibDir.resolve(KONAN_COMMON_LIBS_DIR_NAME, KONAN_STDLIB_NAME)),
FakeLibraryForTest(klibDir.resolve(KONAN_PLATFORM_LIBS_DIR_NAME, "macos_x64", "foo"), platform = "macos_x64"),
FakeLibraryForTest(klibDir.resolve(KONAN_PLATFORM_LIBS_DIR_NAME, "macos_x64", "bar"), platform = "macos_x64"),
FakeLibraryForTest(klibDir.resolve(KONAN_PLATFORM_LIBS_DIR_NAME, "macos_x64", "baz"), platform = "macos_x64")
FakeLibraryForTest(klibDir.resolve(KONAN_DISTRIBUTION_COMMON_LIBS_DIR, KONAN_STDLIB_NAME)),
FakeLibraryForTest(klibDir.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR, "macos_x64", "foo"), platform = "macos_x64"),
FakeLibraryForTest(klibDir.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR, "macos_x64", "bar"), platform = "macos_x64"),
FakeLibraryForTest(klibDir.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR, "macos_x64", "baz"), platform = "macos_x64")
).toLibraryMap()
private fun librariesExpectedInExternalDir(): Map<File, FakeLibraryForTest> = listOf(
@@ -107,7 +107,7 @@ class LiteKonanLibraryFacadeTests {
}
private companion object {
val klibDir = konanHomeDir.resolve(KLIB_DIR_NAME)
val klibDir = konanHomeDir.resolve(KONAN_DISTRIBUTION_KLIB_DIR)
val externalLibsDir = testDataDir.resolve("external-libs")
fun <T : LiteKonanLibrary> List<T>.toLibraryMap() = map { it.path to it }.toMap()