IDE: Unify creation of KLIB package fragment providers (common, native)
This commit is contained in:
+7
-12
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.frontend.di.configureModule
|
||||
import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents
|
||||
import org.jetbrains.kotlin.frontend.java.di.configureJavaSpecificComponents
|
||||
import org.jetbrains.kotlin.frontend.java.di.initializeJavaSpecificComponents
|
||||
import org.jetbrains.kotlin.idea.klib.CachingIdeKlibMetadataLoader
|
||||
import org.jetbrains.kotlin.idea.klib.createKlibPackageFragmentProvider
|
||||
import org.jetbrains.kotlin.idea.project.IdeaEnvironment
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
||||
@@ -130,12 +130,10 @@ class CompositeResolverForModuleFactory(
|
||||
val metadataProvder = container.get<MetadataPackageFragmentProvider>()
|
||||
var klibMetadataProvider: PackageFragmentProvider? = null
|
||||
|
||||
if (moduleInfo is CommonKlibLibraryInfo && moduleInfo.compatibilityInfo.isCompatible) {
|
||||
if (moduleInfo is CommonKlibLibraryInfo) {
|
||||
val library = moduleInfo.resolvedKotlinLibrary
|
||||
val languageVersionSettings = container.get<LanguageVersionSettings>()
|
||||
|
||||
val packageFragmentNames = CachingIdeKlibMetadataLoader.loadModuleHeader(library).packageFragmentNameList
|
||||
|
||||
val metadataFactories = KlibMetadataFactories(
|
||||
{ DefaultBuiltIns.Instance },
|
||||
NullFlexibleTypeDeserializer
|
||||
@@ -148,14 +146,11 @@ class CompositeResolverForModuleFactory(
|
||||
metadataFactories.platformDependentTypeTransformer
|
||||
)
|
||||
|
||||
klibMetadataProvider = klibMetadataModuleDescriptorFactory.createPackageFragmentProvider(
|
||||
library,
|
||||
packageAccessHandler = CachingIdeKlibMetadataLoader,
|
||||
packageFragmentNames = packageFragmentNames,
|
||||
storageManager = moduleContext.storageManager,
|
||||
moduleDescriptor = moduleDescriptor,
|
||||
configuration = CompilerDeserializationConfiguration(languageVersionSettings),
|
||||
compositePackageFragmentAddend = null
|
||||
klibMetadataProvider = library.createKlibPackageFragmentProvider(
|
||||
moduleContext.storageManager,
|
||||
klibMetadataModuleDescriptorFactory,
|
||||
languageVersionSettings,
|
||||
moduleDescriptor
|
||||
)
|
||||
}
|
||||
return listOfNotNull(metadataProvder, klibMetadataProvider)
|
||||
|
||||
@@ -12,6 +12,10 @@ import com.intellij.psi.SingleRootFileViewProvider
|
||||
import com.intellij.psi.impl.PsiFileFactoryImpl
|
||||
import com.intellij.psi.stubs.PsiFileStub
|
||||
import com.intellij.testFramework.LightVirtualFile
|
||||
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataModuleDescriptorFactory
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||
import org.jetbrains.kotlin.library.*
|
||||
@@ -22,6 +26,8 @@ import org.jetbrains.kotlin.platform.js.isJs
|
||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||
import org.jetbrains.kotlin.platform.konan.isNative
|
||||
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes
|
||||
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import java.io.IOException
|
||||
import java.util.*
|
||||
|
||||
@@ -89,4 +95,25 @@ fun createFileStub(project: Project, text: String): PsiFileStub<*> {
|
||||
val psiFileFactory = PsiFileFactory.getInstance(project) as PsiFileFactoryImpl
|
||||
val file = psiFileFactory.trySetupPsiForFile(virtualFile, KotlinLanguage.INSTANCE, false, false)!!
|
||||
return KtStubElementTypes.FILE.builder.buildStubTree(file) as PsiFileStub<*>
|
||||
}
|
||||
}
|
||||
|
||||
fun KotlinLibrary.createKlibPackageFragmentProvider(
|
||||
storageManager: StorageManager,
|
||||
metadataModuleDescriptorFactory: KlibMetadataModuleDescriptorFactory,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
moduleDescriptor: ModuleDescriptor
|
||||
): PackageFragmentProvider? {
|
||||
if (!getCompatibilityInfo().isCompatible) return null
|
||||
|
||||
val packageFragmentNames = CachingIdeKlibMetadataLoader.loadModuleHeader(this).packageFragmentNameList
|
||||
|
||||
return metadataModuleDescriptorFactory.createPackageFragmentProvider(
|
||||
library = this,
|
||||
packageAccessHandler = CachingIdeKlibMetadataLoader,
|
||||
packageFragmentNames = packageFragmentNames,
|
||||
storageManager = storageManager,
|
||||
moduleDescriptor = moduleDescriptor,
|
||||
configuration = CompilerDeserializationConfiguration(languageVersionSettings),
|
||||
compositePackageFragmentAddend = null
|
||||
)
|
||||
}
|
||||
|
||||
+11
-18
@@ -39,7 +39,6 @@ import org.jetbrains.kotlin.library.isInterop
|
||||
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.CompilerDeserializationConfiguration
|
||||
import org.jetbrains.kotlin.resolve.ImplicitIntegerCoercion
|
||||
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
||||
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
|
||||
@@ -62,7 +61,7 @@ class NativePlatformKindResolution : IdePlatformKindResolution {
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
moduleDescriptor: ModuleDescriptor
|
||||
): PackageFragmentProvider? =
|
||||
createLibraryPackageFragmentProvider(moduleInfo, storageManager, languageVersionSettings, moduleDescriptor)
|
||||
createNativeKlibPackageFragmentProvider(moduleInfo, storageManager, languageVersionSettings, moduleDescriptor)
|
||||
|
||||
override fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean =
|
||||
virtualFile.isKlibLibraryRootForPlatform(KonanPlatforms.defaultKonanPlatform)
|
||||
@@ -90,26 +89,20 @@ class NativePlatformKindResolution : IdePlatformKindResolution {
|
||||
companion object {
|
||||
private val NativeFactories = KlibMetadataFactories(::KonanBuiltIns, NullFlexibleTypeDeserializer)
|
||||
|
||||
fun createLibraryPackageFragmentProvider(
|
||||
fun createNativeKlibPackageFragmentProvider(
|
||||
moduleInfo: ModuleInfo,
|
||||
storageManager: StorageManager,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
moduleDescriptor: ModuleDescriptor
|
||||
): PackageFragmentProvider? {
|
||||
val library = (moduleInfo as? NativeKlibLibraryInfo)?.resolvedKotlinLibrary ?: return null
|
||||
if (!library.getCompatibilityInfo().isCompatible) return null
|
||||
|
||||
val packageFragmentNames = CachingIdeKlibMetadataLoader.loadModuleHeader(library).packageFragmentNameList
|
||||
|
||||
return NativeFactories.DefaultDeserializedDescriptorFactory.createPackageFragmentProvider(
|
||||
library = library,
|
||||
packageAccessHandler = CachingIdeKlibMetadataLoader,
|
||||
packageFragmentNames = packageFragmentNames,
|
||||
storageManager = storageManager,
|
||||
moduleDescriptor = moduleDescriptor,
|
||||
configuration = CompilerDeserializationConfiguration(languageVersionSettings),
|
||||
compositePackageFragmentAddend = null
|
||||
)
|
||||
return (moduleInfo as? NativeKlibLibraryInfo)
|
||||
?.resolvedKotlinLibrary
|
||||
?.createKlibPackageFragmentProvider(
|
||||
storageManager = storageManager,
|
||||
metadataModuleDescriptorFactory = NativeFactories.DefaultDeserializedDescriptorFactory,
|
||||
languageVersionSettings = languageVersionSettings,
|
||||
moduleDescriptor = moduleDescriptor
|
||||
)
|
||||
}
|
||||
|
||||
private fun createKotlinNativeBuiltIns(moduleInfo: ModuleInfo, projectContext: ProjectContext): KotlinBuiltIns {
|
||||
@@ -131,7 +124,7 @@ class NativePlatformKindResolution : IdePlatformKindResolution {
|
||||
isReleaseCoroutines = false
|
||||
)
|
||||
|
||||
val stdlibPackageFragmentProvider = createLibraryPackageFragmentProvider(
|
||||
val stdlibPackageFragmentProvider = createNativeKlibPackageFragmentProvider(
|
||||
stdlibInfo,
|
||||
storageManager,
|
||||
languageVersionSettings,
|
||||
|
||||
+3
-3
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.context.ModuleContext
|
||||
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.frontend.di.createContainerForLazyResolve
|
||||
import org.jetbrains.kotlin.ide.konan.NativePlatformKindResolution
|
||||
import org.jetbrains.kotlin.ide.konan.NativePlatformKindResolution.Companion.createNativeKlibPackageFragmentProvider
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.konan.KonanPlatforms
|
||||
import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer
|
||||
@@ -56,13 +56,13 @@ class NativeResolverForModuleFactory(
|
||||
val packageFragmentProvider = container.get<ResolveSession>().packageFragmentProvider
|
||||
val fragmentProviders = mutableListOf(packageFragmentProvider)
|
||||
|
||||
val libraryPackageFragmentProvider = NativePlatformKindResolution.createLibraryPackageFragmentProvider(
|
||||
val klibPackageFragmentProvider = createNativeKlibPackageFragmentProvider(
|
||||
moduleContent.moduleInfo,
|
||||
moduleContext.storageManager,
|
||||
languageVersionSettings,
|
||||
moduleDescriptor
|
||||
)
|
||||
fragmentProviders.addIfNotNull(libraryPackageFragmentProvider)
|
||||
fragmentProviders.addIfNotNull(klibPackageFragmentProvider)
|
||||
|
||||
return ResolverForModule(CompositePackageFragmentProvider(fragmentProviders), container)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user