JS: move deserialization logic out of createTopDownAnalyzerForJs

Remove code that deserializes unchanged descriptors from
`createTopDownAnalyzerForJs`, deserialize in caller instead.
This commit is contained in:
Alexey Andreev
2017-03-29 17:40:43 +03:00
parent df46417cd7
commit 524dd122e7
2 changed files with 10 additions and 6 deletions
@@ -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)