[JS IR] Properly report compiler errors

Report compiler errors using message collector
Instead of crashing with stack trace
This commit is contained in:
Svyatoslav Kuzmich
2019-11-29 16:07:16 +03:00
parent ea8fa55f12
commit 3df8393ede
3 changed files with 50 additions and 26 deletions
@@ -8,6 +8,7 @@ dependencies {
compile(project(":compiler:ir.psi2ir"))
compile(project(":compiler:ir.serialization.common"))
compile(project(":js:js.frontend"))
compile(project(":compiler:cli"))
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
@@ -16,6 +16,9 @@ import org.jetbrains.kotlin.backend.common.serialization.KlibIrVersion
import org.jetbrains.kotlin.backend.common.serialization.metadata.DynamicTypeDeserializer
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataVersion
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
@@ -256,6 +259,8 @@ fun getModuleDescriptorByLibrary(current: KotlinLibrary, mapping: Map<String, Mo
return md
}
object JsIrCompilationError : Throwable()
private class ModulesStructure(
private val project: Project,
private val files: List<KtFile>,
@@ -278,7 +283,14 @@ private class ModulesStructure(
val builtInsDep = allDependencies.getFullList().find { it.isBuiltIns }
fun runAnalysis(): JsAnalysisResult {
val analysisResult =
val messageCollector: MessageCollector =
compilerConfiguration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) ?: MessageCollector.NONE
val analyzerWithCompilerReport = AnalyzerWithCompilerReport(
messageCollector,
compilerConfiguration.languageVersionSettings
)
analyzerWithCompilerReport.analyzeAndReport(files) {
TopDownAnalyzerFacadeForJSIR.analyzeFiles(
files,
project,
@@ -288,6 +300,12 @@ private class ModulesStructure(
thisIsBuiltInsModule = builtInModuleDescriptor == null,
customBuiltInsModule = builtInModuleDescriptor
)
}
val analysisResult = analyzerWithCompilerReport.analysisResult
if (analyzerWithCompilerReport.hasErrors() || analysisResult !is JsAnalysisResult)
throw JsIrCompilationError
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
TopDownAnalyzerFacadeForJSIR.checkForErrors(files, analysisResult.bindingContext)