Skip to content

Commit 8271153

Browse files
committed
Fix indentation of compilation results on the console
Whenever warnings or errors were printed via CompilationResult.toString, indirectly also using MessageUtil.renderMessage(IMessage, boolean), messages containing context info such as code snippets with carets marking erroneous tokens - see also the previous commit - prefixes like "[warning 1] warning at " were printed right in front of the code snippets. I.e., the carets marking erroneous tokens in the second line were not indented like the first line with the code snippet, leading to (simplified) output like: [warning 1] warning at after() : execution(FooBar Blah.*()) { ^^^^^^ xxx FooBar [Xlint:invalidAbsoluteTypeName] This was fixed to now correctly indent lines 2 to n according to line 1, yielding the correct output: [warning 1] warning at after() : execution(FooBar Blah.*()) { ^^^^^^ xxx FooBar [Xlint:invalidAbsoluteTypeName] Especially with longer, more complex context lines, this helps to identify the erroneous section. BTW, for one-line messages, everything of course looks like before. Signed-off-by: Alexander Kriegisch <[email protected]>
1 parent ac2b81c commit 8271153

File tree

2 files changed

+43
-55
lines changed

2 files changed

+43
-55
lines changed

bridge/src/main/java/org/aspectj/bridge/MessageUtil.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -798,10 +798,14 @@ public static String renderMessage(IMessage message, boolean elide) {
798798
return "((IMessage) null)";
799799
}
800800

801+
String result = message.getKind().toString();
801802
ISourceLocation loc = message.getSourceLocation();
802-
String locString = (null == loc ? "" : " at " + loc);
803-
804-
String result = message.getKind() + locString + " " + message.getMessage();
803+
if (loc != null) {
804+
String context = loc.getContext();
805+
result += context == null || context.trim().isEmpty() ? " at " : " at\n";
806+
result += loc;
807+
}
808+
result += " " + message.getMessage();
805809

806810
Throwable thrown = message.getThrown();
807811
if (thrown != null) {

org.aspectj.ajdt.core/src/test/java/org/aspectj/tools/ajc/CompilationResult.java

Lines changed: 36 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -155,69 +155,53 @@ protected CompilationResult(
155155
public String toString() {
156156
StringBuilder buff = new StringBuilder();
157157
buff.append("AspectJ Compilation Result:\n");
158+
158159
int totalMessages = infoMessages.size() + warningMessages.size() + errorMessages.size() + failMessages.size() + weaveMessages.size();
159-
buff.append(totalMessages);
160-
buff.append(" messages");
160+
buff.append(totalMessages).append(" messages");
161161
if (totalMessages > 0) {
162-
buff.append(" (");
163-
buff.append(infoMessages.size());
164-
buff.append(" info, ");
165-
buff.append(warningMessages.size());
166-
buff.append(" warning, ");
167-
buff.append(errorMessages.size());
168-
buff.append(" error, ");
169-
buff.append(failMessages.size());
170-
buff.append(" fail, )");
171-
buff.append(weaveMessages.size());
172-
buff.append(" weaveInfo");
162+
buff
163+
.append(" (")
164+
.append(infoMessages.size()).append(" info, ")
165+
.append(warningMessages.size()).append(" warning, ")
166+
.append(errorMessages.size()).append(" error, ")
167+
.append(failMessages.size()).append(" fail, ")
168+
.append(weaveMessages.size()).append(" weaveInfo")
169+
.append(")");
173170
}
174171
buff.append("\n");
172+
175173
int msgNo = 1;
176-
for (IMessage failMessage : failMessages) {
177-
buff.append("[fail ");
178-
buff.append(msgNo++);
179-
buff.append("] ");
180-
buff.append(failMessage.toString());
181-
buff.append("\n");
182-
}
174+
for (IMessage failMessage : failMessages)
175+
indentWithPrefix(buff, "[fail " + msgNo++ + "] ", failMessage.toString());
183176
msgNo = 1;
184-
for (IMessage errorMessage : errorMessages) {
185-
buff.append("[error ");
186-
buff.append(msgNo++);
187-
buff.append("] ");
188-
buff.append(errorMessage.toString());
189-
buff.append("\n");
190-
}
177+
for (IMessage errorMessage : errorMessages)
178+
indentWithPrefix(buff, "[error " + msgNo++ + "] ", errorMessage.toString());
191179
msgNo = 1;
192-
for (IMessage warningMessage : warningMessages) {
193-
buff.append("[warning ");
194-
buff.append(msgNo++);
195-
buff.append("] ");
196-
buff.append(warningMessage.toString());
197-
buff.append("\n");
198-
}
180+
for (IMessage warningMessage : warningMessages)
181+
indentWithPrefix(buff, "[warning " + msgNo++ + "] ", warningMessage.toString());
199182
msgNo = 1;
200-
for (IMessage infoMessage : infoMessages) {
201-
buff.append("[info ");
202-
buff.append(msgNo++);
203-
buff.append("] ");
204-
buff.append(infoMessage.toString());
205-
buff.append("\n");
206-
}
183+
for (IMessage infoMessage : infoMessages)
184+
indentWithPrefix(buff, "[info " + msgNo++ + "] ", infoMessage.toString());
207185
msgNo = 1;
208-
for (IMessage weaveMessage : weaveMessages) {
209-
buff.append("[weaveInfo ");
210-
buff.append(msgNo++);
211-
buff.append("] ");
212-
buff.append(weaveMessage.toString());
213-
buff.append("\n");
214-
}
186+
for (IMessage weaveMessage : weaveMessages)
187+
indentWithPrefix(buff, "[weaveInfo " + msgNo++ + "] ", weaveMessage.toString());
188+
215189
buff.append("\nCommand: 'ajc");
216-
for (String arg : args) {
217-
buff.append(' ');
218-
buff.append(arg);
219-
}
190+
for (String arg : args)
191+
buff.append(' ').append(arg);
220192
buff.append("'\n");
193+
221194
return buff.toString();
222195
}
196+
197+
private void indentWithPrefix(StringBuilder buffer, String prefix, String message) {
198+
String[] lines = message.split("\n|\r\n|\r");
199+
boolean firstLine = true;
200+
for (String line : lines) {
201+
buffer.append(prefix);
202+
if (firstLine)
203+
prefix = prefix.replaceAll(".", " ");
204+
buffer.append(line).append('\n');
205+
}
206+
}
223207
}

0 commit comments

Comments
 (0)