private void respond(Responder responder, final MailboxQuery expression, final String mailboxName, final boolean originalSubscription, final Collection<String> mailboxes, final Collection<String> mailboxResponses, final char delimiter) { if (expression.isExpressionMatch(mailboxName)) { if (!mailboxResponses.contains(mailboxName)) { final LSubResponse response = new LSubResponse(mailboxName, !originalSubscription, delimiter); responder.respond(response); mailboxResponses.add(mailboxName); } } else { final int lastDelimiter = mailboxName.lastIndexOf(delimiter); if (lastDelimiter > 0) { final String parentMailbox = mailboxName.substring(0, lastDelimiter); if (!mailboxes.contains(parentMailbox)) { respond(responder, expression, parentMailbox, false, mailboxes, mailboxResponses, delimiter); } } } }