public final void processSuccessAndHandleFailed()

in powertools-sqs/src/main/java/software/amazon/lambda/powertools/sqs/internal/BatchContext.java [57:101]


    public final <T> void processSuccessAndHandleFailed(final List<T> successReturns,
                                                        final boolean suppressException,
                                                        final boolean deleteNonRetryableMessageFromQueue,
                                                        final Class<? extends Exception>... nonRetryableExceptions) {
        if (hasFailures()) {

            List<Exception> exceptions = new ArrayList<>();
            List<SQSMessage> failedMessages = new ArrayList<>();
            Map<SQSMessage, Exception> nonRetryableMessageToException = new HashMap<>();

            if (nonRetryableExceptions.length == 0) {
                exceptions.addAll(messageToException.values());
                failedMessages.addAll(messageToException.keySet());
            } else {
                messageToException.forEach((sqsMessage, exception) -> {
                    boolean nonRetryableException = isNonRetryableException(exception, nonRetryableExceptions);

                    if (nonRetryableException) {
                        nonRetryableMessageToException.put(sqsMessage, exception);
                    } else {
                        exceptions.add(exception);
                        failedMessages.add(sqsMessage);
                    }
                });
            }

            List<SQSMessage> messagesToBeDeleted = new ArrayList<>(success);

            if (!nonRetryableMessageToException.isEmpty() && deleteNonRetryableMessageFromQueue) {
                messagesToBeDeleted.addAll(nonRetryableMessageToException.keySet());
            } else if (!nonRetryableMessageToException.isEmpty()) {

                boolean isMovedToDlq = moveNonRetryableMessagesToDlqIfConfigured(nonRetryableMessageToException);

                if (!isMovedToDlq) {
                    exceptions.addAll(nonRetryableMessageToException.values());
                    failedMessages.addAll(nonRetryableMessageToException.keySet());
                }
            }

            deleteMessagesFromQueue(messagesToBeDeleted);

            processFailedMessages(successReturns, suppressException, exceptions, failedMessages);
        }
    }