code: private <T> void runProcessorsOnParagraphComment(final WordprocessingMLPackage document,
                                                     final Map<BigInteger, CommentWrapper> comments, ProxyBuilder<T> proxyBuilder,
                                                     ParagraphCoordinates paragraphCoordinates) {
      Comments.Comment comment = CommentUtil
              .getCommentFor(paragraphCoordinates.getParagraph(), document);
      if (comment == null) {
        // no comment to process
        return;
      }
  
      String commentString = CommentUtil.getCommentString(comment);
  
      for (final ICommentProcessor processor : commentProcessors) {
        Class<?> commentProcessorInterface = commentProcessorInterfaces.get(processor);
        proxyBuilder.withInterface(commentProcessorInterface, processor);
        processor.setCurrentParagraphCoordinates(paragraphCoordinates);
      }
  
      CommentWrapper commentWrapper = comments.get(comment.getId());
  
      try {
        T contextRootProxy = proxyBuilder.build();
        expressionResolver.resolveExpression(commentString, contextRootProxy);
        CommentUtil.deleteComment(commentWrapper);
        logger.debug(
                String.format("Comment '%s' has been successfully processed by a comment processor.",
                        commentString));
      } catch (SpelEvaluationException | SpelParseException e) {
        if (failOnInvalidExpression) {
          throw new UnresolvedExpressionException(commentString, e);
        } else {
          logger.warn(String.format(
                  "Skipping comment expression '%s' because it can not be resolved by any comment processor. Reason: %s. Set log level to TRACE to view Stacktrace.",
                  commentString, e.getMessage()));
          logger.trace("Reason for skipping comment: ", e);
        }
      } catch (ProxyException e) {
        throw new DocxStamperException("Could not create a proxy around context root object", e);
      }
  
    }
docs: Takes the first comment on the specified paragraph and tries to evaluate
  the string within the comment against all registered
  {@link ICommentProcessor}s.
  
  @param document             the word document.
  @param comments             the comments within the document.
  @param proxyBuilder          a builder for a proxy around the context root object to customize its interface
  @param paragraphCoordinates the paragraph whose comments to evaluate.
  @param <T>                  the type of the context root object.