Program: 85189
Project: 85189
Buggy source:
@Override public boolean parse(ParserManager pm,IToken token) throws SyntaxError {
  int type=token.type();
  if (type == Tokens.SEMICOLON) {
    this.reset();
    return true;
  }
  String value=token.value();
  if (this.isInMode(BODY_END)) {
    if (type == Tokens.CLOSE_CURLY_BRACKET) {
      pm.popParser(true);
      return true;
    }
  }
  if (this.isInMode(TYPE)) {
    int i=0;
    if ((i=Modifiers.MEMBER.parse(value)) != -1) {
      if ((this.modifiers & i) != 0) {
        throw new SyntaxError(token,"String_Node_Str" + value + "String_Node_Str");
      }
      this.modifiers|=i;
      return true;
    }
    if ((i=Modifiers.CLASS_TYPE.parse(value)) != -1) {
      CodeClass codeClass=new CodeClass(null,this.theClass.getUnit(),this.modifiers,this.annotations);
      this.theClass.getBody().addClass(codeClass);
      codeClass.setOuterClass(this.theClass);
      ClassDeclParser parser=new ClassDeclParser(codeClass);
      pm.pushParser(parser);
      this.modifiers=0;
      this.annotations=new ArrayList();
      return true;
    }
    if (value.charAt(0) == '@') {
      pm.pushParser(new AnnotationParser(this),true);
      return true;
    }
    pm.pushParser(new TypeParser(this),true);
    this.mode=NAME;
    return true;
  }
  if (this.isInMode(NAME)) {
    if (ParserUtil.isIdentifier(type) || type == Tokens.NEW) {
      IToken next=token.next();
      type=next.type();
      if (type == Tokens.SEMICOLON) {
        Field f=new Field(this.theClass,value,this.type,this.modifiers,this.annotations);
        f.setPosition(token.raw());
        this.body.addField(f);
        pm.skip();
        this.reset();
        return true;
      }
      if (type == Tokens.OPEN_PARENTHESIS) {
        this.mode=PARAMETERS;
        this.method=new Method(this.theClass,value,this.type,this.modifiers,this.annotations);
        this.method.setPosition(token.raw());
        this.body.addMethod(this.method);
        return true;
      }
      if (type == Tokens.OPEN_CURLY_BRACKET) {
        this.mode=PROPERTY_END;
        Property property=new Property(this.theClass,value,this.type,this.modifiers,this.annotations);
        property.setPosition(token.raw());
        this.body.addProperty(property);
        pm.skip();
        pm.pushParser(new PropertyParser(this.theClass,property));
        return true;
      }
      if (type == Tokens.EQUALS) {
        Field field=new Field(this.theClass,value,this.type,this.modifiers,this.annotations);
        field.setPosition(token.raw());
        this.body.addField(field);
        pm.skip();
        pm.pushParser(new ExpressionParser(field));
        this.reset();
        return true;
      }
      if (type == Tokens.OPEN_SQUARE_BRACKET) {
        this.mode=GENERICS_END;
        this.method=new Method(this.theClass,value,this.type,this.modifiers,this.annotations);
        this.method.setPosition(token.raw());
        this.method.setGeneric();
        this.body.addMethod(this.method);
        pm.skip();
        pm.pushParser(new TypeVariableListParser(this.method));
        return true;
      }
    }
    return false;
  }
  if (this.isInMode(PROPERTY_END)) {
    if (type == Tokens.CLOSE_CURLY_BRACKET) {
      this.reset();
      return true;
    }
    return false;
  }
  if (this.isInMode(GENERICS_END)) {
    if (type == Tokens.CLOSE_SQUARE_BRACKET) {
      this.mode=PARAMETERS;
      return true;
    }
    return false;
  }
  if (this.isInMode(PARAMETERS)) {
    if (type == Tokens.OPEN_PARENTHESIS) {
      pm.pushParser(new ParameterListParser(this.method));
      this.mode=PARAMETERS_END;
      return true;
    }
    return false;
  }
  if (this.isInMode(PARAMETERS_END)) {
    if (type == Tokens.CLOSE_PARENTHESIS) {
      this.mode=METHOD_END;
      return true;
    }
    return false;
  }
  if (this.isInMode(METHOD_END)) {
    if (type == Tokens.OPEN_CURLY_BRACKET) {
      pm.pushParser(new ExpressionParser(this.method),true);
      return true;
    }
    if (type == Tokens.EQUALS) {
      pm.pushParser(new ExpressionParser(this.method));
      return true;
    }
    if ("String_Node_Str".equals(value)) {
      pm.pushParser(new ThrowsDeclParser(this.method));
      return true;
    }
  }
  if (token.prev().isType(Tokens.CLOSE_CURLY_BRACKET)) {
    this.reset();
    pm.reparse();
    return true;
  }
  return false;
}

Fixed version (ground truth):
@Override public boolean parse(ParserManager pm,IToken token) throws SyntaxError {
  int type=token.type();
  if (type == Tokens.SEMICOLON) {
    this.reset();
    return true;
  }
  String value=token.value();
  if (this.isInMode(BODY_END)) {
    if (type == Tokens.CLOSE_CURLY_BRACKET) {
      pm.popParser(true);
      return true;
    }
  }
  if (this.isInMode(TYPE)) {
    int i=0;
    if ((i=Modifiers.MEMBER.parse(value)) != -1) {
      if ((this.modifiers & i) != 0) {
        throw new SyntaxError(token,"String_Node_Str" + value + "String_Node_Str");
      }
      this.modifiers|=i;
      return true;
    }
    if ((i=Modifiers.CLASS_TYPE.parse(value)) != -1) {
      CodeClass codeClass=new CodeClass(null,this.theClass.getUnit(),this.modifiers,this.annotations);
      this.theClass.getBody().addClass(codeClass);
      codeClass.setOuterClass(this.theClass);
      ClassDeclParser parser=new ClassDeclParser(codeClass);
      pm.pushParser(parser);
      this.modifiers=0;
      this.annotations=new ArrayList();
      return true;
    }
    if (value.charAt(0) == '@') {
      pm.pushParser(new AnnotationParser(this),true);
      return true;
    }
    pm.pushParser(new TypeParser(this),true);
    this.mode=NAME;
    return true;
  }
  if (this.isInMode(NAME)) {
    if (ParserUtil.isIdentifier(type) || type == Tokens.NEW) {
      IToken next=token.next();
      type=next.type();
      if (type == Tokens.SEMICOLON) {
        Field f=new Field(this.theClass,value,this.type,this.modifiers,this.annotations);
        f.setPosition(token.raw());
        this.body.addField(f);
        pm.skip();
        this.reset();
        return true;
      }
      if (type == Tokens.OPEN_PARENTHESIS) {
        this.mode=PARAMETERS;
        this.method=new Method(this.theClass,value,this.type,this.modifiers,this.annotations);
        this.method.setPosition(token.raw());
        this.body.addMethod(this.method);
        return true;
      }
      if (type == Tokens.OPEN_CURLY_BRACKET) {
        this.mode=PROPERTY_END;
        Property property=new Property(this.theClass,value,this.type,this.modifiers,this.annotations);
        property.setPosition(token.raw());
        this.body.addProperty(property);
        pm.skip();
        pm.pushParser(new PropertyParser(this.theClass,property));
        return true;
      }
      if (type == Tokens.EQUALS) {
        Field field=new Field(this.theClass,value,this.type,this.modifiers,this.annotations);
        field.setPosition(token.raw());
        this.body.addField(field);
        pm.skip();
        pm.pushParser(new ExpressionParser(field));
        this.reset();
        return true;
      }
      if (type == Tokens.OPEN_SQUARE_BRACKET) {
        this.mode=GENERICS_END;
        this.method=new Method(this.theClass,value,this.type,this.modifiers,this.annotations);
        this.method.setPosition(token.raw());
        this.method.setGeneric();
        this.body.addMethod(this.method);
        pm.skip();
        pm.pushParser(new TypeVariableListParser(this.method));
        return true;
      }
    }
    return false;
  }
  if (this.isInMode(PROPERTY_END)) {
    if (type == Tokens.CLOSE_CURLY_BRACKET) {
      this.reset();
      return true;
    }
    return false;
  }
  if (this.isInMode(GENERICS_END)) {
    if (type == Tokens.CLOSE_SQUARE_BRACKET) {
      this.mode=PARAMETERS;
      return true;
    }
    return false;
  }
  if (this.isInMode(PARAMETERS)) {
    if (type == Tokens.OPEN_PARENTHESIS) {
      pm.pushParser(new ParameterListParser(this.method));
      this.mode=PARAMETERS_END;
      return true;
    }
    return false;
  }
  if (this.isInMode(PARAMETERS_END)) {
    if (type == Tokens.CLOSE_PARENTHESIS) {
      this.mode=METHOD_END;
      return true;
    }
    return false;
  }
  if (this.isInMode(METHOD_END)) {
    if (type == Tokens.OPEN_CURLY_BRACKET) {
      pm.pushParser(new ExpressionParser(this.method),true);
      return true;
    }
    if (type == Tokens.EQUALS) {
      pm.pushParser(new ExpressionParser(this.method));
      return true;
    }
    if ("String_Node_Str".equals(value)) {
      pm.pushParser(new ThrowsDeclParser(this.method));
      return true;
    }
  }
  if (token.prev().type() == Tokens.CLOSE_CURLY_BRACKET) {
    this.reset();
    pm.reparse();
    return true;
  }
  return false;
}