@NotNull
  private List<YouTrackIssue> fetchIssues(@Nullable String query, int offset, int limit) throws URISyntaxException, IOException {
    String searchQuery = getDefaultSearch() + (StringUtil.isNotEmpty(query) ? " " + query : "");
    URI endpoint = new URIBuilder(getRestApiUrl("api", "issues"))
      .addParameter("query", searchQuery)
      .addParameter("fields", YouTrackIssue.DEFAULT_FIELDS)
      .addParameter("$skip", String.valueOf(offset))
      .addParameter("$top", String.valueOf(limit))
      .build();
    try {
      return getHttpClient().execute(new HttpGet(endpoint),
                                     JsonResponseHandlerBuilder.fromGson(GSON)
                                       .errorHandler(this::parseYouTrackError)
                                       .toMultipleObjects(LIST_OF_ISSUES_TYPE));
    }
    catch (YouTrackRequestFailedException e) {
      if ("invalid_query".equals(e.getErrorInfo().getError())) {
        LOG.debug("Ignoring invalid query: " + searchQuery);
        return Collections.emptyList();
      }
      else {
        throw e;
      }
    }
  }
@NotNull
  private List<YouTrackIssue> fetchIssues(@Nullable String query, int offset, int limit)