Use a specific message collector in built-ins serializer
It's going to be needed to be able to report configuration errors when running built-ins serializer (e.g. no output destination is passed as an argument)
This commit is contained in:
+19
-7
@@ -23,8 +23,7 @@ import org.jetbrains.kotlin.analyzer.common.DefaultAnalyzerFacade
|
||||
import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol
|
||||
import org.jetbrains.kotlin.builtins.BuiltInsBinaryVersion
|
||||
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.cli.common.messages.*
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
|
||||
@@ -63,11 +62,12 @@ class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) {
|
||||
}
|
||||
|
||||
private fun serialize(disposable: Disposable, destDir: File, srcDirs: List<File>, extraClassPath: List<File>) {
|
||||
val configuration = CompilerConfiguration()
|
||||
configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE)
|
||||
val configuration = CompilerConfiguration().apply {
|
||||
put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, createMessageCollector())
|
||||
|
||||
configuration.addKotlinSourceRoots(srcDirs.map { it.path })
|
||||
configuration.addJvmClasspathRoots(extraClassPath)
|
||||
addKotlinSourceRoots(srcDirs.map { it.path })
|
||||
addJvmClasspathRoots(extraClassPath)
|
||||
}
|
||||
|
||||
val environment = KotlinCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
||||
|
||||
@@ -85,7 +85,7 @@ class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) {
|
||||
destDir.deleteRecursively()
|
||||
|
||||
if (!destDir.mkdirs()) {
|
||||
System.err.println("Could not make directories: " + destDir)
|
||||
throw AssertionError("Could not make directories: " + destDir)
|
||||
}
|
||||
|
||||
files.map { it.packageFqName }.toSet().forEach {
|
||||
@@ -97,6 +97,18 @@ class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun createMessageCollector() = object : GroupingMessageCollector(
|
||||
PrintingMessageCollector(System.err, MessageRenderer.PLAIN_RELATIVE_PATHS, /* verbose = */ false)
|
||||
) {
|
||||
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation) {
|
||||
// Only report diagnostics without a particular location because there's plenty of errors in built-in sources
|
||||
// (functions without bodies, incorrect combination of modifiers, etc.)
|
||||
if (location.path == null) {
|
||||
super.report(severity, message, location)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class PackageSerializer(
|
||||
private val packageView: PackageViewDescriptor,
|
||||
private val destDir: File,
|
||||
|
||||
Reference in New Issue
Block a user