diff --git a/doc/changelog.markdown b/doc/changelog.markdown index 40a595ed40..8546a84ae6 100644 --- a/doc/changelog.markdown +++ b/doc/changelog.markdown @@ -1,6 +1,11 @@ Lombok Changelog ---------------- +### v0.8.5 + +* Fixed yet another issue with `@SneakyThrows`. This was reported fixed in v0.8.4. but it still didn't work quite as it should. Still falls under the bailiwick of +[Issue #30](http://code.google.com/p/projectlombok/issues/detail?id=30) + ### v0.8.4 * Fixed many issues with `@SneakyThrows` - in previous versions, using it would sometimes confuse the syntax colouring, and various constructs in the annotated method would cause outright eclipse errors, such as beginning the method with a try block. This also fixes [Issue #30](http://code.google.com/p/projectlombok/issues/detail?id=30) diff --git a/src/lombok/eclipse/handlers/HandleSneakyThrows.java b/src/lombok/eclipse/handlers/HandleSneakyThrows.java index e01cbcdec1..f0ff53dbe1 100644 --- a/src/lombok/eclipse/handlers/HandleSneakyThrows.java +++ b/src/lombok/eclipse/handlers/HandleSneakyThrows.java @@ -21,6 +21,7 @@ */ package lombok.eclipse.handlers; +import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; @@ -167,6 +168,7 @@ private Statement buildTryCatchBlock(Statement[] contents, DeclaredException exc TypeReference typeReference; if ( exception.exceptionName.indexOf('.') == -1 ) { typeReference = new SingleTypeReference(exception.exceptionName.toCharArray(), p); + typeReference.statementEnd = pE; } else { String[] x = exception.exceptionName.split("\\."); char[][] elems = new char[x.length][]; @@ -181,7 +183,7 @@ private Statement buildTryCatchBlock(Statement[] contents, DeclaredException exc typeReference = new QualifiedTypeReference(elems, poss); } - Argument catchArg = new Argument("$ex".toCharArray(), p, typeReference, 0); + Argument catchArg = new Argument("$ex".toCharArray(), p, typeReference, Modifier.FINAL); catchArg.declarationSourceEnd = catchArg.declarationEnd = catchArg.sourceEnd = pE; catchArg.declarationSourceStart = catchArg.modifiersSourceStart = catchArg.sourceStart = pS; @@ -189,8 +191,12 @@ private Statement buildTryCatchBlock(Statement[] contents, DeclaredException exc MessageSend sneakyThrowStatement = new MessageSend(); sneakyThrowStatement.receiver = new QualifiedNameReference(new char[][] { "lombok".toCharArray(), "Lombok".toCharArray() }, new long[] { p, p }, pS, pE); + sneakyThrowStatement.receiver.statementEnd = pE; sneakyThrowStatement.selector = "sneakyThrow".toCharArray(); - sneakyThrowStatement.arguments = new Expression[] { new SingleNameReference("$ex".toCharArray(), p) }; + SingleNameReference exRef = new SingleNameReference("$ex".toCharArray(), p); + exRef.statementEnd = pE; + sneakyThrowStatement.arguments = new Expression[] { exRef }; + sneakyThrowStatement.nameSourcePosition = p; sneakyThrowStatement.sourceStart = pS; sneakyThrowStatement.sourceEnd = sneakyThrowStatement.statementEnd = pE; Statement rethrowStatement = new ThrowStatement(sneakyThrowStatement, pS, pE);