IDE, JS: Don't create KLIB metadata factories for each new KLIB library
This commit is contained in:
+35
@@ -16,17 +16,25 @@ import org.jetbrains.kotlin.analyzer.PlatformAnalysisParameters
|
|||||||
import org.jetbrains.kotlin.analyzer.ResolverForModuleFactory
|
import org.jetbrains.kotlin.analyzer.ResolverForModuleFactory
|
||||||
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.JSLibraryKind
|
import org.jetbrains.kotlin.idea.framework.JSLibraryKind
|
||||||
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.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind
|
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind
|
||||||
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
||||||
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
||||||
|
import org.jetbrains.kotlin.serialization.js.DynamicTypeDeserializer
|
||||||
|
import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescriptorFactoryImpl
|
||||||
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
class JsPlatformKindResolution : IdePlatformKindResolution {
|
class JsPlatformKindResolution : IdePlatformKindResolution {
|
||||||
override fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean {
|
override fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean {
|
||||||
@@ -69,6 +77,33 @@ class JsPlatformKindResolution : IdePlatformKindResolution {
|
|||||||
super.createLibraryInfo(project, library)
|
super.createLibraryInfo(project, library)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val metadataFactories = KlibMetadataFactories({ DefaultBuiltIns.Instance }, DynamicTypeDeserializer)
|
||||||
|
|
||||||
|
private val metadataModuleDescriptorFactory = KlibMetadataModuleDescriptorFactoryImpl(
|
||||||
|
metadataFactories.DefaultDescriptorFactory,
|
||||||
|
metadataFactories.DefaultPackageFragmentsFactory,
|
||||||
|
metadataFactories.flexibleTypeDeserializer,
|
||||||
|
metadataFactories.platformDependentTypeTransformer
|
||||||
|
)
|
||||||
|
|
||||||
|
fun createJsKlibPackageFragmentProvider(
|
||||||
|
moduleInfo: ModuleInfo,
|
||||||
|
storageManager: StorageManager,
|
||||||
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
|
moduleDescriptor: ModuleDescriptor
|
||||||
|
): PackageFragmentProvider? {
|
||||||
|
return (moduleInfo as? JsKlibLibraryInfo)
|
||||||
|
?.resolvedKotlinLibrary
|
||||||
|
?.createKlibPackageFragmentProvider(
|
||||||
|
storageManager = storageManager,
|
||||||
|
metadataModuleDescriptorFactory = metadataModuleDescriptorFactory,
|
||||||
|
languageVersionSettings = languageVersionSettings,
|
||||||
|
moduleDescriptor = moduleDescriptor
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class JsKlibLibraryInfo(project: Project, library: Library, libraryRoot: String) : AbstractKlibLibraryInfo(project, library, libraryRoot) {
|
class JsKlibLibraryInfo(project: Project, library: Library, libraryRoot: String) : AbstractKlibLibraryInfo(project, library, libraryRoot) {
|
||||||
|
|||||||
+6
-29
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.caches.resolve
|
package org.jetbrains.kotlin.caches.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analyzer.*
|
import org.jetbrains.kotlin.analyzer.*
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
import org.jetbrains.kotlin.caches.resolve.JsPlatformKindResolution.Companion.createJsKlibPackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.container.StorageComponentContainer
|
import org.jetbrains.kotlin.container.StorageComponentContainer
|
||||||
import org.jetbrains.kotlin.container.get
|
import org.jetbrains.kotlin.container.get
|
||||||
@@ -15,18 +15,14 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
|||||||
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
|
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.frontend.di.createContainerForLazyResolve
|
import org.jetbrains.kotlin.frontend.di.createContainerForLazyResolve
|
||||||
import org.jetbrains.kotlin.idea.klib.createKlibPackageFragmentProvider
|
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
|
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
|
||||||
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
||||||
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
|
||||||
import org.jetbrains.kotlin.serialization.js.DynamicTypeDeserializer
|
|
||||||
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil
|
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil
|
||||||
import org.jetbrains.kotlin.serialization.js.createKotlinJavascriptPackageFragmentProvider
|
import org.jetbrains.kotlin.serialization.js.createKotlinJavascriptPackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescriptorFactoryImpl
|
|
||||||
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
||||||
|
|
||||||
class JsResolverForModuleFactory(
|
class JsResolverForModuleFactory(
|
||||||
@@ -77,33 +73,14 @@ internal fun <M : ModuleInfo> createPackageFragmentProvider(
|
|||||||
moduleDescriptor: ModuleDescriptorImpl
|
moduleDescriptor: ModuleDescriptorImpl
|
||||||
): List<PackageFragmentProvider> = when (moduleInfo) {
|
): List<PackageFragmentProvider> = when (moduleInfo) {
|
||||||
is JsKlibLibraryInfo -> {
|
is JsKlibLibraryInfo -> {
|
||||||
if (moduleInfo.compatibilityInfo.isCompatible) {
|
listOfNotNull(
|
||||||
val library = moduleInfo.resolvedKotlinLibrary
|
createJsKlibPackageFragmentProvider(
|
||||||
val languageVersionSettings = container.get<LanguageVersionSettings>()
|
moduleInfo,
|
||||||
|
|
||||||
val metadataFactories = KlibMetadataFactories(
|
|
||||||
{ DefaultBuiltIns.Instance },
|
|
||||||
DynamicTypeDeserializer
|
|
||||||
)
|
|
||||||
|
|
||||||
val klibMetadataModuleDescriptorFactory = KlibMetadataModuleDescriptorFactoryImpl(
|
|
||||||
metadataFactories.DefaultDescriptorFactory,
|
|
||||||
metadataFactories.DefaultPackageFragmentsFactory,
|
|
||||||
metadataFactories.flexibleTypeDeserializer,
|
|
||||||
metadataFactories.platformDependentTypeTransformer
|
|
||||||
)
|
|
||||||
|
|
||||||
val klibBasedPackageFragmentProvider = library.createKlibPackageFragmentProvider(
|
|
||||||
moduleContext.storageManager,
|
moduleContext.storageManager,
|
||||||
klibMetadataModuleDescriptorFactory,
|
container.get<LanguageVersionSettings>(),
|
||||||
languageVersionSettings,
|
|
||||||
moduleDescriptor
|
moduleDescriptor
|
||||||
)
|
)
|
||||||
|
)
|
||||||
listOfNotNull(klibBasedPackageFragmentProvider)
|
|
||||||
} else {
|
|
||||||
emptyList()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
is LibraryModuleInfo -> {
|
is LibraryModuleInfo -> {
|
||||||
moduleInfo.getLibraryRoots()
|
moduleInfo.getLibraryRoots()
|
||||||
|
|||||||
Reference in New Issue
Block a user