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
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user