Incorrect line number in stack trace
Mark Mahieu
mark at twistedbanana.demon.co.uk
Mon Jun 16 05:42:08 PDT 2008
There appears to be some interaction between closures and for-each
loops which can cause incorrect line numbers in stack traces.
A couple of examples:
public class StackTraceWrongLine1 {
public static void main(String[] args) {
// Stack trace indicates that the NPE occurs here:
String[] items = null;
// Comment out this line, and the stack trace is fine
{==> void} notInvoked = {==> items = args; };
for (String item : items) { }
}
}
Exception in thread "main" java.lang.NullPointerException
at StackTraceWrongLine1.main(StackTraceWrongLine1.java:6)
- - - - - - - -
public class StackTraceWrongLine2 {
public static void main(String[] args) {
// Stack trace indicates that items.iterator() is called here:
Iterable<String> items = {=> throw new RuntimeException(); };
for (String item : items) { }
}
}
Exception in thread "main" java.lang.RuntimeException
at StackTraceWrongLine2$2.+invoke(StackTraceWrongLine2.java:6)
at StackTraceWrongLine2$2.iterator(StackTraceWrongLine2.java:6)
at StackTraceWrongLine2.main(StackTraceWrongLine2.java:6)
Regards,
Mark
More information about the closures-dev
mailing list