[JS IR] Run diagnostics by IR before the klib serialization
Implement an infrastructure for checking IR before JS klib serialization. Implement the EXPORTING_JS_NAME_CLASH and EXPORTING_JS_NAME_CLASH_ES checks. ^KT-61710 Fixed
This commit is contained in:
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants
|
||||
import org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants.RUNTIME_DIAGNOSTIC_EXCEPTION
|
||||
import org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants.RUNTIME_DIAGNOSTIC_LOG
|
||||
import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot
|
||||
import org.jetbrains.kotlin.cli.common.fir.reportToMessageCollector
|
||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.*
|
||||
@@ -461,6 +462,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
||||
sourceModule.jsFrontEndResult.hasErrors
|
||||
)
|
||||
|
||||
val diagnosticsReporter = DiagnosticReporterFactory.createPendingReporter()
|
||||
generateKLib(
|
||||
sourceModule,
|
||||
outputKlibPath,
|
||||
@@ -468,10 +470,17 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
||||
jsOutputName = arguments.irPerModuleOutputName,
|
||||
icData = icData,
|
||||
moduleFragment = moduleFragment,
|
||||
diagnosticReporter = diagnosticsReporter,
|
||||
builtInsPlatform = if (arguments.wasm) BuiltInsPlatform.WASM else BuiltInsPlatform.JS
|
||||
) { file ->
|
||||
metadataSerializer.serializeScope(file, sourceModule.jsFrontEndResult.bindingContext, moduleFragment.descriptor)
|
||||
}
|
||||
|
||||
val messageCollector = environmentForJS.configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
||||
reportCollectedDiagnostics(environmentForJS.configuration, diagnosticsReporter, messageCollector)
|
||||
if (diagnosticsReporter.hasErrors) {
|
||||
throw CompilationErrorException()
|
||||
}
|
||||
}
|
||||
return sourceModule
|
||||
}
|
||||
@@ -556,6 +565,11 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
||||
jsOutputName = arguments.irPerModuleOutputName,
|
||||
useWasmPlatform = arguments.wasm
|
||||
)
|
||||
|
||||
reportCollectedDiagnostics(moduleStructure.compilerConfiguration, diagnosticsReporter, messageCollector)
|
||||
if (diagnosticsReporter.hasErrors) {
|
||||
throw CompilationErrorException()
|
||||
}
|
||||
}
|
||||
|
||||
return moduleStructure
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
|
||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
@@ -116,6 +117,15 @@ inline fun <F> compileModuleToAnalyzedFir(
|
||||
return outputs
|
||||
}
|
||||
|
||||
internal fun reportCollectedDiagnostics(
|
||||
compilerConfiguration: CompilerConfiguration,
|
||||
diagnosticsReporter: BaseDiagnosticsCollector,
|
||||
messageCollector: MessageCollector
|
||||
) {
|
||||
val renderName = compilerConfiguration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
|
||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector, renderName)
|
||||
}
|
||||
|
||||
open class AnalyzedFirOutput(val output: List<ModuleCompilerAnalyzedOutput>) {
|
||||
protected open fun checkSyntaxErrors(messageCollector: MessageCollector) = false
|
||||
|
||||
@@ -125,8 +135,7 @@ open class AnalyzedFirOutput(val output: List<ModuleCompilerAnalyzedOutput>) {
|
||||
messageCollector: MessageCollector,
|
||||
): Boolean {
|
||||
if (checkSyntaxErrors(messageCollector) || diagnosticsReporter.hasErrors) {
|
||||
val renderName = moduleStructure.compilerConfiguration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
|
||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector, renderName)
|
||||
reportCollectedDiagnostics(moduleStructure.compilerConfiguration, diagnosticsReporter, messageCollector)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -318,6 +327,7 @@ fun serializeFirKlib(
|
||||
moduleStructure.compilerConfiguration[CommonConfigurationKeys.MODULE_NAME]!!,
|
||||
moduleStructure.compilerConfiguration,
|
||||
moduleStructure.compilerConfiguration.get(IrMessageLogger.IR_MESSAGE_LOGGER) ?: IrMessageLogger.None,
|
||||
diagnosticsReporter,
|
||||
fir2KlibSerializer.sourceFiles,
|
||||
klibPath = outputKlibPath,
|
||||
moduleStructure.allDependencies,
|
||||
|
||||
Reference in New Issue
Block a user