protected final IElementType currentToken() {
    final IElementType token = myBuilder.getTokenType();
    if (isName(token)) {
      final PsiBuilder.Marker marker = myBuilder.mark();
      makeName();
      if (myBuilder.getTokenType() == LBRACKET) {
        skipAnnotation(marker, RncElementTypes.ANNOTATION_ELEMENT);
        return currentToken();
      } else {
        marker.rollbackTo();
      }
    } else if (token == LBRACKET) {
      final PsiBuilder.Marker marker = myBuilder.mark();
      skipAnnotation(marker, RncElementTypes.ANNOTATION);
      return currentToken();
    } else if (token == GTGT) {
      final PsiBuilder.Marker marker = myBuilder.mark();
      advance();
      if (isName(myBuilder.getTokenType())) {
        makeName();
        if (myBuilder.getTokenType() == LBRACKET) {
          skipAnnotation(marker, RncElementTypes.FORWARD_ANNOTATION);
          return currentToken();
        }
      }
      marker.done(RncElementTypes.FORWARD_ANNOTATION);
      return currentToken();
    }
    return token;
  }
protected final IElementType currentToken()