aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/changelog.markdown5
-rw-r--r--src/lombok/eclipse/handlers/HandleSneakyThrows.java10
2 files changed, 13 insertions, 2 deletions
diff --git a/doc/changelog.markdown b/doc/changelog.markdown
index 40a595ed..8546a84a 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 e01cbcde..f0ff53db 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 @@ public class HandleSneakyThrows implements EclipseAnnotationHandler<SneakyThrows
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 @@ public class HandleSneakyThrows implements EclipseAnnotationHandler<SneakyThrows
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 @@ public class HandleSneakyThrows implements EclipseAnnotationHandler<SneakyThrows
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);