Introduce CompilerMessageSeverity.STRONG_WARNING

This is a severity for mandatory warnings, i.e. those which should be reported
in any case, even if there are compilation errors
This commit is contained in:
Alexander Udalov
2017-01-27 16:40:12 +03:00
parent 268d10d3f0
commit 7ac96163ac
8 changed files with 60 additions and 22 deletions
@@ -16,13 +16,16 @@
package org.jetbrains.kotlin.cli.common.messages; package org.jetbrains.kotlin.cli.common.messages;
import org.jetbrains.annotations.NotNull;
import java.util.EnumSet; import java.util.EnumSet;
public enum CompilerMessageSeverity { public enum CompilerMessageSeverity {
INFO,
ERROR,
WARNING,
EXCEPTION, EXCEPTION,
ERROR,
STRONG_WARNING,
WARNING,
INFO,
LOGGING, LOGGING,
OUTPUT; OUTPUT;
@@ -32,4 +35,25 @@ public enum CompilerMessageSeverity {
public boolean isError() { public boolean isError() {
return ERRORS.contains(this); return ERRORS.contains(this);
} }
@NotNull
public String getPresentableName() {
switch (this) {
case EXCEPTION:
return "exception";
case ERROR:
return "error";
case STRONG_WARNING:
case WARNING:
return "warning";
case INFO:
return "info";
case LOGGING:
return "logging";
case OUTPUT:
return "output";
default:
throw new UnsupportedOperationException("Unknown severity: " + this);
}
}
} }
@@ -68,7 +68,7 @@ public class GroupingMessageCollector implements MessageCollector {
for (String path : sortedKeys()) { for (String path : sortedKeys()) {
for (Message message : groupedMessages.get(path)) { for (Message message : groupedMessages.get(path)) {
if (!hasErrors || message.severity.isError()) { if (!hasErrors || message.severity.isError() || message.severity == CompilerMessageSeverity.STRONG_WARNING) {
delegate.report(message.severity, message.message, message.location); delegate.report(message.severity, message.message, message.location);
} }
} }
@@ -49,7 +49,7 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer {
private static final String LINE_SEPARATOR = LineSeparator.getSystemLineSeparator().getSeparatorString(); private static final String LINE_SEPARATOR = LineSeparator.getSystemLineSeparator().getSeparatorString();
private static final Set<CompilerMessageSeverity> IMPORTANT_MESSAGE_SEVERITIES = EnumSet.of(EXCEPTION, ERROR, WARNING); private static final Set<CompilerMessageSeverity> IMPORTANT_MESSAGE_SEVERITIES = EnumSet.of(EXCEPTION, ERROR, STRONG_WARNING, WARNING);
@Override @Override
public String renderPreamble() { public String renderPreamble() {
@@ -83,7 +83,7 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer {
Ansi ansi = Ansi.ansi() Ansi ansi = Ansi.ansi()
.bold() .bold()
.fg(severityColor(severity)) .fg(severityColor(severity))
.a(severity.name().toLowerCase()) .a(severity.getPresentableName())
.a(": ") .a(": ")
.reset(); .reset();
@@ -102,7 +102,7 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer {
} }
} }
else { else {
result.append(severity.name().toLowerCase()); result.append(severity.getPresentableName());
result.append(": "); result.append(": ");
result.append(decapitalizeIfNeeded(message)); result.append(decapitalizeIfNeeded(message));
} }
@@ -141,6 +141,8 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer {
return Ansi.Color.RED; return Ansi.Color.RED;
case ERROR: case ERROR:
return Ansi.Color.RED; return Ansi.Color.RED;
case STRONG_WARNING:
return Ansi.Color.YELLOW;
case WARNING: case WARNING:
return Ansi.Color.YELLOW; return Ansi.Color.YELLOW;
case INFO: case INFO:
@@ -28,7 +28,8 @@ public class XmlMessageRenderer implements MessageRenderer {
@Override @Override
public String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @NotNull CompilerMessageLocation location) { public String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @NotNull CompilerMessageLocation location) {
StringBuilder out = new StringBuilder(); StringBuilder out = new StringBuilder();
out.append("<").append(severity.toString()); String tagName = severity.getPresentableName();
out.append("<").append(tagName);
if (location.getPath() != null) { if (location.getPath() != null) {
out.append(" path=\"").append(e(location.getPath())).append("\""); out.append(" path=\"").append(e(location.getPath())).append("\"");
out.append(" line=\"").append(location.getLine()).append("\""); out.append(" line=\"").append(location.getLine()).append("\"");
@@ -38,11 +39,11 @@ public class XmlMessageRenderer implements MessageRenderer {
out.append(e(message)); out.append(e(message));
out.append("</").append(severity.toString()).append(">\n"); out.append("</").append(tagName).append(">\n");
return out.toString(); return out.toString();
} }
private String e(String str) { private static String e(String str) {
return StringUtil.escapeXml(str); return StringUtil.escapeXml(str);
} }
@@ -46,7 +46,7 @@ internal class CompileServicesFacadeMessageCollector(
else -> { else -> {
val reportSeverity = when (severity) { val reportSeverity = when (severity) {
CompilerMessageSeverity.ERROR -> ReportSeverity.ERROR CompilerMessageSeverity.ERROR -> ReportSeverity.ERROR
CompilerMessageSeverity.WARNING -> ReportSeverity.WARNING CompilerMessageSeverity.WARNING, CompilerMessageSeverity.STRONG_WARNING -> ReportSeverity.WARNING
CompilerMessageSeverity.INFO -> ReportSeverity.INFO CompilerMessageSeverity.INFO -> ReportSeverity.INFO
else -> ReportSeverity.DEBUG else -> ReportSeverity.DEBUG
} }
@@ -57,7 +57,7 @@ internal class CompileServicesFacadeMessageCollector(
} }
} }
hasErrors = hasErrors || severity == CompilerMessageSeverity.ERROR || severity == CompilerMessageSeverity.EXCEPTION hasErrors = hasErrors || severity.isError
} }
override fun hasErrors(): Boolean = hasErrors override fun hasErrors(): Boolean = hasErrors
@@ -37,14 +37,20 @@ import org.jetbrains.jps.model.JpsProject
import org.jetbrains.jps.model.java.JpsJavaClasspathKind import org.jetbrains.jps.model.java.JpsJavaClasspathKind
import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.model.java.JpsJavaExtensionService
import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.model.module.JpsModule
import org.jetbrains.kotlin.build.* import org.jetbrains.kotlin.build.GeneratedFile
import org.jetbrains.kotlin.build.GeneratedJvmClass
import org.jetbrains.kotlin.build.JvmBuildMetaInfo
import org.jetbrains.kotlin.build.isModuleMappingFile
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.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
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
import org.jetbrains.kotlin.compilerRunner.* import org.jetbrains.kotlin.compilerRunner.JpsCompilerEnvironment
import org.jetbrains.kotlin.compilerRunner.JpsKotlinCompilerRunner
import org.jetbrains.kotlin.compilerRunner.OutputItemsCollector
import org.jetbrains.kotlin.compilerRunner.OutputItemsCollectorImpl
import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.CompilerRunnerConstants.INTERNAL_ERROR_PREFIX import org.jetbrains.kotlin.config.CompilerRunnerConstants.INTERNAL_ERROR_PREFIX
import org.jetbrains.kotlin.daemon.common.isDaemonEnabled import org.jetbrains.kotlin.daemon.common.isDaemonEnabled
@@ -58,8 +64,9 @@ import org.jetbrains.kotlin.modules.TargetId
import org.jetbrains.kotlin.preloading.ClassCondition import org.jetbrains.kotlin.preloading.ClassCondition
import org.jetbrains.kotlin.progress.CompilationCanceledException import org.jetbrains.kotlin.progress.CompilationCanceledException
import org.jetbrains.kotlin.progress.CompilationCanceledStatus import org.jetbrains.kotlin.progress.CompilationCanceledStatus
import org.jetbrains.kotlin.build.JvmBuildMetaInfo import org.jetbrains.kotlin.utils.JsLibraryUtils
import org.jetbrains.kotlin.utils.* import org.jetbrains.kotlin.utils.PathUtil
import org.jetbrains.kotlin.utils.keysToMap
import org.jetbrains.org.objectweb.asm.ClassReader import org.jetbrains.org.objectweb.asm.ClassReader
import java.io.File import java.io.File
import java.util.* import java.util.*
@@ -766,7 +773,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
return when (severity) { return when (severity) {
INFO -> BuildMessage.Kind.INFO INFO -> BuildMessage.Kind.INFO
ERROR, EXCEPTION -> BuildMessage.Kind.ERROR ERROR, EXCEPTION -> BuildMessage.Kind.ERROR
WARNING -> BuildMessage.Kind.WARNING WARNING, STRONG_WARNING -> BuildMessage.Kind.WARNING
LOGGING -> BuildMessage.Kind.PROGRESS LOGGING -> BuildMessage.Kind.PROGRESS
else -> throw IllegalArgumentException("Unsupported severity: " + severity) else -> throw IllegalArgumentException("Unsupported severity: " + severity)
} }
@@ -382,7 +382,7 @@ internal class GradleMessageCollector(val logger: Logger) : MessageCollector {
"e" "e"
} }
CompilerMessageSeverity.INFO -> "i" CompilerMessageSeverity.INFO -> "i"
CompilerMessageSeverity.WARNING -> "w" CompilerMessageSeverity.WARNING, CompilerMessageSeverity.STRONG_WARNING -> "w"
else -> throw IllegalArgumentException("Unknown CompilerMessageSeverity: $severity") else -> throw IllegalArgumentException("Unknown CompilerMessageSeverity: $severity")
}) })
append(": ") append(": ")
@@ -404,7 +404,7 @@ internal class GradleMessageCollector(val logger: Logger) : MessageCollector {
in CompilerMessageSeverity.VERBOSE -> logger.debug(text) in CompilerMessageSeverity.VERBOSE -> logger.debug(text)
in CompilerMessageSeverity.ERRORS -> logger.error(text) in CompilerMessageSeverity.ERRORS -> logger.error(text)
CompilerMessageSeverity.INFO -> logger.info(text) CompilerMessageSeverity.INFO -> logger.info(text)
CompilerMessageSeverity.WARNING -> logger.warn(text) CompilerMessageSeverity.WARNING, CompilerMessageSeverity.STRONG_WARNING -> logger.warn(text)
else -> throw IllegalArgumentException("Unknown CompilerMessageSeverity: $severity") else -> throw IllegalArgumentException("Unknown CompilerMessageSeverity: $severity")
} }
} }
@@ -47,10 +47,14 @@ class KotlinMessager(private val messageCollector: MessageCollector) : Messager
errorCount++ errorCount++
CompilerMessageSeverity.ERROR CompilerMessageSeverity.ERROR
} }
Kind.WARNING, Kind.MANDATORY_WARNING -> { Kind.WARNING -> {
warningCount++ warningCount++
CompilerMessageSeverity.WARNING CompilerMessageSeverity.WARNING
} }
Kind.MANDATORY_WARNING -> {
warningCount++
CompilerMessageSeverity.STRONG_WARNING
}
else -> CompilerMessageSeverity.LOGGING else -> CompilerMessageSeverity.LOGGING
} }
messageCollector.report(severity, msg.toString(), CompilerMessageLocation.NO_LOCATION) messageCollector.report(severity, msg.toString(), CompilerMessageLocation.NO_LOCATION)