Program: 84957
Project: 84957
Buggy source:
@Override public void parse(IParserManager pm,IToken token) throws SyntaxError {
  int type=token.type();
  if (this.isInMode(MODIFIERS)) {
    int i=0;
    if ((i=ModifierTypes.CLASS.parse(type)) != -1) {
      this.theClass.addModifier(i);
      return;
    }
    if ((i=ModifierTypes.CLASS_TYPE.parse(type)) != -1) {
      this.theClass.addModifier(i);
      this.theClass.setMetadata(IClass.getClassMetadata(this.theClass,this.theClass.getModifiers()));
      this.mode=NAME;
      return;
    }
    if (token.nameValue() == Name.at) {
      Annotation annotation=new Annotation(token.raw());
      this.theClass.addAnnotation(annotation);
      pm.pushParser(new AnnotationParser(annotation));
      return;
    }
  }
  if (this.isInMode(NAME)) {
    if (ParserUtil.isIdentifier(type)) {
      this.theClass.setPosition(token.raw());
      this.theClass.setName(token.nameValue());
      this.classList.addClass(this.theClass);
      this.mode=PARAMETERS | GENERICS | EXTENDS| IMPLEMENTS| BODY;
      return;
    }
    throw new SyntaxError(token,"String_Node_Str");
  }
  if (this.isInMode(PARAMETERS)) {
    if (type == Symbols.OPEN_PARENTHESIS) {
      pm.pushParser(new ParameterListParser(this.theClass));
      this.mode=PARAMETERS_END;
      return;
    }
  }
  if (this.isInMode(PARAMETERS_END)) {
    this.mode=GENERICS | EXTENDS | IMPLEMENTS| BODY;
    if (type == Symbols.CLOSE_PARENTHESIS) {
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
  if (this.isInMode(GENERICS)) {
    if (type == Symbols.OPEN_SQUARE_BRACKET) {
      pm.pushParser(new TypeVariableListParser(this.theClass));
      this.theClass.setGeneric();
      this.mode=GENERICS_END;
      return;
    }
  }
  if (this.isInMode(GENERICS_END)) {
    this.mode=PARAMETERS | EXTENDS | IMPLEMENTS| BODY;
    if (type == Symbols.CLOSE_SQUARE_BRACKET) {
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
  if (this.isInMode(EXTENDS)) {
    if (type == Keywords.EXTENDS) {
      pm.pushParser(new TypeParser(this));
      this.mode=IMPLEMENTS | BODY;
      return;
    }
  }
  if (this.isInMode(IMPLEMENTS)) {
    if (type == Keywords.IMPLEMENTS) {
      pm.pushParser(new TypeListParser(this));
      this.mode=BODY;
      return;
    }
  }
  if (this.isInMode(BODY)) {
    if (type == Symbols.OPEN_CURLY_BRACKET) {
      pm.pushParser(new ClassBodyParser(this.theClass));
      this.mode=BODY_END;
      return;
    }
    if (ParserUtil.isTerminator(type)) {
      pm.popParser();
      this.theClass.expandPosition(token);
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
  if (this.isInMode(BODY_END)) {
    if (type == Symbols.CLOSE_CURLY_BRACKET) {
      pm.popParser();
      this.theClass.expandPosition(token);
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
}

Fixed version (ground truth):
@Override public void parse(IParserManager pm,IToken token) throws SyntaxError {
  int type=token.type();
  if (this.isInMode(MODIFIERS)) {
    int i=0;
    if ((i=ModifierTypes.CLASS.parse(type)) != -1) {
      this.theClass.addModifier(i);
      return;
    }
    if ((i=ModifierTypes.CLASS_TYPE.parse(type)) != -1) {
      this.theClass.addModifier(i);
      this.theClass.setMetadata(IClass.getClassMetadata(this.theClass,this.theClass.getModifiers()));
      this.mode=NAME;
      return;
    }
    if (token.nameValue() == Name.at) {
      Annotation annotation=new Annotation(token.raw());
      this.theClass.addAnnotation(annotation);
      pm.pushParser(new AnnotationParser(annotation));
      return;
    }
  }
  if (this.isInMode(NAME)) {
    if (ParserUtil.isIdentifier(type)) {
      this.theClass.setPosition(token.raw());
      this.theClass.setName(token.nameValue());
      this.classList.addClass(this.theClass);
      this.mode=PARAMETERS | GENERICS | EXTENDS| IMPLEMENTS| BODY;
      return;
    }
    throw new SyntaxError(token,"String_Node_Str");
  }
  if (this.isInMode(PARAMETERS)) {
    if (type == Symbols.OPEN_PARENTHESIS) {
      pm.pushParser(new ParameterListParser(this.theClass));
      this.mode=PARAMETERS_END;
      return;
    }
  }
  if (this.isInMode(PARAMETERS_END)) {
    this.mode=GENERICS | EXTENDS | IMPLEMENTS| BODY;
    if (type == Symbols.CLOSE_PARENTHESIS) {
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
  if (this.isInMode(GENERICS)) {
    if (type == Symbols.OPEN_SQUARE_BRACKET) {
      pm.pushParser(new TypeVariableListParser(this.theClass));
      this.theClass.setGeneric();
      this.mode=GENERICS_END;
      return;
    }
  }
  if (this.isInMode(GENERICS_END)) {
    this.mode=PARAMETERS | EXTENDS | IMPLEMENTS| BODY;
    if (type == Symbols.CLOSE_SQUARE_BRACKET) {
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
  if (this.isInMode(EXTENDS)) {
    if (type == Keywords.EXTENDS) {
      pm.pushParser(new TypeParser(this));
      this.mode=IMPLEMENTS | BODY;
      return;
    }
  }
  if (this.isInMode(IMPLEMENTS)) {
    if (type == Keywords.IMPLEMENTS) {
      pm.pushParser(new TypeListParser(this));
      this.mode=BODY;
      return;
    }
  }
  if (this.isInMode(BODY)) {
    if (type == Symbols.OPEN_CURLY_BRACKET) {
      pm.pushParser(new ClassBodyParser(this.theClass));
      this.mode=BODY_END;
      return;
    }
    if (ParserUtil.isTerminator(type)) {
      if (token.isInferred()) {
        int nextType=token.next().type();
switch (nextType) {
case Keywords.EXTENDS:
          this.mode=EXTENDS;
        return;
case Keywords.IMPLEMENTS:
      this.mode=IMPLEMENTS;
    return;
case Symbols.OPEN_SQUARE_BRACKET:
  this.mode=GENERICS;
return;
case Symbols.OPEN_PARENTHESIS:
this.mode=PARAMETERS;
return;
}
}
pm.popParser();
this.theClass.expandPosition(token);
return;
}
throw new SyntaxError(token,"String_Node_Str",true);
}
if (this.isInMode(BODY_END)) {
if (type == Symbols.CLOSE_CURLY_BRACKET) {
pm.popParser();
this.theClass.expandPosition(token);
return;
}
throw new SyntaxError(token,"String_Node_Str",true);
}
}