Index: compiler/org/eclipse/jdt/internal/compiler/parser/RecoveredMethod.java =================================================================== RCS file: /home/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/RecoveredMethod.java,v retrieving revision 1.47 diff -u -r1.47 RecoveredMethod.java --- compiler/org/eclipse/jdt/internal/compiler/parser/RecoveredMethod.java 24 Feb 2005 19:59:20 -0000 1.47 +++ compiler/org/eclipse/jdt/internal/compiler/parser/RecoveredMethod.java 21 Jun 2005 12:52:56 -0000 @@ -318,8 +318,7 @@ * is about to disappear because of restarting recovery */ public void updateFromParserState(){ - - if(this.bodyStartsAtHeaderEnd()){ + if(this.bodyStartsAtHeaderEnd() && this.parent != null){ Parser parser = this.parser(); /* might want to recover arguments or thrown exceptions */ if (parser.listLength > 0 && parser.astLengthPtr > 0){ // awaiting interface type references @@ -375,19 +374,27 @@ // to compute bodyStart, and thus used to set next checkpoint. int count; for (count = 0; count < argLength; count++){ - Argument argument = (Argument)parser.astStack[argStart+count]; - /* cannot be an argument if non final */ - char[][] argTypeName = argument.type.getTypeName(); - if ((argument.modifiers & ~AccFinal) != 0 - || (argTypeName.length == 1 - && CharOperation.equals(argTypeName[0], VoidBinding.sourceName()))){ + if(parser.astStack[argStart+count] instanceof Argument) { + Argument argument = (Argument)parser.astStack[argStart+count]; + /* cannot be an argument if non final */ + char[][] argTypeName = argument.type.getTypeName(); + if ((argument.modifiers & ~AccFinal) != 0 + || (argTypeName.length == 1 + && CharOperation.equals(argTypeName[0], VoidBinding.sourceName()))){ + parser.astLengthStack[parser.astLengthPtr] = count; + parser.astPtr = argStart+count-1; + parser.listLength = count; + parser.currentToken = 0; + break; + } + if (needUpdateRParenPos) parser.rParenPos = argument.sourceEnd + 1; + } else { parser.astLengthStack[parser.astLengthPtr] = count; parser.astPtr = argStart+count-1; parser.listLength = count; parser.currentToken = 0; break; } - if (needUpdateRParenPos) parser.rParenPos = argument.sourceEnd + 1; } if (parser.listLength > 0 && parser.astLengthPtr > 0){