JS: cache metadata, grouped by package FQN
This commit is contained in:
@@ -54,6 +54,7 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.js.missingMetadata
|
||||
|
||||
/**
|
||||
* An entry point of translator.
|
||||
@@ -140,8 +141,8 @@ class K2JSTranslator @JvmOverloads constructor(
|
||||
expandIsCalls(translationResult.newFragments)
|
||||
checkCanceled()
|
||||
|
||||
updatePackageMetadata(translationResult, bindingTrace, moduleDescriptor, packageMetadata)
|
||||
trySaveIncrementalData(translationResult, pathResolver, bindingTrace, moduleDescriptor, packageMetadata)
|
||||
updateMetadataMap(bindingTrace.bindingContext, moduleDescriptor, packageMetadata)
|
||||
trySaveIncrementalData(translationResult, pathResolver, bindingTrace, moduleDescriptor)
|
||||
checkCanceled()
|
||||
|
||||
// Global phases
|
||||
@@ -167,11 +168,34 @@ class K2JSTranslator @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateMetadataMap(
|
||||
bindingContext: BindingContext,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
packageMetadata: MutableMap<FqName, ByteArray>
|
||||
) {
|
||||
val additionalMetadata = packageMetadata.missingMetadata(
|
||||
bindingContext,
|
||||
moduleDescriptor,
|
||||
config.configuration.languageVersionSettings,
|
||||
config.configuration.get(CommonConfigurationKeys.METADATA_VERSION) as? JsMetadataVersion ?: JsMetadataVersion.INSTANCE)
|
||||
|
||||
for ((packageName, metadata) in additionalMetadata) {
|
||||
incrementalResults?.processPackageMetadata(packageName.asString(), metadata)
|
||||
}
|
||||
|
||||
packageMetadata += additionalMetadata
|
||||
}
|
||||
|
||||
private fun checkCanceled() {
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
||||
}
|
||||
|
||||
private fun serializeScope(bindingContext: BindingContext, moduleDescriptor: ModuleDescriptor, packageName: FqName, scope: Collection<DeclarationDescriptor>): ProtoBuf.PackageFragment {
|
||||
private fun serializeScope(
|
||||
bindingContext: BindingContext,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
packageName: FqName,
|
||||
scope: Collection<DeclarationDescriptor>
|
||||
): ProtoBuf.PackageFragment {
|
||||
val metadataVersion = config.configuration.get(CommonConfigurationKeys.METADATA_VERSION)
|
||||
return KotlinJavascriptSerializationUtil.serializeDescriptors(
|
||||
bindingContext,
|
||||
@@ -183,25 +207,11 @@ class K2JSTranslator @JvmOverloads constructor(
|
||||
)
|
||||
}
|
||||
|
||||
private fun updatePackageMetadata(
|
||||
translationResult: AstGenerationResult,
|
||||
bindingTrace: BindingTrace,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
packageMetadata: MutableMap<FqName, ByteArray>
|
||||
) {
|
||||
translationResult.translatedSourceFiles.keys.mapTo(mutableSetOf()) { it.file.packageFqName }.forEach { packageName ->
|
||||
val memberScope = moduleDescriptor.getPackage(packageName).memberScope.getContributedDescriptors()
|
||||
val bytes = serializeScope(bindingTrace.bindingContext, moduleDescriptor, packageName, memberScope).toByteArray()
|
||||
packageMetadata[packageName] = bytes
|
||||
}
|
||||
}
|
||||
|
||||
private fun trySaveIncrementalData(
|
||||
translationResult: AstGenerationResult,
|
||||
pathResolver: SourceFilePathResolver,
|
||||
bindingTrace: BindingTrace,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
packageMetadata: Map<FqName, ByteArray>
|
||||
moduleDescriptor: ModuleDescriptor
|
||||
) {
|
||||
// TODO Maybe switch validation on for recompile
|
||||
if (incrementalResults == null && !shouldValidateJsAst) return
|
||||
|
||||
Reference in New Issue
Block a user