class ChildDeletionCheckerReceiver implements IMessageReceiver {

    @Override
    public void receive(final IMessageProcessor processor)
            throws MessageReceiveException, AsynchronousOperationException {
        try {
            underlyingReceiver.receive(processor);

            checkDeletion(processor);
        } catch (MessageReceiveException e) {
            try {
                checkDeletion(processor);
            } catch (ActionExecuteException | DeletionCheckException | InvalidArgumentException ee) {
                e.addSuppressed(ee);
            }

            throw new MessageReceiveException(e);
        } catch (ActionExecuteException | DeletionCheckException | InvalidArgumentException e) {
            throw new MessageReceiveException(e);
        }
    }

    public  ChildDeletionCheckerReceiver(
            final IMessageReceiver underlyingReceiver,
            final IObject creationContext,
            final IChildDeletionCheckStrategy deletionCheckStrategy,
            final IAction<IObject> deletionAction);

}