Skip to content

Commit

Permalink
I think this one FINALLY fixes the problems with SneakyThrows! Issue #30
Browse files Browse the repository at this point in the history
  • Loading branch information
Reinier Zwitserloot committed Sep 2, 2009
1 parent 3bffd6b commit 2b51cf8
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 2 deletions.
5 changes: 5 additions & 0 deletions 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)
Expand Down
10 changes: 8 additions & 2 deletions src/lombok/eclipse/handlers/HandleSneakyThrows.java
Expand Up @@ -21,6 +21,7 @@
*/
package lombok.eclipse.handlers;

import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;

Expand Down Expand Up @@ -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][];
Expand All @@ -181,16 +183,20 @@ 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;

tryStatement.catchArguments = new Argument[] { catchArg };

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);
Expand Down

0 comments on commit 2b51cf8

Please sign in to comment.