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