IDE, Common: Don't create KLIB metadata factories for each new KLIB
This commit is contained in:
+35
@@ -18,18 +18,26 @@ import org.jetbrains.kotlin.analyzer.common.CommonAnalysisParameters
|
|||||||
import org.jetbrains.kotlin.analyzer.common.CommonResolverForModuleFactory
|
import org.jetbrains.kotlin.analyzer.common.CommonResolverForModuleFactory
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.context.ProjectContext
|
import org.jetbrains.kotlin.context.ProjectContext
|
||||||
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.idea.caches.project.LibraryInfo
|
import org.jetbrains.kotlin.idea.caches.project.LibraryInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.project.SdkInfo
|
import org.jetbrains.kotlin.idea.caches.project.SdkInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.BuiltInsCacheKey
|
import org.jetbrains.kotlin.idea.caches.resolve.BuiltInsCacheKey
|
||||||
import org.jetbrains.kotlin.idea.framework.CommonLibraryKind
|
import org.jetbrains.kotlin.idea.framework.CommonLibraryKind
|
||||||
import org.jetbrains.kotlin.idea.klib.AbstractKlibLibraryInfo
|
import org.jetbrains.kotlin.idea.klib.AbstractKlibLibraryInfo
|
||||||
|
import org.jetbrains.kotlin.idea.klib.createKlibPackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.idea.klib.isKlibLibraryRootForPlatform
|
import org.jetbrains.kotlin.idea.klib.isKlibLibraryRootForPlatform
|
||||||
|
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
||||||
|
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
|
||||||
import org.jetbrains.kotlin.platform.CommonPlatforms
|
import org.jetbrains.kotlin.platform.CommonPlatforms
|
||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind
|
import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind
|
||||||
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragment
|
import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragment
|
||||||
|
import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescriptorFactoryImpl
|
||||||
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
class CommonPlatformKindResolution : IdePlatformKindResolution {
|
class CommonPlatformKindResolution : IdePlatformKindResolution {
|
||||||
override fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean {
|
override fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean {
|
||||||
@@ -76,6 +84,33 @@ class CommonPlatformKindResolution : IdePlatformKindResolution {
|
|||||||
shouldCheckExpectActual = true
|
shouldCheckExpectActual = true
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val metadataFactories = KlibMetadataFactories({ DefaultBuiltIns.Instance }, NullFlexibleTypeDeserializer)
|
||||||
|
|
||||||
|
private val metadataModuleDescriptorFactory = KlibMetadataModuleDescriptorFactoryImpl(
|
||||||
|
metadataFactories.DefaultDescriptorFactory,
|
||||||
|
metadataFactories.DefaultPackageFragmentsFactory,
|
||||||
|
metadataFactories.flexibleTypeDeserializer,
|
||||||
|
metadataFactories.platformDependentTypeTransformer
|
||||||
|
)
|
||||||
|
|
||||||
|
fun createCommonKlibPackageFragmentProvider(
|
||||||
|
moduleInfo: ModuleInfo,
|
||||||
|
storageManager: StorageManager,
|
||||||
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
|
moduleDescriptor: ModuleDescriptor
|
||||||
|
): PackageFragmentProvider? {
|
||||||
|
return (moduleInfo as? CommonKlibLibraryInfo)
|
||||||
|
?.resolvedKotlinLibrary
|
||||||
|
?.createKlibPackageFragmentProvider(
|
||||||
|
storageManager = storageManager,
|
||||||
|
metadataModuleDescriptorFactory = metadataModuleDescriptorFactory,
|
||||||
|
languageVersionSettings = languageVersionSettings,
|
||||||
|
moduleDescriptor = moduleDescriptor
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class CommonKlibLibraryInfo(project: Project, library: Library, libraryRoot: String) :
|
class CommonKlibLibraryInfo(project: Project, library: Library, libraryRoot: String) :
|
||||||
|
|||||||
+9
-33
@@ -11,7 +11,7 @@ import com.intellij.psi.search.GlobalSearchScope
|
|||||||
import org.jetbrains.kotlin.analyzer.*
|
import org.jetbrains.kotlin.analyzer.*
|
||||||
import org.jetbrains.kotlin.analyzer.common.CommonAnalysisParameters
|
import org.jetbrains.kotlin.analyzer.common.CommonAnalysisParameters
|
||||||
import org.jetbrains.kotlin.analyzer.common.configureCommonSpecificComponents
|
import org.jetbrains.kotlin.analyzer.common.configureCommonSpecificComponents
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
import org.jetbrains.kotlin.caches.resolve.CommonPlatformKindResolution.Companion.createCommonKlibPackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.container.*
|
import org.jetbrains.kotlin.container.*
|
||||||
import org.jetbrains.kotlin.context.ModuleContext
|
import org.jetbrains.kotlin.context.ModuleContext
|
||||||
@@ -23,10 +23,7 @@ import org.jetbrains.kotlin.frontend.di.configureModule
|
|||||||
import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents
|
import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents
|
||||||
import org.jetbrains.kotlin.frontend.java.di.configureJavaSpecificComponents
|
import org.jetbrains.kotlin.frontend.java.di.configureJavaSpecificComponents
|
||||||
import org.jetbrains.kotlin.frontend.java.di.initializeJavaSpecificComponents
|
import org.jetbrains.kotlin.frontend.java.di.initializeJavaSpecificComponents
|
||||||
import org.jetbrains.kotlin.idea.klib.createKlibPackageFragmentProvider
|
|
||||||
import org.jetbrains.kotlin.idea.project.IdeaEnvironment
|
import org.jetbrains.kotlin.idea.project.IdeaEnvironment
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
|
||||||
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
|
||||||
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver
|
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver
|
||||||
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolverImpl
|
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolverImpl
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
||||||
@@ -49,12 +46,7 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragmentProvider
|
import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider
|
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider
|
||||||
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil
|
|
||||||
import org.jetbrains.kotlin.serialization.js.createKotlinJavascriptPackageFragmentProvider
|
|
||||||
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
|
|
||||||
import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescriptorFactoryImpl
|
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
|
||||||
|
|
||||||
class CompositeResolverForModuleFactory(
|
class CompositeResolverForModuleFactory(
|
||||||
private val commonAnalysisParameters: CommonAnalysisParameters,
|
private val commonAnalysisParameters: CommonAnalysisParameters,
|
||||||
@@ -127,33 +119,17 @@ class CompositeResolverForModuleFactory(
|
|||||||
container: StorageComponentContainer
|
container: StorageComponentContainer
|
||||||
): List<PackageFragmentProvider> {
|
): List<PackageFragmentProvider> {
|
||||||
if (!targetPlatform.isCommon()) return emptyList()
|
if (!targetPlatform.isCommon()) return emptyList()
|
||||||
val metadataProvder = container.get<MetadataPackageFragmentProvider>()
|
|
||||||
var klibMetadataProvider: PackageFragmentProvider? = null
|
|
||||||
|
|
||||||
if (moduleInfo is CommonKlibLibraryInfo) {
|
val metadataProvider = container.get<MetadataPackageFragmentProvider>()
|
||||||
val library = moduleInfo.resolvedKotlinLibrary
|
|
||||||
val languageVersionSettings = container.get<LanguageVersionSettings>()
|
|
||||||
|
|
||||||
val metadataFactories = KlibMetadataFactories(
|
val klibMetadataProvider = createCommonKlibPackageFragmentProvider(
|
||||||
{ DefaultBuiltIns.Instance },
|
moduleInfo,
|
||||||
NullFlexibleTypeDeserializer
|
moduleContext.storageManager,
|
||||||
)
|
container.get<LanguageVersionSettings>(),
|
||||||
|
moduleDescriptor
|
||||||
|
)
|
||||||
|
|
||||||
val klibMetadataModuleDescriptorFactory = KlibMetadataModuleDescriptorFactoryImpl(
|
return listOfNotNull(metadataProvider, klibMetadataProvider)
|
||||||
metadataFactories.DefaultDescriptorFactory,
|
|
||||||
metadataFactories.DefaultPackageFragmentsFactory,
|
|
||||||
metadataFactories.flexibleTypeDeserializer,
|
|
||||||
metadataFactories.platformDependentTypeTransformer
|
|
||||||
)
|
|
||||||
|
|
||||||
klibMetadataProvider = library.createKlibPackageFragmentProvider(
|
|
||||||
moduleContext.storageManager,
|
|
||||||
klibMetadataModuleDescriptorFactory,
|
|
||||||
languageVersionSettings,
|
|
||||||
moduleDescriptor
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return listOfNotNull(metadataProvder, klibMetadataProvider)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getJvmProvidersIfAny(container: StorageComponentContainer): List<PackageFragmentProvider> =
|
private fun getJvmProvidersIfAny(container: StorageComponentContainer): List<PackageFragmentProvider> =
|
||||||
|
|||||||
Reference in New Issue
Block a user