otNull
  ArrayList<SearchResult> findAllMatchesAtFrame() {
    String frameText;
    boolean isNeedAfterFrameEndSymbol;
    FindResult ijFindResult;
    int offset;
    String contextPrefix;
    String foundString;
    String contextPostfix;
    ArrayList<SearchResult> resultsList;

    frameText = beforeFrameStartSymbol + curPageText + tailText;
    isNeedAfterFrameEndSymbol = !options.regularExpression && options.wholeWords;  // using of postfix symbol may break regex search
    if (isNeedAfterFrameEndSymbol) {
      frameText += afterFrameEndSymbol;
    }
    offset = 1;  // the prefix symbol can't be a part of any search result
    resultsList = new ArrayList<>();

    while (true) {
      ijFindResult = smartStringSearcher.findString(frameText, offset, ijFindModel);

      if (!ijFindResult.isStringFound()) {
        return resultsList;
      }

      calculateAndResetStartResultPosition(resultStartPos, ijFindResult);
      calculateAndResetEndResultPosition(resultEndPos, ijFindResult);
      contextPrefix = calculateContextPrefix(frameText, ijFindResult, options);
      foundString = calculateFoundString(frameText, ijFindResult);
      contextPostfix = calculateContextPostfix(frameText, ijFindResult, options);

      if (resultStartPos.pageNumber != curPageNumber ||
          isNeedAfterFrameEndSymbol && ijFindResult.getEndOffset() == frameText.length()) { // the postfix symbol (if used) can't be a part of any search result
        return resultsList;
      }

      resultsList.add(new SearchResult(
        resultStartPos.pageNumber,
        resultStartPos.symbolOffsetInPage,
        resultEndPos.pageNumber,
        resultEndPos.symbolOffsetInPage,
        contextPrefix,
        Utils.cutToMaxLength(foundString, 100),
        contextPostfix));

      offset = ijFindResult.getEndOffset();
    }
  }


otNull
  ArrayList<SearchResult> findAllMatchesAtFrame() {