From 5f4313223e0c8afb408baf7e6eca454c92962900 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 21 Nov 2016 12:53:00 +0300 Subject: [PATCH] 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) --- .../builtins/BuiltInsSerializer.kt | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt index 928a4830d3c..9313d6cd011 100644 --- a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt +++ b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt @@ -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, extraClassPath: List) { - 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,