//# 8 errors, 885 messages
//#
/*
    //#abstractemailnotificationlistener.java:1:1: class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#abstractemailnotificationlistener.java:1:1: method: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init
 * Copyright (c) 2003-2006, Simon Brown
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in
 *     the documentation and/or other materials provided with the
 *     distribution.
 *
 *   - Neither the name of Pebble nor the names of its contributors may
 *     be used to endorse or promote products derived from this software
 *     without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package net.sourceforge.pebble.event.comment;

import net.sourceforge.pebble.domain.Blog;
import net.sourceforge.pebble.domain.Comment;
import net.sourceforge.pebble.api.decorator.ContentDecoratorContext;
import net.sourceforge.pebble.api.event.comment.CommentEvent;
import net.sourceforge.pebble.util.MailUtils;
import net.sourceforge.pebble.util.StringUtils;

import javax.mail.Session;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Iterator;

/**
 * Base class for listeners that send an e-mail notification when new
 * comments are added.
 *
 * @author Simon Brown
 */
public abstract class AbstractEmailNotificationListener extends CommentListenerSupport {
    //#abstractemailnotificationlistener.java:52: method: void net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener()
    //#input(void net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener()): this
    //#abstractemailnotificationlistener.java:52: end of method: void net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener()

  /** a token to be replaced when sending e-mails */
  private static final String EMAIL_ADDRESS_TOKEN = "EMAIL_ADDRESS";

  /**
   * Called when a comment has been added.
   *
   * @param event a CommentEvent instance
   */
  public void commentAdded(CommentEvent event) {
    Comment comment = event.getComment();
    //#abstractemailnotificationlistener.java:63: method: void net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.commentAdded(CommentEvent)
    //#input(void commentAdded(CommentEvent)): __Descendant_Table[net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener]
    //#input(void commentAdded(CommentEvent)): __Descendant_Table[net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener]
    //#input(void commentAdded(CommentEvent)): __Descendant_Table[net/sourceforge/pebble/event/comment/EmailNotificationListener]
    //#input(void commentAdded(CommentEvent)): __Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): __Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void commentAdded(CommentEvent)): event
    //#input(void commentAdded(CommentEvent)): event.__Tag
    //#input(void commentAdded(CommentEvent)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#1).__Tag
    //#input(void commentAdded(CommentEvent)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#1).name
    //#input(void commentAdded(CommentEvent)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#3).__Tag
    //#input(void commentAdded(CommentEvent)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#3).name
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getSecurityRealm()Lnet/sourceforge/pebble/security/SecurityRealm;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/Configuration.__Dispatch_Table.isVirtualHostingEnabled()Z
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/api/decorator/ContentDecorator.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/api/decorator/ContentDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Descendant_Table[net/sourceforge/pebble/api/decorator/ContentDecoratorContext]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Dispatch_Table.setMedia(I)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Dispatch_Table.setView(I)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/api/event/comment/CommentEvent.__Descendant_Table[net/sourceforge/pebble/api/event/comment/CommentEvent]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/api/event/comment/CommentEvent.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/api/event/comment/CommentEvent.__Dispatch_Table.getComment()Lnet/sourceforge/pebble/domain/Comment;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[net/sourceforge/pebble/api/permalink/PermalinkProvider]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Dispatch_Table.getPermalink(Lnet/sourceforge/pebble/domain/BlogEntry;)Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/AbstractTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/BlogCategoriesDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/BlogTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/ContentDecoratorChain.__Descendant_Table[net/sourceforge/pebble/decorator/ContentDecoratorChain]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/ContentDecoratorChain.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/ContentDecoratorChain.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/ContentDecoratorSupport.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/DisableCommentsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/DisableResponseDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/DisableTrackBacksDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/EntryToPdfDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/EscapeMarkupDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/ExcerptDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/HideUnapprovedResponsesDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/HtmlDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/NoFollowDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/PhotoDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/RadeoxDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/ReadMoreDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/RelatedPostsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/RelativeUriDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/SocialBookmarksDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/StaticPageTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/TechnoratiTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/decorator/TrackBackAutoDiscoveryDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/AbstractBlog]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/MultiBlog]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getContentDecoratorChain()Lnet/sourceforge/pebble/decorator/ContentDecoratorChain;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmail()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmailAddresses()Ljava/util/Collection;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getPermalinkProvider()Lnet/sourceforge/pebble/api/permalink/PermalinkProvider;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZone()Ljava/util/TimeZone;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getComments()Ljava/util/List;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getUser()Lnet/sourceforge/pebble/security/PebbleUserDetails;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.__Dispatch_Table.isMultiBlog()Z
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.instance
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.instance.multiBlog
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getBody()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getComments()Ljava/util/List;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getEmail()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getGuid()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getId()J
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getPermalink()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getWebsite()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.isApproved()Z
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.isPending()Z
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setBody(Ljava/lang/String;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setEmail(Ljava/lang/String;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setTitle(Ljava/lang/String;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setWebsite(Ljava/lang/String;)V
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.log
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Response]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Response.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getId()J
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/State.APPROVED
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/State.PENDING
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/State.__Descendant_Table[net/sourceforge/pebble/domain/State]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/State.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/State.__Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/State.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[others]
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getId()J
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void commentAdded(CommentEvent)): net/sourceforge/pebble/event/comment/EmailNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void commentAdded(CommentEvent)): this
    //#input(void commentAdded(CommentEvent)): this.__Tag
    //#pre[1] (void commentAdded(CommentEvent)): event != null
    //#pre[2] (void commentAdded(CommentEvent)): event.__Tag == net/sourceforge/pebble/api/event/comment/CommentEvent
    //#pre[3] (void commentAdded(CommentEvent)): (soft) net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#1).name != null
    //#pre[4] (void commentAdded(CommentEvent)): (soft) net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#3).name != null
    //#pre[6] (void commentAdded(CommentEvent)): (soft) net/sourceforge/pebble/domain/BlogManager.instance != null
    //#pre[8] (void commentAdded(CommentEvent)): (soft) init'ed(net/sourceforge/pebble/domain/BlogManager.instance.multiBlog)
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.__Tag@64 == net/sourceforge/pebble/domain/BlogEntry
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.__Tag@66 == net/sourceforge/pebble/domain/BlogEntry
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog.__Tag@64 == net/sourceforge/pebble/domain/Blog
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog.__Tag@66 == net/sourceforge/pebble/domain/Blog
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog.decoratorChain.__Tag@64 == net/sourceforge/pebble/decorator/ContentDecoratorChain
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog.decoratorChain.decorators@64 != null
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog.decoratorChain@64 != null
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog.permalinkProvider.__Tag@64 == net/sourceforge/pebble/api/permalink/PermalinkProvider
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog.permalinkProvider.__Tag@66 == net/sourceforge/pebble/api/permalink/PermalinkProvider
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog.permalinkProvider@64 != null
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog.permalinkProvider@66 != null
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog.properties@64 != null
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog.properties@66 != null
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog@64 != null
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.blog@66 != null
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry.comments@64 != null
    //#presumption(void commentAdded(CommentEvent)): comment.blogEntry@66 != null
    //#presumption(void commentAdded(CommentEvent)): comment.date@66 != null
    //#presumption(void commentAdded(CommentEvent)): comment.state.__Tag@63 == net/sourceforge/pebble/domain/State
    //#presumption(void commentAdded(CommentEvent)): comment.state.__Tag@64 == net/sourceforge/pebble/domain/State
    //#presumption(void commentAdded(CommentEvent)): comment.state.__Tag@66 == net/sourceforge/pebble/domain/State
    //#presumption(void commentAdded(CommentEvent)): comment.state@63 != null
    //#presumption(void commentAdded(CommentEvent)): comment.state@64 != null
    //#presumption(void commentAdded(CommentEvent)): comment.state@66 != null
    //#presumption(void commentAdded(CommentEvent)): net.sourceforge.pebble.api.event.comment.CommentEvent:getSource(...)@72 != null
    //#presumption(void commentAdded(CommentEvent)): net.sourceforge.pebble.api.event.comment.CommentEvent:getSource(...)@72.__Tag is init'ed
    //#presumption(void commentAdded(CommentEvent)): net.sourceforge.pebble.api.event.comment.CommentEvent:getSource(...)@72.blogEntry != null
    //#presumption(void commentAdded(CommentEvent)): net.sourceforge.pebble.api.event.comment.CommentEvent:getSource(...)@72.date != null
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getBlogEntry
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getBlog
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.text.SimpleDateFormat
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getTimeZone
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.text.SimpleDateFormat:setTimeZone
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getState
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getTitle
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getAuthor
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:transformHTML
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getWebsite
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getDate
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.text.SimpleDateFormat:format
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getBody
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getPermalink
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getUrl
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getGuid
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getEmailAddresses
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.Collection:addAll
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.util.MailUtils:createSession
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.util.MailUtils:sendMail
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.Exception:printStackTrace
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getContentDecoratorChain
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:decorate
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getId
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getComments
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getEmail
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.Collection:add
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.String:replaceAll
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.Properties:getProperty
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.TimeZone:getTimeZone
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getLocalPermalink
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.Date:getTime
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getId
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getUser
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.security.PebbleUserDetails:getEmailAddress
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.Arrays:asList
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.api.event.comment.CommentEvent:getSource
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.regex.Pattern:matcher
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.regex.Matcher:find
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.regex.Matcher:start
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.regex.Matcher:end
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.String:toLowerCase
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:setBody
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:filterHTML
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:transformToHTMLSubset
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:setAuthor
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:setWebsite
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:setEmail
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:setTitle
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getPermalinkProvider
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:getSecurityRealm
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.security.SecurityRealm:getUser
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void commentAdded(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getTitle
    if (comment.isApproved()) {
    //#abstractemailnotificationlistener.java:64: ?null dereference
    //#    net/sourceforge/pebble/domain/Comment.__Descendant_Table[comment.__Tag] != null
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void commentAdded(CommentEvent)
    //#    basic block: Entry_BB_1
    //#    assertion: net/sourceforge/pebble/domain/Comment.__Descendant_Table[comment.__Tag] != null
    //#    VN: net/sourceforge/pebble/domain/Comment.__Descendant_Table[comment.__Tag]
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
      sendNotification(comment);
    //#abstractemailnotificationlistener.java:65: ?precondition failure
    //#    net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendNotification: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void commentAdded(CommentEvent)
    //#    basic block: bb_2
    //#    assertion: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    callee: void net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendNotification(Comment)
    //#    callee assertion: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    callee file: abstractemailnotificationlistener.java
    //#    callee precondition index: [21]
    //#    callee srcpos: 82
    //#    VN: net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#    Expected: {790_784}
    //#    Bad: {0..790_783, 790_785..+Inf}
    //#    Attribs:  Int  Exp singleton  Bad overlaps +/-1000  Soft  Bad < Exp  Bad > Exp  Uncertain
    //#abstractemailnotificationlistener.java:65: ?precondition failure
    //#    net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendNotification: this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void commentAdded(CommentEvent)
    //#    basic block: bb_2
    //#    assertion: this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#    callee: void net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendNotification(Comment)
    //#    callee assertion: this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#    callee file: abstractemailnotificationlistener.java
    //#    callee precondition index: [31]
    //#    callee srcpos: 82
    //#    VN: this.__Tag
    //#    Expected: {810_752, 812_032, 812_544}
    //#    Bad: {0..810_751, 810_753..812_031, 812_033..812_543, 812_545..+Inf}
    //#    Attribs:  Int  Bad overlaps +/-1000  Bad < Exp  Bad > Exp  Uncertain
    } else if (comment.isPending()) {
      sendApprovalRequest(comment);
    //#abstractemailnotificationlistener.java:67: ?precondition failure
    //#    net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendApprovalRequest: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void commentAdded(CommentEvent)
    //#    basic block: bb_4
    //#    assertion: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    callee: void net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendApprovalRequest(Comment)
    //#    callee assertion: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    callee file: abstractemailnotificationlistener.java
    //#    callee precondition index: [22]
    //#    callee srcpos: 136
    //#    VN: net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#    Expected: {790_784}
    //#    Bad: {0..790_783, 790_785..+Inf}
    //#    Attribs:  Int  Exp singleton  Bad overlaps +/-1000  Soft  Bad < Exp  Bad > Exp  Uncertain
    //#abstractemailnotificationlistener.java:67: ?precondition failure
    //#    net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendApprovalRequest: this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void commentAdded(CommentEvent)
    //#    basic block: bb_4
    //#    assertion: this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#    callee: void net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendApprovalRequest(Comment)
    //#    callee assertion: this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#    callee file: abstractemailnotificationlistener.java
    //#    callee precondition index: [27]
    //#    callee srcpos: 136
    //#    VN: this.__Tag
    //#    Expected: {810_752, 812_032, 812_544}
    //#    Bad: {0..810_751, 810_753..812_031, 812_033..812_543, 812_545..+Inf}
    //#    Attribs:  Int  Bad overlaps +/-1000  Bad < Exp  Bad > Exp  Uncertain
    }
  }
    //#abstractemailnotificationlistener.java:69: end of method: void net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.commentAdded(CommentEvent)

  /**
   * Called when a comment has been approved.
   *
   * @param event a CommentEvent instance
   */
  public void commentApproved(CommentEvent event) {
    Comment comment = event.getComment();
    //#abstractemailnotificationlistener.java:77: method: void net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.commentApproved(CommentEvent)
    //#abstractemailnotificationlistener.java:77: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void commentApproved(CommentEvent)
    //#    suspicious precondition index: [8]
    //#input(void commentApproved(CommentEvent)): __Descendant_Table[net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener]
    //#input(void commentApproved(CommentEvent)): __Descendant_Table[net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener]
    //#input(void commentApproved(CommentEvent)): __Descendant_Table[net/sourceforge/pebble/event/comment/EmailNotificationListener]
    //#input(void commentApproved(CommentEvent)): __Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): __Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void commentApproved(CommentEvent)): event
    //#input(void commentApproved(CommentEvent)): event.__Tag
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getSecurityRealm()Lnet/sourceforge/pebble/security/SecurityRealm;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/Configuration.__Dispatch_Table.isVirtualHostingEnabled()Z
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/api/decorator/ContentDecorator.__Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/api/decorator/ContentDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Descendant_Table[net/sourceforge/pebble/api/decorator/ContentDecoratorContext]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Dispatch_Table.setMedia(I)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Dispatch_Table.setView(I)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/api/event/comment/CommentEvent.__Descendant_Table[net/sourceforge/pebble/api/event/comment/CommentEvent]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/api/event/comment/CommentEvent.__Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/api/event/comment/CommentEvent.__Dispatch_Table.getComment()Lnet/sourceforge/pebble/domain/Comment;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[net/sourceforge/pebble/api/permalink/PermalinkProvider]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Dispatch_Table.getPermalink(Lnet/sourceforge/pebble/domain/BlogEntry;)Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/AbstractTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/BlogCategoriesDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/BlogTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/ContentDecoratorChain.__Descendant_Table[net/sourceforge/pebble/decorator/ContentDecoratorChain]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/ContentDecoratorChain.__Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/ContentDecoratorChain.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/ContentDecoratorSupport.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/DisableCommentsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/DisableResponseDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/DisableTrackBacksDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/EntryToPdfDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/EscapeMarkupDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/ExcerptDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/HideUnapprovedResponsesDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/HtmlDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/NoFollowDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/PhotoDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/RadeoxDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/ReadMoreDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/RelatedPostsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/RelativeUriDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/SocialBookmarksDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/StaticPageTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/TechnoratiTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/decorator/TrackBackAutoDiscoveryDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/AbstractBlog]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/MultiBlog]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getContentDecoratorChain()Lnet/sourceforge/pebble/decorator/ContentDecoratorChain;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmail()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmailAddresses()Ljava/util/Collection;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getPermalinkProvider()Lnet/sourceforge/pebble/api/permalink/PermalinkProvider;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZone()Ljava/util/TimeZone;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getComments()Ljava/util/List;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getUser()Lnet/sourceforge/pebble/security/PebbleUserDetails;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.__Dispatch_Table.isMultiBlog()Z
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.instance
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/BlogManager.instance.multiBlog
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getBody()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getComments()Ljava/util/List;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getEmail()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getId()J
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getPermalink()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getWebsite()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setBody(Ljava/lang/String;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setEmail(Ljava/lang/String;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setTitle(Ljava/lang/String;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setWebsite(Ljava/lang/String;)V
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[others]
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/PageBasedContent.log
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void commentApproved(CommentEvent)): net/sourceforge/pebble/event/comment/EmailNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void commentApproved(CommentEvent)): this
    //#input(void commentApproved(CommentEvent)): this.__Tag
    //#pre[1] (void commentApproved(CommentEvent)): event != null
    //#pre[2] (void commentApproved(CommentEvent)): event.__Tag == net/sourceforge/pebble/api/event/comment/CommentEvent
    //#pre[8] (void commentApproved(CommentEvent)): this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#pre[4] (void commentApproved(CommentEvent)): (soft) net/sourceforge/pebble/domain/BlogManager.instance != null
    //#pre[5] (void commentApproved(CommentEvent)): (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#pre[6] (void commentApproved(CommentEvent)): (soft) init'ed(net/sourceforge/pebble/domain/BlogManager.instance.multiBlog)
    //#presumption(void commentApproved(CommentEvent)): comment.blogEntry.__Tag@77 == net/sourceforge/pebble/domain/BlogEntry
    //#presumption(void commentApproved(CommentEvent)): comment.blogEntry.blog.__Tag@77 == net/sourceforge/pebble/domain/Blog
    //#presumption(void commentApproved(CommentEvent)): comment.blogEntry.blog.decoratorChain.__Tag@77 == net/sourceforge/pebble/decorator/ContentDecoratorChain
    //#presumption(void commentApproved(CommentEvent)): comment.blogEntry.blog.decoratorChain.decorators@77 != null
    //#presumption(void commentApproved(CommentEvent)): comment.blogEntry.blog.decoratorChain@77 != null
    //#presumption(void commentApproved(CommentEvent)): comment.blogEntry.blog.permalinkProvider.__Tag@77 == net/sourceforge/pebble/api/permalink/PermalinkProvider
    //#presumption(void commentApproved(CommentEvent)): comment.blogEntry.blog.permalinkProvider@77 != null
    //#presumption(void commentApproved(CommentEvent)): comment.blogEntry.blog.properties@77 != null
    //#presumption(void commentApproved(CommentEvent)): comment.blogEntry.blog@77 != null
    //#presumption(void commentApproved(CommentEvent)): comment.blogEntry.comments@77 != null
    //#presumption(void commentApproved(CommentEvent)): comment.blogEntry@77 != null
    //#presumption(void commentApproved(CommentEvent)): comment.date@77 != null
    //#presumption(void commentApproved(CommentEvent)): net.sourceforge.pebble.api.event.comment.CommentEvent:getSource(...)@72 != null
    //#presumption(void commentApproved(CommentEvent)): net.sourceforge.pebble.api.event.comment.CommentEvent:getSource(...)@72.__Tag != net/sourceforge/pebble/domain/BlogManager
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getBlogEntry
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getBlog
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.text.SimpleDateFormat
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getTimeZone
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.text.SimpleDateFormat:setTimeZone
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getTitle
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getAuthor
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:transformHTML
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getWebsite
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getDate
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.text.SimpleDateFormat:format
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getBody
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getPermalink
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getUrl
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getEmailAddresses
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.Collection:addAll
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.util.MailUtils:createSession
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.Exception:printStackTrace
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getContentDecoratorChain
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:decorate
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getId
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getComments
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getEmail
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.Collection:add
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.String:replaceAll
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.util.MailUtils:sendMail
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.Properties:getProperty
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.TimeZone:getTimeZone
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getLocalPermalink
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.Date:getTime
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getUser
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.security.PebbleUserDetails:getEmailAddress
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.Arrays:asList
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.api.event.comment.CommentEvent:getSource
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.regex.Pattern:matcher
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.regex.Matcher:find
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.regex.Matcher:start
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.regex.Matcher:end
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.String:toLowerCase
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:setBody
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:filterHTML
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:transformToHTMLSubset
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:setAuthor
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:setWebsite
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:setEmail
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:setTitle
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getPermalinkProvider
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:getSecurityRealm
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.security.SecurityRealm:getUser
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void commentApproved(CommentEvent)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getTitle
    sendNotification(comment);
    //#abstractemailnotificationlistener.java:78: ?precondition failure
    //#    net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendNotification: comment.__Tag == net/sourceforge/pebble/domain/Comment
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void commentApproved(CommentEvent)
    //#    basic block: Entry_BB_1
    //#    assertion: net.sourceforge.pebble.api.event.comment.CommentEvent:getSource(...)@72.__Tag == net/sourceforge/pebble/domain/Comment
    //#    callee: void net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendNotification(Comment)
    //#    callee assertion: comment.__Tag == net/sourceforge/pebble/domain/Comment
    //#    callee file: abstractemailnotificationlistener.java
    //#    callee precondition index: [2]
    //#    callee srcpos: 82
    //#    VN: net.sourceforge.pebble.api.event.comment.CommentEvent:getSource(...)@72.__Tag
    //#    Expected: {793_344}
    //#    Bad: {0..790_783, 790_785..793_343, 793_345..+Inf}
    //#    Attribs:  Int  Exp singleton  Bad overlaps +/-1000  Bad < Exp  Bad > Exp  Uncertain
    //#abstractemailnotificationlistener.java:78: ?precondition failure
    //#    net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendNotification: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void commentApproved(CommentEvent)
    //#    basic block: Entry_BB_1
    //#    assertion: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    callee: void net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendNotification(Comment)
    //#    callee assertion: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    callee file: abstractemailnotificationlistener.java
    //#    callee precondition index: [21]
    //#    callee srcpos: 82
    //#    VN: net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#    Expected: {790_784}
    //#    Bad: {793_344}
    //#    Attribs:  Int  Exp singleton  Bad singleton  Soft  Bad > Exp  Uncertain
    //#abstractemailnotificationlistener.java:78: ?precondition failure
    //#    net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendNotification: this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void commentApproved(CommentEvent)
    //#    basic block: Entry_BB_1
    //#    assertion: this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#    callee: void net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener.sendNotification(Comment)
    //#    callee assertion: this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#    callee file: abstractemailnotificationlistener.java
    //#    callee precondition index: [31]
    //#    callee srcpos: 82
    //#    VN: this.__Tag
    //#    Expected: {810_752, 812_032, 812_544}
    //#    Bad: {793_344}
    //#    Attribs:  Int  Bad singleton  Bad < Exp  Uncertain
  }
    //#abstractemailnotificationlistener.java:79: end of method: void net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.commentApproved(CommentEvent)

  private void sendNotification(Comment comment) {
    Blog blog = comment.getBlogEntry().getBlog();
    //#abstractemailnotificationlistener.java:82: method: void net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.sendNotification(Comment)
    //#abstractemailnotificationlistener.java:82: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void sendNotification(Comment)
    //#    suspicious precondition index: [31]
    //#input(void sendNotification(Comment)): __Descendant_Table[net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener]
    //#input(void sendNotification(Comment)): __Descendant_Table[net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener]
    //#input(void sendNotification(Comment)): __Descendant_Table[net/sourceforge/pebble/event/comment/EmailNotificationListener]
    //#input(void sendNotification(Comment)): __Descendant_Table[others]
    //#input(void sendNotification(Comment)): __Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void sendNotification(Comment)): comment
    //#input(void sendNotification(Comment)): comment.__Tag
    //#input(void sendNotification(Comment)): comment.author
    //#input(void sendNotification(Comment)): comment.blogEntry
    //#input(void sendNotification(Comment)): comment.blogEntry.__Tag
    //#input(void sendNotification(Comment)): comment.blogEntry.blog
    //#input(void sendNotification(Comment)): comment.blogEntry.blog.__Tag
    //#input(void sendNotification(Comment)): comment.blogEntry.blog.decoratorChain
    //#input(void sendNotification(Comment)): comment.blogEntry.blog.decoratorChain.__Tag
    //#input(void sendNotification(Comment)): comment.blogEntry.blog.decoratorChain.decorators
    //#input(void sendNotification(Comment)): comment.blogEntry.blog.id
    //#input(void sendNotification(Comment)): comment.blogEntry.blog.permalinkProvider
    //#input(void sendNotification(Comment)): comment.blogEntry.blog.permalinkProvider.__Tag
    //#input(void sendNotification(Comment)): comment.blogEntry.blog.properties
    //#input(void sendNotification(Comment)): comment.blogEntry.comments
    //#input(void sendNotification(Comment)): comment.blogEntry.id
    //#input(void sendNotification(Comment)): comment.blogEntry.permalink
    //#input(void sendNotification(Comment)): comment.blogEntry.title
    //#input(void sendNotification(Comment)): comment.body
    //#input(void sendNotification(Comment)): comment.date
    //#input(void sendNotification(Comment)): comment.title
    //#input(void sendNotification(Comment)): comment.website
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getSecurityRealm()Lnet/sourceforge/pebble/security/SecurityRealm;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/Configuration.__Dispatch_Table.isVirtualHostingEnabled()Z
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/api/decorator/ContentDecorator.__Descendant_Table[others]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/api/decorator/ContentDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Descendant_Table[net/sourceforge/pebble/api/decorator/ContentDecoratorContext]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Dispatch_Table.setMedia(I)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/api/decorator/ContentDecoratorContext.__Dispatch_Table.setView(I)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[net/sourceforge/pebble/api/permalink/PermalinkProvider]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[others]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Dispatch_Table.getPermalink(Lnet/sourceforge/pebble/domain/BlogEntry;)Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/AbstractTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/BlogCategoriesDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/BlogTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/ContentDecoratorChain.__Descendant_Table[net/sourceforge/pebble/decorator/ContentDecoratorChain]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/ContentDecoratorChain.__Descendant_Table[others]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/ContentDecoratorChain.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/ContentDecoratorSupport.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/DisableCommentsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/DisableResponseDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/DisableTrackBacksDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/EntryToPdfDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/EscapeMarkupDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/ExcerptDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/HideUnapprovedResponsesDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/HtmlDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/NoFollowDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/PhotoDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/RadeoxDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/ReadMoreDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/RelatedPostsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/RelativeUriDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/SocialBookmarksDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/StaticPageTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/TechnoratiTagsDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/decorator/TrackBackAutoDiscoveryDecorator.__Dispatch_Table.decorate(Lnet/sourceforge/pebble/api/decorator/ContentDecoratorContext;Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/AbstractBlog]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/MultiBlog]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[others]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getContentDecoratorChain()Lnet/sourceforge/pebble/decorator/ContentDecoratorChain;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmail()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmailAddresses()Ljava/util/Collection;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getPermalinkProvider()Lnet/sourceforge/pebble/api/permalink/PermalinkProvider;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZone()Ljava/util/TimeZone;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getComments()Ljava/util/List;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getUser()Lnet/sourceforge/pebble/security/PebbleUserDetails;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[others]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogManager.__Dispatch_Table.isMultiBlog()Z
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogManager.instance
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/BlogManager.instance.multiBlog
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[others]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getBody()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getComments()Ljava/util/List;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getEmail()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getId()J
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getPermalink()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getWebsite()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setBody(Ljava/lang/String;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setEmail(Ljava/lang/String;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setTitle(Ljava/lang/String;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.setWebsite(Ljava/lang/String;)V
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[others]
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/PageBasedContent.log
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void sendNotification(Comment)): net/sourceforge/pebble/event/comment/EmailNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void sendNotification(Comment)): this
    //#input(void sendNotification(Comment)): this.__Tag
    //#output(void sendNotification(Comment)): comment.author
    //#output(void sendNotification(Comment)): comment.blogEntry.permalink
    //#output(void sendNotification(Comment)): comment.blogEntry.user
    //#output(void sendNotification(Comment)): comment.body
    //#output(void sendNotification(Comment)): comment.email
    //#output(void sendNotification(Comment)): comment.title
    //#output(void sendNotification(Comment)): comment.website
    //#pre[1] (void sendNotification(Comment)): comment != null
    //#pre[2] (void sendNotification(Comment)): comment.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[3] (void sendNotification(Comment)): comment.blogEntry != null
    //#pre[4] (void sendNotification(Comment)): comment.blogEntry.__Tag == net/sourceforge/pebble/domain/BlogEntry
    //#pre[6] (void sendNotification(Comment)): comment.blogEntry.blog != null
    //#pre[7] (void sendNotification(Comment)): comment.blogEntry.blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[8] (void sendNotification(Comment)): comment.blogEntry.blog.decoratorChain != null
    //#pre[9] (void sendNotification(Comment)): comment.blogEntry.blog.decoratorChain.__Tag == net/sourceforge/pebble/decorator/ContentDecoratorChain
    //#pre[10] (void sendNotification(Comment)): comment.blogEntry.blog.decoratorChain.decorators != null
    //#pre[14] (void sendNotification(Comment)): comment.blogEntry.blog.properties != null
    //#pre[15] (void sendNotification(Comment)): comment.blogEntry.comments != null
    //#pre[16] (void sendNotification(Comment)): init'ed(comment.blogEntry.id)
    //#pre[17] (void sendNotification(Comment)): init'ed(comment.blogEntry.title)
    //#pre[23] (void sendNotification(Comment)): init'ed(comment.author)
    //#pre[26] (void sendNotification(Comment)): init'ed(comment.body)
    //#pre[28] (void sendNotification(Comment)): init'ed(comment.title)
    //#pre[29] (void sendNotification(Comment)): init'ed(comment.website)
    //#pre[31] (void sendNotification(Comment)): this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#pre[11] (void sendNotification(Comment)): (soft) init'ed(comment.blogEntry.blog.id)
    //#pre[12] (void sendNotification(Comment)): (soft) comment.blogEntry.blog.permalinkProvider != null
    //#pre[13] (void sendNotification(Comment)): (soft) comment.blogEntry.blog.permalinkProvider.__Tag == net/sourceforge/pebble/api/permalink/PermalinkProvider
    //#pre[18] (void sendNotification(Comment)): (soft) comment.date != null
    //#pre[20] (void sendNotification(Comment)): (soft) net/sourceforge/pebble/domain/BlogManager.instance != null
    //#pre[21] (void sendNotification(Comment)): (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#pre[22] (void sendNotification(Comment)): (soft) init'ed(net/sourceforge/pebble/domain/BlogManager.instance.multiBlog)
    //#pre[24] (void sendNotification(Comment)): (soft) init'ed(comment.blogEntry.permalink)
    //#presumption(void sendNotification(Comment)): java.util.Iterator:next(...).__Tag@112 == net/sourceforge/pebble/domain/Comment
    //#presumption(void sendNotification(Comment)): java.util.Iterator:next(...)@112 != null
    //#post(void sendNotification(Comment)): init'ed(comment.author)
    //#post(void sendNotification(Comment)): init'ed(comment.blogEntry.permalink)
    //#post(void sendNotification(Comment)): possibly_updated(comment.blogEntry.user)
    //#post(void sendNotification(Comment)): init'ed(comment.body)
    //#post(void sendNotification(Comment)): possibly_updated(comment.email)
    //#post(void sendNotification(Comment)): init'ed(comment.title)
    //#post(void sendNotification(Comment)): init'ed(comment.website)
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getBlogEntry
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getBlog
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getTitle
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getAuthor
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getWebsite
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getBody
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getUrl
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getEmailAddresses
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.Collection:addAll
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getEmail
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.Properties:getProperty
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.TimeZone:getTimeZone
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getId
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getLocalPermalink
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.Date:getTime
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getUser
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:net.sourceforge.pebble.security.PebbleUserDetails:getEmailAddress
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.Collection:add
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.Arrays:asList
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:decorate
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.regex.Pattern:matcher
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.regex.Matcher:find
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.regex.Matcher:start
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.regex.Matcher:end
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.String:toLowerCase
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:setBody
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:filterHTML
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:transformHTML
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:transformToHTMLSubset
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:setAuthor
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:setWebsite
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:setEmail
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:setTitle
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getComments
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getPermalinkProvider
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getPermalink
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:getSecurityRealm
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:net.sourceforge.pebble.security.SecurityRealm:getUser
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void sendNotification(Comment)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getTitle
    //#test_vector(void sendNotification(Comment)): blogComment.email@112: Addr_Set{null}, Inverse{null}
    //#test_vector(void sendNotification(Comment)): java.lang.String:length(...)@113: {0}, {1..4_294_967_295}
    //#test_vector(void sendNotification(Comment)): java.util.Iterator:hasNext(...)@111: {1}, {0}

    ContentDecoratorContext context = new ContentDecoratorContext();
    context.setView(ContentDecoratorContext.DETAIL_VIEW);
    context.setMedia(ContentDecoratorContext.EMAIL);

    blog.getContentDecoratorChain().decorate(context, comment);

    SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
    sdf.setTimeZone(blog.getTimeZone());

    String subject = "[Comment] " + comment.getTitle();
    String author = StringUtils.transformHTML(comment.getAuthor());
    //#abstractemailnotificationlistener.java:94: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.util.StringUtils:transformHTML(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void sendNotification(Comment)
    //#    unanalyzed callee: String net.sourceforge.pebble.util.StringUtils:transformHTML(String)
    if (comment.getWebsite() != null) {
      author = "<a href=\"" + comment.getWebsite() + "\">" + author + "</a>";
    }

    String message = "Comment from " + author + " on " + sdf.format(comment.getDate());
    message += " in response to " + comment.getBlogEntry().getTitle();
    message += "\n\n<br><br>";
    message += comment.getBody();
    message += "\n\n<br><br>";
    message += "<a href=\"" + comment.getPermalink() + "\">Permalink</a>";
    message += " | ";
    message += "<a href=\"" + blog.getUrl() + "removeEmailAddress.action?entry=" + comment.getBlogEntry().getId() + "&email=" + EMAIL_ADDRESS_TOKEN + "\">Opt-out</a>";

    Collection to = getEmailAddresses(comment);
    //#abstractemailnotificationlistener.java:108: Warning: method not available
    //#    -- call on Collection getEmailAddresses(Comment)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void sendNotification(Comment)
    //#    unanalyzed callee: Collection getEmailAddresses(Comment)
    Iterator it = comment.getBlogEntry().getComments().iterator();
    Comment blogComment;
    while (it.hasNext()) {
      blogComment = (Comment)it.next();
      if (blogComment.getEmail() != null && blogComment.getEmail().length() > 0) {
        to.add(blogComment.getEmail());
      }
    }

    // now send personalized e-mails to the blog owner and everybody
    // that left a comment specifying their e-mail address
    try {
      Session session = MailUtils.createSession();
    //#abstractemailnotificationlistener.java:121: Warning: method not available
    //#    -- call on Session net.sourceforge.pebble.util.MailUtils:createSession()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void sendNotification(Comment)
    //#    unanalyzed callee: Session net.sourceforge.pebble.util.MailUtils:createSession()
      Iterator emailAddresses = to.iterator();
      while (emailAddresses.hasNext()) {
        String emailAddress = (String)emailAddresses.next();

        // customize the opt-out link and send the message
        MailUtils.sendMail(session, blog, emailAddress, subject,
    //#abstractemailnotificationlistener.java:127: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.util.MailUtils:sendMail(Session, Blog, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void sendNotification(Comment)
    //#    unanalyzed callee: void net.sourceforge.pebble.util.MailUtils:sendMail(Session, Blog, String, String, String)
            message.replaceAll(EMAIL_ADDRESS_TOKEN, emailAddress));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
    //#abstractemailnotificationlistener.java:133: end of method: void net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.sendNotification(Comment)

  private void sendApprovalRequest(Comment comment) {
    Blog blog = comment.getBlogEntry().getBlog();
    //#abstractemailnotificationlistener.java:136: method: void net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.sendApprovalRequest(Comment)
    //#abstractemailnotificationlistener.java:136: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void sendApprovalRequest(Comment)
    //#    suspicious precondition index: [27]
    //#input(void sendApprovalRequest(Comment)): __Descendant_Table[net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener]
    //#input(void sendApprovalRequest(Comment)): __Descendant_Table[net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener]
    //#input(void sendApprovalRequest(Comment)): __Descendant_Table[net/sourceforge/pebble/event/comment/EmailNotificationListener]
    //#input(void sendApprovalRequest(Comment)): __Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): __Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void sendApprovalRequest(Comment)): comment
    //#input(void sendApprovalRequest(Comment)): comment.__Tag
    //#input(void sendApprovalRequest(Comment)): comment.author
    //#input(void sendApprovalRequest(Comment)): comment.blogEntry
    //#input(void sendApprovalRequest(Comment)): comment.blogEntry.__Tag
    //#input(void sendApprovalRequest(Comment)): comment.blogEntry.blog
    //#input(void sendApprovalRequest(Comment)): comment.blogEntry.blog.__Tag
    //#input(void sendApprovalRequest(Comment)): comment.blogEntry.blog.id
    //#input(void sendApprovalRequest(Comment)): comment.blogEntry.blog.permalinkProvider
    //#input(void sendApprovalRequest(Comment)): comment.blogEntry.blog.permalinkProvider.__Tag
    //#input(void sendApprovalRequest(Comment)): comment.blogEntry.blog.properties
    //#input(void sendApprovalRequest(Comment)): comment.blogEntry.permalink
    //#input(void sendApprovalRequest(Comment)): comment.blogEntry.title
    //#input(void sendApprovalRequest(Comment)): comment.body
    //#input(void sendApprovalRequest(Comment)): comment.date
    //#input(void sendApprovalRequest(Comment)): comment.state
    //#input(void sendApprovalRequest(Comment)): comment.state.__Tag
    //#input(void sendApprovalRequest(Comment)): comment.state.name
    //#input(void sendApprovalRequest(Comment)): comment.title
    //#input(void sendApprovalRequest(Comment)): comment.website
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getSecurityRealm()Lnet/sourceforge/pebble/security/SecurityRealm;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/Configuration.__Dispatch_Table.isVirtualHostingEnabled()Z
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[net/sourceforge/pebble/api/permalink/PermalinkProvider]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Dispatch_Table.getPermalink(Lnet/sourceforge/pebble/domain/BlogEntry;)Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/AbstractBlog]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/MultiBlog]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmail()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmailAddresses()Ljava/util/Collection;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getPermalinkProvider()Lnet/sourceforge/pebble/api/permalink/PermalinkProvider;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZone()Ljava/util/TimeZone;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getUser()Lnet/sourceforge/pebble/security/PebbleUserDetails;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogManager.__Dispatch_Table.isMultiBlog()Z
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogManager.instance
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/BlogManager.instance.multiBlog
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getBody()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getGuid()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getId()J
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getPermalink()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getWebsite()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/PageBasedContent.log
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Response]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Response.__Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getId()J
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/State.__Descendant_Table[net/sourceforge/pebble/domain/State]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/State.__Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/State.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[others]
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getId()J
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void sendApprovalRequest(Comment)): net/sourceforge/pebble/event/comment/EmailNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#input(void sendApprovalRequest(Comment)): this
    //#input(void sendApprovalRequest(Comment)): this.__Tag
    //#output(void sendApprovalRequest(Comment)): comment.blogEntry.permalink
    //#output(void sendApprovalRequest(Comment)): comment.blogEntry.user
    //#pre[1] (void sendApprovalRequest(Comment)): comment != null
    //#pre[2] (void sendApprovalRequest(Comment)): comment.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[3] (void sendApprovalRequest(Comment)): init'ed(comment.author)
    //#pre[4] (void sendApprovalRequest(Comment)): comment.blogEntry != null
    //#pre[5] (void sendApprovalRequest(Comment)): comment.blogEntry.__Tag == net/sourceforge/pebble/domain/BlogEntry
    //#pre[7] (void sendApprovalRequest(Comment)): comment.blogEntry.blog != null
    //#pre[8] (void sendApprovalRequest(Comment)): comment.blogEntry.blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[12] (void sendApprovalRequest(Comment)): comment.blogEntry.blog.properties != null
    //#pre[13] (void sendApprovalRequest(Comment)): init'ed(comment.blogEntry.title)
    //#pre[14] (void sendApprovalRequest(Comment)): init'ed(comment.body)
    //#pre[15] (void sendApprovalRequest(Comment)): comment.date != null
    //#pre[16] (void sendApprovalRequest(Comment)): comment.state != null
    //#pre[17] (void sendApprovalRequest(Comment)): comment.state.__Tag == net/sourceforge/pebble/domain/State
    //#pre[18] (void sendApprovalRequest(Comment)): init'ed(comment.state.name)
    //#pre[19] (void sendApprovalRequest(Comment)): init'ed(comment.title)
    //#pre[20] (void sendApprovalRequest(Comment)): init'ed(comment.website)
    //#pre[27] (void sendApprovalRequest(Comment)): this.__Tag in {net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener, net/sourceforge/pebble/event/comment/EmailAuthorNotificationListener, net/sourceforge/pebble/event/comment/EmailNotificationListener}
    //#pre[9] (void sendApprovalRequest(Comment)): (soft) init'ed(comment.blogEntry.blog.id)
    //#pre[10] (void sendApprovalRequest(Comment)): (soft) comment.blogEntry.blog.permalinkProvider != null
    //#pre[11] (void sendApprovalRequest(Comment)): (soft) comment.blogEntry.blog.permalinkProvider.__Tag == net/sourceforge/pebble/api/permalink/PermalinkProvider
    //#pre[21] (void sendApprovalRequest(Comment)): (soft) net/sourceforge/pebble/domain/BlogManager.instance != null
    //#pre[22] (void sendApprovalRequest(Comment)): (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#pre[23] (void sendApprovalRequest(Comment)): (soft) init'ed(net/sourceforge/pebble/domain/BlogManager.instance.multiBlog)
    //#pre[24] (void sendApprovalRequest(Comment)): (soft) init'ed(comment.blogEntry.permalink)
    //#post(void sendApprovalRequest(Comment)): init'ed(comment.blogEntry.permalink)
    //#post(void sendApprovalRequest(Comment)): possibly_updated(comment.blogEntry.user)
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:getBlogEntry
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:getBlog
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:getUrl
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:getEmailAddresses
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.util.Collection:addAll
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.util.Properties:getProperty
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.util.TimeZone:getTimeZone
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:getId
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:getLocalPermalink
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.util.Date:getTime
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getId
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:getUser
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:net.sourceforge.pebble.security.PebbleUserDetails:getEmailAddress
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.util.Collection:add
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:java.util.Arrays:asList
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:getPermalinkProvider
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:getPermalink
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:getSecurityRealm
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:net.sourceforge.pebble.security.SecurityRealm:getUser
    //#unanalyzed(void sendApprovalRequest(Comment)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#test_vector(void sendApprovalRequest(Comment)): comment.website: Addr_Set{null}, Inverse{null}

    SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
    sdf.setTimeZone(blog.getTimeZone());

    String subject = "[Comment-" + comment.getState().getName() + "] " + comment.getTitle();
    String author = StringUtils.transformHTML(comment.getAuthor());
    //#abstractemailnotificationlistener.java:142: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.util.StringUtils:transformHTML(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void sendApprovalRequest(Comment)
    //#    unanalyzed callee: String net.sourceforge.pebble.util.StringUtils:transformHTML(String)
    if (comment.getWebsite() != null) {
      author = "<a href=\"" + comment.getWebsite() + "\">" + author + "</a>";
    }

    String message = "Comment from " + author + " on " + sdf.format(comment.getDate());
    message += " in response to " + comment.getBlogEntry().getTitle();
    message += "\n\n<br><br>";
    message += comment.getBody();
    message += "\n\n<br><br>";
    message += "<a href=\"" + comment.getPermalink() + "\">Permalink</a>";
    message += " | ";
    message += "<a href=\"" + blog.getUrl() + "manageResponses.secureaction?response=" + comment.getGuid() + "&submit=Approve" + "\">Approve</a>";
    message += " | ";
    message += "<a href=\"" + blog.getUrl() + "manageResponses.secureaction?response=" + comment.getGuid() + "&submit=Reject" + "\">Reject</a>";
    message += " | ";
    message += "<a href=\"" + blog.getUrl() + "manageResponses.secureaction?response=" + comment.getGuid() + "&submit=Remove" + "\">Remove</a>";

    Collection to = getEmailAddresses(comment);
    //#abstractemailnotificationlistener.java:160: Warning: method not available
    //#    -- call on Collection getEmailAddresses(Comment)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void sendApprovalRequest(Comment)
    //#    unanalyzed callee: Collection getEmailAddresses(Comment)

    try {
      MailUtils.sendMail(MailUtils.createSession(), blog, to, subject, message);
    //#abstractemailnotificationlistener.java:163: Warning: method not available
    //#    -- call on Session net.sourceforge.pebble.util.MailUtils:createSession()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void sendApprovalRequest(Comment)
    //#    unanalyzed callee: Session net.sourceforge.pebble.util.MailUtils:createSession()
    //#abstractemailnotificationlistener.java:163: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.util.MailUtils:sendMail(Session, Blog, Collection, String, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
    //#    method: void sendApprovalRequest(Comment)
    //#    unanalyzed callee: void net.sourceforge.pebble.util.MailUtils:sendMail(Session, Blog, Collection, String, String)
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
    //#abstractemailnotificationlistener.java:167: end of method: void net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.sendApprovalRequest(Comment)

  /**
   * Returns the collection of recipients.
   *
   * @param comment   the Comment from the event
   * @return  a Collection of e-mail addresses (Strings)
   */
  protected abstract Collection getEmailAddresses(Comment comment);

}
    //#output(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Descendant_Table[net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener]
    //#output(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.commentAdded(Lnet/sourceforge/pebble/api/event/comment/CommentEvent;)V
    //#output(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.commentApproved(Lnet/sourceforge/pebble/api/event/comment/CommentEvent;)V
    //#output(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.commentRejected(Lnet/sourceforge/pebble/api/event/comment/CommentEvent;)V
    //#output(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.commentRemoved(Lnet/sourceforge/pebble/api/event/comment/CommentEvent;)V
    //#output(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection;
    //#output(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.sendApprovalRequest(Lnet/sourceforge/pebble/domain/Comment;)V
    //#output(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.sendNotification(Lnet/sourceforge/pebble/domain/Comment;)V
    //#output(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): net/sourceforge/pebble/api/event/comment/CommentListener.__Descendant_Table[net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener]
    //#output(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): net/sourceforge/pebble/event/comment/CommentListenerSupport.__Descendant_Table[net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener]
    //#post(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Descendant_Table[net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): net/sourceforge/pebble/api/event/comment/CommentListener.__Descendant_Table[net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): net/sourceforge/pebble/event/comment/CommentListenerSupport.__Descendant_Table[net/sourceforge/pebble/event/comment/AbstractEmailNotificationListener] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.commentAdded(Lnet/sourceforge/pebble/api/event/comment/CommentEvent;)V == &commentAdded
    //#post(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.commentApproved(Lnet/sourceforge/pebble/api/event/comment/CommentEvent;)V == &commentApproved
    //#post(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.commentRejected(Lnet/sourceforge/pebble/api/event/comment/CommentEvent;)V == &net/sourceforge/pebble/event/comment/CommentListenerSupport.commentRejected
    //#post(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.commentRemoved(Lnet/sourceforge/pebble/api/event/comment/CommentEvent;)V == &net/sourceforge/pebble/event/comment/CommentListenerSupport.commentRemoved
    //#post(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/Comment;)Ljava/util/Collection; == &getEmailAddresses
    //#post(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.sendApprovalRequest(Lnet/sourceforge/pebble/domain/Comment;)V == &sendApprovalRequest
    //#post(net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init): __Dispatch_Table.sendNotification(Lnet/sourceforge/pebble/domain/Comment;)V == &sendNotification
    //#abstractemailnotificationlistener.java:: end of method: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener.net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener__static_init
    //#abstractemailnotificationlistener.java:: end of class: net.sourceforge.pebble.event.comment.AbstractEmailNotificationListener
