JS: explain what validateJsAst does; enable validation in non-incremental tests

This commit is contained in:
Anton Bannykh
2019-02-01 16:08:31 +03:00
parent a35fc4fa3c
commit b4b406af99
@@ -169,7 +169,7 @@ class K2JSTranslator @JvmOverloads constructor(
bindingTrace: BindingTrace, bindingTrace: BindingTrace,
moduleDescriptor: ModuleDescriptor moduleDescriptor: ModuleDescriptor
) { ) {
if (incrementalResults == null) return if (incrementalResults == null && !shouldValidateJsAst) return
val serializer = JsAstSerializer(if (shouldValidateJsAst) ::validateJsAst else null) { file -> val serializer = JsAstSerializer(if (shouldValidateJsAst) ::validateJsAst else null) { file ->
try { try {
@@ -197,11 +197,11 @@ class K2JSTranslator @JvmOverloads constructor(
val header = serializeHeader(fileTranslationResult.inlineFunctionTags) val header = serializeHeader(fileTranslationResult.inlineFunctionTags)
val ioFile = VfsUtilCore.virtualToIoFile(file.virtualFile) val ioFile = VfsUtilCore.virtualToIoFile(file.virtualFile)
incrementalResults.processPackagePart(ioFile, packagePart.toByteArray(), binaryAst, header) incrementalResults?.processPackagePart(ioFile, packagePart.toByteArray(), binaryAst, header)
} }
val settings = config.configuration.languageVersionSettings val settings = config.configuration.languageVersionSettings
incrementalResults.processHeader(KotlinJavascriptSerializationUtil.serializeHeader(moduleDescriptor, null, settings).toByteArray()) incrementalResults?.processHeader(KotlinJavascriptSerializationUtil.serializeHeader(moduleDescriptor, null, settings).toByteArray())
} }
fun serializeHeader(importedTags: Set<String>): ByteArray { fun serializeHeader(importedTags: Set<String>): ByteArray {
@@ -212,6 +212,7 @@ class K2JSTranslator @JvmOverloads constructor(
return output.toByteArray() return output.toByteArray()
} }
// Checks that all non-temporary serialized JsName's are either declared locally, or linked via a NameBinding
private fun validateJsAst(fragment: JsProgramFragment, serializedNames: Set<JsName>) { private fun validateJsAst(fragment: JsProgramFragment, serializedNames: Set<JsName>) {
val knownNames = mutableSetOf<JsName>().apply { val knownNames = mutableSetOf<JsName>().apply {
fragment.nameBindings.mapTo(this) { it.name } fragment.nameBindings.mapTo(this) { it.name }