aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2012-10-25 00:07:44 +0200
committerReinier Zwitserloot <reinier@zwitserloot.com>2012-10-25 00:07:44 +0200
commitd2808d407a65da9fe1e290a83df0f0da107f0cf8 (patch)
tree80e577330ebef88dbd91c1de59951cbff94af9e8
parent2d216118986115bf309c050cd841bbe8b62b80b3 (diff)
downloadlombok-d2808d407a65da9fe1e290a83df0f0da107f0cf8.tar.gz
lombok-d2808d407a65da9fe1e290a83df0f0da107f0cf8.tar.bz2
lombok-d2808d407a65da9fe1e290a83df0f0da107f0cf8.zip
The testrunner now uses a different mechanism to verify correctness of produced errors and warnings (i.e. we intentionally compile code with errors in them to verify that the appropriate error or warning message is emitted when lombok is active during a compilation run of either javac or ecj) - instead of string comparisons, it's a little more complex. This to enable testing of both javac6 and javac7, even if they produce (slightly) different error output.
Updated all message files in the 'expected output' directories to represent this change.
-rw-r--r--.gitignore3
-rw-r--r--test/core/src/lombok/AbstractRunTests.java64
-rw-r--r--test/core/src/lombok/CompilerMessage.java50
-rw-r--r--test/core/src/lombok/CompilerMessageMatcher.java62
-rw-r--r--test/core/src/lombok/RunTestsViaDelombok.java6
-rw-r--r--test/core/src/lombok/RunTestsViaEcj.java5
-rw-r--r--test/transform/resource/messages-delombok/Accessors.java.messages2
-rw-r--r--test/transform/resource/messages-delombok/ConflictingStaticConstructorNames.java.messages2
-rw-r--r--test/transform/resource/messages-delombok/EqualsAndHashCodeWithExistingMethods.java.messages6
-rw-r--r--test/transform/resource/messages-delombok/FieldDefaultsNoop.java.messages2
-rw-r--r--test/transform/resource/messages-delombok/GetterAlreadyExists.java.messages16
-rw-r--r--test/transform/resource/messages-delombok/GetterBoolean.java.messages2
-rw-r--r--test/transform/resource/messages-delombok/GetterLazyInvalid.java.messages12
-rw-r--r--test/transform/resource/messages-delombok/GetterOnMethod.java.messages24
-rw-r--r--test/transform/resource/messages-delombok/LoggerSlf4jAlreadyExists.java.messages2
-rw-r--r--test/transform/resource/messages-delombok/LoggerSlf4jOnNonStaticInnerClass.java.messages2
-rw-r--r--test/transform/resource/messages-delombok/LoggerSlf4jOnNonType.java.messages2
-rw-r--r--test/transform/resource/messages-delombok/LoggerSlf4jTypes.java.messages4
-rw-r--r--test/transform/resource/messages-delombok/SetterAlreadyExists.java.messages14
-rw-r--r--test/transform/resource/messages-delombok/SetterOnMethod.java.messages24
-rw-r--r--test/transform/resource/messages-delombok/SetterOnParam.java.messages24
-rw-r--r--test/transform/resource/messages-delombok/SetterOnParamAndOnMethod.java.messages8
-rw-r--r--test/transform/resource/messages-delombok/SimpleTypeResolution.java.messages10
-rw-r--r--test/transform/resource/messages-delombok/SynchronizedNameNoSuchField.java.messages2
-rw-r--r--test/transform/resource/messages-delombok/SynchronizedNameStaticToInstanceRef.java.messages2
-rw-r--r--test/transform/resource/messages-delombok/ValErrors.java.messages4
-rw-r--r--test/transform/resource/messages-delombok/ValInBasicFor.java.messages6
-rw-r--r--test/transform/resource/messages-delombok/WitherAlreadyExists.java.messages14
-rw-r--r--test/transform/resource/messages-delombok/WitherOnStatic.java.messages4
-rw-r--r--test/transform/resource/messages-delombok/WitherWithDollar.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/Accessors.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/ConflictingStaticConstructorNames.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/EqualsAndHashCodeWithExistingMethods.java.messages6
-rw-r--r--test/transform/resource/messages-ecj/FieldDefaultsNoop.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/GetterAlreadyExists.java.messages16
-rw-r--r--test/transform/resource/messages-ecj/GetterBoolean.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/GetterLazyInvalid.java.messages12
-rw-r--r--test/transform/resource/messages-ecj/GetterOnMethod.java.messages4
-rw-r--r--test/transform/resource/messages-ecj/LoggerSlf4jAlreadyExists.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/LoggerSlf4jOnNonStaticInnerClass.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/LoggerSlf4jOnNonType.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/LoggerSlf4jTypes.java.messages4
-rw-r--r--test/transform/resource/messages-ecj/SetterAlreadyExists.java.messages14
-rw-r--r--test/transform/resource/messages-ecj/SetterOnMethod.java.messages4
-rw-r--r--test/transform/resource/messages-ecj/SetterOnParam.java.messages4
-rw-r--r--test/transform/resource/messages-ecj/SimpleTypeResolution.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/SynchronizedName.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/SynchronizedNameNoSuchField.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/SynchronizedNameStaticToInstanceRef.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/ValErrors.java.messages4
-rw-r--r--test/transform/resource/messages-ecj/ValInBasicFor.java.messages8
-rw-r--r--test/transform/resource/messages-ecj/ValRawType.java.messages2
-rw-r--r--test/transform/resource/messages-ecj/WitherAlreadyExists.java.messages14
-rw-r--r--test/transform/resource/messages-ecj/WitherOnStatic.java.messages4
-rw-r--r--test/transform/resource/messages-ecj/WitherWithDollar.java.messages2
-rw-r--r--test/transform/resource/messages-idempotent/SimpleTypeResolution.java.messages10
-rw-r--r--test/transform/resource/messages-idempotent/SynchronizedNameStaticToInstanceRef.java.messages2
-rw-r--r--test/transform/resource/messages-idempotent/ValErrors.java.messages10
-rw-r--r--test/transform/resource/messages-idempotent/ValInBasicFor.java.messages6
59 files changed, 320 insertions, 208 deletions
diff --git a/.gitignore b/.gitignore
index bc8b4ec0..7fb9cc6b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,8 +5,7 @@
/ivyCache
/google.properties
/debug
-/LombokizedEclipse.launch
-/RunLombokTests.launch
+/*.launch
/escudo-upload.key
/findbugsReport.html
/lib
diff --git a/test/core/src/lombok/AbstractRunTests.java b/test/core/src/lombok/AbstractRunTests.java
index 02c4803a..676426f4 100644
--- a/test/core/src/lombok/AbstractRunTests.java
+++ b/test/core/src/lombok/AbstractRunTests.java
@@ -25,13 +25,19 @@ import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
+import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.List;
public abstract class AbstractRunTests {
@@ -43,11 +49,23 @@ public abstract class AbstractRunTests {
}
public boolean compareFile(DirectoryRunner.TestParams params, File file) throws Throwable {
- StringBuilder messages = new StringBuilder();
+ LinkedHashSet<CompilerMessage> messages = new LinkedHashSet<CompilerMessage>();
StringWriter writer = new StringWriter();
transformCode(messages, writer, file);
String expectedFile = readFile(params.getAfterDirectory(), file, false);
- String expectedMessages = readFile(params.getMessagesDirectory(), file, true);
+ List<CompilerMessageMatcher> expectedMessages = Collections.emptyList();
+ if (params.getMessagesDirectory() != null) {
+ try {
+ InputStream in = new FileInputStream(new File(params.getMessagesDirectory(), file.getName() + ".messages"));
+ try {
+ expectedMessages = CompilerMessageMatcher.readAll(in);
+ } finally {
+ in.close();
+ }
+ } catch (FileNotFoundException ex) {
+ // That's okay - then we expect no messages, and expectedMessages already gets initialized to the empty list.
+ }
+ }
StringReader r = new StringReader(expectedFile);
BufferedReader br = new BufferedReader(r);
@@ -58,13 +76,13 @@ public abstract class AbstractRunTests {
expectedFile,
writer.toString(),
expectedMessages,
- messages.toString(),
+ messages,
params.printErrors());
return true;
}
- protected abstract void transformCode(StringBuilder message, StringWriter result, File file) throws Throwable;
+ protected abstract void transformCode(Collection<CompilerMessage> messages, StringWriter result, File file) throws Throwable;
protected String readFile(File file) throws IOException {
BufferedReader reader;
@@ -107,7 +125,19 @@ public abstract class AbstractRunTests {
}
}
- private void compare(String name, String expectedFile, String actualFile, String expectedMessages, String actualMessages, boolean printErrors) throws Throwable {
+ private static void dumpToFile(File file, Collection<CompilerMessage> content) throws IOException {
+ FileOutputStream fos = new FileOutputStream(file);
+ try {
+ for (CompilerMessage message : content) {
+ fos.write(message.asCompilerMessageMatcher().toString().getBytes("UTF-8"));
+ fos.write('\n');
+ }
+ } finally {
+ fos.close();
+ }
+ }
+
+ private void compare(String name, String expectedFile, String actualFile, List<CompilerMessageMatcher> expectedMessages, LinkedHashSet<CompilerMessage> actualMessages, boolean printErrors) throws Throwable {
try {
compareContent(name, expectedFile, actualFile);
} catch (Throwable e) {
@@ -129,8 +159,9 @@ public abstract class AbstractRunTests {
}
throw e;
}
+
try {
- compareContent(name, expectedMessages, actualMessages);
+ compareMessages(name, expectedMessages, actualMessages);
} catch (Throwable e) {
if (printErrors) {
System.out.println("***** " + name + " *****");
@@ -148,6 +179,27 @@ public abstract class AbstractRunTests {
}
}
+ private static void compareMessages(String name, List<CompilerMessageMatcher> expected, LinkedHashSet<CompilerMessage> actual) {
+ Iterator<CompilerMessageMatcher> expectedIterator = expected.iterator();
+ Iterator<CompilerMessage> actualIterator = actual.iterator();
+
+ while (true) {
+ boolean exHasNext = expectedIterator.hasNext();
+ boolean acHasNext = actualIterator.hasNext();
+ if (!exHasNext && !acHasNext) break;
+ if (exHasNext && acHasNext) {
+ CompilerMessageMatcher cmm = expectedIterator.next();
+ CompilerMessage cm = actualIterator.next();
+ if (cmm.matches(cm)) continue;
+ fail(String.format("[%s] Expected message '%s' but got message '%s'", name, cmm, cm));
+ throw new AssertionError("fail should have aborted already.");
+ }
+ if (exHasNext) fail(String.format("[%s] Expected message '%s' but ran out of actual messages", name, expectedIterator.next()));
+ if (acHasNext) fail(String.format("[%s] Unexpected message: %s", name, actualIterator.next()));
+ throw new AssertionError("fail should have aborted already.");
+ }
+ }
+
private static void compareContent(String name, String expectedFile, String actualFile) {
String[] expectedLines = expectedFile.split("(\\r?\\n)");
String[] actualLines = actualFile.split("(\\r?\\n)");
diff --git a/test/core/src/lombok/CompilerMessage.java b/test/core/src/lombok/CompilerMessage.java
new file mode 100644
index 00000000..d04d17f1
--- /dev/null
+++ b/test/core/src/lombok/CompilerMessage.java
@@ -0,0 +1,50 @@
+package lombok;
+
+public final class CompilerMessage {
+ /** Line Number (starting at 1) */
+ final long line;
+
+ /** Position is either column number, OR position in file starting from the first byte. */
+ final long position;
+ final boolean isError;
+ final String message;
+
+ public CompilerMessage(long line, long position, boolean isError, String message) {
+ this.line = line;
+ this.position = position;
+ this.isError = isError;
+ this.message = message;
+ }
+
+ @Override public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (isError ? 1231 : 1237);
+ result = prime * result + (int) (line ^ (line >>> 32));
+ result = prime * result + ((message == null) ? 0 : message.hashCode());
+ result = prime * result + (int) (position ^ (position >>> 32));
+ return result;
+ }
+
+ @Override public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ CompilerMessage other = (CompilerMessage) obj;
+ if (isError != other.isError) return false;
+ if (line != other.line) return false;
+ if (message == null) {
+ if (other.message != null) return false;
+ } else if (!message.equals(other.message)) return false;
+ if (position != other.position) return false;
+ return true;
+ }
+
+ public CompilerMessageMatcher asCompilerMessageMatcher() {
+ return new CompilerMessageMatcher(line, position, message);
+ }
+
+ @Override public String toString() {
+ return String.format("%d:%d %s %s", line, position, isError ? "ERROR" : "WARNING", message);
+ }
+}
diff --git a/test/core/src/lombok/CompilerMessageMatcher.java b/test/core/src/lombok/CompilerMessageMatcher.java
new file mode 100644
index 00000000..b7902395
--- /dev/null
+++ b/test/core/src/lombok/CompilerMessageMatcher.java
@@ -0,0 +1,62 @@
+package lombok;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class CompilerMessageMatcher {
+ /** Line Number (starting at 1) */
+ private final long line;
+
+ /** Position is either column number, OR position in file starting from the first byte. */
+ private final long position;
+ private final Collection<String> messageParts;
+
+ public CompilerMessageMatcher(long line, long position, String message) {
+ this.line = line;
+ this.position = position;
+ this.messageParts = Arrays.asList(message.split("\\s+"));
+ }
+
+ @Override public String toString() {
+ StringBuilder parts = new StringBuilder();
+ for (String part : messageParts) parts.append(part).append(" ");
+ if (parts.length() > 0) parts.setLength(parts.length() - 1);
+ return String.format("%d:%d %s", line, position, parts);
+ }
+
+ public boolean matches(CompilerMessage message) {
+ if (message.line != this.line) return false;
+ if (message.position != this.position) return false;
+ for (String token : messageParts) {
+ if (!message.message.contains(token)) return false;
+ }
+ return true;
+ }
+
+ public static List<CompilerMessageMatcher> readAll(InputStream rawIn) throws IOException {
+ BufferedReader in = new BufferedReader(new InputStreamReader(rawIn, "UTF-8"));
+ List<CompilerMessageMatcher> out = new ArrayList<CompilerMessageMatcher>();
+ for (String line = in.readLine(); line != null; line = in.readLine()) {
+ CompilerMessageMatcher cmm = read(line);
+ if (cmm != null) out.add(cmm);
+ }
+ return out;
+ }
+
+ private static final Pattern PATTERN = Pattern.compile("^(\\d+):(\\d+) (.*)$");
+ private static CompilerMessageMatcher read(String line) {
+ line = line.trim();
+ if (line.isEmpty()) return null;
+ Matcher m = PATTERN.matcher(line);
+ if (!m.matches()) throw new IllegalArgumentException("Typo in test file: " + line);
+ return new CompilerMessageMatcher(Integer.parseInt(m.group(1)), Integer.parseInt(m.group(2)), m.group(3));
+ }
+}
diff --git a/test/core/src/lombok/RunTestsViaDelombok.java b/test/core/src/lombok/RunTestsViaDelombok.java
index e58cffc0..16eae8d3 100644
--- a/test/core/src/lombok/RunTestsViaDelombok.java
+++ b/test/core/src/lombok/RunTestsViaDelombok.java
@@ -23,11 +23,13 @@ package lombok;
import java.io.File;
import java.io.StringWriter;
+import java.util.Collection;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.tools.Diagnostic;
+import javax.tools.Diagnostic.Kind;
import javax.tools.DiagnosticListener;
import javax.tools.JavaFileObject;
@@ -37,7 +39,7 @@ public class RunTestsViaDelombok extends AbstractRunTests {
private Delombok delombok = new Delombok();
@Override
- public void transformCode(final StringBuilder messages, StringWriter result, final File file) throws Throwable {
+ public void transformCode(final Collection<CompilerMessage> messages, StringWriter result, final File file) throws Throwable {
delombok.setVerbose(false);
delombok.setForceProcess(true);
delombok.setCharset("UTF-8");
@@ -49,7 +51,7 @@ public class RunTestsViaDelombok extends AbstractRunTests {
"^" + Pattern.quote(file.getAbsolutePath()) +
"\\s*:\\s*\\d+\\s*:\\s*(?:warning:\\s*)?(.*)$", Pattern.DOTALL).matcher(msg);
if (m.matches()) msg = m.group(1);
- messages.append(String.format("%d:%d %s %s\n", d.getLineNumber(), d.getColumnNumber(), d.getKind(), msg));
+ messages.add(new CompilerMessage(d.getLineNumber(), d.getColumnNumber(), d.getKind() == Kind.ERROR, msg));
}
});
diff --git a/test/core/src/lombok/RunTestsViaEcj.java b/test/core/src/lombok/RunTestsViaEcj.java
index 5c573efd..112f07f9 100644
--- a/test/core/src/lombok/RunTestsViaEcj.java
+++ b/test/core/src/lombok/RunTestsViaEcj.java
@@ -25,6 +25,7 @@ import java.io.File;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -84,7 +85,7 @@ public class RunTestsViaEcj extends AbstractRunTests {
}
@Override
- public void transformCode(final StringBuilder messages, StringWriter result, File file) throws Throwable {
+ public void transformCode(Collection<CompilerMessage> messages, StringWriter result, File file) throws Throwable {
final AtomicReference<CompilationResult> compilationResult_ = new AtomicReference<CompilationResult>();
final AtomicReference<CompilationUnitDeclaration> compilationUnit_ = new AtomicReference<CompilationUnitDeclaration>();
ICompilerRequestor bitbucketRequestor = new ICompilerRequestor() {
@@ -109,7 +110,7 @@ public class RunTestsViaEcj extends AbstractRunTests {
CategorizedProblem[] problems = compilationResult.getAllProblems();
if (problems != null) for (CategorizedProblem p : problems) {
- messages.append(String.format("%d %s %s\n", p.getSourceLineNumber(), p.isError() ? "error" : p.isWarning() ? "warning" : "unknown", p.getMessage()));
+ messages.add(new CompilerMessage(p.getSourceLineNumber(), p.getSourceStart(), p.isError(), p.getMessage()));
}
CompilationUnitDeclaration cud = compilationUnit_.get();
diff --git a/test/transform/resource/messages-delombok/Accessors.java.messages b/test/transform/resource/messages-delombok/Accessors.java.messages
index 4c7a0daa..367621bd 100644
--- a/test/transform/resource/messages-delombok/Accessors.java.messages
+++ b/test/transform/resource/messages-delombok/Accessors.java.messages
@@ -1 +1 @@
-19:9 WARNING Not generating setter for this field: It does not fit your @Accessors prefix list. \ No newline at end of file
+19:9 Not generating setter for this field: It does not fit your @Accessors prefix list. \ No newline at end of file
diff --git a/test/transform/resource/messages-delombok/ConflictingStaticConstructorNames.java.messages b/test/transform/resource/messages-delombok/ConflictingStaticConstructorNames.java.messages
index 40366cd7..06b88c10 100644
--- a/test/transform/resource/messages-delombok/ConflictingStaticConstructorNames.java.messages
+++ b/test/transform/resource/messages-delombok/ConflictingStaticConstructorNames.java.messages
@@ -1 +1 @@
-1:1 WARNING Ignoring static constructor name: explicit @XxxArgsConstructor annotation present; its `staticName` parameter will be used.
+1:1 Ignoring static constructor name: explicit @XxxArgsConstructor annotation present; its `staticName` parameter will be used.
diff --git a/test/transform/resource/messages-delombok/EqualsAndHashCodeWithExistingMethods.java.messages b/test/transform/resource/messages-delombok/EqualsAndHashCodeWithExistingMethods.java.messages
index dd78e67f..057a7521 100644
--- a/test/transform/resource/messages-delombok/EqualsAndHashCodeWithExistingMethods.java.messages
+++ b/test/transform/resource/messages-delombok/EqualsAndHashCodeWithExistingMethods.java.messages
@@ -1,3 +1,3 @@
-1:1 WARNING Not generating equals, hashCode and canEquals: A method with one of those names already exists. (Either all or none of these methods will be generated).
-10:1 WARNING Not generating equals and hashCode: A method with one of those names already exists. (Either all or none of these methods will be generated).
-19:1 WARNING Not generating equals, hashCode and canEquals: A method with one of those names already exists. (Either all or none of these methods will be generated).
+1:1 Not generating equals, hashCode and canEquals: A method with one of those names already exists. (Either all or none of these methods will be generated).
+10:1 Not generating equals and hashCode: A method with one of those names already exists. (Either all or none of these methods will be generated).
+19:1 Not generating equals, hashCode and canEquals: A method with one of those names already exists. (Either all or none of these methods will be generated).
diff --git a/test/transform/resource/messages-delombok/FieldDefaultsNoop.java.messages b/test/transform/resource/messages-delombok/FieldDefaultsNoop.java.messages
index 65fed477..ae5dd265 100644
--- a/test/transform/resource/messages-delombok/FieldDefaultsNoop.java.messages
+++ b/test/transform/resource/messages-delombok/FieldDefaultsNoop.java.messages
@@ -1 +1 @@
-1:1 ERROR This does nothing; provide either level or makeFinal or both. \ No newline at end of file
+1:1 This does nothing; provide either level or makeFinal or both. \ No newline at end of file
diff --git a/test/transform/resource/messages-delombok/GetterAlreadyExists.java.messages b/test/transform/resource/messages-delombok/GetterAlreadyExists.java.messages
index 302bbced..7a326742 100644
--- a/test/transform/resource/messages-delombok/GetterAlreadyExists.java.messages
+++ b/test/transform/resource/messages-delombok/GetterAlreadyExists.java.messages
@@ -1,8 +1,8 @@
-8:9 WARNING Not generating isFoo(): A method with that name already exists
-14:9 WARNING Not generating isFoo(): A method with that name already exists (getFoo)
-32:9 WARNING Not generating getFoo(): A method with that name already exists
-50:9 WARNING Not generating getFoo(): A method with that name already exists
-62:9 WARNING Not generating isFoo(): A method with that name already exists
-68:9 WARNING Not generating isFoo(): A method with that name already exists (getFoo)
-86:9 WARNING Not generating getFoo(): A method with that name already exists
-104:9 WARNING Not generating getFoo(): A method with that name already exists
+8:9 Not generating isFoo(): A method with that name already exists
+14:9 Not generating isFoo(): A method with that name already exists (getFoo)
+32:9 Not generating getFoo(): A method with that name already exists
+50:9 Not generating getFoo(): A method with that name already exists
+62:9 Not generating isFoo(): A method with that name already exists
+68:9 Not generating isFoo(): A method with that name already exists (getFoo)
+86:9 Not generating getFoo(): A method with that name already exists
+104:9 Not generating getFoo(): A method with that name already exists
diff --git a/test/transform/resource/messages-delombok/GetterBoolean.java.messages b/test/transform/resource/messages-delombok/GetterBoolean.java.messages
index 3d14bcc9..91ad3512 100644
--- a/test/transform/resource/messages-delombok/GetterBoolean.java.messages
+++ b/test/transform/resource/messages-delombok/GetterBoolean.java.messages
@@ -1 +1 @@
-13:9 WARNING Not generating isFoo(): A method with that name already exists (getFoo) \ No newline at end of file
+13:9 Not generating isFoo(): A method with that name already exists (getFoo) \ No newline at end of file
diff --git a/test/transform/resource/messages-delombok/GetterLazyInvalid.java.messages b/test/transform/resource/messages-delombok/GetterLazyInvalid.java.messages
index 4f7e3df8..5c72fd56 100644
--- a/test/transform/resource/messages-delombok/GetterLazyInvalid.java.messages
+++ b/test/transform/resource/messages-delombok/GetterLazyInvalid.java.messages
@@ -1,6 +1,6 @@
-2:9 ERROR 'lazy' requires the field to be private and final.
-6:9 ERROR 'lazy' requires the field to be private and final.
-10:9 ERROR 'lazy' requires the field to be private and final.
-14:9 WARNING 'lazy' does not work with AccessLevel.NONE.
-17:1 ERROR 'lazy' is not supported for @Getter on a type.
-22:9 ERROR 'lazy' requires field initialization. \ No newline at end of file
+2:9 'lazy' requires the field to be private and final.
+6:9 'lazy' requires the field to be private and final.
+10:9 'lazy' requires the field to be private and final.
+14:9 'lazy' does not work with AccessLevel.NONE.
+17:1 'lazy' is not supported for @Getter on a type.
+22:9 'lazy' requires field initialization. \ No newline at end of file
diff --git a/test/transform/resource/messages-delombok/GetterOnMethod.java.messages b/test/transform/resource/messages-delombok/GetterOnMethod.java.messages
index d437cb05..db5ef9a6 100644
--- a/test/transform/resource/messages-delombok/GetterOnMethod.java.messages
+++ b/test/transform/resource/messages-delombok/GetterOnMethod.java.messages
@@ -1,17 +1,7 @@
-3:34 ERROR incompatible types
-found : java.lang.Deprecated
-required: lombok.Getter.AnyAnnotation
-4:44 ERROR incompatible types
-found : java.lang.Deprecated
-required: lombok.Getter.AnyAnnotation
-6:26 ERROR incompatible types
-found : java.lang.Deprecated
-required: lombok.Getter.AnyAnnotation
-11:26 ERROR incompatible types
-found : java.lang.Deprecated
-required: lombok.Getter.AnyAnnotation
-14:44 ERROR incompatible types
-found : java.lang.Deprecated
-required: lombok.Getter.AnyAnnotation
-6:1 ERROR 'onMethod' is not supported for @Getter on a type.
-11:1 ERROR 'onMethod' is not supported for @Getter on a type.
+3:34 incompatible types
+4:44 incompatible types
+6:26 incompatible types
+11:26 incompatible types
+14:44 incompatible types
+6:1 'onMethod' is not supported for @Getter on a type.
+11:1 'onMethod' is not supported for @Getter on a type.
diff --git a/test/transform/resource/messages-delombok/LoggerSlf4jAlreadyExists.java.messages b/test/transform/resource/messages-delombok/LoggerSlf4jAlreadyExists.java.messages
index ede6defa..8aa22226 100644
--- a/test/transform/resource/messages-delombok/LoggerSlf4jAlreadyExists.java.messages
+++ b/test/transform/resource/messages-delombok/LoggerSlf4jAlreadyExists.java.messages
@@ -1 +1 @@
-1:1 WARNING Field 'log' already exists.
+1:1 Field 'log' already exists.
diff --git a/test/transform/resource/messages-delombok/LoggerSlf4jOnNonStaticInnerClass.java.messages b/test/transform/resource/messages-delombok/LoggerSlf4jOnNonStaticInnerClass.java.messages
index e0bbdb2a..570a169b 100644
--- a/test/transform/resource/messages-delombok/LoggerSlf4jOnNonStaticInnerClass.java.messages
+++ b/test/transform/resource/messages-delombok/LoggerSlf4jOnNonStaticInnerClass.java.messages
@@ -1 +1 @@
-2:9 ERROR @Log is not legal on non-static inner classes. \ No newline at end of file
+2:9 @Log is not legal on non-static inner classes. \ No newline at end of file
diff --git a/test/transform/resource/messages-delombok/LoggerSlf4jOnNonType.java.messages b/test/transform/resource/messages-delombok/LoggerSlf4jOnNonType.java.messages
index 9143d4bc..ebc23411 100644
--- a/test/transform/resource/messages-delombok/LoggerSlf4jOnNonType.java.messages
+++ b/test/transform/resource/messages-delombok/LoggerSlf4jOnNonType.java.messages
@@ -1 +1 @@
-2:9 ERROR @Log is legal only on types. \ No newline at end of file
+2:9 @Log is legal only on types. \ No newline at end of file
diff --git a/test/transform/resource/messages-delombok/LoggerSlf4jTypes.java.messages b/test/transform/resource/messages-delombok/LoggerSlf4jTypes.java.messages
index ba97e38f..a525dd27 100644
--- a/test/transform/resource/messages-delombok/LoggerSlf4jTypes.java.messages
+++ b/test/transform/resource/messages-delombok/LoggerSlf4jTypes.java.messages
@@ -1,2 +1,2 @@
-1:1 ERROR @Log is legal only on classes and enums.
-4:1 ERROR @Log is legal only on classes and enums. \ No newline at end of file
+1:1 @Log is legal only on classes and enums.
+4:1 @Log is legal only on classes and enums. \ No newline at end of file
diff --git a/test/transform/resource/messages-delombok/SetterAlreadyExists.java.messages b/test/transform/resource/messages-delombok/SetterAlreadyExists.java.messages
index 99dd1d25..9cece93c 100644
--- a/test/transform/resource/messages-delombok/SetterAlreadyExists.java.messages
+++ b/test/transform/resource/messages-delombok/SetterAlreadyExists.java.messages
@@ -1,7 +1,7 @@
-2:9 WARNING Not generating setFoo(): A method with that name already exists
-8:9 WARNING Not generating setFoo(): A method with that name already exists
-14:9 WARNING Not generating setFoo(): A method with that name already exists
-20:9 WARNING Not generating setFoo(): A method with that name already exists
-38:9 WARNING Not generating setFoo(): A method with that name already exists
-44:9 WARNING Not generating setFoo(): A method with that name already exists (setIsFoo)
-50:9 WARNING Not generating setFoo(): A method with that name already exists
+2:9 Not generating setFoo(): A method with that name already exists
+8:9 Not generating setFoo(): A method with that name already exists
+14:9 Not generating setFoo(): A method with that name already exists
+20:9 Not generating setFoo(): A method with that name already exists
+38:9 Not generating setFoo(): A method with that name already exists
+44:9 Not generating setFoo(): A method with that name already exists (setIsFoo)
+50:9 Not generating setFoo(): A method with that name already exists
diff --git a/test/transform/resource/messages-delombok/SetterOnMethod.java.messages b/test/transform/resource/messages-delombok/SetterOnMethod.java.messages
index 2df11f97..9473d5b3 100644
--- a/test/transform/resource/messages-delombok/SetterOnMethod.java.messages
+++ b/test/transform/resource/messages-delombok/SetterOnMethod.java.messages
@@ -1,17 +1,7 @@
-3:34 ERROR incompatible types
-found : java.lang.Deprecated
-required: lombok.Setter.AnyAnnotation
-4:44 ERROR incompatible types
-found : java.lang.Deprecated
-required: lombok.Setter.AnyAnnotation
-6:26 ERROR incompatible types
-found : java.lang.Deprecated
-required: lombok.Setter.AnyAnnotation
-11:26 ERROR incompatible types
-found : java.lang.Deprecated
-required: lombok.Setter.AnyAnnotation
-14:44 ERROR incompatible types
-found : java.lang.Deprecated
-required: lombok.Setter.AnyAnnotation
-6:1 ERROR 'onMethod' is not supported for @Setter on a type.
-11:1 ERROR 'onMethod' is not supported for @Setter on a type.
+3:34 incompatible types
+4:44 incompatible types
+6:26 incompatible types
+11:26 incompatible types
+14:44 incompatible types
+6:1 'onMethod' is not supported for @Setter on a type.
+11:1 'onMethod' is not supported for @Setter on a type.
diff --git a/test/transform/resource/messages-delombok/SetterOnParam.java.messages b/test/transform/resource/messages-delombok/SetterOnParam.java.messages
index a18f1b83..b8c69eca 100644
--- a/test/transform/resource/messages-delombok/SetterOnParam.java.messages
+++ b/test/transform/resource/messages-delombok/SetterOnParam.java.messages
@@ -1,17 +1,7 @@
-3:33 ERROR incompatible types
-found : java.lang.SuppressWarnings
-required: lombok.Setter.AnyAnnotation
-4:43 ERROR incompatible types
-found : java.lang.SuppressWarnings
-required: lombok.Setter.AnyAnnotation
-6:25 ERROR incompatible types
-found : java.lang.SuppressWarnings
-required: lombok.Setter.AnyAnnotation
-11:25 ERROR incompatible types
-found : java.lang.SuppressWarnings
-required: lombok.Setter.AnyAnnotation
-14:43 ERROR incompatible types
-found : java.lang.SuppressWarnings
-required: lombok.Setter.AnyAnnotation
-6:1 ERROR 'onParam' is not supported for @Setter on a type.
-11:1 ERROR 'onParam' is not supported for @Setter on a type.
+3:33 incompatible types
+4:43 incompatible types
+6:25 incompatible types
+11:25 incompatible types
+14:43 incompatible types
+6:1 'onParam' is not supported for @Setter on a type.
+11:1 'onParam' is not supported for @Setter on a type.
diff --git a/test/transform/resource/messages-delombok/SetterOnParamAndOnMethod.java.messages b/test/transform/resource/messages-delombok/SetterOnParamAndOnMethod.java.messages
index b247b624..7324f6f3 100644
--- a/test/transform/resource/messages-delombok/SetterOnParamAndOnMethod.java.messages
+++ b/test/transform/resource/messages-delombok/SetterOnParamAndOnMethod.java.messages
@@ -1,6 +1,2 @@
-2:34 ERROR incompatible types
-found : java.lang.Deprecated
-required: lombok.Setter.AnyAnnotation
-2:54 ERROR incompatible types
-found : java.lang.SuppressWarnings
-required: lombok.Setter.AnyAnnotation \ No newline at end of file
+2:34 incompatible types
+2:54 incompatible types
diff --git a/test/transform/resource/messages-delombok/SimpleTypeResolution.java.messages b/test/transform/resource/messages-delombok/SimpleTypeResolution.java.messages
index 3a345d06..7acd35ed 100644
--- a/test/transform/resource/messages-delombok/SimpleTypeResolution.java.messages
+++ b/test/transform/resource/messages-delombok/SimpleTypeResolution.java.messages
@@ -1,9 +1 @@
-2:10 ERROR cannot find symbol
-symbol : class Getter
-location: class SimpleTypeResolutionFail
-2:10 ERROR cannot find symbol
-symbol : class Getter
-location: class SimpleTypeResolutionFail
-2:10 ERROR cannot find symbol
-symbol : class Getter
-location: class SimpleTypeResolutionFail
+2:10 cannot find symbol
diff --git a/test/transform/resource/messages-delombok/SynchronizedNameNoSuchField.java.messages b/test/transform/resource/messages-delombok/SynchronizedNameNoSuchField.java.messages
index bffd29e6..f282d34d 100644
--- a/test/transform/resource/messages-delombok/SynchronizedNameNoSuchField.java.messages
+++ b/test/transform/resource/messages-delombok/SynchronizedNameNoSuchField.java.messages
@@ -1 +1 @@
-5:9 ERROR The field write does not exist.
+5:9 The field write does not exist.
diff --git a/test/transform/resource/messages-delombok/SynchronizedNameStaticToInstanceRef.java.messages b/test/transform/resource/messages-delombok/SynchronizedNameStaticToInstanceRef.java.messages
index 84336ebb..5d6bc958 100644
--- a/test/transform/resource/messages-delombok/SynchronizedNameStaticToInstanceRef.java.messages
+++ b/test/transform/resource/messages-delombok/SynchronizedNameStaticToInstanceRef.java.messages
@@ -1 +1 @@
-5:9 ERROR non-static variable read cannot be referenced from a static context \ No newline at end of file
+5:9 non-static variable read cannot be referenced from a static context \ No newline at end of file
diff --git a/test/transform/resource/messages-delombok/ValErrors.java.messages b/test/transform/resource/messages-delombok/ValErrors.java.messages
index bd59ad3b..887b8c21 100644
--- a/test/transform/resource/messages-delombok/ValErrors.java.messages
+++ b/test/transform/resource/messages-delombok/ValErrors.java.messages
@@ -1,2 +1,2 @@
-5:21 ERROR Cannot use 'val' here because initializer expression does not have a representable type: Type cannot be resolved
-9:21 ERROR 'val' is not compatible with array initializer expressions. Use the full form (new int[] { ... } instead of just { ... })
+5:21 Cannot use 'val' here because initializer expression does not have a representable type: Type cannot be resolved
+9:21 'val' is not compatible with array initializer expressions. Use the full form (new int[] { ... } instead of just { ... })
diff --git a/test/transform/resource/messages-delombok/ValInBasicFor.java.messages b/test/transform/resource/messages-delombok/ValInBasicFor.java.messages
index 3f7ada73..b69a4a13 100644
--- a/test/transform/resource/messages-delombok/ValInBasicFor.java.messages
+++ b/test/transform/resource/messages-delombok/ValInBasicFor.java.messages
@@ -1,3 +1,3 @@
-6:26 ERROR 'val' is not allowed in old-style for loops
-6:40 ERROR 'val' is not allowed in old-style for loops
-6:53 ERROR 'val' is not allowed in old-style for loops
+6:26 'val' is not allowed in old-style for loops
+6:40 'val' is not allowed in old-style for loops
+6:53 'val' is not allowed in old-style for loops
diff --git a/test/transform/resource/messages-delombok/WitherAlreadyExists.java.messages b/test/transform/resource/messages-delombok/WitherAlreadyExists.java.messages
index 4a5dd9d1..b68f6398 100644
--- a/test/transform/resource/messages-delombok/WitherAlreadyExists.java.messages
+++ b/test/transform/resource/messages-delombok/WitherAlreadyExists.java.messages
@@ -1,7 +1,7 @@
-2:9 WARNING Not generating withFoo(): A method with that name already exists
-12:9 WARNING Not generating withFoo(): A method with that name already exists
-22:9 WARNING Not generating withFoo(): A method with that name already exists
-32:9 WARNING Not generating withFoo(): A method with that name already exists
-62:9 WARNING Not generating withFoo(): A method with that name already exists
-72:9 WARNING Not generating withFoo(): A method with that name already exists (withIsFoo)
-82:9 WARNING Not generating withFoo(): A method with that name already exists
+2:9 Not generating withFoo(): A method with that name already exists
+12:9 Not generating withFoo(): A method with that name already exists
+22:9 Not generating withFoo(): A method with that name already exists
+32:9 Not generating withFoo(): A method with that name already exists
+62:9 Not generating withFoo(): A method with that name already exists
+72:9 Not generating withFoo(): A method with that name already exists (withIsFoo)
+82:9 Not generating withFoo(): A method with that name already exists
diff --git a/test/transform/resource/messages-delombok/WitherOnStatic.java.messages b/test/transform/resource/messages-delombok/WitherOnStatic.java.messages
index e9e94e5f..9dd69e75 100644
--- a/test/transform/resource/messages-delombok/WitherOnStatic.java.messages
+++ b/test/transform/resource/messages-delombok/WitherOnStatic.java.messages
@@ -1,2 +1,2 @@
-2:9 WARNING Not generating wither for this field: Withers cannot be generated for static fields.
-3:9 WARNING Not generating wither for this field: Withers cannot be generated for static fields.
+2:9 Not generating wither for this field: Withers cannot be generated for static fields.
+3:9 Not generating wither for this field: Withers cannot be generated for static fields.
diff --git a/test/transform/resource/messages-delombok/WitherWithDollar.java.messages b/test/transform/resource/messages-delombok/WitherWithDollar.java.messages
index 34f34969..74eeabba 100644
--- a/test/transform/resource/messages-delombok/WitherWithDollar.java.messages
+++ b/test/transform/resource/messages-delombok/WitherWithDollar.java.messages
@@ -1 +1 @@
-2:9 WARNING Not generating wither for this field: Withers cannot be generated for fields starting with $.
+2:9 Not generating wither for this field: Withers cannot be generated for fields starting with $.
diff --git a/test/transform/resource/messages-ecj/Accessors.java.messages b/test/transform/resource/messages-ecj/Accessors.java.messages
index 88594029..3e6bbd69 100644
--- a/test/transform/resource/messages-ecj/Accessors.java.messages
+++ b/test/transform/resource/messages-ecj/Accessors.java.messages
@@ -1 +1 @@
-19 warning Not generating setter for this field: It does not fit your @Accessors prefix list.
+19:530 Not generating setter for this field: It does not fit your @Accessors prefix list.
diff --git a/test/transform/resource/messages-ecj/ConflictingStaticConstructorNames.java.messages b/test/transform/resource/messages-ecj/ConflictingStaticConstructorNames.java.messages
index ecbf4a61..50f2e97f 100644
--- a/test/transform/resource/messages-ecj/ConflictingStaticConstructorNames.java.messages
+++ b/test/transform/resource/messages-ecj/ConflictingStaticConstructorNames.java.messages
@@ -1 +1 @@
-1 warning Ignoring static constructor name: explicit @XxxArgsConstructor annotation present; its `staticName` parameter will be used.
+1:0 Ignoring static constructor name: explicit @XxxArgsConstructor annotation present; its `staticName` parameter will be used.
diff --git a/test/transform/resource/messages-ecj/EqualsAndHashCodeWithExistingMethods.java.messages b/test/transform/resource/messages-ecj/EqualsAndHashCodeWithExistingMethods.java.messages
index 3ad31311..db144316 100644
--- a/test/transform/resource/messages-ecj/EqualsAndHashCodeWithExistingMethods.java.messages
+++ b/test/transform/resource/messages-ecj/EqualsAndHashCodeWithExistingMethods.java.messages
@@ -1,3 +1,3 @@
-1 warning Not generating equals, hashCode and canEquals: A method with one of those names already exists. (Either all or none of these methods will be generated).
-10 warning Not generating equals and hashCode: A method with one of those names already exists. (Either all or none of these methods will be generated).
-19 warning Not generating equals, hashCode and canEquals: A method with one of those names already exists. (Either all or none of these methods will be generated).
+1:0 Not generating equals, hashCode and canEquals: A method with one of those names already exists. (Either all or none of these methods will be generated).
+10:125 Not generating equals and hashCode: A method with one of those names already exists. (Either all or none of these methods will be generated).
+19:274 Not generating equals, hashCode and canEquals: A method with one of those names already exists. (Either all or none of these methods will be generated).
diff --git a/test/transform/resource/messages-ecj/FieldDefaultsNoop.java.messages b/test/transform/resource/messages-ecj/FieldDefaultsNoop.java.messages
index 4dffedef..5903679b 100644
--- a/test/transform/resource/messages-ecj/FieldDefaultsNoop.java.messages
+++ b/test/transform/resource/messages-ecj/FieldDefaultsNoop.java.messages
@@ -1 +1 @@
-1 error This does nothing; provide either level or makeFinal or both. \ No newline at end of file
+1:0 This does nothing; provide either level or makeFinal or both. \ No newline at end of file
diff --git a/test/transform/resource/messages-ecj/GetterAlreadyExists.java.messages b/test/transform/resource/messages-ecj/GetterAlreadyExists.java.messages
index 86415168..ae62a1fb 100644
--- a/test/transform/resource/messages-ecj/GetterAlreadyExists.java.messages
+++ b/test/transform/resource/messages-ecj/GetterAlreadyExists.java.messages
@@ -1,8 +1,8 @@
-8 warning Not generating isFoo(): A method with that name already exists
-14 warning Not generating isFoo(): A method with that name already exists (getFoo)
-32 warning Not generating getFoo(): A method with that name already exists
-50 warning Not generating getFoo(): A method with that name already exists
-62 warning Not generating isFoo(): A method with that name already exists
-68 warning Not generating isFoo(): A method with that name already exists (getFoo)
-86 warning Not generating getFoo(): A method with that name already exists
-104 warning Not generating getFoo(): A method with that name already exists \ No newline at end of file
+8:102 Not generating isFoo(): A method with that name already exists
+14:186 Not generating isFoo(): A method with that name already exists (getFoo)
+32:436 Not generating getFoo(): A method with that name already exists
+50:688 Not generating getFoo(): A method with that name already exists
+62:868 Not generating isFoo(): A method with that name already exists
+68:961 Not generating isFoo(): A method with that name already exists (getFoo)
+86:1240 Not generating getFoo(): A method with that name already exists
+104:1510 Not generating getFoo(): A method with that name already exists
diff --git a/test/transform/resource/messages-ecj/GetterBoolean.java.messages b/test/transform/resource/messages-ecj/GetterBoolean.java.messages
index 51d9dd6e..8ae086f6 100644
--- a/test/transform/resource/messages-ecj/GetterBoolean.java.messages
+++ b/test/transform/resource/messages-ecj/GetterBoolean.java.messages
@@ -1 +1 @@
-13 warning Not generating isFoo(): A method with that name already exists (getFoo)
+13:220 Not generating isFoo(): A method with that name already exists (getFoo)
diff --git a/test/transform/resource/messages-ecj/GetterLazyInvalid.java.messages b/test/transform/resource/messages-ecj/GetterLazyInvalid.java.messages
index 25641930..9ecf0fc0 100644
--- a/test/transform/resource/messages-ecj/GetterLazyInvalid.java.messages
+++ b/test/transform/resource/messages-ecj/GetterLazyInvalid.java.messages
@@ -1,6 +1,6 @@
-2 error 'lazy' requires the field to be private and final.
-6 error 'lazy' requires the field to be private and final.
-10 error 'lazy' requires the field to be private and final.
-14 warning 'lazy' does not work with AccessLevel.NONE.
-17 error 'lazy' is not supported for @Getter on a type.
-22 error 'lazy' requires field initialization.
+2:35 'lazy' requires the field to be private and final.
+6:132 'lazy' requires the field to be private and final.
+10:232 'lazy' requires the field to be private and final.
+14:315 'lazy' does not work with AccessLevel.NONE.
+17:412 'lazy' is not supported for @Getter on a type.
+22:544 'lazy' requires field initialization.
diff --git a/test/transform/resource/messages-ecj/GetterOnMethod.java.messages b/test/transform/resource/messages-ecj/GetterOnMethod.java.messages
index 24e00370..4b240da0 100644
--- a/test/transform/resource/messages-ecj/GetterOnMethod.java.messages
+++ b/test/transform/resource/messages-ecj/GetterOnMethod.java.messages
@@ -1,2 +1,2 @@
-6 error 'onMethod' is not supported for @Getter on a type.
-11 error 'onMethod' is not supported for @Getter on a type. \ No newline at end of file
+6:0 'onMethod' is not supported for @Getter on a type.
+11:0 'onMethod' is not supported for @Getter on a type. \ No newline at end of file
diff --git a/test/transform/resource/messages-ecj/LoggerSlf4jAlreadyExists.java.messages b/test/transform/resource/messages-ecj/LoggerSlf4jAlreadyExists.java.messages
index f03c7660..859e29d8 100644
--- a/test/transform/resource/messages-ecj/LoggerSlf4jAlreadyExists.java.messages
+++ b/test/transform/resource/messages-ecj/LoggerSlf4jAlreadyExists.java.messages
@@ -1 +1 @@
-1 warning Field 'log' already exists.
+1:0 Field 'log' already exists.
diff --git a/test/transform/resource/messages-ecj/LoggerSlf4jOnNonStaticInnerClass.java.messages b/test/transform/resource/messages-ecj/LoggerSlf4jOnNonStaticInnerClass.java.messages
index e0bbdb2a..570a169b 100644
--- a/test/transform/resource/messages-ecj/LoggerSlf4jOnNonStaticInnerClass.java.messages
+++ b/test/transform/resource/messages-ecj/LoggerSlf4jOnNonStaticInnerClass.java.messages
@@ -1 +1 @@
-2:9 ERROR @Log is not legal on non-static inner classes. \ No newline at end of file
+2:9 @Log is not legal on non-static inner classes. \ No newline at end of file
diff --git a/test/transform/resource/messages-ecj/LoggerSlf4jOnNonType.java.messages b/test/transform/resource/messages-ecj/LoggerSlf4jOnNonType.java.messages
index 5fff2629..b6848135 100644
--- a/test/transform/resource/messages-ecj/LoggerSlf4jOnNonType.java.messages
+++ b/test/transform/resource/messages-ecj/LoggerSlf4jOnNonType.java.messages
@@ -1 +1 @@
-2 error The annotation @Slf4j is disallowed for this location \ No newline at end of file
+2:30 The annotation @Slf4j is disallowed for this location
diff --git a/test/transform/resource/messages-ecj/LoggerSlf4jTypes.java.messages b/test/transform/resource/messages-ecj/LoggerSlf4jTypes.java.messages
index e23aa524..b9f8b63f 100644
--- a/test/transform/resource/messages-ecj/LoggerSlf4jTypes.java.messages
+++ b/test/transform/resource/messages-ecj/LoggerSlf4jTypes.java.messages
@@ -1,2 +1,2 @@
-1 error @Slf4j is legal only on classes and enums.
-4 error @Slf4j is legal only on classes and enums. \ No newline at end of file
+1:0 @Slf4j is legal only on classes and enums.
+4:67 @Slf4j is legal only on classes and enums.
diff --git a/test/transform/resource/messages-ecj/SetterAlreadyExists.java.messages b/test/transform/resource/messages-ecj/SetterAlreadyExists.java.messages
index d33024db..5fc0a365 100644
--- a/test/transform/resource/messages-ecj/SetterAlreadyExists.java.messages
+++ b/test/transform/resource/messages-ecj/SetterAlreadyExists.java.messages
@@ -1,7 +1,7 @@
-2 warning Not generating setFoo(): A method with that name already exists
-8 warning Not generating setFoo(): A method with that name already exists
-14 warning Not generating setFoo(): A method with that name already exists
-20 warning Not generating setFoo(): A method with that name already exists
-38 warning Not generating setFoo(): A method with that name already exists
-44 warning Not generating setFoo(): A method with that name already exists (setIsFoo)
-50 warning Not generating setFoo(): A method with that name already exists \ No newline at end of file
+2:17 Not generating setFoo(): A method with that name already exists
+8:96 Not generating setFoo(): A method with that name already exists
+14:174 Not generating setFoo(): A method with that name already exists
+20:252 Not generating setFoo(): A method with that name already exists
+38:480 Not generating setFoo(): A method with that name already exists
+44:570 Not generating setFoo(): A method with that name already exists (setIsFoo)
+50:653 Not generating setFoo(): A method with that name already exists
diff --git a/test/transform/resource/messages-ecj/SetterOnMethod.java.messages b/test/transform/resource/messages-ecj/SetterOnMethod.java.messages
index 608489ce..ecfa3f69 100644
--- a/test/transform/resource/messages-ecj/SetterOnMethod.java.messages
+++ b/test/transform/resource/messages-ecj/SetterOnMethod.java.messages
@@ -1,2 +1,2 @@
-6 error 'onMethod' is not supported for @Setter on a type.
-11 error 'onMethod' is not supported for @Setter on a type. \ No newline at end of file
+6:0 'onMethod' is not supported for @Setter on a type.
+11:0 'onMethod' is not supported for @Setter on a type. \ No newline at end of file
diff --git a/test/transform/resource/messages-ecj/SetterOnParam.java.messages b/test/transform/resource/messages-ecj/SetterOnParam.java.messages
index d067b156..7d0c4a1e 100644
--- a/test/transform/resource/messages-ecj/SetterOnParam.java.messages
+++ b/test/transform/resource/messages-ecj/SetterOnParam.java.messages
@@ -1,2 +1,2 @@
-6 error 'onParam' is not supported for @Setter on a type.
-11 error 'onParam' is not supported for @Setter on a type. \ No newline at end of file
+6:0 'onParam' is not supported for @Setter on a type.
+11:0 'onParam' is not supported for @Setter on a type. \ No newline at end of file
diff --git a/test/transform/resource/messages-ecj/SimpleTypeResolution.java.messages b/test/transform/resource/messages-ecj/SimpleTypeResolution.java.messages
index 2d49e9a9..eb33b0df 100644
--- a/test/transform/resource/messages-ecj/SimpleTypeResolution.java.messages
+++ b/test/transform/resource/messages-ecj/SimpleTypeResolution.java.messages
@@ -1 +1 @@
-2 error Getter cannot be resolved to a type \ No newline at end of file
+2:35 Getter cannot be resolved to a type
diff --git a/test/transform/resource/messages-ecj/SynchronizedName.java.messages b/test/transform/resource/messages-ecj/SynchronizedName.java.messages
index 4c428aac..0ad3be0a 100644
--- a/test/transform/resource/messages-ecj/SynchronizedName.java.messages
+++ b/test/transform/resource/messages-ecj/SynchronizedName.java.messages
@@ -1 +1 @@
-8 warning The static field SynchronizedName.READ should be accessed in a static way
+8:185 The static field SynchronizedName.READ should be accessed in a static way
diff --git a/test/transform/resource/messages-ecj/SynchronizedNameNoSuchField.java.messages b/test/transform/resource/messages-ecj/SynchronizedNameNoSuchField.java.messages
index f16d071a..b07f020c 100644
--- a/test/transform/resource/messages-ecj/SynchronizedNameNoSuchField.java.messages
+++ b/test/transform/resource/messages-ecj/SynchronizedNameNoSuchField.java.messages
@@ -1 +1 @@
-5 error The field write does not exist.
+5:120 The field write does not exist.
diff --git a/test/transform/resource/messages-ecj/SynchronizedNameStaticToInstanceRef.java.messages b/test/transform/resource/messages-ecj/SynchronizedNameStaticToInstanceRef.java.messages
index c207cd70..834877ef 100644
--- a/test/transform/resource/messages-ecj/SynchronizedNameStaticToInstanceRef.java.messages
+++ b/test/transform/resource/messages-ecj/SynchronizedNameStaticToInstanceRef.java.messages
@@ -1 +1 @@
-5 error Cannot make a static reference to the non-static field SynchronizedNameStaticToInstanceRef.read
+5:127 Cannot make a static reference to the non-static field SynchronizedNameStaticToInstanceRef.read
diff --git a/test/transform/resource/messages-ecj/ValErrors.java.messages b/test/transform/resource/messages-ecj/ValErrors.java.messages
index 0a23326c..fda58094 100644
--- a/test/transform/resource/messages-ecj/ValErrors.java.messages
+++ b/test/transform/resource/messages-ecj/ValErrors.java.messages
@@ -1,2 +1,2 @@
-5 error d cannot be resolved to a variable
-9 error 'val' is not compatible with array initializer expressions. Use the full form (new int[] { ... } instead of just { ... })
+5:95 d cannot be resolved to a variable
+9:143 'val' is not compatible with array initializer expressions. Use the full form (new int[] { ... } instead of just { ... })
diff --git a/test/transform/resource/messages-ecj/ValInBasicFor.java.messages b/test/transform/resource/messages-ecj/ValInBasicFor.java.messages
index 23ffd6fd..068d72b9 100644
--- a/test/transform/resource/messages-ecj/ValInBasicFor.java.messages
+++ b/test/transform/resource/messages-ecj/ValInBasicFor.java.messages
@@ -1,4 +1,4 @@
-6 error 'val' is not allowed in old-style for loops
-6 error Type mismatch: cannot convert from int to val
-6 error 'val' is not allowed in old-style for loops
-6 error 'val' is not allowed in old-style for loops \ No newline at end of file
+6:160 'val' is not allowed in old-style for loops
+6:171 Type mismatch: cannot convert from int to val
+6:174 'val' is not allowed in old-style for loops
+6:187 'val' is not allowed in old-style for loops
diff --git a/test/transform/resource/messages-ecj/ValRawType.java.messages b/test/transform/resource/messages-ecj/ValRawType.java.messages
index b2b8d753..b7669ede 100644
--- a/test/transform/resource/messages-ecj/ValRawType.java.messages
+++ b/test/transform/resource/messages-ecj/ValRawType.java.messages
@@ -1 +1 @@
-13 warning List is a raw type. References to generic type List<E> should be parameterized \ No newline at end of file
+13:260 List is a raw type. References to generic type List<E> should be parameterized
diff --git a/test/transform/resource/messages-ecj/WitherAlreadyExists.java.messages b/test/transform/resource/messages-ecj/WitherAlreadyExists.java.messages
index bba8913b..87459eb2 100644
--- a/test/transform/resource/messages-ecj/WitherAlreadyExists.java.messages
+++ b/test/transform/resource/messages-ecj/WitherAlreadyExists.java.messages
@@ -1,7 +1,7 @@
-2 warning Not generating withFoo(): A method with that name already exists
-12 warning Not generating withFoo(): A method with that name already exists
-22 warning Not generating withFoo(): A method with that name already exists
-32 warning Not generating withFoo(): A method with that name already exists
-62 warning Not generating withFoo(): A method with that name already exists
-72 warning Not generating withFoo(): A method with that name already exists (withIsFoo)
-82 warning Not generating withFoo(): A method with that name already exists
+2:17 Not generating withFoo(): A method with that name already exists
+12:141 Not generating withFoo(): A method with that name already exists
+22:264 Not generating withFoo(): A method with that name already exists
+32:386 Not generating withFoo(): A method with that name already exists
+62:746 Not generating withFoo(): A method with that name already exists
+72:880 Not generating withFoo(): A method with that name already exists (withIsFoo)
+82:1008 Not generating withFoo(): A method with that name already exists
diff --git a/test/transform/resource/messages-ecj/WitherOnStatic.java.messages b/test/transform/resource/messages-ecj/WitherOnStatic.java.messages
index 5b52d54f..72e39f62 100644
--- a/test/transform/resource/messages-ecj/WitherOnStatic.java.messages
+++ b/test/transform/resource/messages-ecj/WitherOnStatic.java.messages
@@ -1,2 +1,2 @@
-2 warning Not generating wither for this field: Withers cannot be generated for static fields.
-3 warning Not generating wither for this field: Withers cannot be generated for static fields.
+2:24 Not generating wither for this field: Withers cannot be generated for static fields.
+3:73 Not generating wither for this field: Withers cannot be generated for static fields.
diff --git a/test/transform/resource/messages-ecj/WitherWithDollar.java.messages b/test/transform/resource/messages-ecj/WitherWithDollar.java.messages
index e55530e3..93203dbb 100644
--- a/test/transform/resource/messages-ecj/WitherWithDollar.java.messages
+++ b/test/transform/resource/messages-ecj/WitherWithDollar.java.messages
@@ -1 +1 @@
-2 warning Not generating wither for this field: Withers cannot be generated for fields starting with $.
+2:26 Not generating wither for this field: Withers cannot be generated for fields starting with $.
diff --git a/test/transform/resource/messages-idempotent/SimpleTypeResolution.java.messages b/test/transform/resource/messages-idempotent/SimpleTypeResolution.java.messages
index 3a345d06..7acd35ed 100644
--- a/test/transform/resource/messages-idempotent/SimpleTypeResolution.java.messages
+++ b/test/transform/resource/messages-idempotent/SimpleTypeResolution.java.messages
@@ -1,9 +1 @@
-2:10 ERROR cannot find symbol
-symbol : class Getter
-location: class SimpleTypeResolutionFail
-2:10 ERROR cannot find symbol
-symbol : class Getter
-location: class SimpleTypeResolutionFail
-2:10 ERROR cannot find symbol
-symbol : class Getter
-location: class SimpleTypeResolutionFail
+2:10 cannot find symbol
diff --git a/test/transform/resource/messages-idempotent/SynchronizedNameStaticToInstanceRef.java.messages b/test/transform/resource/messages-idempotent/SynchronizedNameStaticToInstanceRef.java.messages
index c34e29f6..ed3eccb1 100644
--- a/test/transform/resource/messages-idempotent/SynchronizedNameStaticToInstanceRef.java.messages
+++ b/test/transform/resource/messages-idempotent/SynchronizedNameStaticToInstanceRef.java.messages
@@ -1 +1 @@
-5:66 ERROR non-static variable read cannot be referenced from a static context
+5:66 non-static variable read cannot be referenced from a static context
diff --git a/test/transform/resource/messages-idempotent/ValErrors.java.messages b/test/transform/resource/messages-idempotent/ValErrors.java.messages
index 6f666511..9bee37d4 100644
--- a/test/transform/resource/messages-idempotent/ValErrors.java.messages
+++ b/test/transform/resource/messages-idempotent/ValErrors.java.messages
@@ -1,7 +1,3 @@
-3:44 ERROR cannot find symbol
-symbol : variable d
-location: class ValErrors
-6:17 ERROR cannot find symbol
-symbol : class val
-location: class ValErrors
-6:25 ERROR illegal initializer for <none>
+3:44 cannot find symbol
+6:17 cannot find symbol
+6:25 illegal initializer for <none>
diff --git a/test/transform/resource/messages-idempotent/ValInBasicFor.java.messages b/test/transform/resource/messages-idempotent/ValInBasicFor.java.messages
index 133baa64..313a33c0 100644
--- a/test/transform/resource/messages-idempotent/ValInBasicFor.java.messages
+++ b/test/transform/resource/messages-idempotent/ValInBasicFor.java.messages
@@ -1,3 +1,3 @@
-5:26 ERROR 'val' is not allowed in old-style for loops
-5:40 ERROR 'val' is not allowed in old-style for loops
-5:53 ERROR 'val' is not allowed in old-style for loops
+5:26 'val' is not allowed in old-style for loops
+5:40 'val' is not allowed in old-style for loops
+5:53 'val' is not allowed in old-style for loops