//# 1 errors, 896 messages
//#
/*
    //#comment.java:1:1: class: net.sourceforge.pebble.domain.Comment
    //#comment.java:1:1: method: net.sourceforge.pebble.domain.Comment.net.sourceforge.pebble.domain.Comment__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.domain;

import net.sourceforge.pebble.api.event.comment.CommentEvent;
import net.sourceforge.pebble.util.StringUtils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Represents a blog comment.
 *
 * @author    Simon Brown
 */
public class Comment extends Response {

  /** the body of the comment */
  private String body;

  /** the name of the author */
  private String author;

  /** the author's e-mail address */
  private String email;

  /** the author's website */
  private String website;

  /** the parent comment, if applicable */
  private Comment parent;

  /** the collection of nested comments */
  private List comments = new ArrayList();

  /** a flag to indicate whether the user was authenticated when the comment was left */
  private boolean authenticated = false;

  public Comment() {
    //#comment.java:69: method: void net.sourceforge.pebble.domain.Comment.net.sourceforge.pebble.domain.Comment()
    //#input(void net.sourceforge.pebble.domain.Comment()): this
    //#output(void net.sourceforge.pebble.domain.Comment()): new ArrayList(Comment#1) num objects
    //#output(void net.sourceforge.pebble.domain.Comment()): new ArrayList(Content#1) num objects
    //#output(void net.sourceforge.pebble.domain.Comment()): new ArrayList(Content#3) num objects
    //#output(void net.sourceforge.pebble.domain.Comment()): new PropertyChangeSupport(Content#2) num objects
    //#output(void net.sourceforge.pebble.domain.Comment()): this.authenticated
    //#output(void net.sourceforge.pebble.domain.Comment()): this.comments
    //#output(void net.sourceforge.pebble.domain.Comment()): this.events
    //#output(void net.sourceforge.pebble.domain.Comment()): this.eventsEnabled
    //#output(void net.sourceforge.pebble.domain.Comment()): this.propertyChangeEvents
    //#output(void net.sourceforge.pebble.domain.Comment()): this.propertyChangeSupport
    //#output(void net.sourceforge.pebble.domain.Comment()): this.spamScore
    //#new obj(void net.sourceforge.pebble.domain.Comment()): new ArrayList(Comment#1)
    //#new obj(void net.sourceforge.pebble.domain.Comment()): new ArrayList(Content#1)
    //#new obj(void net.sourceforge.pebble.domain.Comment()): new ArrayList(Content#3)
    //#new obj(void net.sourceforge.pebble.domain.Comment()): new PropertyChangeSupport(Content#2)
    //#post(void net.sourceforge.pebble.domain.Comment()): this.authenticated == 0
    //#post(void net.sourceforge.pebble.domain.Comment()): this.spamScore == 0
    //#post(void net.sourceforge.pebble.domain.Comment()): this.comments == &new ArrayList(Comment#1)
    //#post(void net.sourceforge.pebble.domain.Comment()): this.events == &new ArrayList(Content#1)
    //#post(void net.sourceforge.pebble.domain.Comment()): init'ed(this.eventsEnabled)
    //#post(void net.sourceforge.pebble.domain.Comment()): this.propertyChangeEvents == &new ArrayList(Content#3)
    //#post(void net.sourceforge.pebble.domain.Comment()): this.propertyChangeSupport == &new PropertyChangeSupport(Content#2)
    //#post(void net.sourceforge.pebble.domain.Comment()): new ArrayList(Comment#1) num objects == 1
    //#post(void net.sourceforge.pebble.domain.Comment()): new ArrayList(Content#1) num objects == 1
    //#post(void net.sourceforge.pebble.domain.Comment()): new ArrayList(Content#3) num objects == 1
    //#post(void net.sourceforge.pebble.domain.Comment()): new PropertyChangeSupport(Content#2) num objects == 1
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment()): Effects-of-calling:net.sourceforge.pebble.domain.Content
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment()): Effects-of-calling:java.beans.PropertyChangeSupport
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment()): Effects-of-calling:java.beans.PropertyChangeSupport:addPropertyChangeListener
  }
    //#comment.java:70: end of method: void net.sourceforge.pebble.domain.Comment.net.sourceforge.pebble.domain.Comment()

  /**
   * Creates a new comment with the specified properties.
   *
   * @param title        the comment title
   * @param body        the comment body
   * @param author      the name of the author
   * @param website     the author's website
   * @param ipAddress the IP address of the author
   * @param date        the date that this comment was left
   * @param state       the state of the comment
   * @param blogEntry   the owning blog entry
   */
  Comment(String title, String body, String author, String email, String website, String ipAddress, Date date, State state, BlogEntry blogEntry) {
    super(title, ipAddress, date, state, blogEntry);
    //#comment.java:85: method: void net.sourceforge.pebble.domain.Comment.net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Descendant_Table[others]
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.areEventsEnabled()Z
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.isApproved()Z
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.isRejected()Z
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.setBody(Ljava/lang/String;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.setEmail(Ljava/lang/String;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.setIpAddress(Ljava/lang/String;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.setTitle(Ljava/lang/String;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): __Dispatch_Table.setWebsite(Ljava/lang/String;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): author
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): blogEntry
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): body
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): date
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): email
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): ipAddress
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#1).__Tag
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#2).__Tag
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Response]
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/Response.__Descendant_Table[others]
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.setIpAddress(Ljava/lang/String;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.setTitle(Ljava/lang/String;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/State.APPROVED
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/State.REJECTED
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/State.__Descendant_Table[net/sourceforge/pebble/domain/State]
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/State.__Descendant_Table[others]
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/State.__Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/State.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[others]
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.areEventsEnabled()Z
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.isApproved()Z
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.isRejected()Z
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.setIpAddress(Ljava/lang/String;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.setTitle(Ljava/lang/String;)V
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): state
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): state.__Tag
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.__Tag
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): title
    //#input(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): website
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new ArrayList(Comment#1) num objects
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new ArrayList(Content#1) num objects
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new ArrayList(Content#3) num objects
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new PropertyChangeSupport(Content#2) num objects
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.__Tag
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.authenticated
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.author
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.blogEntry
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.body
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.comments
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.date
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.email
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.events
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.eventsEnabled
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.ipAddress
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.propertyChangeEvents
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.propertyChangeSupport
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.spamScore
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.state
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.title
    //#output(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.website
    //#new obj(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new ArrayList(Comment#1)
    //#new obj(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new ArrayList(Content#1)
    //#new obj(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new ArrayList(Content#3)
    //#new obj(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new PropertyChangeSupport(Content#2)
    //#pre[2] (void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): blogEntry != null
    //#pre[9] (void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.__Tag == net/sourceforge/pebble/domain/Comment
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.__Tag == net/sourceforge/pebble/domain/Comment
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): init'ed(this.authenticated)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.author == One-of{&"Anonymous", author}
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.author != null
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.blogEntry == blogEntry
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.blogEntry != null
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.body == One-of{null, body}
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): init'ed(this.body)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.comments == &new ArrayList(Comment#1)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): init'ed(this.date)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): init'ed(this.email)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.events == &new ArrayList(Content#1)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): init'ed(this.eventsEnabled)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.ipAddress == One-of{null, ipAddress}
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): init'ed(this.ipAddress)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.propertyChangeEvents == &new ArrayList(Content#3)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): this.propertyChangeSupport == &new PropertyChangeSupport(Content#2)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): init'ed(this.spamScore)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): possibly_updated(this.state)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): possibly_updated(this.title)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): init'ed(this.website)
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new ArrayList(Comment#1) num objects == 1
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new ArrayList(Content#1) num objects == 1
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new ArrayList(Content#3) num objects == 1
    //#post(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): new PropertyChangeSupport(Content#2) num objects == 1
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getTitle
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:filterHTML
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:transformHTML
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:areEventsEnabled
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:getBlogEntry
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.util.EventObject
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:net.sourceforge.pebble.api.event.PebbleEvent
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:addEvent
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:getState
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:setState
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:isApproved
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:isRejected
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:net.sourceforge.pebble.domain.Content
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.util.Date
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBlog
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCalendar
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.util.Calendar:setTime
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.util.Calendar:getTime
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.beans.PropertyChangeSupport
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:java.beans.PropertyChangeSupport:addPropertyChangeListener
    //#unanalyzed(void net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)): Effects-of-calling:net.sourceforge.pebble.domain.Response:setState

    setBody(body);
    setAuthor(author);
    setEmail(email);
    setWebsite(website);
  }
    //#comment.java:91: end of method: void net.sourceforge.pebble.domain.Comment.net.sourceforge.pebble.domain.Comment(String, String, String, String, String, String, Date, State, BlogEntry)

  /**
   * Gets the body of this comment.
   *
   * @return    the body of this comment as a String
   */
  public String getBody() {
    return body;
    //#comment.java:99: method: String net.sourceforge.pebble.domain.Comment.getBody()
    //#input(String getBody()): this
    //#input(String getBody()): this.body
    //#output(String getBody()): return_value
    //#pre[2] (String getBody()): init'ed(this.body)
    //#post(String getBody()): return_value == this.body
    //#post(String getBody()): init'ed(return_value)
    //#comment.java:99: end of method: String net.sourceforge.pebble.domain.Comment.getBody()
  }

  /**
   * Gets the content of this response.
   *
   * @return a String
   */
  public String getContent() {
    return getBody();
    //#comment.java:108: method: String net.sourceforge.pebble.domain.Comment.getContent()
    //#input(String getContent()): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(String getContent()): __Descendant_Table[others]
    //#input(String getContent()): __Dispatch_Table.getBody()Ljava/lang/String;
    //#input(String getContent()): this
    //#input(String getContent()): this.__Tag
    //#input(String getContent()): this.body
    //#output(String getContent()): return_value
    //#pre[2] (String getContent()): this.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[3] (String getContent()): init'ed(this.body)
    //#post(String getContent()): return_value == this.body
    //#post(String getContent()): init'ed(return_value)
    //#comment.java:108: end of method: String net.sourceforge.pebble.domain.Comment.getContent()
  }

  /**
   * Gets the body of this comment, truncated and without HTML tags.
   *
   * @return    the body of this comment as a String
   */
  public String getTruncatedBody() {
    return this.getTruncatedContent();
    //#comment.java:117: method: String net.sourceforge.pebble.domain.Comment.getTruncatedBody()
    //#input(String getTruncatedBody()): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(String getTruncatedBody()): __Descendant_Table[others]
    //#input(String getTruncatedBody()): __Dispatch_Table.getBody()Ljava/lang/String;
    //#input(String getTruncatedBody()): __Dispatch_Table.getContent()Ljava/lang/String;
    //#input(String getTruncatedBody()): __Dispatch_Table.getTruncatedContent()Ljava/lang/String;
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBody()Ljava/lang/String;
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/Content]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/Response]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/Content.__Descendant_Table[others]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/Content.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[others]
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getContent()Ljava/lang/String;
    //#input(String getTruncatedBody()): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getExcerpt()Ljava/lang/String;
    //#input(String getTruncatedBody()): this
    //#input(String getTruncatedBody()): this.__Tag
    //#input(String getTruncatedBody()): this.body
    //#input(String getTruncatedBody()): this.excerpt
    //#output(String getTruncatedBody()): return_value
    //#pre[2] (String getTruncatedBody()): this.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[3] (String getTruncatedBody()): (soft) init'ed(this.body)
    //#pre[4] (String getTruncatedBody()): (soft) init'ed(this.body)
    //#pre[5] (String getTruncatedBody()): (soft) init'ed(this.excerpt)
    //#pre[6] (String getTruncatedBody()): (soft) init'ed(this.excerpt)
    //#post(String getTruncatedBody()): init'ed(return_value)
    //#unanalyzed(String getTruncatedBody()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(String getTruncatedBody()): Effects-of-calling:getContent
    //#unanalyzed(String getTruncatedBody()): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:truncate
    //#comment.java:117: end of method: String net.sourceforge.pebble.domain.Comment.getTruncatedBody()
  }

  /**
   * Sets the title of this comment.
   *
   * @param   title    the title of this comment as a String
   */
  public void setTitle(String title) {
    if (title == null || title.length() == 0) {
    //#comment.java:126: method: void net.sourceforge.pebble.domain.Comment.setTitle(String)
    //#input(void setTitle(String)): this
    //#input(void setTitle(String)): this.blogEntry
    //#input(void setTitle(String)): title
    //#output(void setTitle(String)): this.title
    //#pre[2] (void setTitle(String)): (soft) init'ed(this.blogEntry)
    //#post(void setTitle(String)): this.title != null
    //#test_vector(void setTitle(String)): this.blogEntry: Addr_Set{null}, Inverse{null}
    //#test_vector(void setTitle(String)): title: Addr_Set{null}, Inverse{null}
    //#test_vector(void setTitle(String)): java.lang.String:length(...)@126: {1..4_294_967_295}, {0}
      if (blogEntry != null) {
        this.title = "Re: " + blogEntry.getTitle();
    //#comment.java:128: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogEntry:getTitle()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.Comment
    //#    method: void setTitle(String)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogEntry:getTitle()
      } else {
        this.title = "Comment";
      }
    } else {
      this.title = title;
    }
  }
    //#comment.java:135: end of method: void net.sourceforge.pebble.domain.Comment.setTitle(String)

  /**
   * Sets the body of this comment.
   *
   * @param   body    the body of this comment as a String
   */
  public void setBody(String body) {
    if (body == null || body.length() == 0) {
    //#comment.java:143: method: void net.sourceforge.pebble.domain.Comment.setBody(String)
    //#input(void setBody(String)): body
    //#input(void setBody(String)): this
    //#output(void setBody(String)): this.body
    //#post(void setBody(String)): this.body == One-of{null, body}
    //#post(void setBody(String)): init'ed(this.body)
    //#test_vector(void setBody(String)): body: Addr_Set{null}, Inverse{null}
    //#test_vector(void setBody(String)): java.lang.String:length(...)@143: {1..4_294_967_295}, {0}
      this.body = null;
    } else {
      this.body = body;
    }
  }
    //#comment.java:148: end of method: void net.sourceforge.pebble.domain.Comment.setBody(String)

  /**
   * Gets the name of the author.
   *
   * @return    the name of the author as a String
   */
  public String getAuthor() {
    return author;
    //#comment.java:156: method: String net.sourceforge.pebble.domain.Comment.getAuthor()
    //#input(String getAuthor()): this
    //#input(String getAuthor()): this.author
    //#output(String getAuthor()): return_value
    //#pre[2] (String getAuthor()): init'ed(this.author)
    //#post(String getAuthor()): return_value == this.author
    //#post(String getAuthor()): init'ed(return_value)
    //#comment.java:156: end of method: String net.sourceforge.pebble.domain.Comment.getAuthor()
  }

  /**
   * Gets the name of the source of this response.
   *
   * @return a String
   */
  public String getSourceName() {
    return getAuthor();
    //#comment.java:165: method: String net.sourceforge.pebble.domain.Comment.getSourceName()
    //#input(String getSourceName()): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(String getSourceName()): __Descendant_Table[others]
    //#input(String getSourceName()): __Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(String getSourceName()): this
    //#input(String getSourceName()): this.__Tag
    //#input(String getSourceName()): this.author
    //#output(String getSourceName()): return_value
    //#pre[2] (String getSourceName()): this.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[3] (String getSourceName()): init'ed(this.author)
    //#post(String getSourceName()): return_value == this.author
    //#post(String getSourceName()): init'ed(return_value)
    //#comment.java:165: end of method: String net.sourceforge.pebble.domain.Comment.getSourceName()
  }

  /**
   * Sets the author of this blog comment. If an author isn't specified,
   * the author is set to be "Anonymous".
   *
   * @param author    the name of the author
   */
  public void setAuthor(String author) {
    if (author == null || author.length() == 0) {
    //#comment.java:175: method: void net.sourceforge.pebble.domain.Comment.setAuthor(String)
    //#input(void setAuthor(String)): author
    //#input(void setAuthor(String)): this
    //#output(void setAuthor(String)): this.author
    //#post(void setAuthor(String)): this.author == One-of{&"Anonymous", author}
    //#post(void setAuthor(String)): this.author != null
    //#test_vector(void setAuthor(String)): author: Addr_Set{null}, Inverse{null}
    //#test_vector(void setAuthor(String)): java.lang.String:length(...)@175: {1..4_294_967_295}, {0}
      this.author = "Anonymous";
    } else {
      this.author = author;
    }
  }
    //#comment.java:180: end of method: void net.sourceforge.pebble.domain.Comment.setAuthor(String)

  /**
   * Gets the author's e-mail address.
   *
   * @return    the author's e-mail address as a String
   */
  public String getEmail() {
    return email;
    //#comment.java:188: method: String net.sourceforge.pebble.domain.Comment.getEmail()
    //#input(String getEmail()): this
    //#input(String getEmail()): this.email
    //#output(String getEmail()): return_value
    //#pre[2] (String getEmail()): init'ed(this.email)
    //#post(String getEmail()): return_value == this.email
    //#post(String getEmail()): init'ed(return_value)
    //#comment.java:188: end of method: String net.sourceforge.pebble.domain.Comment.getEmail()
  }

  /**
   * Sets the author's e-mail address.
   *
   * @param email   the e-mail address
   */
  public void setEmail(String email) {
    if (email == null || email.length() == 0) {
    //#comment.java:197: method: void net.sourceforge.pebble.domain.Comment.setEmail(String)
    //#input(void setEmail(String)): email
    //#input(void setEmail(String)): this
    //#output(void setEmail(String)): this.email
    //#post(void setEmail(String)): init'ed(this.email)
    //#test_vector(void setEmail(String)): email: Addr_Set{null}, Inverse{null}
    //#test_vector(void setEmail(String)): java.lang.String:length(...)@197: {1..4_294_967_295}, {0}
      this.email = null;
    } else {
      this.email = StringUtils.transformHTML(email);
    //#comment.java:200: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.util.StringUtils:transformHTML(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.Comment
    //#    method: void setEmail(String)
    //#    unanalyzed callee: String net.sourceforge.pebble.util.StringUtils:transformHTML(String)
    }
  }
    //#comment.java:202: end of method: void net.sourceforge.pebble.domain.Comment.setEmail(String)

  /**
   * Gets the author's website.
   *
   * @return    the author's website as a String
   */
  public String getWebsite() {
    return website;
    //#comment.java:210: method: String net.sourceforge.pebble.domain.Comment.getWebsite()
    //#input(String getWebsite()): this
    //#input(String getWebsite()): this.website
    //#output(String getWebsite()): return_value
    //#pre[2] (String getWebsite()): init'ed(this.website)
    //#post(String getWebsite()): return_value == this.website
    //#post(String getWebsite()): init'ed(return_value)
    //#comment.java:210: end of method: String net.sourceforge.pebble.domain.Comment.getWebsite()
  }

  /**
   * Gets the link to the source of this response.
   *
   * @return a String
   */
  public String getSourceLink() {
    return getWebsite();
    //#comment.java:219: method: String net.sourceforge.pebble.domain.Comment.getSourceLink()
    //#input(String getSourceLink()): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(String getSourceLink()): __Descendant_Table[others]
    //#input(String getSourceLink()): __Dispatch_Table.getWebsite()Ljava/lang/String;
    //#input(String getSourceLink()): this
    //#input(String getSourceLink()): this.__Tag
    //#input(String getSourceLink()): this.website
    //#output(String getSourceLink()): return_value
    //#pre[2] (String getSourceLink()): this.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[3] (String getSourceLink()): init'ed(this.website)
    //#post(String getSourceLink()): return_value == this.website
    //#post(String getSourceLink()): init'ed(return_value)
    //#comment.java:219: end of method: String net.sourceforge.pebble.domain.Comment.getSourceLink()
  }

  /**
   * Sets the author's website.
   *
   * @param website   the website url
   */
  public void setWebsite(String website) {
    website = StringUtils.filterHTML(website);
    //#comment.java:228: method: void net.sourceforge.pebble.domain.Comment.setWebsite(String)
    //#comment.java:228: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.util.StringUtils:filterHTML(String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.Comment
    //#    method: void setWebsite(String)
    //#    unanalyzed callee: String net.sourceforge.pebble.util.StringUtils:filterHTML(String)
    //#input(void setWebsite(String)): this
    //#input(void setWebsite(String)): website
    //#output(void setWebsite(String)): this.website
    //#post(void setWebsite(String)): init'ed(this.website)
    //#test_vector(void setWebsite(String)): java.lang.String:length(...)@229: {1..4_294_967_295}, {0}
    //#test_vector(void setWebsite(String)): java.lang.String:startsWith(...)@232: {1}, {0}
    //#test_vector(void setWebsite(String)): java.lang.String:startsWith(...)@233: {1}, {0}
    //#test_vector(void setWebsite(String)): java.lang.String:startsWith(...)@234: {1}, {0}
    //#test_vector(void setWebsite(String)): java.lang.String:startsWith(...)@235: {1}, {0}
    //#test_vector(void setWebsite(String)): net.sourceforge.pebble.util.StringUtils:filterHTML(...)@228: Addr_Set{null}, Inverse{null}
    if (website == null || website.length() == 0) {
      this.website = null;
    } else if (
        !website.startsWith("http://") &&
        !website.startsWith("https://") &&
        !website.startsWith("ftp://") &&
        !website.startsWith("mailto:")) {
      this.website = "http://" + website;
    } else {
      this.website = website;
    }
  }
    //#comment.java:240: end of method: void net.sourceforge.pebble.domain.Comment.setWebsite(String)

  /**
   * Gets the permalink for this comment.
   *
   * @return  a URL as a String
   */
  public String getPermalink() {
    if (blogEntry != null) {
    //#comment.java:248: method: String net.sourceforge.pebble.domain.Comment.getPermalink()
    //#input(String getPermalink()): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(String getPermalink()): __Descendant_Table[others]
    //#input(String getPermalink()): __Dispatch_Table.getId()J
    //#input(String getPermalink()): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(String getPermalink()): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(String getPermalink()): net/sourceforge/pebble/Configuration.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/Configuration.__Dispatch_Table.isVirtualHostingEnabled()Z
    //#input(String getPermalink()): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[net/sourceforge/pebble/api/permalink/PermalinkProvider]
    //#input(String getPermalink()): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[others]
    //#input(String getPermalink()): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Dispatch_Table.getPermalink(Lnet/sourceforge/pebble/domain/BlogEntry;)Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getPermalinkProvider()Lnet/sourceforge/pebble/api/permalink/PermalinkProvider;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[others]
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.__Dispatch_Table.isMultiBlog()Z
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.instance
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#input(String getPermalink()): net/sourceforge/pebble/domain/BlogManager.instance.multiBlog
    //#input(String getPermalink()): this
    //#input(String getPermalink()): this.__Tag
    //#input(String getPermalink()): this.blogEntry
    //#input(String getPermalink()): this.blogEntry.__Tag
    //#input(String getPermalink()): this.blogEntry.blog
    //#input(String getPermalink()): this.blogEntry.blog.__Tag
    //#input(String getPermalink()): this.blogEntry.blog.id
    //#input(String getPermalink()): this.blogEntry.blog.permalinkProvider
    //#input(String getPermalink()): this.blogEntry.blog.permalinkProvider.__Tag
    //#input(String getPermalink()): this.blogEntry.permalink
    //#input(String getPermalink()): this.date
    //#output(String getPermalink()): return_value
    //#output(String getPermalink()): this.blogEntry.permalink
    //#pre[7] (String getPermalink()): init'ed(this.blogEntry)
    //#pre[1] (String getPermalink()): (soft) net/sourceforge/pebble/domain/BlogManager.instance != null
    //#pre[2] (String getPermalink()): (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#pre[3] (String getPermalink()): (soft) init'ed(net/sourceforge/pebble/domain/BlogManager.instance.multiBlog)
    //#pre[4] (String getPermalink()): (soft) init'ed(this.blogEntry.permalink)
    //#pre[6] (String getPermalink()): (soft) this.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[8] (String getPermalink()): (soft) this.blogEntry.__Tag == net/sourceforge/pebble/domain/BlogEntry
    //#pre[9] (String getPermalink()): (soft) this.blogEntry.blog != null
    //#pre[10] (String getPermalink()): (soft) this.blogEntry.blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[11] (String getPermalink()): (soft) init'ed(this.blogEntry.blog.id)
    //#pre[12] (String getPermalink()): (soft) this.blogEntry.blog.permalinkProvider != null
    //#pre[13] (String getPermalink()): (soft) this.blogEntry.blog.permalinkProvider.__Tag == net/sourceforge/pebble/api/permalink/PermalinkProvider
    //#pre[14] (String getPermalink()): (soft) this.date != null
    //#post(String getPermalink()): return_value != null
    //#post(String getPermalink()): init'ed(this.blogEntry.permalink)
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.util.Date:getTime
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(String getPermalink()): Effects-of-calling:getUrl
    //#unanalyzed(String getPermalink()): Effects-of-calling:getPermalinkProvider
    //#unanalyzed(String getPermalink()): Effects-of-calling:getPermalink
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(String getPermalink()): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(String getPermalink()): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(String getPermalink()): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#test_vector(String getPermalink()): this.blogEntry: Addr_Set{null}, Inverse{null}
      return blogEntry.getLocalPermalink() + "#comment" + getId();
    } else {
      return "";
    //#comment.java:251: end of method: String net.sourceforge.pebble.domain.Comment.getPermalink()
    }
  }

  /**
   * Gets the owning comment, if this comment is nested.
   *
   * @return    a Comment instance, or null if this comment isn't nested
   */
  public Comment getParent() {
    return this.parent;
    //#comment.java:261: method: Comment net.sourceforge.pebble.domain.Comment.getParent()
    //#input(Comment getParent()): this
    //#input(Comment getParent()): this.parent
    //#output(Comment getParent()): return_value
    //#pre[2] (Comment getParent()): init'ed(this.parent)
    //#post(Comment getParent()): return_value == this.parent
    //#post(Comment getParent()): init'ed(return_value)
    //#comment.java:261: end of method: Comment net.sourceforge.pebble.domain.Comment.getParent()
  }

  /**
   * Sets the owning comment.
   *
   * @param parent    the owning Comment instance
   */
  public void setParent(Comment parent) {
    this.parent = parent;
    //#comment.java:270: method: void net.sourceforge.pebble.domain.Comment.setParent(Comment)
    //#input(void setParent(Comment)): parent
    //#input(void setParent(Comment)): this
    //#output(void setParent(Comment)): this.parent
    //#post(void setParent(Comment)): this.parent == parent
    //#post(void setParent(Comment)): init'ed(this.parent)
  }
    //#comment.java:271: end of method: void net.sourceforge.pebble.domain.Comment.setParent(Comment)

  /**
   * Gets the number of parents that this comment has.
   *
   * @return  the number of parents as an int
   */
  public int getNumberOfParents() {
    int count = 0;
    //#comment.java:279: method: int net.sourceforge.pebble.domain.Comment.getNumberOfParents()
    //#input(int getNumberOfParents()): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(int getNumberOfParents()): __Descendant_Table[others]
    //#input(int getNumberOfParents()): __Dispatch_Table.getParent()Lnet/sourceforge/pebble/domain/Comment;
    //#input(int getNumberOfParents()): this
    //#input(int getNumberOfParents()): this...__Tag
    //#input(int getNumberOfParents()): this...parent
    //#input(int getNumberOfParents()): this.__Tag
    //#input(int getNumberOfParents()): this.parent
    //#output(int getNumberOfParents()): return_value
    //#pre[4] (int getNumberOfParents()): this.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[5] (int getNumberOfParents()): init'ed(this.parent)
    //#pre[2] (int getNumberOfParents()): (soft) this...__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[3] (int getNumberOfParents()): (soft) init'ed(this...parent)
    //#post(int getNumberOfParents()): return_value >= 0
    Comment c = getParent();
    while (c != null) {
      count++;
    //#comment.java:282: ?overflow
    //#    count in -2_147_483_649..4_294_967_294
    //#    severity: LOW
    //#    class: net.sourceforge.pebble.domain.Comment
    //#    method: int getNumberOfParents()
    //#    basic block: bb_2
    //#    assertion: count in -2_147_483_649..4_294_967_294
    //#    VN: count + 1
    //#    Expected: {-2_147_483_648..4_294_967_295, Invalid}
    //#    Bad: {4_294_967_296}
    //#    Attribs:  Int  Bad singleton  Bad > Exp
      c = c.getParent();
    }

    return count;
    //#comment.java:286: end of method: int net.sourceforge.pebble.domain.Comment.getNumberOfParents()
  }

  /**
   * Adds a child comment.
   *
   * @param comment   the Comment to add
   */
  void addComment(Comment comment) {
    if (comment != null && !comments.contains(comment)) {
    //#comment.java:295: method: void net.sourceforge.pebble.domain.Comment.addComment(Comment)
    //#input(void addComment(Comment)): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void addComment(Comment)): __Descendant_Table[others]
    //#input(void addComment(Comment)): __Dispatch_Table.setParent(Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void addComment(Comment)): comment
    //#input(void addComment(Comment)): comment.__Tag
    //#input(void addComment(Comment)): this
    //#input(void addComment(Comment)): this.comments
    //#output(void addComment(Comment)): comment.parent
    //#pre[2] (void addComment(Comment)): (soft) comment.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[5] (void addComment(Comment)): (soft) this.comments != null
    //#post(void addComment(Comment)): comment.parent == One-of{old comment.parent, this}
    //#test_vector(void addComment(Comment)): comment: Addr_Set{null}, Inverse{null}
    //#test_vector(void addComment(Comment)): java.util.List:contains(...)@295: {1}, {0}
      comments.add(comment);
      comment.setParent(this);
    }
  }
    //#comment.java:299: end of method: void net.sourceforge.pebble.domain.Comment.addComment(Comment)

  /**
   * Removes a child comment.
   *
   * @param comment   the Comment to be removed
   */
  void removeComment(Comment comment) {
    if (comment != null && comments.contains(comment)) {
    //#comment.java:307: method: void net.sourceforge.pebble.domain.Comment.removeComment(Comment)
    //#input(void removeComment(Comment)): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void removeComment(Comment)): __Descendant_Table[others]
    //#input(void removeComment(Comment)): __Dispatch_Table.areEventsEnabled()Z
    //#input(void removeComment(Comment)): __Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void removeComment(Comment)): __Dispatch_Table.getComments()Ljava/util/List;
    //#input(void removeComment(Comment)): __Dispatch_Table.removeComment(Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void removeComment(Comment)): __Dispatch_Table.setParent(Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(void removeComment(Comment)): comment
    //#input(void removeComment(Comment)): comment.__Tag
    //#input(void removeComment(Comment)): comment.blogEntry
    //#input(void removeComment(Comment)): comment.comments
    //#input(void removeComment(Comment)): comment.eventsEnabled
    //#input(void removeComment(Comment)): this
    //#input(void removeComment(Comment)): this.__Tag
    //#input(void removeComment(Comment)): this.blogEntry
    //#input(void removeComment(Comment)): this.comments
    //#input(void removeComment(Comment)): this.eventsEnabled
    //#output(void removeComment(Comment)): comment.parent
    //#pre[2] (void removeComment(Comment)): (soft) comment.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[3] (void removeComment(Comment)): (soft) comment.blogEntry != null
    //#pre[4] (void removeComment(Comment)): (soft) comment.comments != null
    //#pre[5] (void removeComment(Comment)): (soft) init'ed(comment.eventsEnabled)
    //#pre[8] (void removeComment(Comment)): (soft) this.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[9] (void removeComment(Comment)): (soft) this.blogEntry != null
    //#pre[10] (void removeComment(Comment)): (soft) this.comments != null
    //#pre[11] (void removeComment(Comment)): (soft) init'ed(this.eventsEnabled)
    //#presumption(void removeComment(Comment)): child.blogEntry@309 != null
    //#presumption(void removeComment(Comment)): child.comments@309 != null
    //#presumption(void removeComment(Comment)): java.util.Iterator:next(...).__Tag@309 == net/sourceforge/pebble/domain/Comment
    //#post(void removeComment(Comment)): comment.parent == One-of{old comment.parent, null}
    //#unanalyzed(void removeComment(Comment)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void removeComment(Comment)): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void removeComment(Comment)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void removeComment(Comment)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void removeComment(Comment)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void removeComment(Comment)): Effects-of-calling:removeComment
    //#unanalyzed(void removeComment(Comment)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void removeComment(Comment)): Effects-of-calling:areEventsEnabled
    //#unanalyzed(void removeComment(Comment)): Effects-of-calling:getBlogEntry
    //#unanalyzed(void removeComment(Comment)): Effects-of-calling:java.util.EventObject
    //#unanalyzed(void removeComment(Comment)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:addEvent
    //#test_vector(void removeComment(Comment)): comment: Addr_Set{null}, Inverse{null}
    //#test_vector(void removeComment(Comment)): java.util.Iterator:hasNext(...)@309: {1}, {0}
    //#test_vector(void removeComment(Comment)): java.util.List:contains(...)@307: {0}, {1}
      // remove all children
      for (Comment child : getComments()) {
        comment.removeComment(child);
      }

      // then remove the comment itself
      comments.remove(comment);
      comment.setParent(null);

      if (areEventsEnabled()) {
        getBlogEntry().addEvent(new CommentEvent(comment, CommentEvent.COMMENT_REMOVED));
    //#comment.java:318: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:addEvent(PebbleEvent)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.Comment
    //#    method: void removeComment(Comment)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:addEvent(PebbleEvent)
      }
    }
  }
    //#comment.java:321: end of method: void net.sourceforge.pebble.domain.Comment.removeComment(Comment)

  /**
   * Gets a list of comments, in the order that they were left.
   *
   * @return  a List of Comment instances
   */
  public List<Comment> getComments() {
    return new ArrayList<Comment>(comments);
    //#comment.java:329: method: List net.sourceforge.pebble.domain.Comment.getComments()
    //#input(List getComments()): this
    //#input(List getComments()): this.comments
    //#output(List getComments()): new ArrayList(getComments#1) num objects
    //#output(List getComments()): return_value
    //#new obj(List getComments()): new ArrayList(getComments#1)
    //#pre[2] (List getComments()): init'ed(this.comments)
    //#post(List getComments()): return_value == &new ArrayList(getComments#1)
    //#post(List getComments()): new ArrayList(getComments#1) num objects == 1
    //#comment.java:329: end of method: List net.sourceforge.pebble.domain.Comment.getComments()
  }

  /**
   * Creates and returns a copy of this object.
   *
   * @return a clone of this instance.
   * @see Cloneable
   */
  public Object clone() {
    Comment comment = new Comment(title, body, author, email, website, ipAddress, date, getState(), blogEntry);
    //#comment.java:339: method: Object net.sourceforge.pebble.domain.Comment.clone()
    //#input(Object clone()): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(Object clone()): __Descendant_Table[others]
    //#input(Object clone()): __Dispatch_Table.areEventsEnabled()Z
    //#input(Object clone()): __Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(Object clone()): __Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(Object clone()): __Dispatch_Table.isApproved()Z
    //#input(Object clone()): __Dispatch_Table.isRejected()Z
    //#input(Object clone()): __Dispatch_Table.setAuthenticated(Z)V
    //#input(Object clone()): __Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#input(Object clone()): __Dispatch_Table.setBody(Ljava/lang/String;)V
    //#input(Object clone()): __Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(Object clone()): __Dispatch_Table.setEmail(Ljava/lang/String;)V
    //#input(Object clone()): __Dispatch_Table.setIpAddress(Ljava/lang/String;)V
    //#input(Object clone()): __Dispatch_Table.setParent(Lnet/sourceforge/pebble/domain/Comment;)V
    //#input(Object clone()): __Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V
    //#input(Object clone()): __Dispatch_Table.setTitle(Ljava/lang/String;)V
    //#input(Object clone()): __Dispatch_Table.setWebsite(Ljava/lang/String;)V
    //#input(Object clone()): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#1).__Tag
    //#input(Object clone()): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#2).__Tag
    //#input(Object clone()): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(Object clone()): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Response]
    //#input(Object clone()): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(Object clone()): net/sourceforge/pebble/domain/Response.__Descendant_Table[others]
    //#input(Object clone()): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(Object clone()): net/sourceforge/pebble/domain/Response.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(Object clone()): net/sourceforge/pebble/domain/Response.__Dispatch_Table.setIpAddress(Ljava/lang/String;)V
    //#input(Object clone()): net/sourceforge/pebble/domain/Response.__Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V
    //#input(Object clone()): net/sourceforge/pebble/domain/Response.__Dispatch_Table.setTitle(Ljava/lang/String;)V
    //#input(Object clone()): net/sourceforge/pebble/domain/State.APPROVED
    //#input(Object clone()): net/sourceforge/pebble/domain/State.REJECTED
    //#input(Object clone()): net/sourceforge/pebble/domain/State.__Descendant_Table[net/sourceforge/pebble/domain/State]
    //#input(Object clone()): net/sourceforge/pebble/domain/State.__Descendant_Table[others]
    //#input(Object clone()): net/sourceforge/pebble/domain/State.__Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#input(Object clone()): net/sourceforge/pebble/domain/State.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(Object clone()): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(Object clone()): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[others]
    //#input(Object clone()): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.areEventsEnabled()Z
    //#input(Object clone()): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(Object clone()): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.isApproved()Z
    //#input(Object clone()): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.isRejected()Z
    //#input(Object clone()): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(Object clone()): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.setIpAddress(Ljava/lang/String;)V
    //#input(Object clone()): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V
    //#input(Object clone()): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.setTitle(Ljava/lang/String;)V
    //#input(Object clone()): this
    //#input(Object clone()): this.__Tag
    //#input(Object clone()): this.authenticated
    //#input(Object clone()): this.author
    //#input(Object clone()): this.blogEntry
    //#input(Object clone()): this.body
    //#input(Object clone()): this.date
    //#input(Object clone()): this.email
    //#input(Object clone()): this.ipAddress
    //#input(Object clone()): this.parent
    //#input(Object clone()): this.state
    //#input(Object clone()): this.state.__Tag
    //#input(Object clone()): this.title
    //#input(Object clone()): this.website
    //#output(Object clone()): new ArrayList(Comment#1) num objects
    //#output(Object clone()): new ArrayList(Content#1) num objects
    //#output(Object clone()): new ArrayList(Content#3) num objects
    //#output(Object clone()): new Comment(clone#1) num objects
    //#output(Object clone()): return_value.__Tag
    //#output(Object clone()): return_value.authenticated
    //#output(Object clone()): return_value.author
    //#output(Object clone()): return_value.blogEntry
    //#output(Object clone()): return_value.body
    //#output(Object clone()): return_value.comments
    //#output(Object clone()): return_value.date
    //#output(Object clone()): return_value.email
    //#output(Object clone()): return_value.events
    //#output(Object clone()): return_value.eventsEnabled
    //#output(Object clone()): return_value.ipAddress
    //#output(Object clone()): return_value.parent
    //#output(Object clone()): return_value.propertyChangeEvents
    //#output(Object clone()): return_value.propertyChangeSupport
    //#output(Object clone()): return_value.spamScore
    //#output(Object clone()): return_value.state
    //#output(Object clone()): return_value.title
    //#output(Object clone()): return_value.website
    //#output(Object clone()): new PropertyChangeSupport(Content#2) num objects
    //#output(Object clone()): return_value
    //#new obj(Object clone()): new ArrayList(Comment#1)
    //#new obj(Object clone()): new ArrayList(Content#1)
    //#new obj(Object clone()): new ArrayList(Content#3)
    //#new obj(Object clone()): new Comment(clone#1)
    //#new obj(Object clone()): new PropertyChangeSupport(Content#2)
    //#pre[4] (Object clone()): this.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[5] (Object clone()): init'ed(this.authenticated)
    //#pre[6] (Object clone()): init'ed(this.author)
    //#pre[7] (Object clone()): this.blogEntry != null
    //#pre[8] (Object clone()): init'ed(this.body)
    //#pre[9] (Object clone()): init'ed(this.date)
    //#pre[10] (Object clone()): init'ed(this.email)
    //#pre[11] (Object clone()): init'ed(this.ipAddress)
    //#pre[12] (Object clone()): init'ed(this.parent)
    //#pre[13] (Object clone()): init'ed(this.state)
    //#pre[16] (Object clone()): init'ed(this.title)
    //#pre[17] (Object clone()): init'ed(this.website)
    //#post(Object clone()): return_value == &new Comment(clone#1)
    //#post(Object clone()): new ArrayList(Comment#1) num objects == 1
    //#post(Object clone()): new ArrayList(Content#1) num objects == 1
    //#post(Object clone()): new ArrayList(Content#3) num objects == 1
    //#post(Object clone()): new Comment(clone#1) num objects == 1
    //#post(Object clone()): new PropertyChangeSupport(Content#2) num objects == 1
    //#post(Object clone()): return_value.__Tag == net/sourceforge/pebble/domain/Comment
    //#post(Object clone()): return_value.authenticated == this.authenticated
    //#post(Object clone()): init'ed(return_value.authenticated)
    //#post(Object clone()): return_value.author == One-of{&"Anonymous", this.author}
    //#post(Object clone()): return_value.author != null
    //#post(Object clone()): return_value.blogEntry == this.blogEntry
    //#post(Object clone()): return_value.blogEntry != null
    //#post(Object clone()): return_value.body == One-of{null, this.body}
    //#post(Object clone()): init'ed(return_value.body)
    //#post(Object clone()): return_value.comments == &new ArrayList(Comment#1)
    //#post(Object clone()): init'ed(return_value.date)
    //#post(Object clone()): init'ed(return_value.email)
    //#post(Object clone()): return_value.events == &new ArrayList(Content#1)
    //#post(Object clone()): init'ed(return_value.eventsEnabled)
    //#post(Object clone()): return_value.ipAddress == One-of{null, this.ipAddress}
    //#post(Object clone()): init'ed(return_value.ipAddress)
    //#post(Object clone()): return_value.parent == this.parent
    //#post(Object clone()): init'ed(return_value.parent)
    //#post(Object clone()): return_value.propertyChangeEvents == &new ArrayList(Content#3)
    //#post(Object clone()): return_value.propertyChangeSupport == &new PropertyChangeSupport(Content#2)
    //#post(Object clone()): init'ed(return_value.spamScore)
    //#post(Object clone()): possibly_updated(return_value.state)
    //#post(Object clone()): possibly_updated(return_value.title)
    //#post(Object clone()): init'ed(return_value.website)
    //#unanalyzed(Object clone()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(Object clone()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(Object clone()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(Object clone()): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getTitle
    //#unanalyzed(Object clone()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(Object clone()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(Object clone()): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:filterHTML
    //#unanalyzed(Object clone()): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(Object clone()): Effects-of-calling:net.sourceforge.pebble.util.StringUtils:transformHTML
    //#unanalyzed(Object clone()): Effects-of-calling:areEventsEnabled
    //#unanalyzed(Object clone()): Effects-of-calling:getBlogEntry
    //#unanalyzed(Object clone()): Effects-of-calling:java.util.EventObject
    //#unanalyzed(Object clone()): Effects-of-calling:net.sourceforge.pebble.api.event.PebbleEvent
    //#unanalyzed(Object clone()): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:addEvent
    //#unanalyzed(Object clone()): Effects-of-calling:getState
    //#unanalyzed(Object clone()): Effects-of-calling:setState
    //#unanalyzed(Object clone()): Effects-of-calling:isApproved
    //#unanalyzed(Object clone()): Effects-of-calling:isRejected
    //#unanalyzed(Object clone()): Effects-of-calling:net.sourceforge.pebble.domain.Response
    //#unanalyzed(Object clone()): Effects-of-calling:net.sourceforge.pebble.domain.Content
    //#unanalyzed(Object clone()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(Object clone()): Effects-of-calling:java.util.Date
    //#unanalyzed(Object clone()): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getBlog
    //#unanalyzed(Object clone()): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCalendar
    //#unanalyzed(Object clone()): Effects-of-calling:java.util.Calendar:setTime
    //#unanalyzed(Object clone()): Effects-of-calling:java.util.Calendar:getTime
    //#unanalyzed(Object clone()): Effects-of-calling:java.beans.PropertyChangeSupport
    //#unanalyzed(Object clone()): Effects-of-calling:java.beans.PropertyChangeSupport:addPropertyChangeListener
    //#unanalyzed(Object clone()): Effects-of-calling:net.sourceforge.pebble.domain.Response:setState
    comment.setParent(parent);
    comment.setAuthenticated(authenticated);
    return comment;
    //#comment.java:342: end of method: Object net.sourceforge.pebble.domain.Comment.clone()
  }

  public boolean equals(Object o) {
    if (this == o) {
    //#comment.java:346: method: bool net.sourceforge.pebble.domain.Comment.equals(Object)
    //#input(bool equals(Object)): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(bool equals(Object)): __Descendant_Table[others]
    //#input(bool equals(Object)): __Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(bool equals(Object)): __Dispatch_Table.getId()J
    //#input(bool equals(Object)): o
    //#input(bool equals(Object)): o.__Tag
    //#input(bool equals(Object)): o.blogEntry
    //#input(bool equals(Object)): o.date
    //#input(bool equals(Object)): this
    //#input(bool equals(Object)): this.__Tag
    //#input(bool equals(Object)): this.blogEntry
    //#input(bool equals(Object)): this.date
    //#output(bool equals(Object)): return_value
    //#pre[5] (bool equals(Object)): (soft) o.blogEntry != null
    //#pre[6] (bool equals(Object)): (soft) o.date != null
    //#pre[9] (bool equals(Object)): (soft) this.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[10] (bool equals(Object)): (soft) this.blogEntry != null
    //#pre[11] (bool equals(Object)): (soft) this.date != null
    //#presumption(bool equals(Object)): net.sourceforge.pebble.domain.BlogEntry:getId(...)@355 != null
    //#post(bool equals(Object)): init'ed(return_value)
    //#unanalyzed(bool equals(Object)): Effects-of-calling:java.util.Date:getTime
    //#test_vector(bool equals(Object)): this == o: {0}, {1}
    //#test_vector(bool equals(Object)): java.lang.String:equals(...)@355: {0}, {1}
      return true;
    }

    if (!(o instanceof Comment)) {
      return false;
    }

    Comment comment = (Comment)o;
    return (getId() == comment.getId() && blogEntry.getId().equals(comment.getBlogEntry().getId()));
    //#comment.java:355: Warning: method not available
    //#    -- call on String net.sourceforge.pebble.domain.BlogEntry:getId()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.Comment
    //#    method: bool equals(Object)
    //#    unanalyzed callee: String net.sourceforge.pebble.domain.BlogEntry:getId()
    //#comment.java:355: end of method: bool net.sourceforge.pebble.domain.Comment.equals(Object)
  }

  public int hashCode() {
    return ("" + getId()).hashCode();
    //#comment.java:359: method: int net.sourceforge.pebble.domain.Comment.hashCode()
    //#input(int hashCode()): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(int hashCode()): __Descendant_Table[others]
    //#input(int hashCode()): __Dispatch_Table.getId()J
    //#input(int hashCode()): this
    //#input(int hashCode()): this.__Tag
    //#input(int hashCode()): this.date
    //#output(int hashCode()): return_value
    //#pre[2] (int hashCode()): this.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[3] (int hashCode()): this.date != null
    //#post(int hashCode()): init'ed(return_value)
    //#unanalyzed(int hashCode()): Effects-of-calling:java.util.Date:getTime
    //#comment.java:359: end of method: int net.sourceforge.pebble.domain.Comment.hashCode()
  }

  /**
   * Sets the state of this comment.
   */
  void setState(State s) {
    State previousState = getState();
    //#comment.java:366: method: void net.sourceforge.pebble.domain.Comment.setState(State)
    //#input(void setState(State)): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void setState(State)): __Descendant_Table[others]
    //#input(void setState(State)): __Dispatch_Table.areEventsEnabled()Z
    //#input(void setState(State)): __Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void setState(State)): __Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void setState(State)): __Dispatch_Table.isApproved()Z
    //#input(void setState(State)): __Dispatch_Table.isRejected()Z
    //#input(void setState(State)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#1).__Tag
    //#input(void setState(State)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#1).name
    //#input(void setState(State)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#2).__Tag
    //#input(void setState(State)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#2).name
    //#input(void setState(State)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void setState(State)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Response]
    //#input(void setState(State)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void setState(State)): net/sourceforge/pebble/domain/Response.__Descendant_Table[others]
    //#input(void setState(State)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void setState(State)): net/sourceforge/pebble/domain/State.APPROVED
    //#input(void setState(State)): net/sourceforge/pebble/domain/State.REJECTED
    //#input(void setState(State)): net/sourceforge/pebble/domain/State.__Descendant_Table[net/sourceforge/pebble/domain/State]
    //#input(void setState(State)): net/sourceforge/pebble/domain/State.__Descendant_Table[others]
    //#input(void setState(State)): net/sourceforge/pebble/domain/State.__Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#input(void setState(State)): net/sourceforge/pebble/domain/State.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void setState(State)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void setState(State)): s
    //#input(void setState(State)): s.__Tag
    //#input(void setState(State)): s.name
    //#input(void setState(State)): this
    //#input(void setState(State)): this.__Tag
    //#input(void setState(State)): this.blogEntry
    //#input(void setState(State)): this.eventsEnabled
    //#input(void setState(State)): this.state
    //#input(void setState(State)): this.state.__Tag
    //#output(void setState(State)): this.state
    //#pre[3] (void setState(State)): init'ed(this.state)
    //#pre[9] (void setState(State)): this.__Tag == net/sourceforge/pebble/domain/Comment
    //#pre[11] (void setState(State)): init'ed(this.eventsEnabled)
    //#pre[1] (void setState(State)): (soft) net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#1).name != null
    //#pre[2] (void setState(State)): (soft) net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#2).name != null
    //#pre[4] (void setState(State)): (soft) s != null
    //#pre[6] (void setState(State)): (soft) s.__Tag == net/sourceforge/pebble/domain/State
    //#pre[7] (void setState(State)): (soft) init'ed(s.name)
    //#pre[10] (void setState(State)): (soft) this.blogEntry != null
    //#post(void setState(State)): this.state == s
    //#post(void setState(State)): (soft) this.state != null
    //#unanalyzed(void setState(State)): Effects-of-calling:java.util.EventObject
    //#unanalyzed(void setState(State)): Effects-of-calling:getState
    //#unanalyzed(void setState(State)): Effects-of-calling:java.lang.String:equals
    //#test_vector(void setState(State)): this.eventsEnabled: {0}, {1}
    super.setState(s);

    if (areEventsEnabled()) {
      if (isApproved() && previousState != State.APPROVED) {
        getBlogEntry().addEvent(new CommentEvent(this, CommentEvent.COMMENT_APPROVED));
    //#comment.java:371: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:addEvent(PebbleEvent)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.Comment
    //#    method: void setState(State)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:addEvent(PebbleEvent)
      } else if (isRejected() && previousState != State.REJECTED) {
        getBlogEntry().addEvent(new CommentEvent(this, CommentEvent.COMMENT_REJECTED));
    //#comment.java:373: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.domain.BlogEntry:addEvent(PebbleEvent)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.Comment
    //#    method: void setState(State)
    //#    unanalyzed callee: void net.sourceforge.pebble.domain.BlogEntry:addEvent(PebbleEvent)
      }
    }
  }
    //#comment.java:376: end of method: void net.sourceforge.pebble.domain.Comment.setState(State)

  public boolean isAuthenticated() {
    return authenticated;
    //#comment.java:379: method: bool net.sourceforge.pebble.domain.Comment.isAuthenticated()
    //#input(bool isAuthenticated()): this
    //#input(bool isAuthenticated()): this.authenticated
    //#output(bool isAuthenticated()): return_value
    //#pre[2] (bool isAuthenticated()): init'ed(this.authenticated)
    //#post(bool isAuthenticated()): return_value == this.authenticated
    //#post(bool isAuthenticated()): init'ed(return_value)
    //#comment.java:379: end of method: bool net.sourceforge.pebble.domain.Comment.isAuthenticated()
  }

  public void setAuthenticated(boolean authenticated) {
    this.authenticated = authenticated;
    //#comment.java:383: method: void net.sourceforge.pebble.domain.Comment.setAuthenticated(bool)
    //#input(void setAuthenticated(bool)): authenticated
    //#input(void setAuthenticated(bool)): this
    //#output(void setAuthenticated(bool)): this.authenticated
    //#post(void setAuthenticated(bool)): this.authenticated == authenticated
    //#post(void setAuthenticated(bool)): init'ed(this.authenticated)
  }
    //#comment.java:384: end of method: void net.sourceforge.pebble.domain.Comment.setAuthenticated(bool)

}    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.addComment(Lnet/sourceforge/pebble/domain/Comment;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.addEvent(Lnet/sourceforge/pebble/api/event/PebbleEvent;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.areEventsEnabled()Z
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.clearEvents()V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.clearPropertyChangeEvents()V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.clone()Ljava/lang/Object;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getAuthor()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getBody()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getComments()Ljava/util/List;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getContent()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getDate()Ljava/util/Date;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getEmail()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getEvents()Ljava/util/List;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getGuid()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getId()J
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getIpAddress()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getNumberOfParents()I
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getParent()Lnet/sourceforge/pebble/domain/Comment;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getPermalink()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getPropertyChangeEvents()Ljava/util/List;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getSourceLink()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getSourceName()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getSpamScore()I
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getTitle()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getTruncatedBody()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getTruncatedContent()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getWebsite()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.hasEvents()Z
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.hashCode()I
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.incrementSpamScore()V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.insertEvent(Lnet/sourceforge/pebble/api/event/PebbleEvent;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.isApproved()Z
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.isAuthenticated()Z
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.isDirty()Z
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.isPending()Z
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.isRejected()Z
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.nextEvent()Lnet/sourceforge/pebble/api/event/PebbleEvent;
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.removeComment(Lnet/sourceforge/pebble/domain/Comment;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setApproved()V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setAuthenticated(Z)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setBlogEntry(Lnet/sourceforge/pebble/domain/BlogEntry;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setBody(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setDate(Ljava/util/Date;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setEmail(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setEventsEnabled(Z)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setIpAddress(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setParent(Lnet/sourceforge/pebble/domain/Comment;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setPending()V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setRejected()V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setTitle(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setWebsite(Ljava/lang/String;)V
    //#output(net.sourceforge.pebble.domain.Comment__static_init): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#output(net.sourceforge.pebble.domain.Comment__static_init): net/sourceforge/pebble/domain/Permalinkable.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#output(net.sourceforge.pebble.domain.Comment__static_init): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Descendant_Table[net/sourceforge/pebble/domain/Comment] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.domain.Comment__static_init): net/sourceforge/pebble/domain/Content.__Descendant_Table[net/sourceforge/pebble/domain/Comment] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.domain.Comment__static_init): net/sourceforge/pebble/domain/Permalinkable.__Descendant_Table[net/sourceforge/pebble/domain/Comment] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.domain.Comment__static_init): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Comment] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.addComment(Lnet/sourceforge/pebble/domain/Comment;)V == &addComment
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.addEvent(Lnet/sourceforge/pebble/api/event/PebbleEvent;)V == &net/sourceforge/pebble/domain/Content.addEvent
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.areEventsEnabled()Z == &net/sourceforge/pebble/domain/Content.areEventsEnabled
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.clearEvents()V == &net/sourceforge/pebble/domain/Content.clearEvents
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.clearPropertyChangeEvents()V == &net/sourceforge/pebble/domain/Content.clearPropertyChangeEvents
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.clone()Ljava/lang/Object; == &clone
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.equals(Ljava/lang/Object;)Z == &equals
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getAuthor()Ljava/lang/String; == &getAuthor
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry; == &net/sourceforge/pebble/domain/Response.getBlogEntry
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getBody()Ljava/lang/String; == &getBody
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getComments()Ljava/util/List; == &getComments
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getContent()Ljava/lang/String; == &getContent
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getDate()Ljava/util/Date; == &net/sourceforge/pebble/domain/Response.getDate
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getEmail()Ljava/lang/String; == &getEmail
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getEvents()Ljava/util/List; == &net/sourceforge/pebble/domain/Content.getEvents
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getGuid()Ljava/lang/String; == &net/sourceforge/pebble/domain/Response.getGuid
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getId()J == &net/sourceforge/pebble/domain/Response.getId
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getIpAddress()Ljava/lang/String; == &net/sourceforge/pebble/domain/Response.getIpAddress
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getNumberOfParents()I == &getNumberOfParents
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getParent()Lnet/sourceforge/pebble/domain/Comment; == &getParent
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getPermalink()Ljava/lang/String; == &getPermalink
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getPropertyChangeEvents()Ljava/util/List; == &net/sourceforge/pebble/domain/Content.getPropertyChangeEvents
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getSourceLink()Ljava/lang/String; == &getSourceLink
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getSourceName()Ljava/lang/String; == &getSourceName
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getSpamScore()I == &net/sourceforge/pebble/domain/Response.getSpamScore
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State; == &net/sourceforge/pebble/domain/Content.getState
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getTitle()Ljava/lang/String; == &net/sourceforge/pebble/domain/Response.getTitle
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getTruncatedBody()Ljava/lang/String; == &getTruncatedBody
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getTruncatedContent()Ljava/lang/String; == &net/sourceforge/pebble/domain/Content.getTruncatedContent
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.getWebsite()Ljava/lang/String; == &getWebsite
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.hasEvents()Z == &net/sourceforge/pebble/domain/Content.hasEvents
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.hashCode()I == &hashCode
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.incrementSpamScore()V == &net/sourceforge/pebble/domain/Response.incrementSpamScore
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.insertEvent(Lnet/sourceforge/pebble/api/event/PebbleEvent;)V == &net/sourceforge/pebble/domain/Content.insertEvent
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.isApproved()Z == &net/sourceforge/pebble/domain/Response.isApproved
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.isAuthenticated()Z == &isAuthenticated
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.isDirty()Z == &net/sourceforge/pebble/domain/Content.isDirty
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.isPending()Z == &net/sourceforge/pebble/domain/Response.isPending
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.isRejected()Z == &net/sourceforge/pebble/domain/Response.isRejected
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.nextEvent()Lnet/sourceforge/pebble/api/event/PebbleEvent; == &net/sourceforge/pebble/domain/Content.nextEvent
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.removeComment(Lnet/sourceforge/pebble/domain/Comment;)V == &removeComment
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setApproved()V == &net/sourceforge/pebble/domain/Response.setApproved
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setAuthenticated(Z)V == &setAuthenticated
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setAuthor(Ljava/lang/String;)V == &setAuthor
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setBlogEntry(Lnet/sourceforge/pebble/domain/BlogEntry;)V == &net/sourceforge/pebble/domain/Response.setBlogEntry
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setBody(Ljava/lang/String;)V == &setBody
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setDate(Ljava/util/Date;)V == &net/sourceforge/pebble/domain/Response.setDate
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setEmail(Ljava/lang/String;)V == &setEmail
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setEventsEnabled(Z)V == &net/sourceforge/pebble/domain/Content.setEventsEnabled
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setIpAddress(Ljava/lang/String;)V == &net/sourceforge/pebble/domain/Response.setIpAddress
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setParent(Lnet/sourceforge/pebble/domain/Comment;)V == &setParent
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setPending()V == &net/sourceforge/pebble/domain/Response.setPending
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setRejected()V == &net/sourceforge/pebble/domain/Response.setRejected
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setState(Lnet/sourceforge/pebble/domain/State;)V == &setState
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setTitle(Ljava/lang/String;)V == &setTitle
    //#post(net.sourceforge.pebble.domain.Comment__static_init): __Dispatch_Table.setWebsite(Ljava/lang/String;)V == &setWebsite
    //#comment.java:: end of method: net.sourceforge.pebble.domain.Comment.net.sourceforge.pebble.domain.Comment__static_init
    //#comment.java:: end of class: net.sourceforge.pebble.domain.Comment
