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;
import org.jetbrains.annotations.NotNull;
import java.util.EnumSet;
public enum CompilerMessageSeverity {
INFO,
ERROR,
WARNING,
EXCEPTION,
ERROR,
STRONG_WARNING,
WARNING,
INFO,
LOGGING,
OUTPUT;
@@ -32,4 +35,25 @@ public enum CompilerMessageSeverity {
public boolean isError() {
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 (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);
}
}
@@ -49,7 +49,7 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer {
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
public String renderPreamble() {
@@ -83,7 +83,7 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer {
Ansi ansi = Ansi.ansi()
.bold()
.fg(severityColor(severity))
.a(severity.name().toLowerCase())
.a(severity.getPresentableName())
.a(": ")
.reset();
@@ -102,7 +102,7 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer {
}
}
else {
result.append(severity.name().toLowerCase());
result.append(severity.getPresentableName());
result.append(": ");
result.append(decapitalizeIfNeeded(message));
}
@@ -141,6 +141,8 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer {
return Ansi.Color.RED;
case ERROR:
return Ansi.Color.RED;
case STRONG_WARNING:
return Ansi.Color.YELLOW;
case WARNING:
return Ansi.Color.YELLOW;
case INFO:
@@ -28,7 +28,8 @@ public class XmlMessageRenderer implements MessageRenderer {
@Override
public String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @NotNull CompilerMessageLocation location) {
StringBuilder out = new StringBuilder();
out.append("<").append(severity.toString());
String tagName = severity.getPresentableName();
out.append("<").append(tagName);
if (location.getPath() != null) {
out.append(" path=\"").append(e(location.getPath())).append("\"");
out.append(" line=\"").append(location.getLine()).append("\"");
@@ -38,11 +39,11 @@ public class XmlMessageRenderer implements MessageRenderer {
out.append(e(message));
out.append("</").append(severity.toString()).append(">\n");
out.append("</").append(tagName).append(">\n");
return out.toString();
}
private String e(String str) {
private static String e(String str) {
return StringUtil.escapeXml(str);
}