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.BuiltInSerializerProtocol
|
||||||
import org.jetbrains.kotlin.builtins.BuiltInsBinaryVersion
|
import org.jetbrains.kotlin.builtins.BuiltInsBinaryVersion
|
||||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
import org.jetbrains.kotlin.cli.common.messages.*
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
|
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>) {
|
private fun serialize(disposable: Disposable, destDir: File, srcDirs: List<File>, extraClassPath: List<File>) {
|
||||||
val configuration = CompilerConfiguration()
|
val configuration = CompilerConfiguration().apply {
|
||||||
configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE)
|
put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, createMessageCollector())
|
||||||
|
|
||||||
configuration.addKotlinSourceRoots(srcDirs.map { it.path })
|
addKotlinSourceRoots(srcDirs.map { it.path })
|
||||||
configuration.addJvmClasspathRoots(extraClassPath)
|
addJvmClasspathRoots(extraClassPath)
|
||||||
|
}
|
||||||
|
|
||||||
val environment = KotlinCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
val environment = KotlinCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) {
|
|||||||
destDir.deleteRecursively()
|
destDir.deleteRecursively()
|
||||||
|
|
||||||
if (!destDir.mkdirs()) {
|
if (!destDir.mkdirs()) {
|
||||||
System.err.println("Could not make directories: " + destDir)
|
throw AssertionError("Could not make directories: " + destDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
files.map { it.packageFqName }.toSet().forEach {
|
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 class PackageSerializer(
|
||||||
private val packageView: PackageViewDescriptor,
|
private val packageView: PackageViewDescriptor,
|
||||||
private val destDir: File,
|
private val destDir: File,
|
||||||
|
|||||||
Reference in New Issue
Block a user