From 90cf9daff3164b827bf6a8a56657578d2848e5cb Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Mon, 3 Jun 2019 10:15:35 +0300 Subject: [PATCH] [Resolve] Abstract creation of platform-specific package fragment providers --- .../resolve/IdePlatformKindResolution.kt | 12 +++++++++++ .../ide/konan/NativePlatformKindResolution.kt | 20 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/IdePlatformKindResolution.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/IdePlatformKindResolution.kt index d7b04fedb3d..d3fee2cb34f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/IdePlatformKindResolution.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/IdePlatformKindResolution.kt @@ -20,16 +20,21 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.roots.libraries.Library import com.intellij.openapi.roots.libraries.PersistentLibraryKind import com.intellij.openapi.vfs.VirtualFile +import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.PlatformAnalysisParameters import org.jetbrains.kotlin.analyzer.ResolverForModuleFactory import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.context.ProjectContext +import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.descriptors.PackageFragmentProvider import org.jetbrains.kotlin.extensions.ApplicationExtensionDescriptor import org.jetbrains.kotlin.idea.caches.project.LibraryInfo import org.jetbrains.kotlin.idea.caches.resolve.PlatformAnalysisSettings import org.jetbrains.kotlin.platform.IdePlatformKind import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.resolve.TargetEnvironment +import org.jetbrains.kotlin.storage.StorageManager interface IdePlatformKindResolution { val kind: IdePlatformKind<*> @@ -44,6 +49,13 @@ interface IdePlatformKindResolution { fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean + fun createPlatformSpecificPackageFragmentProvider( + moduleInfo: ModuleInfo, + storageManager: StorageManager, + languageVersionSettings: LanguageVersionSettings, + moduleDescriptor: ModuleDescriptor + ): PackageFragmentProvider? = null + val libraryKind: PersistentLibraryKind<*>? fun createLibraryInfo(project: Project, library: Library): List { diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt index 12eef60d889..874480a15e5 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt @@ -12,12 +12,17 @@ import com.intellij.openapi.roots.libraries.PersistentLibraryKind import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VirtualFile import com.intellij.util.PathUtil +import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.analyzer.PlatformAnalysisParameters +import org.jetbrains.kotlin.analyzer.ResolverForModuleFactory import org.jetbrains.kotlin.analyzer.getCapability import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.caches.resolve.IdePlatformKindResolution +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.context.ProjectContext import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.descriptors.PackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider import org.jetbrains.kotlin.descriptors.konan.DeserializedKonanModuleOrigin import org.jetbrains.kotlin.ide.konan.analyzer.NativeResolverForModuleFactory @@ -33,6 +38,7 @@ import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind import org.jetbrains.kotlin.platform.konan.KonanPlatforms import org.jetbrains.kotlin.resolve.* +import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult class NativePlatformKindResolution : IdePlatformKindResolution { @@ -45,6 +51,20 @@ class NativePlatformKindResolution : IdePlatformKindResolution { } } + override fun createPlatformSpecificPackageFragmentProvider( + moduleInfo: ModuleInfo, + storageManager: StorageManager, + languageVersionSettings: LanguageVersionSettings, + moduleDescriptor: ModuleDescriptor + ): PackageFragmentProvider? { + val konanLibrary = moduleInfo.getCapability(NativeLibraryInfo.NATIVE_LIBRARY_CAPABILITY) ?: return null + return konanLibrary.createPackageFragmentProvider( + storageManager, + languageVersionSettings, + moduleDescriptor + ) + } + override fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean { return when { // The virtual file for a library packed in a ZIP file will have path like "/some/path/to/the/file.klib!/",