JS: move deserialization logic out of createTopDownAnalyzerForJs
Remove code that deserializes unchanged descriptors from `createTopDownAnalyzerForJs`, deserialize in caller instead.
This commit is contained in:
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.container.get
|
||||
import org.jetbrains.kotlin.container.useImpl
|
||||
import org.jetbrains.kotlin.container.useInstance
|
||||
import org.jetbrains.kotlin.context.ModuleContext
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
||||
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.frontend.di.configureModule
|
||||
@@ -40,7 +41,7 @@ fun createTopDownAnalyzerForJs(
|
||||
bindingTrace: BindingTrace,
|
||||
declarationProviderFactory: DeclarationProviderFactory,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
fallbackMetadata: PackagesWithHeaderMetadata? = null
|
||||
fallbackPackage: PackageFragmentProvider?
|
||||
): LazyTopDownAnalyzer {
|
||||
val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatform) {
|
||||
configureModule(moduleContext, JsPlatform, TargetPlatformVersion.NoVersion, bindingTrace)
|
||||
@@ -57,10 +58,7 @@ fun createTopDownAnalyzerForJs(
|
||||
}.apply {
|
||||
val packagePartProviders = mutableListOf(get<KotlinCodeAnalyzer>().packageFragmentProvider)
|
||||
val moduleDescriptor = get<ModuleDescriptorImpl>()
|
||||
if (fallbackMetadata != null) {
|
||||
packagePartProviders += KotlinJavascriptSerializationUtil.readDescriptors(
|
||||
fallbackMetadata, moduleContext.storageManager, moduleDescriptor, DeserializationConfiguration.Default)
|
||||
}
|
||||
fallbackPackage?.let { packagePartProviders += it }
|
||||
moduleDescriptor.initialize(CompositePackageFragmentProvider(packagePartProviders))
|
||||
}
|
||||
return storageComponentContainer.get<LazyTopDownAnalyzer>()
|
||||
|
||||
@@ -30,6 +30,8 @@ import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.*
|
||||
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
|
||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
|
||||
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil
|
||||
|
||||
object TopDownAnalyzerFacadeForJS {
|
||||
@JvmStatic
|
||||
@@ -54,11 +56,15 @@ object TopDownAnalyzerFacadeForJS {
|
||||
moduleContext: ModuleContext,
|
||||
config: JsConfig
|
||||
): JsAnalysisResult {
|
||||
val packageFragment = config.configuration[JSConfigurationKeys.FALLBACK_METADATA]?.let {
|
||||
KotlinJavascriptSerializationUtil.readDescriptors(it, moduleContext.storageManager, moduleContext.module,
|
||||
DeserializationConfiguration.Default)
|
||||
}
|
||||
val analyzerForJs = createTopDownAnalyzerForJs(
|
||||
moduleContext, trace,
|
||||
FileBasedDeclarationProviderFactory(moduleContext.storageManager, files),
|
||||
config.configuration.languageVersionSettings,
|
||||
config.configuration[JSConfigurationKeys.FALLBACK_METADATA]
|
||||
packageFragment
|
||||
)
|
||||
analyzerForJs.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files)
|
||||
return JsAnalysisResult.success(trace, moduleContext.module)
|
||||
|
||||
Reference in New Issue
Block a user