JS: explain what validateJsAst does; enable validation in non-incremental tests
This commit is contained in:
@@ -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 }
|
||||||
|
|||||||
Reference in New Issue
Block a user