From e93ddccb403409541c86ab7bf8b75e9ea378f164 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Tue, 23 Jan 2018 16:09:14 +0300 Subject: [PATCH] Build view: javac output parser handle 'Note' messages, e.g. notes about unchecked or unsafe operations usage. --- .../build/output/JavacOutputParser.java | 33 +++++++++++++++++++ .../build/output/KotlincOutputParser.kt | 1 + 2 files changed, 34 insertions(+) diff --git a/java/compiler/impl/src/com/intellij/build/output/JavacOutputParser.java b/java/compiler/impl/src/com/intellij/build/output/JavacOutputParser.java index f6200367b28b..fe383eabd7f5 100644 --- a/java/compiler/impl/src/com/intellij/build/output/JavacOutputParser.java +++ b/java/compiler/impl/src/com/intellij/build/output/JavacOutputParser.java @@ -51,6 +51,21 @@ public class JavacOutputParser implements BuildOutputParser { messageConsumer.accept(new MessageEventImpl(reader.getBuildId(), MessageEvent.Kind.ERROR, COMPILER_MESSAGES_GROUP, line, line)); return true; } + if (part1.equalsIgnoreCase("Note")) { + String message = line.substring(colonIndex1 + 1).trim(); + int javaFileExtensionIndex = message.indexOf(".java"); + if (javaFileExtensionIndex > 0) { + File file = new File(message.substring(0, javaFileExtensionIndex + ".java".length())); + if (file.isFile()) { + message = message.substring(javaFileExtensionIndex + ".java".length() + 1); + String detailedMessage = amendNextInfoLinesIfNeeded(file.getPath() + ":\n" + message, reader); + messageConsumer.accept(new FileMessageEventImpl(reader.getBuildId(), MessageEvent.Kind.INFO, COMPILER_MESSAGES_GROUP, + message, detailedMessage, + new FilePosition(file, 0, 0))); + return true; + } + } + } int colonIndex2 = line.indexOf(COLON, colonIndex1 + 1); if (colonIndex2 >= 0) { @@ -127,6 +142,24 @@ public class JavacOutputParser implements BuildOutputParser { return false; } + private static String amendNextInfoLinesIfNeeded(String str, BuildOutputInstantReader reader) { + StringBuilder builder = new StringBuilder(str); + String nextLine = reader.readLine(); + while (nextLine != null) { + if (nextLine.startsWith("Note: ")) { + int index = nextLine.indexOf(".java"); + if (index < 0) { + builder.append("\n").append(nextLine.substring("Note: ".length())); + nextLine = reader.readLine(); + continue; + } + } + reader.pushBack(); + break; + } + return builder.toString(); + } + @Contract("null -> false") private static boolean isMessageEnd(@Nullable String line) { return line != null && line.length() > 0 && Character.isWhitespace(line.charAt(0)); diff --git a/java/compiler/impl/src/com/intellij/build/output/KotlincOutputParser.kt b/java/compiler/impl/src/com/intellij/build/output/KotlincOutputParser.kt index eb5f2efc3566..fbca2c7c37ed 100644 --- a/java/compiler/impl/src/com/intellij/build/output/KotlincOutputParser.kt +++ b/java/compiler/impl/src/com/intellij/build/output/KotlincOutputParser.kt @@ -96,6 +96,7 @@ class KotlincOutputParser : BuildOutputParser { val colonIndex1 = indexOf(COLON) return colonIndex1 == 0 || (colonIndex1 >= 0 && substring(0, colonIndex1).startsWithSeverityPrefix()) // Next Kotlin message + || StringUtil.startsWith(this, "Note: ") // Next javac info message candidate || StringUtil.containsIgnoreCase(this, "FAILURE") || StringUtil.containsIgnoreCase(this, "FAILED") }