@Target(value=LOCAL_VARIABLE) @Retention(value=SOURCE) public @interface Cleanup
Example:
public void copyFile(String in, String out) throws IOException {
@Cleanup FileInputStream inStream = new FileInputStream(in);
@Cleanup FileOutputStream outStream = new FileOutputStream(out);
byte[] b = new byte[65536];
while (true) {
int r = inStream.read(b);
if (r == -1) break;
outStream.write(b, 0, r);
}
}
Will generate:
public void copyFile(String in, String out) throws IOException {
@Cleanup FileInputStream inStream = new FileInputStream(in);
try {
@Cleanup FileOutputStream outStream = new FileOutputStream(out);
try {
byte[] b = new byte[65536];
while (true) {
int r = inStream.read(b);
if (r == -1) break;
outStream.write(b, 0, r);
}
} finally {
out.close();
}
} finally {
in.close();
}
}
Note that the final close method call, if it throws an exception, will overwrite any exception thrown
in the main body of the generated try block. You should NOT rely on this behaviour - future versions of
lombok intend to silently swallow any exception thrown by the cleanup method _IF the main body
throws an exception as well, as the earlier exception is usually far more useful.
However, in java 1.6, generating the code to do this is prohibitively complicated.
public abstract String value
Copyright © 2009-2011 The Project Lombok Authors, licensed under the MIT licence.