Support -Werror CLI argument to treat warnings as errors
The option is named "warningsAsErrors" in the Gradle plugin #KT-10563 Fixed
This commit is contained in:
committed by
Ilya Gorbunov
parent
897261a8a6
commit
5cbcbe4a9c
+4
@@ -44,4 +44,8 @@ abstract class CommonToolArguments : Freezable(), Serializable {
|
||||
@GradleOption(DefaultValues.BooleanFalseDefault::class)
|
||||
@Argument(value = "-nowarn", description = "Generate no warnings")
|
||||
var suppressWarnings: Boolean by FreezableVar(false)
|
||||
|
||||
@GradleOption(DefaultValues.BooleanFalseDefault::class)
|
||||
@Argument(value = "-Werror", description = "Report an error if there are any warnings")
|
||||
var warningsAsErrors: Boolean by FreezableVar(false)
|
||||
}
|
||||
|
||||
+5
-2
@@ -35,11 +35,14 @@ public enum CompilerMessageSeverity {
|
||||
*/
|
||||
OUTPUT;
|
||||
|
||||
public static final EnumSet<CompilerMessageSeverity> ERRORS = EnumSet.of(ERROR, EXCEPTION);
|
||||
public static final EnumSet<CompilerMessageSeverity> VERBOSE = EnumSet.of(LOGGING);
|
||||
|
||||
public boolean isError() {
|
||||
return ERRORS.contains(this);
|
||||
return this == EXCEPTION || this == ERROR;
|
||||
}
|
||||
|
||||
public boolean isWarning() {
|
||||
return this == STRONG_WARNING || this == WARNING;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+18
-3
@@ -24,16 +24,19 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class GroupingMessageCollector implements MessageCollector {
|
||||
private final MessageCollector delegate;
|
||||
private final boolean treatWarningsAsErrors;
|
||||
|
||||
// Note that the key in this map can be null
|
||||
private final Multimap<CompilerMessageLocation, Message> groupedMessages = LinkedHashMultimap.create();
|
||||
|
||||
public GroupingMessageCollector(@NotNull MessageCollector delegate) {
|
||||
public GroupingMessageCollector(@NotNull MessageCollector delegate, boolean treatWarningsAsErrors) {
|
||||
this.delegate = delegate;
|
||||
this.treatWarningsAsErrors = treatWarningsAsErrors;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -57,17 +60,29 @@ public class GroupingMessageCollector implements MessageCollector {
|
||||
|
||||
@Override
|
||||
public boolean hasErrors() {
|
||||
return hasExplicitErrors() || (treatWarningsAsErrors && hasWarnings());
|
||||
}
|
||||
|
||||
private boolean hasExplicitErrors() {
|
||||
return groupedMessages.entries().stream().anyMatch(entry -> entry.getValue().severity.isError());
|
||||
}
|
||||
|
||||
private boolean hasWarnings() {
|
||||
return groupedMessages.entries().stream().anyMatch(entry -> entry.getValue().severity.isWarning());
|
||||
}
|
||||
|
||||
public void flush() {
|
||||
boolean hasErrors = hasErrors();
|
||||
boolean hasExplicitErrors = hasExplicitErrors();
|
||||
|
||||
if (treatWarningsAsErrors && !hasExplicitErrors && hasWarnings()) {
|
||||
report(CompilerMessageSeverity.ERROR, "warnings found and -Werror specified", null);
|
||||
}
|
||||
|
||||
List<CompilerMessageLocation> sortedKeys =
|
||||
CollectionsKt.sortedWith(groupedMessages.keySet(), Comparator.nullsFirst(CompilerMessageLocationComparator.INSTANCE));
|
||||
for (CompilerMessageLocation location : sortedKeys) {
|
||||
for (Message message : groupedMessages.get(location)) {
|
||||
if (!hasErrors || 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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user