static boolean processElementsAtOffsets(@NotNull PsiElement scope,
                                          @NotNull StringSearcher searcher,
                                          boolean processInjectedPsi,
                                          @NotNull ProgressIndicator progress,
                                          int @NotNull [] offsetsInScope,
                                          @NotNull TextOccurenceProcessor processor) {
    if (offsetsInScope.length == 0) {
      return true;
    }
    final ASTNode scopeNode = scope.getNode();
    if (scopeNode == null) {
      throw new IllegalArgumentException(
        "Scope doesn't have node, can't scan: " + scope + "; containingFile: " + scope.getContainingFile()
      );
    }
    final Project project = scope.getProject();
    return processOffsets(scopeNode, offsetsInScope, progress, (node, offsetInNode) ->
      processTreeUp(project, scope, node, offsetInNode, searcher, processInjectedPsi, progress, processor)
    );
  }
static boolean processElementsAtOffsets(@NotNull PsiElement scope,
                                          @NotNull StringSearcher searcher,
                                          boolean processInjectedPsi,
                                          @NotNull ProgressIndicator progress,
                                          int @NotNull [] offsetsInScope,
                                          @NotNull TextOccurenceProcessor processor)