Community
Participate
Working Groups
Build ID: I20080617-2000 (3.4.0) Steps To Reproduce: As soon as this source class is opened, crashes appear in the error log. ----------------------- Bug.java --------------- class Bug { { for(Object obj:new Object[]{new Object(){ int field=method(}); }}); } int method(int...args){return args.length;} } More information: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.ast.ForeachStatement.traverse(ForeachStatement.java:528) at org.eclipse.jdt.internal.compiler.ast.Block.traverse(Block.java:127) at org.eclipse.jdt.internal.compiler.ast.Initializer.traverse(Initializer.java:128) at org.eclipse.jdt.internal.compiler.parser.Parser.recoverStatements(Parser.java:10124) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9322) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9533) at org.eclipse.jdt.internal.compiler.ast.Initializer.parseStatements(Initializer.java:82) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.parseMethods(TypeDeclaration.java:813) at org.eclipse.jdt.internal.compiler.parser.Parser.getMethodBodies(Parser.java:8513) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:849) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:904) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:182) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:243) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:190)
I think in case of recovered statement we simply need to check for null. Adding a null check makes the statement recovery to complete and the result in the ASTView is pretty good.
Created attachment 111238 [details] Proposed fix + regression test
Released for 3.5M2. Added regression test in org.eclipse.jdt.core.tests.dom.ASTConverter15Test#test0323
Verified for 3.5M2 using I20080914-2000