Extract interface from CompilerMessageLocation to ease extension

The CompilerMessageLocation is an implicit part of the binary daemon
protocol so changing it breaks compatibility with older daemons.
This change allows to extend location for non-daemon uses without
breaking the binary protocol.
This commit is contained in:
Ilya Chernikov
2020-06-04 19:32:05 +02:00
parent f1906bc966
commit 5e33612238
38 changed files with 119 additions and 124 deletions
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.compilerRunner package org.jetbrains.kotlin.compilerRunner
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil
@@ -25,7 +25,7 @@ class MessageCollectorToOutputItemsCollectorAdapter(
private val delegate: MessageCollector, private val delegate: MessageCollector,
private val outputCollector: OutputItemsCollector private val outputCollector: OutputItemsCollector
) : MessageCollector by delegate { ) : MessageCollector by delegate {
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
// TODO: consider adding some other way of passing input -> output mapping from compiler, e.g. dedicated service // TODO: consider adding some other way of passing input -> output mapping from compiler, e.g. dedicated service
OutputMessageUtil.parseOutputMessage(message)?.let { OutputMessageUtil.parseOutputMessage(message)?.let {
outputCollector.add(it.sourceFiles, it.outputFile) outputCollector.add(it.sourceFiles, it.outputFile)
@@ -67,7 +67,7 @@ class BuiltInsSerializer(dependOnOldBuiltIns: Boolean) : MetadataSerializer(Buil
PrintingMessageCollector(System.err, MessageRenderer.PLAIN_RELATIVE_PATHS, false), PrintingMessageCollector(System.err, MessageRenderer.PLAIN_RELATIVE_PATHS, false),
false false
) { ) {
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
// Only report diagnostics without a particular location because there's plenty of errors in built-in sources // 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.) // (functions without bodies, incorrect combination of modifiers, etc.)
if (location == null) { if (location == null) {
@@ -18,23 +18,30 @@ package org.jetbrains.kotlin.cli.common.messages
import java.io.Serializable import java.io.Serializable
interface CompilerMessageSourceLocation : Serializable {
val path: String
val line: Int
val column: Int
val lineContent: String?
}
data class CompilerMessageLocation private constructor( data class CompilerMessageLocation private constructor(
val path: String, override val path: String,
val line: Int, override val line: Int,
val column: Int, override val column: Int,
val lineContent: String? override val lineContent: String?
) : Serializable { ) : CompilerMessageSourceLocation {
override fun toString(): String = override fun toString(): String =
path + (if (line != -1 || column != -1) " ($line:$column)" else "") path + (if (line != -1 || column != -1) " ($line:$column)" else "")
companion object { companion object {
@JvmStatic @JvmStatic
fun create(path: String?): CompilerMessageLocation? = fun create(path: String?): CompilerMessageLocation? =
create(path, -1, -1, null) create(path, -1, -1, null)
@JvmStatic @JvmStatic
fun create(path: String?, line: Int, column: Int, lineContent: String?): CompilerMessageLocation? = fun create(path: String?, line: Int, column: Int, lineContent: String?): CompilerMessageLocation? =
if (path == null) null else CompilerMessageLocation(path, line, column, lineContent) if (path == null) null else CompilerMessageLocation(path, line, column, lineContent)
private val serialVersionUID: Long = 8228357578L private val serialVersionUID: Long = 8228357578L
} }
@@ -36,7 +36,7 @@ public class FilteringMessageCollector implements MessageCollector {
} }
@Override @Override
public void report(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageLocation location) { public void report(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageSourceLocation location) {
if (!decline.test(severity)) { if (!decline.test(severity)) {
messageCollector.report(severity, message, location); messageCollector.report(severity, message, location);
} }
@@ -24,7 +24,6 @@ import org.jetbrains.annotations.Nullable;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
public class GroupingMessageCollector implements MessageCollector { public class GroupingMessageCollector implements MessageCollector {
@@ -32,7 +31,7 @@ public class GroupingMessageCollector implements MessageCollector {
private final boolean treatWarningsAsErrors; private final boolean treatWarningsAsErrors;
// Note that the key in this map can be null // Note that the key in this map can be null
private final Multimap<CompilerMessageLocation, Message> groupedMessages = LinkedHashMultimap.create(); private final Multimap<CompilerMessageSourceLocation, Message> groupedMessages = LinkedHashMultimap.create();
public GroupingMessageCollector(@NotNull MessageCollector delegate, boolean treatWarningsAsErrors) { public GroupingMessageCollector(@NotNull MessageCollector delegate, boolean treatWarningsAsErrors) {
this.delegate = delegate; this.delegate = delegate;
@@ -48,7 +47,7 @@ public class GroupingMessageCollector implements MessageCollector {
public void report( public void report(
@NotNull CompilerMessageSeverity severity, @NotNull CompilerMessageSeverity severity,
@NotNull String message, @NotNull String message,
@Nullable CompilerMessageLocation location @Nullable CompilerMessageSourceLocation location
) { ) {
if (CompilerMessageSeverity.VERBOSE.contains(severity)) { if (CompilerMessageSeverity.VERBOSE.contains(severity)) {
delegate.report(severity, message, location); delegate.report(severity, message, location);
@@ -78,9 +77,9 @@ public class GroupingMessageCollector implements MessageCollector {
report(CompilerMessageSeverity.ERROR, "warnings found and -Werror specified", null); report(CompilerMessageSeverity.ERROR, "warnings found and -Werror specified", null);
} }
List<CompilerMessageLocation> sortedKeys = List<CompilerMessageSourceLocation> sortedKeys =
CollectionsKt.sortedWith(groupedMessages.keySet(), Comparator.nullsFirst(CompilerMessageLocationComparator.INSTANCE)); CollectionsKt.sortedWith(groupedMessages.keySet(), Comparator.nullsFirst(CompilerMessageLocationComparator.INSTANCE));
for (CompilerMessageLocation location : sortedKeys) { for (CompilerMessageSourceLocation location : sortedKeys) {
for (Message message : groupedMessages.get(location)) { for (Message message : groupedMessages.get(location)) {
if (!hasExplicitErrors || message.severity.isError() || message.severity == CompilerMessageSeverity.STRONG_WARNING) { if (!hasExplicitErrors || message.severity.isError() || message.severity == CompilerMessageSeverity.STRONG_WARNING) {
delegate.report(message.severity, message.message, message.location); delegate.report(message.severity, message.message, message.location);
@@ -91,7 +90,7 @@ public class GroupingMessageCollector implements MessageCollector {
groupedMessages.clear(); groupedMessages.clear();
} }
private static class CompilerMessageLocationComparator implements Comparator<CompilerMessageLocation> { private static class CompilerMessageLocationComparator implements Comparator<CompilerMessageSourceLocation> {
public static final CompilerMessageLocationComparator INSTANCE = new CompilerMessageLocationComparator(); public static final CompilerMessageLocationComparator INSTANCE = new CompilerMessageLocationComparator();
// First, output all messages without any location information. Then, only those with the file path. // First, output all messages without any location information. Then, only those with the file path.
@@ -104,7 +103,7 @@ public class GroupingMessageCollector implements MessageCollector {
// foo.kt:42: error: bad line // foo.kt:42: error: bad line
// foo.kt:42:43: error: bad character // foo.kt:42:43: error: bad character
@Override @Override
public int compare(CompilerMessageLocation o1, CompilerMessageLocation o2) { public int compare(CompilerMessageSourceLocation o1, CompilerMessageSourceLocation o2) {
if (o1.getColumn() == -1 && o2.getColumn() != -1) return -1; if (o1.getColumn() == -1 && o2.getColumn() != -1) return -1;
if (o1.getColumn() != -1 && o2.getColumn() == -1) return 1; if (o1.getColumn() != -1 && o2.getColumn() == -1) return 1;
@@ -118,9 +117,9 @@ public class GroupingMessageCollector implements MessageCollector {
private static class Message { private static class Message {
private final CompilerMessageSeverity severity; private final CompilerMessageSeverity severity;
private final String message; private final String message;
private final CompilerMessageLocation location; private final CompilerMessageSourceLocation location;
private Message(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageLocation location) { private Message(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageSourceLocation location) {
this.severity = severity; this.severity = severity;
this.message = message; this.message = message;
this.location = location; this.location = location;
@@ -19,13 +19,13 @@ package org.jetbrains.kotlin.cli.common.messages
interface MessageCollector { interface MessageCollector {
fun clear() fun clear()
fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation? = null) fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation? = null)
fun hasErrors(): Boolean fun hasErrors(): Boolean
companion object { companion object {
val NONE: MessageCollector = object : MessageCollector { val NONE: MessageCollector = object : MessageCollector {
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
// Do nothing // Do nothing
} }
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.cli.common.messages
class GradleStyleMessageRenderer : MessageRenderer { class GradleStyleMessageRenderer : MessageRenderer {
override fun render(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?): String { override fun render(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?): String {
val prefix = when (severity) { val prefix = when (severity) {
CompilerMessageSeverity.WARNING, CompilerMessageSeverity.STRONG_WARNING -> "w" CompilerMessageSeverity.WARNING, CompilerMessageSeverity.STRONG_WARNING -> "w"
CompilerMessageSeverity.ERROR, CompilerMessageSeverity.EXCEPTION -> "e" CompilerMessageSeverity.ERROR, CompilerMessageSeverity.EXCEPTION -> "e"
@@ -32,7 +32,7 @@ public interface MessageRenderer {
MessageRenderer WITHOUT_PATHS = new PlainTextMessageRenderer() { MessageRenderer WITHOUT_PATHS = new PlainTextMessageRenderer() {
@Nullable @Nullable
@Override @Override
protected String getPath(@NotNull CompilerMessageLocation location) { protected String getPath(@NotNull CompilerMessageSourceLocation location) {
return null; return null;
} }
@@ -45,7 +45,7 @@ public interface MessageRenderer {
MessageRenderer PLAIN_FULL_PATHS = new PlainTextMessageRenderer() { MessageRenderer PLAIN_FULL_PATHS = new PlainTextMessageRenderer() {
@NotNull @NotNull
@Override @Override
protected String getPath(@NotNull CompilerMessageLocation location) { protected String getPath(@NotNull CompilerMessageSourceLocation location) {
return location.getPath(); return location.getPath();
} }
@@ -60,7 +60,7 @@ public interface MessageRenderer {
@NotNull @NotNull
@Override @Override
protected String getPath(@NotNull CompilerMessageLocation location) { protected String getPath(@NotNull CompilerMessageSourceLocation location) {
return FileUtilsKt.descendantRelativeTo(new File(location.getPath()), cwd).getPath(); return FileUtilsKt.descendantRelativeTo(new File(location.getPath()), cwd).getPath();
} }
@@ -75,7 +75,7 @@ public interface MessageRenderer {
@Nullable @Nullable
@Override @Override
protected String getPath(@NotNull CompilerMessageLocation location) { protected String getPath(@NotNull CompilerMessageSourceLocation location) {
return FileUtil.toSystemIndependentName( return FileUtil.toSystemIndependentName(
FileUtilsKt.descendantRelativeTo(new File(location.getPath()), cwd).getPath() FileUtilsKt.descendantRelativeTo(new File(location.getPath()), cwd).getPath()
); );
@@ -91,7 +91,7 @@ public interface MessageRenderer {
String renderPreamble(); String renderPreamble();
String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageLocation location); String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageSourceLocation location);
String renderUsage(@NotNull String usage); String renderUsage(@NotNull String usage);
@@ -58,7 +58,7 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer {
} }
@Override @Override
public String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageLocation location) { public String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageSourceLocation location) {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
int line = location != null ? location.getLine() : -1; int line = location != null ? location.getLine() : -1;
@@ -156,7 +156,7 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer {
} }
@Nullable @Nullable
protected abstract String getPath(@NotNull CompilerMessageLocation location); protected abstract String getPath(@NotNull CompilerMessageSourceLocation location);
@Override @Override
public String renderUsage(@NotNull String usage) { public String renderUsage(@NotNull String usage) {
@@ -42,7 +42,7 @@ public class PrintingMessageCollector implements MessageCollector {
public void report( public void report(
@NotNull CompilerMessageSeverity severity, @NotNull CompilerMessageSeverity severity,
@NotNull String message, @NotNull String message,
@Nullable CompilerMessageLocation location @Nullable CompilerMessageSourceLocation location
) { ) {
if (!verbose && CompilerMessageSeverity.VERBOSE.contains(severity)) return; if (!verbose && CompilerMessageSeverity.VERBOSE.contains(severity)) return;
@@ -27,7 +27,7 @@ public class XmlMessageRenderer implements MessageRenderer {
} }
@Override @Override
public String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageLocation location) { public String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageSourceLocation location) {
StringBuilder out = new StringBuilder(); StringBuilder out = new StringBuilder();
String tagName = severity.getPresentableName(); String tagName = severity.getPresentableName();
out.append("<").append(tagName); out.append("<").append(tagName);
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.compiler.plugin.*
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import java.io.File import java.io.File
import java.net.URLClassLoader import java.net.URLClassLoader
import java.util.*
object PluginCliParser { object PluginCliParser {
@JvmStatic @JvmStatic
@@ -27,7 +27,6 @@ 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.K2MetadataConfigurationKeys import org.jetbrains.kotlin.cli.jvm.config.K2MetadataConfigurationKeys
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser
import org.jetbrains.kotlin.codegen.CompilationException import org.jetbrains.kotlin.codegen.CompilationException
import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
@@ -6,19 +6,21 @@
package org.jetbrains.kotlin.daemon.client.experimental package org.jetbrains.kotlin.daemon.client.experimental
import io.ktor.network.sockets.Socket import io.ktor.network.sockets.Socket
import kotlinx.coroutines.* import kotlinx.coroutines.Deferred
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.daemon.client.CompileServiceSessionAsync import org.jetbrains.kotlin.daemon.client.CompileServiceSessionAsync
import org.jetbrains.kotlin.daemon.client.KotlinCompilerDaemonClient
import org.jetbrains.kotlin.daemon.client.DaemonReportMessage import org.jetbrains.kotlin.daemon.client.DaemonReportMessage
import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets
import org.jetbrains.kotlin.daemon.client.KotlinCompilerDaemonClient
import org.jetbrains.kotlin.daemon.client.launchProcessWithFallback
import org.jetbrains.kotlin.daemon.common.* import org.jetbrains.kotlin.daemon.common.*
import org.jetbrains.kotlin.daemon.common.Profiler
import org.jetbrains.kotlin.daemon.common.experimental.* import org.jetbrains.kotlin.daemon.common.experimental.*
import org.jetbrains.kotlin.daemon.common.experimental.socketInfrastructure.Server import org.jetbrains.kotlin.daemon.common.experimental.socketInfrastructure.Server
import org.jetbrains.kotlin.daemon.common.experimental.socketInfrastructure.ServerSocketWrapper import org.jetbrains.kotlin.daemon.common.experimental.socketInfrastructure.ServerSocketWrapper
import org.jetbrains.kotlin.daemon.common.*
import java.io.File import java.io.File
import java.io.Serializable import java.io.Serializable
import java.net.SocketException import java.net.SocketException
@@ -30,7 +32,6 @@ import java.util.concurrent.Semaphore
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import java.util.logging.Logger import java.util.logging.Logger
import kotlin.concurrent.thread import kotlin.concurrent.thread
import org.jetbrains.kotlin.daemon.client.launchProcessWithFallback
class KotlinCompilerClient : KotlinCompilerDaemonClient { class KotlinCompilerClient : KotlinCompilerDaemonClient {
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.daemon
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil
@@ -181,7 +181,7 @@ class CompilerApiTest : KotlinIntegrationTestBase() {
} }
class TestMessageCollector : MessageCollector { class TestMessageCollector : MessageCollector {
data class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageLocation?) data class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageSourceLocation?)
val messages = arrayListOf<Message>() val messages = arrayListOf<Message>()
@@ -189,7 +189,7 @@ class TestMessageCollector : MessageCollector {
messages.clear() messages.clear()
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
messages.add(Message(severity, message, location)) messages.add(Message(severity, message, location))
} }
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.daemon.experimental.integration
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil
@@ -301,7 +301,7 @@ class CompilerApiTest : KotlinIntegrationTestBase() {
} }
class TestMessageCollector : MessageCollector { class TestMessageCollector : MessageCollector {
data class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageLocation?) data class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageSourceLocation?)
val messages = arrayListOf<Message>() val messages = arrayListOf<Message>()
@@ -309,7 +309,7 @@ class TestMessageCollector : MessageCollector {
messages.clear() messages.clear()
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
messages.add(Message(severity, message, location)) messages.add(Message(severity, message, location))
} }
@@ -168,9 +168,9 @@ internal class KeepFirstErrorMessageCollector(compilerMessagesStream: PrintStrea
private val innerCollector = PrintingMessageCollector(compilerMessagesStream, MessageRenderer.WITHOUT_PATHS, false) private val innerCollector = PrintingMessageCollector(compilerMessagesStream, MessageRenderer.WITHOUT_PATHS, false)
internal var firstErrorMessage: String? = null internal var firstErrorMessage: String? = null
internal var firstErrorLocation: CompilerMessageLocation? = null internal var firstErrorLocation: CompilerMessageSourceLocation? = null
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
if (firstErrorMessage == null && severity.isError) { if (firstErrorMessage == null && severity.isError) {
firstErrorMessage = message firstErrorMessage = message
firstErrorLocation = location firstErrorLocation = location
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.daemon.report package org.jetbrains.kotlin.daemon.report
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
@@ -34,7 +34,7 @@ internal class CompileServicesFacadeMessageCollector(
hasErrors = false hasErrors = false
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
log.info("Message: " + MessageRenderer.WITHOUT_PATHS.render(severity, message, location)) log.info("Message: " + MessageRenderer.WITHOUT_PATHS.render(severity, message, location))
when (severity) { when (severity) {
CompilerMessageSeverity.OUTPUT -> { CompilerMessageSeverity.OUTPUT -> {
@@ -5,17 +5,14 @@
package org.jetbrains.kotlin.daemon.report.experimental package org.jetbrains.kotlin.daemon.report.experimental
import kotlinx.coroutines.* import kotlinx.coroutines.GlobalScope
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import kotlinx.coroutines.async
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
import org.jetbrains.kotlin.daemon.KotlinCompileDaemon.log import org.jetbrains.kotlin.daemon.KotlinCompileDaemon.log
import org.jetbrains.kotlin.daemon.common.CompilationOptions import org.jetbrains.kotlin.daemon.common.*
import org.jetbrains.kotlin.daemon.common.ReportCategory
import org.jetbrains.kotlin.daemon.common.ReportSeverity
import org.jetbrains.kotlin.daemon.common.CompilerServicesFacadeBaseAsync
import org.jetbrains.kotlin.daemon.common.report
internal class CompileServicesFacadeMessageCollector( internal class CompileServicesFacadeMessageCollector(
private val servicesFacade: CompilerServicesFacadeBaseAsync, private val servicesFacade: CompilerServicesFacadeBaseAsync,
@@ -28,7 +25,7 @@ internal class CompileServicesFacadeMessageCollector(
hasErrors = false hasErrors = false
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
GlobalScope.async { GlobalScope.async {
log.info("Message: " + MessageRenderer.WITHOUT_PATHS.render(severity, message, location)) log.info("Message: " + MessageRenderer.WITHOUT_PATHS.render(severity, message, location))
when (severity) { when (severity) {
@@ -6,10 +6,8 @@
package org.jetbrains.kotlin.fir package org.jetbrains.kotlin.fir
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys.CONTENT_ROOTS
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY
import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
@@ -17,9 +15,6 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler import org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler
import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind
import java.io.FileOutputStream import java.io.FileOutputStream
import java.io.PrintStream import java.io.PrintStream
import kotlin.system.measureNanoTime import kotlin.system.measureNanoTime
@@ -87,7 +82,7 @@ class NonFirResolveModularizedTotalKotlinTest : AbstractModularizedTest() {
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
if (location != null) if (location != null)
print(location.toString()) print(location.toString())
print(":") print(":")
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
import org.jetbrains.kotlin.build.GeneratedFile import org.jetbrains.kotlin.build.GeneratedFile
import org.jetbrains.kotlin.cli.common.ExitCode import org.jetbrains.kotlin.cli.common.ExitCode
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.compilerRunner.MessageCollectorToOutputItemsCollectorAdapter import org.jetbrains.kotlin.compilerRunner.MessageCollectorToOutputItemsCollectorAdapter
@@ -353,7 +353,7 @@ abstract class IncrementalCompilerRunner<
} }
private class TemporaryMessageCollector(private val delegate: MessageCollector) : MessageCollector { private class TemporaryMessageCollector(private val delegate: MessageCollector) : MessageCollector {
private class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageLocation?) private class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageSourceLocation?)
private val messages = ArrayList<Message>() private val messages = ArrayList<Message>()
@@ -361,7 +361,7 @@ private class TemporaryMessageCollector(private val delegate: MessageCollector)
messages.clear() messages.clear()
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
messages.add(Message(severity, message, location)) messages.add(Message(severity, message, location))
} }
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.incremental.utils package org.jetbrains.kotlin.incremental.utils
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import java.util.* import java.util.*
@@ -24,7 +24,7 @@ import java.util.*
class TestMessageCollector : MessageCollector { class TestMessageCollector : MessageCollector {
val errors = ArrayList<String>() val errors = ArrayList<String>()
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
if (severity.isError) { if (severity.isError) {
errors.add(message) errors.add(message)
} }
@@ -43,7 +43,7 @@ import org.jetbrains.kotlin.checkers.CompilerTestLanguageVersionSettingsKt;
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys; import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys;
import org.jetbrains.kotlin.cli.common.config.ContentRootsKt; import org.jetbrains.kotlin.cli.common.config.ContentRootsKt;
import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot; import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot;
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation; import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation;
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity; import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity;
import org.jetbrains.kotlin.cli.common.messages.MessageCollector; import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles; import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
@@ -308,7 +308,7 @@ public class KotlinTestUtils {
@Override @Override
public void report( public void report(
@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageLocation location @NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageSourceLocation location
) { ) {
if (severity == CompilerMessageSeverity.ERROR) { if (severity == CompilerMessageSeverity.ERROR) {
String prefix = location == null String prefix = location == null
@@ -20,7 +20,7 @@ import com.intellij.openapi.util.io.FileUtil;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation; import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation;
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity; import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity;
import org.jetbrains.kotlin.cli.common.messages.MessageCollector; import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer; import org.jetbrains.kotlin.cli.common.messages.MessageRenderer;
@@ -41,7 +41,7 @@ public abstract class AbstractModuleXmlParserTest extends TestCase {
ModuleChunk result = ModuleXmlParser.parseModuleScript(xmlPath, new MessageCollector() { ModuleChunk result = ModuleXmlParser.parseModuleScript(xmlPath, new MessageCollector() {
@Override @Override
public void report( public void report(
@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageLocation location @NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageSourceLocation location
) { ) {
throw new AssertionError(MessageRenderer.PLAIN_FULL_PATHS.render(severity, message, location)); throw new AssertionError(MessageRenderer.PLAIN_FULL_PATHS.render(severity, message, location));
} }
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.jsr223 package org.jetbrains.kotlin.jsr223
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.repl.* import org.jetbrains.kotlin.cli.common.repl.*
@@ -92,7 +92,7 @@ class KotlinJsr223JvmScriptEngine4Idea(
private class MyMessageCollector : MessageCollector { private class MyMessageCollector : MessageCollector {
private var hasErrors: Boolean = false private var hasErrors: Boolean = false
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
System.err.println(message) // TODO: proper location printing System.err.println(message) // TODO: proper location printing
if (!hasErrors) { if (!hasErrors) {
hasErrors = severity == CompilerMessageSeverity.EXCEPTION || severity == CompilerMessageSeverity.ERROR hasErrors = severity == CompilerMessageSeverity.EXCEPTION || severity == CompilerMessageSeverity.ERROR
@@ -16,19 +16,16 @@
package org.jetbrains.kotlin.compilerRunner package org.jetbrains.kotlin.compilerRunner
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.preloading.ClassPreloadingUtils import org.jetbrains.kotlin.preloading.ClassPreloadingUtils
import org.jetbrains.kotlin.preloading.Preloader import org.jetbrains.kotlin.preloading.Preloader
import org.jetbrains.kotlin.utils.KotlinPaths import org.jetbrains.kotlin.utils.KotlinPaths
import org.jetbrains.kotlin.utils.KotlinPathsFromBaseDirectory
import java.io.File import java.io.File
import java.io.PrintStream import java.io.PrintStream
import java.lang.ref.SoftReference import java.lang.ref.SoftReference
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR
import org.jetbrains.kotlin.utils.KotlinPathsFromBaseDirectory
import org.jetbrains.kotlin.utils.SmartList
object CompilerRunnerUtil { object CompilerRunnerUtil {
private var ourClassLoaderRef = SoftReference<ClassLoader>(null) private var ourClassLoaderRef = SoftReference<ClassLoader>(null)
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.jps.build
import org.jetbrains.jps.incremental.CompileContext import org.jetbrains.jps.incremental.CompileContext
import org.jetbrains.jps.incremental.messages.BuildMessage import org.jetbrains.jps.incremental.messages.BuildMessage
import org.jetbrains.jps.incremental.messages.CompilerMessage import org.jetbrains.jps.incremental.messages.CompilerMessage
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.config.CompilerRunnerConstants import org.jetbrains.kotlin.config.CompilerRunnerConstants
@@ -21,7 +21,7 @@ class MessageCollectorAdapter(
) : MessageCollector { ) : MessageCollector {
private var hasErrors = false private var hasErrors = false
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
hasErrors = hasErrors || severity.isError hasErrors = hasErrors || severity.isError
var prefix = "" var prefix = ""
@@ -16,11 +16,8 @@
package org.jetbrains.kotlin.compilerRunner package org.jetbrains.kotlin.compilerRunner
import org.gradle.api.file.FileCollection
import org.gradle.process.ExecOperations
import org.gradle.process.ExecResult
import org.jetbrains.kotlin.cli.common.ExitCode import org.jetbrains.kotlin.cli.common.ExitCode
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
@@ -28,7 +25,6 @@ import org.jetbrains.kotlin.config.KotlinCompilerVersion
import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets
import org.jetbrains.kotlin.daemon.client.launchProcessWithFallback import org.jetbrains.kotlin.daemon.client.launchProcessWithFallback
import org.jetbrains.kotlin.gradle.logging.GradleKotlinLogger import org.jetbrains.kotlin.gradle.logging.GradleKotlinLogger
import org.jetbrains.kotlin.gradle.tasks.internal.GradleExecOperationsHolder
import org.jetbrains.org.objectweb.asm.ClassReader import org.jetbrains.org.objectweb.asm.ClassReader
import org.jetbrains.org.objectweb.asm.ClassVisitor import org.jetbrains.org.objectweb.asm.ClassVisitor
import org.jetbrains.org.objectweb.asm.FieldVisitor import org.jetbrains.org.objectweb.asm.FieldVisitor
@@ -144,7 +140,7 @@ private fun createLoggingMessageCollector(log: KotlinLogger): MessageCollector =
override fun hasErrors(): Boolean = hasErrors override fun hasErrors(): Boolean = hasErrors
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
val locMessage = messageRenderer.render(severity, message, location) val locMessage = messageRenderer.render(severity, message, location)
when (severity) { when (severity) {
CompilerMessageSeverity.EXCEPTION -> log.error(locMessage) CompilerMessageSeverity.EXCEPTION -> log.error(locMessage)
@@ -5,21 +5,21 @@
package org.jetbrains.kotlin.gradle.logging package org.jetbrains.kotlin.gradle.logging
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import java.util.ArrayList import java.util.*
internal class GradleBufferingMessageCollector : MessageCollector { internal class GradleBufferingMessageCollector : MessageCollector {
private class MessageData( private class MessageData(
val severity: CompilerMessageSeverity, val severity: CompilerMessageSeverity,
val message: String, val message: String,
val location: CompilerMessageLocation? val location: CompilerMessageSourceLocation?
) )
private val messages = ArrayList<MessageData>() private val messages = ArrayList<MessageData>()
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
synchronized(messages) { synchronized(messages) {
messages.add(MessageData(severity, message, location)) messages.add(MessageData(severity, message, location))
} }
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.gradle.logging package org.jetbrains.kotlin.gradle.logging
import org.gradle.api.logging.Logger import org.gradle.api.logging.Logger
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.GradleStyleMessageRenderer import org.jetbrains.kotlin.cli.common.messages.GradleStyleMessageRenderer
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
@@ -29,7 +29,7 @@ internal class GradlePrintingMessageCollector(
// Do nothing // Do nothing
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
val renderedMessage = messageRenderer.render(severity, message, location) val renderedMessage = messageRenderer.render(severity, message, location)
when (severity) { when (severity) {
@@ -21,8 +21,8 @@ import org.apache.maven.plugin.logging.Log;
import org.codehaus.plexus.compiler.CompilerMessage; import org.codehaus.plexus.compiler.CompilerMessage;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation;
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity; import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity;
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation;
import org.jetbrains.kotlin.cli.common.messages.MessageCollector; import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
import java.util.ArrayList; import java.util.ArrayList;
@@ -34,7 +34,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
public class MavenPluginLogMessageCollector implements MessageCollector { public class MavenPluginLogMessageCollector implements MessageCollector {
private final Log log; private final Log log;
private final ArrayList<Pair<CompilerMessageLocation, String>> collectedErrors = new ArrayList<>(); private final ArrayList<Pair<CompilerMessageSourceLocation, String>> collectedErrors = new ArrayList<>();
public MavenPluginLogMessageCollector(Log log) { public MavenPluginLogMessageCollector(Log log) {
this.log = checkNotNull(log, "log shouldn't be null"); this.log = checkNotNull(log, "log shouldn't be null");
@@ -46,7 +46,7 @@ public class MavenPluginLogMessageCollector implements MessageCollector {
} }
@NotNull @NotNull
public List<Pair<CompilerMessageLocation, String>> getCollectedErrors() { public List<Pair<CompilerMessageSourceLocation, String>> getCollectedErrors() {
return Collections.unmodifiableList(collectedErrors); return Collections.unmodifiableList(collectedErrors);
} }
@@ -56,7 +56,7 @@ public class MavenPluginLogMessageCollector implements MessageCollector {
} }
@Override @Override
public void report(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageLocation location) { public void report(@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageSourceLocation location) {
String position = location == null ? "" : location.getPath() + ": (" + (location.getLine() + ", " + location.getColumn()) + ") "; String position = location == null ? "" : location.getPath() + ": (" + (location.getLine() + ", " + location.getColumn()) + ") ";
String text = position + message; String text = position + message;
@@ -90,7 +90,7 @@ public class MavenPluginLogMessageCollector implements MessageCollector {
public void throwKotlinCompilerException() throws KotlinCompilationFailureException { public void throwKotlinCompilerException() throws KotlinCompilationFailureException {
throw new KotlinCompilationFailureException(getCollectedErrors().stream().map(pair -> { throw new KotlinCompilationFailureException(getCollectedErrors().stream().map(pair -> {
CompilerMessageLocation location = pair.getFirst(); CompilerMessageSourceLocation location = pair.getFirst();
String message = pair.getSecond(); String message = pair.getSecond();
if (location == null) { if (location == null) {
return new CompilerMessage(null, CompilerMessage.Kind.ERROR, 0, 0, 0, 0, message); return new CompilerMessage(null, CompilerMessage.Kind.ERROR, 0, 0, 0, 0, message);
@@ -1,14 +1,14 @@
package org.jetbrains.kotlin.jvm.abi package org.jetbrains.kotlin.jvm.abi
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import java.util.ArrayList import java.util.*
internal class LocationReportingTestMessageCollector : MessageCollector { internal class LocationReportingTestMessageCollector : MessageCollector {
val errors = ArrayList<String>() val errors = ArrayList<String>()
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
if (severity.isError) { if (severity.isError) {
errors.add("e: $location: $message") errors.add("e: $location: $message")
} }
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.kapt.cli.test package org.jetbrains.kotlin.kapt.cli.test
import junit.framework.TestCase import junit.framework.TestCase
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.kapt.cli.transformArgs import org.jetbrains.kotlin.kapt.cli.transformArgs
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
@@ -34,7 +34,7 @@ abstract class AbstractArgumentParsingTest : TestCase() {
} }
class TestMessageCollector : MessageCollector { class TestMessageCollector : MessageCollector {
data class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageLocation?) data class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageSourceLocation?)
val messages = arrayListOf<Message>() val messages = arrayListOf<Message>()
@@ -42,7 +42,7 @@ class TestMessageCollector : MessageCollector {
messages.clear() messages.clear()
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
messages.add(Message(severity, message, location)) messages.add(Message(severity, message, location))
} }
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.scripting.compiler.plugin.impl
import org.jetbrains.kotlin.cli.common.arguments.Argument import org.jetbrains.kotlin.cli.common.arguments.Argument
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.scripting.definitions.MessageReporter import org.jetbrains.kotlin.scripting.definitions.MessageReporter
@@ -32,7 +32,7 @@ class ScriptDiagnosticsMessageCollector(private val parentMessageCollector: Mess
override fun hasErrors(): Boolean = override fun hasErrors(): Boolean =
_diagnostics.any { it.severity == ScriptDiagnostic.Severity.ERROR } || parentMessageCollector?.hasErrors() == true _diagnostics.any { it.severity == ScriptDiagnostic.Severity.ERROR } || parentMessageCollector?.hasErrors() == true
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
val mappedSeverity = severity.toScriptingSeverity() val mappedSeverity = severity.toScriptingSeverity()
if (mappedSeverity != null) { if (mappedSeverity != null) {
val mappedLocation = location?.let { val mappedLocation = location?.let {
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.scripting.compiler.plugin.repl
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
@@ -54,7 +54,7 @@ class ReplInterpreter(
hasErrors = false hasErrors = false
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
val msg = messageRenderer.render(severity, message, location).trimEnd() val msg = messageRenderer.render(severity, message, location).trimEnd()
with(replConfiguration.writer) { with(replConfiguration.writer) {
when (severity) { when (severity) {
@@ -9,7 +9,7 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFileFactory import com.intellij.psi.PsiFileFactory
import com.intellij.psi.impl.PsiFileFactoryImpl import com.intellij.psi.impl.PsiFileFactoryImpl
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.GroupingMessageCollector import org.jetbrains.kotlin.cli.common.messages.GroupingMessageCollector
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
@@ -85,7 +85,7 @@ class ReplMessageCollector : MessageCollector {
messages.clear() messages.clear()
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
if (severity == CompilerMessageSeverity.ERROR) hasErrors = true if (severity == CompilerMessageSeverity.ERROR) hasErrors = true
messages.add(Pair(severity, message)) messages.add(Pair(severity, message))
} }
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.ExitCode import org.jetbrains.kotlin.cli.common.ExitCode
import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoots import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoots
import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
@@ -248,7 +248,7 @@ class ScriptingCompilerPluginTest : TestCase() {
class TestMessageCollector : MessageCollector { class TestMessageCollector : MessageCollector {
data class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageLocation?) data class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageSourceLocation?)
val messages = arrayListOf<Message>() val messages = arrayListOf<Message>()
@@ -256,7 +256,7 @@ class TestMessageCollector : MessageCollector {
messages.clear() messages.clear()
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
messages.add(Message(severity, message, location)) messages.add(Message(severity, message, location))
} }
@@ -16,19 +16,24 @@
package org.jetbrains.kotlin.compiler.client package org.jetbrains.kotlin.compiler.client
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.daemon.client.DaemonReportMessage
import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets
import org.jetbrains.kotlin.daemon.client.KotlinCompilerClient
import org.jetbrains.kotlin.daemon.common.CompileService
import org.jetbrains.kotlin.daemon.common.CompilerId
import org.jetbrains.kotlin.daemon.common.DaemonOptions
import org.jetbrains.kotlin.daemon.common.ReportSeverity
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.rules.TemporaryFolder import org.junit.rules.TemporaryFolder
import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
import java.io.FileNotFoundException import java.io.FileNotFoundException
import kotlin.test.assertEquals
import org.jetbrains.kotlin.daemon.client.*
import org.jetbrains.kotlin.daemon.common.*
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import java.io.ByteArrayOutputStream
import java.io.PrintStream import java.io.PrintStream
import kotlin.test.assertEquals
class CompilerClientIT { class CompilerClientIT {
@@ -110,7 +115,7 @@ internal fun captureOutAndErr(body: () -> Unit): String {
class TestMessageCollector : MessageCollector { class TestMessageCollector : MessageCollector {
data class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageLocation?) data class Message(val severity: CompilerMessageSeverity, val message: String, val location: CompilerMessageSourceLocation?)
val messages = arrayListOf<Message>() val messages = arrayListOf<Message>()
@@ -118,7 +123,7 @@ class TestMessageCollector : MessageCollector {
messages.clear() messages.clear()
} }
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation?) { override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) {
messages.add(Message(severity, message, location)) messages.add(Message(severity, message, location))
} }