//# 8 errors, 758 messages
//#
/*
    //#year.java:1:1: class: net.sourceforge.pebble.domain.Year
    //#year.java:1:1: method: net.sourceforge.pebble.domain.Year.net.sourceforge.pebble.domain.Year__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 java.util.Calendar;
import java.util.List;
import java.util.LinkedList;

/**
 * Represents a blog at a yearly level. This manages a collection of Month instances.
 *
 * @author    Simon Brown
 */
public class Year extends TimePeriod implements Comparable {

  /** the year that this blog is for */
  private int year;

  /** a collection of the monthly blogs that this instance is managing */
  private Month[] months;

  /**
   * Creates a new Year instance for the specified year.
   *
   * @param blog    the Blog on which this Year is based
   * @param year    the year that this Year is for
   */
  public Year(Blog blog, int year) {
    super(blog);
    //#year.java:58: method: void net.sourceforge.pebble.domain.Year.net.sourceforge.pebble.domain.Year(Blog, int)
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): __Descendant_Table[net/sourceforge/pebble/domain/Year]
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): __Descendant_Table[others]
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): __Dispatch_Table.getYear()I
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): __Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): blog
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Day.__Descendant_Table[net/sourceforge/pebble/domain/Day]
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Day.__Descendant_Table[others]
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getDay()I
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getMonth()Lnet/sourceforge/pebble/domain/Month;
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Month.__Descendant_Table[net/sourceforge/pebble/domain/Month]
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Month.__Descendant_Table[others]
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getMonth()I
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getYear()Lnet/sourceforge/pebble/domain/Year;
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): this
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): this.__Tag
    //#input(void net.sourceforge.pebble.domain.Year(Blog, int)): year
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new ArrayList(Day#1) num objects
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new ArrayList(Day#2) num objects
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new ArrayList(Day#3) num objects
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day(Month#2) num objects
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day(Month#2).__Tag
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day(Month#2).blog
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day(Month#2).blogEntries
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day(Month#2).date
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day(Month#2).day
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day(Month#2).month
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day(Month#2).publishedBlogEntries
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day(Month#2).unpublishedBlogEntries
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day[](Month#1) num objects
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day[](Month#1).length
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day[](Month#1)[0..4_294_967_295]
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2) num objects
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).__Tag
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).blog
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).dailyBlogs
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).date
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).lastDayInMonth
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).month
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).year
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month[](init#1) num objects
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): this.months.length
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): this.months[0..4_294_967_295]
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): this.__Tag
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): this.blog
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): this.date
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): this.months
    //#output(void net.sourceforge.pebble.domain.Year(Blog, int)): this.year
    //#new obj(void net.sourceforge.pebble.domain.Year(Blog, int)): new ArrayList(Day#1)
    //#new obj(void net.sourceforge.pebble.domain.Year(Blog, int)): new ArrayList(Day#2)
    //#new obj(void net.sourceforge.pebble.domain.Year(Blog, int)): new ArrayList(Day#3)
    //#new obj(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day(Month#2)
    //#new obj(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day[](Month#1)
    //#new obj(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2)
    //#new obj(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month[](init#1)
    //#pre[1] (void net.sourceforge.pebble.domain.Year(Blog, int)): blog != null
    //#pre[2] (void net.sourceforge.pebble.domain.Year(Blog, int)): this.__Tag == net/sourceforge/pebble/domain/Year
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): this.__Tag == net/sourceforge/pebble/domain/Year
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): this.blog != null
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(this.date)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): this.months == &new Month[](init#1)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): this.year == year
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(this.year)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new ArrayList(Day#1) num objects)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new ArrayList(Day#2) num objects)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new ArrayList(Day#3) num objects)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Day(Month#2) num objects)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Day(Month#2).__Tag)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Day(Month#2).blog)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Day(Month#2).blogEntries)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Day(Month#2).date)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Day(Month#2).day)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Day(Month#2).month)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Day(Month#2).publishedBlogEntries)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Day(Month#2).unpublishedBlogEntries)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): new Day[](Month#1) num objects == 12
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Day[](Month#1).length)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Day[](Month#1)[0..4_294_967_295])
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2) num objects == 12
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).__Tag == net/sourceforge/pebble/domain/Month
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).blog != null
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).dailyBlogs != null
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Month(init#2).date)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(new Month(init#2).lastDayInMonth)
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).month == 13
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month(init#2).year != null
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): new Month[](init#1) num objects == 1
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): this.months.length == 12
    //#post(void net.sourceforge.pebble.domain.Year(Blog, int)): init'ed(this.months[0..4_294_967_295])
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:getMonth
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:getBlog
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCalendar
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:java.util.Calendar:set
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:java.util.Calendar:getTime
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:setDate
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:net.sourceforge.pebble.domain.Month
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:net.sourceforge.pebble.domain.TimePeriod
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:java.util.Calendar:setTime
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:java.util.Calendar:getActualMaximum
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:getYear
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:net.sourceforge.pebble.domain.Month:getBlog
    //#unanalyzed(void net.sourceforge.pebble.domain.Year(Blog, int)): Effects-of-calling:java.util.ArrayList

    this.year = year;
    init();
  }
    //#year.java:62: end of method: void net.sourceforge.pebble.domain.Year.net.sourceforge.pebble.domain.Year(Blog, int)

  /**
   * Initialises internal data, such as the collection of Month instances.
   */
  private void init() {
    setDate(getCalendar().getTime());
    //#year.java:68: method: void net.sourceforge.pebble.domain.Year.init()
    //#input(void init()): __Descendant_Table[net/sourceforge/pebble/domain/Year]
    //#input(void init()): __Descendant_Table[others]
    //#input(void init()): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void init()): __Dispatch_Table.getYear()I
    //#input(void init()): __Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void init()): net/sourceforge/pebble/domain/Day.__Descendant_Table[net/sourceforge/pebble/domain/Day]
    //#input(void init()): net/sourceforge/pebble/domain/Day.__Descendant_Table[others]
    //#input(void init()): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void init()): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getDay()I
    //#input(void init()): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getMonth()Lnet/sourceforge/pebble/domain/Month;
    //#input(void init()): net/sourceforge/pebble/domain/Day.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void init()): net/sourceforge/pebble/domain/Month.__Descendant_Table[net/sourceforge/pebble/domain/Month]
    //#input(void init()): net/sourceforge/pebble/domain/Month.__Descendant_Table[others]
    //#input(void init()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void init()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(void init()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getMonth()I
    //#input(void init()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getYear()Lnet/sourceforge/pebble/domain/Year;
    //#input(void init()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(void init()): this
    //#input(void init()): this.__Tag
    //#input(void init()): this.blog
    //#input(void init()): this.year
    //#output(void init()): new ArrayList(Day#1) num objects
    //#output(void init()): new ArrayList(Day#2) num objects
    //#output(void init()): new ArrayList(Day#3) num objects
    //#output(void init()): new Day(Month#2) num objects
    //#output(void init()): new Day(Month#2).__Tag
    //#output(void init()): new Day(Month#2).blog
    //#output(void init()): new Day(Month#2).blogEntries
    //#output(void init()): new Day(Month#2).date
    //#output(void init()): new Day(Month#2).day
    //#output(void init()): new Day(Month#2).month
    //#output(void init()): new Day(Month#2).publishedBlogEntries
    //#output(void init()): new Day(Month#2).unpublishedBlogEntries
    //#output(void init()): new Day[](Month#1) num objects
    //#output(void init()): new Day[](Month#1).length
    //#output(void init()): new Day[](Month#1)[0..4_294_967_294]
    //#output(void init()): new Month(init#2) num objects
    //#output(void init()): new Month(init#2).__Tag
    //#output(void init()): new Month(init#2).blog
    //#output(void init()): new Month(init#2).dailyBlogs
    //#output(void init()): new Month(init#2).date
    //#output(void init()): new Month(init#2).lastDayInMonth
    //#output(void init()): new Month(init#2).month
    //#output(void init()): new Month(init#2).year
    //#output(void init()): new Month[](init#1) num objects
    //#output(void init()): this.months.length
    //#output(void init()): this.months[0..11]
    //#output(void init()): this.date
    //#output(void init()): this.months
    //#output(void init()): this.months[0..4_294_967_294]
    //#new obj(void init()): new ArrayList(Day#1)
    //#new obj(void init()): new ArrayList(Day#2)
    //#new obj(void init()): new ArrayList(Day#3)
    //#new obj(void init()): new Day(Month#2)
    //#new obj(void init()): new Day[](Month#1)
    //#new obj(void init()): new Month(init#2)
    //#new obj(void init()): new Month[](init#1)
    //#pre[3] (void init()): this.__Tag == net/sourceforge/pebble/domain/Year
    //#pre[4] (void init()): this.blog != null
    //#pre[5] (void init()): init'ed(this.year)
    //#post(void init()): init'ed(this.date)
    //#post(void init()): this.months == &new Month[](init#1)
    //#post(void init()): init'ed(this.months[0..4_294_967_294])
    //#post(void init()): init'ed(new ArrayList(Day#1) num objects)
    //#post(void init()): init'ed(new ArrayList(Day#2) num objects)
    //#post(void init()): init'ed(new ArrayList(Day#3) num objects)
    //#post(void init()): init'ed(new Day(Month#2) num objects)
    //#post(void init()): init'ed(new Day(Month#2).__Tag)
    //#post(void init()): init'ed(new Day(Month#2).blog)
    //#post(void init()): init'ed(new Day(Month#2).blogEntries)
    //#post(void init()): init'ed(new Day(Month#2).date)
    //#post(void init()): init'ed(new Day(Month#2).day)
    //#post(void init()): init'ed(new Day(Month#2).month)
    //#post(void init()): init'ed(new Day(Month#2).publishedBlogEntries)
    //#post(void init()): init'ed(new Day(Month#2).unpublishedBlogEntries)
    //#post(void init()): new Day[](Month#1) num objects == 12
    //#post(void init()): init'ed(new Day[](Month#1).length)
    //#post(void init()): init'ed(new Day[](Month#1)[0..4_294_967_294])
    //#post(void init()): new Month(init#2) num objects == 12
    //#post(void init()): new Month(init#2).__Tag == net/sourceforge/pebble/domain/Month
    //#post(void init()): new Month(init#2).blog != null
    //#post(void init()): new Month(init#2).dailyBlogs != null
    //#post(void init()): init'ed(new Month(init#2).date)
    //#post(void init()): init'ed(new Month(init#2).lastDayInMonth)
    //#post(void init()): new Month(init#2).month == 13
    //#post(void init()): new Month(init#2).year != null
    //#post(void init()): new Month[](init#1) num objects == 1
    //#post(void init()): this.months.length == 12
    //#post(void init()): init'ed(this.months[0..11])
    //#unanalyzed(void init()): Effects-of-calling:getMonth
    //#unanalyzed(void init()): Effects-of-calling:getBlog
    //#unanalyzed(void init()): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCalendar
    //#unanalyzed(void init()): Effects-of-calling:java.util.Calendar:set
    //#unanalyzed(void init()): Effects-of-calling:setDate
    //#unanalyzed(void init()): Effects-of-calling:net.sourceforge.pebble.domain.TimePeriod
    //#unanalyzed(void init()): Effects-of-calling:java.util.Calendar:getTime
    //#unanalyzed(void init()): Effects-of-calling:java.util.Calendar:setTime
    //#unanalyzed(void init()): Effects-of-calling:java.util.Calendar:getActualMaximum
    //#unanalyzed(void init()): Effects-of-calling:getYear
    //#unanalyzed(void init()): Effects-of-calling:net.sourceforge.pebble.domain.Month:getBlog
    //#unanalyzed(void init()): Effects-of-calling:java.util.ArrayList
    this.months = new Month[12];

    for (int i = 1; i <= 12; i++) {
      months[i-1] = new Month(this, i);
    }
  }
    //#year.java:74: end of method: void net.sourceforge.pebble.domain.Year.init()

  private Calendar getCalendar() {
    // set the date corresponding to the 1st of January of the specified year
    Calendar cal = getBlog().getCalendar();
    //#year.java:78: method: Calendar net.sourceforge.pebble.domain.Year.getCalendar()
    //#year.java:78: Warning: method not available
    //#    -- call on Calendar net.sourceforge.pebble.domain.Blog:getCalendar()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.domain.Year
    //#    method: Calendar getCalendar()
    //#    unanalyzed callee: Calendar net.sourceforge.pebble.domain.Blog:getCalendar()
    //#input(Calendar getCalendar()): __Descendant_Table[net/sourceforge/pebble/domain/Year]
    //#input(Calendar getCalendar()): __Descendant_Table[others]
    //#input(Calendar getCalendar()): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(Calendar getCalendar()): this
    //#input(Calendar getCalendar()): this.__Tag
    //#input(Calendar getCalendar()): this.blog
    //#input(Calendar getCalendar()): this.year
    //#output(Calendar getCalendar()): return_value
    //#pre[2] (Calendar getCalendar()): this.__Tag == net/sourceforge/pebble/domain/Year
    //#pre[3] (Calendar getCalendar()): this.blog != null
    //#pre[4] (Calendar getCalendar()): init'ed(this.year)
    //#presumption(Calendar getCalendar()): net.sourceforge.pebble.domain.Blog:getCalendar(...)@78 != null
    //#post(Calendar getCalendar()): (soft) return_value != null
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, 0);
    cal.set(Calendar.DAY_OF_MONTH, 2);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);

    return cal;
    //#year.java:87: end of method: Calendar net.sourceforge.pebble.domain.Year.getCalendar()
  }

  /**
   * Gets an integer representing the year that this yearly blog is for.
   *
   * @return  an int representing the year (e.g. 2003)
   */
  public int getYear() {
    return year;
    //#year.java:96: method: int net.sourceforge.pebble.domain.Year.getYear()
    //#input(int getYear()): this
    //#input(int getYear()): this.year
    //#output(int getYear()): return_value
    //#pre[2] (int getYear()): init'ed(this.year)
    //#post(int getYear()): return_value == this.year
    //#post(int getYear()): init'ed(return_value)
    //#year.java:96: end of method: int net.sourceforge.pebble.domain.Year.getYear()
  }

  /**
   * Gets the Month for the specified month. Months are lazy
   * loaded as needed.
   *
   * @param month   the month as an int
   * @return  a Month instance
   */
  public synchronized Month getBlogForMonth(int month) {

    // some bounds checking
    if (month < 1 || month > 12) {
    //#year.java:109: method: Month net.sourceforge.pebble.domain.Year.getBlogForMonth(int)
    //#input(Month getBlogForMonth(int)): month
    //#input(Month getBlogForMonth(int)): this
    //#input(Month getBlogForMonth(int)): this.months
    //#input(Month getBlogForMonth(int)): this.months.length
    //#input(Month getBlogForMonth(int)): this.months[0..11]
    //#output(Month getBlogForMonth(int)): return_value
    //#pre[1] (Month getBlogForMonth(int)): month in 1..12
    //#pre[3] (Month getBlogForMonth(int)): this.months != null
    //#pre[4] (Month getBlogForMonth(int)): this.months.length >= 1
    //#pre[5] (Month getBlogForMonth(int)): month <= this.months.length
    //#pre[6] (Month getBlogForMonth(int)): (soft) init'ed(this.months[0..11])
    //#post(Month getBlogForMonth(int)): return_value == this.months[0..11]
    //#post(Month getBlogForMonth(int)): init'ed(return_value)
      throw new IllegalArgumentException("Invalid month of " + month + " specified, should be between 1 and 12");
    }

    return months[month-1];
    //#year.java:113: end of method: Month net.sourceforge.pebble.domain.Year.getBlogForMonth(int)
  }

  /**
   * Given a Month, this method returns the Month instance for the
   * previous month.
   *
   * @param month   a Month instance
   * @return  a Month instance representing the previous month
   */
  Month getBlogForPreviousMonth(Month month) {
    if (month.getMonth() > 1) {
    //#year.java:124: method: Month net.sourceforge.pebble.domain.Year.getBlogForPreviousMonth(Month)
    //#input(Month getBlogForPreviousMonth(Month)): __Descendant_Table[net/sourceforge/pebble/domain/Year]
    //#input(Month getBlogForPreviousMonth(Month)): __Descendant_Table[others]
    //#input(Month getBlogForPreviousMonth(Month)): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(Month getBlogForPreviousMonth(Month)): __Dispatch_Table.getBlogForMonth(I)Lnet/sourceforge/pebble/domain/Month;
    //#input(Month getBlogForPreviousMonth(Month)): __Dispatch_Table.getYear()I
    //#input(Month getBlogForPreviousMonth(Month)): __Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(Month getBlogForPreviousMonth(Month)): month
    //#input(Month getBlogForPreviousMonth(Month)): month.__Tag
    //#input(Month getBlogForPreviousMonth(Month)): month.month
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getBlogForPreviousYear(Lnet/sourceforge/pebble/domain/Year;)Lnet/sourceforge/pebble/domain/Year;
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getBlogForYear(I)Lnet/sourceforge/pebble/domain/Year;
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Day.__Descendant_Table[net/sourceforge/pebble/domain/Day]
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Day.__Descendant_Table[others]
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getDay()I
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getMonth()Lnet/sourceforge/pebble/domain/Month;
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Month.__Descendant_Table[net/sourceforge/pebble/domain/Month]
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Month.__Descendant_Table[others]
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getMonth()I
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getYear()Lnet/sourceforge/pebble/domain/Year;
    //#input(Month getBlogForPreviousMonth(Month)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(Month getBlogForPreviousMonth(Month)): this
    //#input(Month getBlogForPreviousMonth(Month)): this.__Tag
    //#input(Month getBlogForPreviousMonth(Month)): this.blog
    //#input(Month getBlogForPreviousMonth(Month)): this.blog.__Tag
    //#input(Month getBlogForPreviousMonth(Month)): this.blog.years
    //#input(Month getBlogForPreviousMonth(Month)): this.months
    //#input(Month getBlogForPreviousMonth(Month)): this.months.length
    //#input(Month getBlogForPreviousMonth(Month)): this.months[0..4_294_967_294]
    //#input(Month getBlogForPreviousMonth(Month)): this.year
    //#output(Month getBlogForPreviousMonth(Month)): new ArrayList(Day#1) num objects
    //#output(Month getBlogForPreviousMonth(Month)): new ArrayList(Day#2) num objects
    //#output(Month getBlogForPreviousMonth(Month)): new ArrayList(Day#3) num objects
    //#output(Month getBlogForPreviousMonth(Month)): new Day(Month#2) num objects
    //#output(Month getBlogForPreviousMonth(Month)): new Day(Month#2).__Tag
    //#output(Month getBlogForPreviousMonth(Month)): new Day(Month#2).blog
    //#output(Month getBlogForPreviousMonth(Month)): new Day(Month#2).blogEntries
    //#output(Month getBlogForPreviousMonth(Month)): new Day(Month#2).date
    //#output(Month getBlogForPreviousMonth(Month)): new Day(Month#2).day
    //#output(Month getBlogForPreviousMonth(Month)): new Day(Month#2).month
    //#output(Month getBlogForPreviousMonth(Month)): new Day(Month#2).publishedBlogEntries
    //#output(Month getBlogForPreviousMonth(Month)): new Day(Month#2).unpublishedBlogEntries
    //#output(Month getBlogForPreviousMonth(Month)): new Day[](Month#1) num objects
    //#output(Month getBlogForPreviousMonth(Month)): new Day[](Month#1).length
    //#output(Month getBlogForPreviousMonth(Month)): new Day[](Month#1)[0..4_294_967_295]
    //#output(Month getBlogForPreviousMonth(Month)): new Month(init#2) num objects
    //#output(Month getBlogForPreviousMonth(Month)): new Month(init#2).__Tag
    //#output(Month getBlogForPreviousMonth(Month)): new Month(init#2).blog
    //#output(Month getBlogForPreviousMonth(Month)): new Month(init#2).dailyBlogs
    //#output(Month getBlogForPreviousMonth(Month)): new Month(init#2).date
    //#output(Month getBlogForPreviousMonth(Month)): new Month(init#2).lastDayInMonth
    //#output(Month getBlogForPreviousMonth(Month)): new Month(init#2).month
    //#output(Month getBlogForPreviousMonth(Month)): new Month(init#2).year
    //#output(Month getBlogForPreviousMonth(Month)): return_value
    //#new obj(Month getBlogForPreviousMonth(Month)): new ArrayList(Day#1)
    //#new obj(Month getBlogForPreviousMonth(Month)): new ArrayList(Day#2)
    //#new obj(Month getBlogForPreviousMonth(Month)): new ArrayList(Day#3)
    //#new obj(Month getBlogForPreviousMonth(Month)): new Day(Month#2)
    //#new obj(Month getBlogForPreviousMonth(Month)): new Day[](Month#1)
    //#new obj(Month getBlogForPreviousMonth(Month)): new Month(init#2)
    //#pre[1] (Month getBlogForPreviousMonth(Month)): month != null
    //#pre[2] (Month getBlogForPreviousMonth(Month)): month.__Tag == net/sourceforge/pebble/domain/Month
    //#pre[3] (Month getBlogForPreviousMonth(Month)): month.month <= 13
    //#pre[6] (Month getBlogForPreviousMonth(Month)): this.__Tag == net/sourceforge/pebble/domain/Year
    //#pre[4] (Month getBlogForPreviousMonth(Month)): (soft) month.month <= this.months.length + 1
    //#pre[7] (Month getBlogForPreviousMonth(Month)): (soft) this.blog != null
    //#pre[8] (Month getBlogForPreviousMonth(Month)): (soft) this.blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[9] (Month getBlogForPreviousMonth(Month)): (soft) this.blog.years != null
    //#pre[10] (Month getBlogForPreviousMonth(Month)): (soft) this.months != null
    //#pre[12] (Month getBlogForPreviousMonth(Month)): (soft) init'ed(this.months[0..4_294_967_294])
    //#pre[13] (Month getBlogForPreviousMonth(Month)): (soft) this.year >= -2_147_483_647
    //#presumption(Month getBlogForPreviousMonth(Month)): getBlogForPreviousYear(...).__Tag@127 == net/sourceforge/pebble/domain/Year
    //#presumption(Month getBlogForPreviousMonth(Month)): getBlogForPreviousYear(...).months.length@127 >= 12
    //#presumption(Month getBlogForPreviousMonth(Month)): getBlogForPreviousYear(...).months@127 != null
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(return_value)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new ArrayList(Day#1) num objects)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new ArrayList(Day#2) num objects)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new ArrayList(Day#3) num objects)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Day(Month#2) num objects)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Day(Month#2).__Tag)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Day(Month#2).blog)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Day(Month#2).blogEntries)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Day(Month#2).date)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Day(Month#2).day)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Day(Month#2).month)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Day(Month#2).publishedBlogEntries)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Day(Month#2).unpublishedBlogEntries)
    //#post(Month getBlogForPreviousMonth(Month)): new Day[](Month#1) num objects in {0, 12}
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Day[](Month#1).length)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Day[](Month#1)[0..4_294_967_295])
    //#post(Month getBlogForPreviousMonth(Month)): new Month(init#2) num objects in {0, 12}
    //#post(Month getBlogForPreviousMonth(Month)): new Month(init#2).__Tag == net/sourceforge/pebble/domain/Month
    //#post(Month getBlogForPreviousMonth(Month)): new Month(init#2).blog != null
    //#post(Month getBlogForPreviousMonth(Month)): new Month(init#2).dailyBlogs != null
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Month(init#2).date)
    //#post(Month getBlogForPreviousMonth(Month)): init'ed(new Month(init#2).lastDayInMonth)
    //#post(Month getBlogForPreviousMonth(Month)): new Month(init#2).month == 13
    //#post(Month getBlogForPreviousMonth(Month)): new Month(init#2).year != null
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:getMonth
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:getBlog
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCalendar
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.util.Calendar:set
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.util.Calendar:getTime
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:setDate
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:net.sourceforge.pebble.domain.Month
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:net.sourceforge.pebble.domain.TimePeriod
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.util.List:add
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.util.Calendar:setTime
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.util.Calendar:getActualMaximum
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:getYear
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:net.sourceforge.pebble.domain.Month:getBlog
    //#unanalyzed(Month getBlogForPreviousMonth(Month)): Effects-of-calling:java.util.ArrayList
    //#test_vector(Month getBlogForPreviousMonth(Month)): month.month: {-2_147_483_648..1}, {2..13}
      return this.getBlogForMonth(month.getMonth() - 1);
    } else {
      return getBlog().getBlogForPreviousYear(this).getBlogForMonth(12);
    //#year.java:127: ?use of default init
    //#    init'ed(getBlogForPreviousYear(...).__Tag)
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.Year
    //#    method: Month getBlogForPreviousMonth(Month)
    //#    basic block: bb_3
    //#    assertion: init'ed(getBlogForPreviousYear(...).__Tag)
    //#    VN: getBlogForPreviousYear(...).__Tag
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#year.java:127: ?null dereference
    //#    __Descendant_Table[getBlogForPreviousYear(...).__Tag] != null
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.Year
    //#    method: Month getBlogForPreviousMonth(Month)
    //#    basic block: bb_3
    //#    assertion: __Descendant_Table[getBlogForPreviousYear(...).__Tag] != null
    //#    VN: __Descendant_Table[getBlogForPreviousYear(...).__Tag]
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#year.java:127: end of method: Month net.sourceforge.pebble.domain.Year.getBlogForPreviousMonth(Month)
    }
  }

  /**
   * Given a Month, this method returns the Month instance for the
   * next month.
   *
   * @param month   a Month instance
   * @return  a Month instance representing the next month
   */
  Month getBlogForNextMonth(Month month) {
    if (month.getMonth() < 12) {
    //#year.java:139: method: Month net.sourceforge.pebble.domain.Year.getBlogForNextMonth(Month)
    //#year.java:139: Warning: suspicious precondition
    //#    the precondition for month.month - this.months.length is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.Year
    //#    method: Month getBlogForNextMonth(Month)
    //#    suspicious precondition index: [4]
    //#    Attribs:  Soft
    //#input(Month getBlogForNextMonth(Month)): __Descendant_Table[net/sourceforge/pebble/domain/Year]
    //#input(Month getBlogForNextMonth(Month)): __Descendant_Table[others]
    //#input(Month getBlogForNextMonth(Month)): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(Month getBlogForNextMonth(Month)): __Dispatch_Table.getBlogForMonth(I)Lnet/sourceforge/pebble/domain/Month;
    //#input(Month getBlogForNextMonth(Month)): __Dispatch_Table.getYear()I
    //#input(Month getBlogForNextMonth(Month)): __Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(Month getBlogForNextMonth(Month)): month
    //#input(Month getBlogForNextMonth(Month)): month.__Tag
    //#input(Month getBlogForNextMonth(Month)): month.month
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getBlogForNextYear(Lnet/sourceforge/pebble/domain/Year;)Lnet/sourceforge/pebble/domain/Year;
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getBlogForYear(I)Lnet/sourceforge/pebble/domain/Year;
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Day.__Descendant_Table[net/sourceforge/pebble/domain/Day]
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Day.__Descendant_Table[others]
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getDay()I
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getMonth()Lnet/sourceforge/pebble/domain/Month;
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Day.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Month.__Descendant_Table[net/sourceforge/pebble/domain/Month]
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Month.__Descendant_Table[others]
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getMonth()I
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getYear()Lnet/sourceforge/pebble/domain/Year;
    //#input(Month getBlogForNextMonth(Month)): net/sourceforge/pebble/domain/Month.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(Month getBlogForNextMonth(Month)): this
    //#input(Month getBlogForNextMonth(Month)): this.__Tag
    //#input(Month getBlogForNextMonth(Month)): this.blog
    //#input(Month getBlogForNextMonth(Month)): this.blog.__Tag
    //#input(Month getBlogForNextMonth(Month)): this.blog.years
    //#input(Month getBlogForNextMonth(Month)): this.months
    //#input(Month getBlogForNextMonth(Month)): this.months.length
    //#input(Month getBlogForNextMonth(Month)): this.months[0..4_294_967_294]
    //#input(Month getBlogForNextMonth(Month)): this.year
    //#output(Month getBlogForNextMonth(Month)): new ArrayList(Day#1) num objects
    //#output(Month getBlogForNextMonth(Month)): new ArrayList(Day#2) num objects
    //#output(Month getBlogForNextMonth(Month)): new ArrayList(Day#3) num objects
    //#output(Month getBlogForNextMonth(Month)): new Day(Month#2) num objects
    //#output(Month getBlogForNextMonth(Month)): new Day(Month#2).__Tag
    //#output(Month getBlogForNextMonth(Month)): new Day(Month#2).blog
    //#output(Month getBlogForNextMonth(Month)): new Day(Month#2).blogEntries
    //#output(Month getBlogForNextMonth(Month)): new Day(Month#2).date
    //#output(Month getBlogForNextMonth(Month)): new Day(Month#2).day
    //#output(Month getBlogForNextMonth(Month)): new Day(Month#2).month
    //#output(Month getBlogForNextMonth(Month)): new Day(Month#2).publishedBlogEntries
    //#output(Month getBlogForNextMonth(Month)): new Day(Month#2).unpublishedBlogEntries
    //#output(Month getBlogForNextMonth(Month)): new Day[](Month#1) num objects
    //#output(Month getBlogForNextMonth(Month)): new Day[](Month#1).length
    //#output(Month getBlogForNextMonth(Month)): new Day[](Month#1)[0..4_294_967_295]
    //#output(Month getBlogForNextMonth(Month)): new Month(init#2) num objects
    //#output(Month getBlogForNextMonth(Month)): new Month(init#2).__Tag
    //#output(Month getBlogForNextMonth(Month)): new Month(init#2).blog
    //#output(Month getBlogForNextMonth(Month)): new Month(init#2).dailyBlogs
    //#output(Month getBlogForNextMonth(Month)): new Month(init#2).date
    //#output(Month getBlogForNextMonth(Month)): new Month(init#2).lastDayInMonth
    //#output(Month getBlogForNextMonth(Month)): new Month(init#2).month
    //#output(Month getBlogForNextMonth(Month)): new Month(init#2).year
    //#output(Month getBlogForNextMonth(Month)): return_value
    //#new obj(Month getBlogForNextMonth(Month)): new ArrayList(Day#1)
    //#new obj(Month getBlogForNextMonth(Month)): new ArrayList(Day#2)
    //#new obj(Month getBlogForNextMonth(Month)): new ArrayList(Day#3)
    //#new obj(Month getBlogForNextMonth(Month)): new Day(Month#2)
    //#new obj(Month getBlogForNextMonth(Month)): new Day[](Month#1)
    //#new obj(Month getBlogForNextMonth(Month)): new Month(init#2)
    //#pre[1] (Month getBlogForNextMonth(Month)): month != null
    //#pre[2] (Month getBlogForNextMonth(Month)): month.__Tag == net/sourceforge/pebble/domain/Month
    //#pre[3] (Month getBlogForNextMonth(Month)): month.month >= 0
    //#pre[6] (Month getBlogForNextMonth(Month)): this.__Tag == net/sourceforge/pebble/domain/Year
    //#pre[4] (Month getBlogForNextMonth(Month)): (soft) month.month - this.months.length in {-Inf..-1, 12..4_294_967_295}
    //#pre[7] (Month getBlogForNextMonth(Month)): (soft) this.blog != null
    //#pre[8] (Month getBlogForNextMonth(Month)): (soft) this.blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[9] (Month getBlogForNextMonth(Month)): (soft) this.blog.years != null
    //#pre[10] (Month getBlogForNextMonth(Month)): (soft) this.months != null
    //#pre[12] (Month getBlogForNextMonth(Month)): (soft) init'ed(this.months[0..4_294_967_294])
    //#pre[13] (Month getBlogForNextMonth(Month)): (soft) this.year <= 4_294_967_294
    //#presumption(Month getBlogForNextMonth(Month)): getBlogForNextYear(...).__Tag@142 == net/sourceforge/pebble/domain/Year
    //#presumption(Month getBlogForNextMonth(Month)): getBlogForNextYear(...).months.length@142 >= 1
    //#presumption(Month getBlogForNextMonth(Month)): getBlogForNextYear(...).months@142 != null
    //#post(Month getBlogForNextMonth(Month)): init'ed(return_value)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new ArrayList(Day#1) num objects)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new ArrayList(Day#2) num objects)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new ArrayList(Day#3) num objects)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Day(Month#2) num objects)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Day(Month#2).__Tag)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Day(Month#2).blog)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Day(Month#2).blogEntries)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Day(Month#2).date)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Day(Month#2).day)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Day(Month#2).month)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Day(Month#2).publishedBlogEntries)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Day(Month#2).unpublishedBlogEntries)
    //#post(Month getBlogForNextMonth(Month)): new Day[](Month#1) num objects in {0, 12}
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Day[](Month#1).length)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Day[](Month#1)[0..4_294_967_295])
    //#post(Month getBlogForNextMonth(Month)): new Month(init#2) num objects in {0, 12}
    //#post(Month getBlogForNextMonth(Month)): new Month(init#2).__Tag == net/sourceforge/pebble/domain/Month
    //#post(Month getBlogForNextMonth(Month)): new Month(init#2).blog != null
    //#post(Month getBlogForNextMonth(Month)): new Month(init#2).dailyBlogs != null
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Month(init#2).date)
    //#post(Month getBlogForNextMonth(Month)): init'ed(new Month(init#2).lastDayInMonth)
    //#post(Month getBlogForNextMonth(Month)): new Month(init#2).month == 13
    //#post(Month getBlogForNextMonth(Month)): new Month(init#2).year != null
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:getMonth
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:getBlog
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCalendar
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.util.Calendar:set
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.util.Calendar:getTime
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:setDate
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:net.sourceforge.pebble.domain.Month
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:net.sourceforge.pebble.domain.TimePeriod
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.util.List:add
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.util.Calendar:setTime
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.util.Calendar:getActualMaximum
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:getYear
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:net.sourceforge.pebble.domain.Month:getBlog
    //#unanalyzed(Month getBlogForNextMonth(Month)): Effects-of-calling:java.util.ArrayList
    //#test_vector(Month getBlogForNextMonth(Month)): month.month: {12..4_294_967_295}, {0..11}
      return this.getBlogForMonth(month.getMonth() + 1);
    } else {
      return getBlog().getBlogForNextYear(this).getBlogForMonth(1);
    //#year.java:142: ?use of default init
    //#    init'ed(getBlogForNextYear(...).__Tag)
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.Year
    //#    method: Month getBlogForNextMonth(Month)
    //#    basic block: bb_3
    //#    assertion: init'ed(getBlogForNextYear(...).__Tag)
    //#    VN: getBlogForNextYear(...).__Tag
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#year.java:142: ?null dereference
    //#    __Descendant_Table[getBlogForNextYear(...).__Tag] != null
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.domain.Year
    //#    method: Month getBlogForNextMonth(Month)
    //#    basic block: bb_3
    //#    assertion: __Descendant_Table[getBlogForNextYear(...).__Tag] != null
    //#    VN: __Descendant_Table[getBlogForNextYear(...).__Tag]
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#year.java:142: end of method: Month net.sourceforge.pebble.domain.Year.getBlogForNextMonth(Month)
    }
  }

  /**
   * Gets the first Month that actually contains blog entries.
   *
   * @return  a Month instance
   */
  public Month getBlogForFirstMonth() {
    return getBlogForMonth(1);
    //#year.java:152: method: Month net.sourceforge.pebble.domain.Year.getBlogForFirstMonth()
    //#input(Month getBlogForFirstMonth()): __Descendant_Table[net/sourceforge/pebble/domain/Year]
    //#input(Month getBlogForFirstMonth()): __Descendant_Table[others]
    //#input(Month getBlogForFirstMonth()): __Dispatch_Table.getBlogForMonth(I)Lnet/sourceforge/pebble/domain/Month;
    //#input(Month getBlogForFirstMonth()): this
    //#input(Month getBlogForFirstMonth()): this.__Tag
    //#input(Month getBlogForFirstMonth()): this.months
    //#input(Month getBlogForFirstMonth()): this.months.length
    //#input(Month getBlogForFirstMonth()): this.months[0..4_294_967_294]
    //#output(Month getBlogForFirstMonth()): return_value
    //#pre[2] (Month getBlogForFirstMonth()): this.__Tag == net/sourceforge/pebble/domain/Year
    //#pre[3] (Month getBlogForFirstMonth()): this.months != null
    //#pre[4] (Month getBlogForFirstMonth()): this.months.length >= 1
    //#pre[5] (Month getBlogForFirstMonth()): (soft) init'ed(this.months[0..4_294_967_294])
    //#post(Month getBlogForFirstMonth()): return_value == this.months[0..4_294_967_294]
    //#post(Month getBlogForFirstMonth()): init'ed(return_value)
    //#unanalyzed(Month getBlogForFirstMonth()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(Month getBlogForFirstMonth()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(Month getBlogForFirstMonth()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(Month getBlogForFirstMonth()): Effects-of-calling:java.lang.IllegalArgumentException
    //#year.java:152: end of method: Month net.sourceforge.pebble.domain.Year.getBlogForFirstMonth()
  }

  /**
   * Gets a collection of all Months managed by this blog.
   *
   * @return  a Collection of Month instances
   */
  public Month[] getMonths() {
    Month[] months = new Month[12];
    //#year.java:161: method: Month[] net.sourceforge.pebble.domain.Year.getMonths()
    //#input(Month[] getMonths()): __Descendant_Table[net/sourceforge/pebble/domain/Year]
    //#input(Month[] getMonths()): __Descendant_Table[others]
    //#input(Month[] getMonths()): __Dispatch_Table.getBlogForMonth(I)Lnet/sourceforge/pebble/domain/Month;
    //#input(Month[] getMonths()): this
    //#input(Month[] getMonths()): this.__Tag
    //#input(Month[] getMonths()): this.months
    //#input(Month[] getMonths()): this.months.length
    //#input(Month[] getMonths()): this.months[0..4_294_967_294]
    //#output(Month[] getMonths()): new Month[](getMonths#1) num objects
    //#output(Month[] getMonths()): return_value.length
    //#output(Month[] getMonths()): return_value[0..12]
    //#output(Month[] getMonths()): return_value
    //#new obj(Month[] getMonths()): new Month[](getMonths#1)
    //#pre[2] (Month[] getMonths()): (soft) this.__Tag == net/sourceforge/pebble/domain/Year
    //#pre[3] (Month[] getMonths()): (soft) this.months != null
    //#pre[4] (Month[] getMonths()): (soft) this.months.length >= 1
    //#pre[5] (Month[] getMonths()): (soft) init'ed(this.months[0..4_294_967_294])
    //#post(Month[] getMonths()): return_value == &new Month[](getMonths#1)
    //#post(Month[] getMonths()): new Month[](getMonths#1) num objects == 1
    //#post(Month[] getMonths()): return_value.length == 12
    //#post(Month[] getMonths()): return_value[0..12] == null
    //#unanalyzed(Month[] getMonths()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(Month[] getMonths()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(Month[] getMonths()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(Month[] getMonths()): Effects-of-calling:java.lang.IllegalArgumentException
    for (int i = 1; i <= 12; i++) {
      months[i-1] = getBlogForMonth(i);
    //#year.java:163: ?precondition failure
    //#    net/sourceforge/pebble/domain/Year.getBlogForMonth: month <= this.months.length
    //#    severity: LOW
    //#    class: net.sourceforge.pebble.domain.Year
    //#    method: Month[] getMonths()
    //#    basic block: bb_2
    //#    assertion: i <= this.months.length
    //#    callee: Month net/sourceforge/pebble/domain/Year.getBlogForMonth(int)
    //#    callee assertion: month <= this.months.length
    //#    callee file: year.java
    //#    callee precondition index: [5]
    //#    callee srcpos: 109
    //#    VN: -(i - this.months.length)
    //#    Expected: {0..+Inf}
    //#    Bad: {-1}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Bad < Exp
    }

    return months;
    //#year.java:166: end of method: Month[] net.sourceforge.pebble.domain.Year.getMonths()
  }

  /**
   * Gets a collection of all Months, to date and in reverse order.
   *
   * @return  a Collection of Month instances
   */
  public List<Month> getArchives() {
    List<Month> list = new LinkedList<Month>();
    //#year.java:175: method: List net.sourceforge.pebble.domain.Year.getArchives()
    //#input(List getArchives()): __Descendant_Table[net/sourceforge/pebble/domain/Year]
    //#input(List getArchives()): __Descendant_Table[others]
    //#input(List getArchives()): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(List getArchives()): __Dispatch_Table.getBlogForMonth(I)Lnet/sourceforge/pebble/domain/Month;
    //#input(List getArchives()): __Dispatch_Table.getYear()I
    //#input(List getArchives()): __Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(List getArchives()): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/AbstractBlog]
    //#input(List getArchives()): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(List getArchives()): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/MultiBlog]
    //#input(List getArchives()): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[others]
    //#input(List getArchives()): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getCountry()Ljava/lang/String;
    //#input(List getArchives()): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getLanguage()Ljava/lang/String;
    //#input(List getArchives()): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getLocale()Ljava/util/Locale;
    //#input(List getArchives()): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getTimeZone()Ljava/util/TimeZone;
    //#input(List getArchives()): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getBlogEntryIndex()Lnet/sourceforge/pebble/index/BlogEntryIndex;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getBlogForDay(III)Lnet/sourceforge/pebble/domain/Day;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getBlogForDay(Ljava/util/Date;)Lnet/sourceforge/pebble/domain/Day;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getBlogForFirstMonth()Lnet/sourceforge/pebble/domain/Month;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getBlogForMonth(II)Lnet/sourceforge/pebble/domain/Month;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getBlogForThisMonth()Lnet/sourceforge/pebble/domain/Month;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getBlogForYear(I)Lnet/sourceforge/pebble/domain/Year;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getCountry()Ljava/lang/String;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getLanguage()Ljava/lang/String;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getLocale()Ljava/util/Locale;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZone()Ljava/util/TimeZone;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Day.__Descendant_Table[net/sourceforge/pebble/domain/Day]
    //#input(List getArchives()): net/sourceforge/pebble/domain/Day.__Descendant_Table[others]
    //#input(List getArchives()): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getDay()I
    //#input(List getArchives()): net/sourceforge/pebble/domain/Day.__Dispatch_Table.getMonth()Lnet/sourceforge/pebble/domain/Month;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Day.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(List getArchives()): net/sourceforge/pebble/domain/Month.__Descendant_Table[net/sourceforge/pebble/domain/Month]
    //#input(List getArchives()): net/sourceforge/pebble/domain/Month.__Descendant_Table[others]
    //#input(List getArchives()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.after(Lnet/sourceforge/pebble/domain/Month;)Z
    //#input(List getArchives()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.before(Lnet/sourceforge/pebble/domain/Month;)Z
    //#input(List getArchives()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getBlogForDay(I)Lnet/sourceforge/pebble/domain/Day;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getMonth()I
    //#input(List getArchives()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.getYear()Lnet/sourceforge/pebble/domain/Year;
    //#input(List getArchives()): net/sourceforge/pebble/domain/Month.__Dispatch_Table.setDate(Ljava/util/Date;)V
    //#input(List getArchives()): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getCountry()Ljava/lang/String;
    //#input(List getArchives()): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getLanguage()Ljava/lang/String;
    //#input(List getArchives()): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getLocale()Ljava/util/Locale;
    //#input(List getArchives()): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getTimeZone()Ljava/util/TimeZone;
    //#input(List getArchives()): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(List getArchives()): net/sourceforge/pebble/index/BlogEntryIndex.__Descendant_Table[net/sourceforge/pebble/index/BlogEntryIndex]
    //#input(List getArchives()): net/sourceforge/pebble/index/BlogEntryIndex.__Descendant_Table[others]
    //#input(List getArchives()): net/sourceforge/pebble/index/BlogEntryIndex.__Dispatch_Table.getBlogEntries()Ljava/util/List;
    //#input(List getArchives()): this
    //#input(List getArchives()): this.__Tag
    //#input(List getArchives()): this.blog
    //#input(List getArchives()): this.blog.__Tag
    //#input(List getArchives()): this.blog.blogEntryIndex
    //#input(List getArchives()): this.blog.blogEntryIndex.__Tag
    //#input(List getArchives()): this.blog.blogEntryIndex.indexEntries
    //#input(List getArchives()): this.blog.properties
    //#input(List getArchives()): this.blog.years
    //#input(List getArchives()): this.months
    //#input(List getArchives()): this.months.length
    //#input(List getArchives()): this.months[0..4_294_967_294]
    //#input(List getArchives()): this.months[0..4_294_967_294].__Tag
    //#input(List getArchives()): this.months[0..4_294_967_294].date
    //#output(List getArchives()): new LinkedList(getArchives#1) num objects
    //#output(List getArchives()): return_value
    //#new obj(List getArchives()): new LinkedList(getArchives#1)
    //#pre[2] (List getArchives()): this.__Tag == net/sourceforge/pebble/domain/Year
    //#pre[3] (List getArchives()): this.blog != null
    //#pre[4] (List getArchives()): this.blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[5] (List getArchives()): init'ed(this.blog.blogEntryIndex)
    //#pre[8] (List getArchives()): this.blog.properties != null
    //#pre[9] (List getArchives()): this.blog.years != null
    //#pre[6] (List getArchives()): (soft) this.blog.blogEntryIndex.__Tag == net/sourceforge/pebble/index/BlogEntryIndex
    //#pre[7] (List getArchives()): (soft) init'ed(this.blog.blogEntryIndex.indexEntries)
    //#pre[10] (List getArchives()): (soft) this.months != null
    //#pre[11] (List getArchives()): (soft) this.months.length >= 1
    //#pre[12] (List getArchives()): (soft) this.months[0..4_294_967_294] != null
    //#pre[13] (List getArchives()): (soft) this.months[0..4_294_967_294].__Tag == net/sourceforge/pebble/domain/Month
    //#pre[14] (List getArchives()): (soft) this.months[0..4_294_967_294].date != null
    //#presumption(List getArchives()): firstMonth.__Tag@180 == net/sourceforge/pebble/domain/Month
    //#presumption(List getArchives()): thisMonth.__Tag@179 == net/sourceforge/pebble/domain/Month
    //#post(List getArchives()): return_value == &new LinkedList(getArchives#1)
    //#post(List getArchives()): new LinkedList(getArchives#1) num objects == 1
    //#unanalyzed(List getArchives()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(List getArchives()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(List getArchives()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(List getArchives()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(List getArchives()): Effects-of-calling:getMonth
    //#unanalyzed(List getArchives()): Effects-of-calling:getBlog
    //#unanalyzed(List getArchives()): Effects-of-calling:net.sourceforge.pebble.domain.Blog:getCalendar
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Calendar:set
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Calendar:getTime
    //#unanalyzed(List getArchives()): Effects-of-calling:setDate
    //#unanalyzed(List getArchives()): Effects-of-calling:net.sourceforge.pebble.domain.Month
    //#unanalyzed(List getArchives()): Effects-of-calling:net.sourceforge.pebble.domain.TimePeriod
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.List:add
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Properties:getProperty
    //#unanalyzed(List getArchives()): Effects-of-calling:getTimeZone
    //#unanalyzed(List getArchives()): Effects-of-calling:getLocale
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Calendar:getInstance
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Locale
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.TimeZone:getTimeZone
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Calendar:get
    //#unanalyzed(List getArchives()): Effects-of-calling:getBlogForMonth
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.List:size
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.List:get
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Date
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(List getArchives()): Effects-of-calling:java.lang.Long:parseLong
    //#unanalyzed(List getArchives()): Effects-of-calling:getBlogForDay
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Calendar:setTime
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Date:after
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Date:before
    //#unanalyzed(List getArchives()): Effects-of-calling:java.util.Calendar:getActualMaximum
    //#unanalyzed(List getArchives()): Effects-of-calling:getYear
    //#unanalyzed(List getArchives()): Effects-of-calling:net.sourceforge.pebble.domain.Month:getBlog
    //#test_vector(List getArchives()): java.util.Date:after(...)@267: {1}, {0}
    //#test_vector(List getArchives()): java.util.Date:before(...)@256: {1}, {0}
    Month thisMonth = getBlog().getBlogForThisMonth();
    Month firstMonth = getBlog().getBlogForFirstMonth();
    for (int i = 12; i >=1; i--) {
      Month month = getBlogForMonth(i);
    //#year.java:179: ?precondition failure
    //#    net/sourceforge/pebble/domain/Year.getBlogForMonth: month <= this.months.length
    //#    severity: LOW
    //#    class: net.sourceforge.pebble.domain.Year
    //#    method: List getArchives()
    //#    basic block: bb_2
    //#    assertion: i <= this.months.length
    //#    callee: Month net/sourceforge/pebble/domain/Year.getBlogForMonth(int)
    //#    callee assertion: month <= this.months.length
    //#    callee file: year.java
    //#    callee precondition index: [5]
    //#    callee srcpos: 109
    //#    VN: -(i - this.months.length)
    //#    Expected: {0..+Inf}
    //#    Bad: {-11..-1}
    //#    Attribs:  Int  Bad overlaps +/-1000  Bad < Exp
      if (!month.after(thisMonth) && !month.before(firstMonth)) {
    //#year.java:180: ?precondition failure
    //#    net/sourceforge/pebble/domain/Month.after: month != null
    //#    severity: MEDIUM
    //#    class: net.sourceforge.pebble.domain.Year
    //#    method: List getArchives()
    //#    basic block: bb_2
    //#    assertion: getBlogForThisMonth(...) != null
    //#    callee: bool net/sourceforge/pebble/domain/Month.after(Month)
    //#    callee assertion: month != null
    //#    callee file: month.java
    //#    callee precondition index: [1]
    //#    callee srcpos: 267
    //#    VN: getBlogForThisMonth(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#year.java:180: ?precondition failure
    //#    net/sourceforge/pebble/domain/Month.before: month != null
    //#    severity: MEDIUM
    //#    class: net.sourceforge.pebble.domain.Year
    //#    method: List getArchives()
    //#    basic block: bb_3
    //#    assertion: getBlogForFirstMonth(...) != null
    //#    callee: bool net/sourceforge/pebble/domain/Month.before(Month)
    //#    callee assertion: month != null
    //#    callee file: month.java
    //#    callee precondition index: [1]
    //#    callee srcpos: 256
    //#    VN: getBlogForFirstMonth(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
        list.add(month);
      }
    }

    return list;
    //#year.java:185: end of method: List net.sourceforge.pebble.domain.Year.getArchives()
  }

  /**
   * Compares this object with the specified object for order.  Returns a
   * negative integer, zero, or a positive integer as this object is less
   * than, equal to, or greater than the specified object.<p>
   *
   * @param o the Object to be compared.
   * @return a negative integer, zero, or a positive integer as this object
   *         is less than, equal to, or greater than the specified object.
   * @throws ClassCastException if the specified object's type prevents it
   *                            from being compared to this Object.
   */
  public int compareTo(Object o) {
    return this.getYear() - ((Year)o).getYear();
    //#year.java:200: method: int net.sourceforge.pebble.domain.Year.compareTo(Object)
    //#input(int compareTo(Object)): __Descendant_Table[net/sourceforge/pebble/domain/Year]
    //#input(int compareTo(Object)): __Descendant_Table[others]
    //#input(int compareTo(Object)): __Dispatch_Table.getYear()I
    //#input(int compareTo(Object)): o
    //#input(int compareTo(Object)): o.__Tag
    //#input(int compareTo(Object)): o.year
    //#input(int compareTo(Object)): this
    //#input(int compareTo(Object)): this.__Tag
    //#input(int compareTo(Object)): this.year
    //#output(int compareTo(Object)): return_value
    //#pre[1] (int compareTo(Object)): o != null
    //#pre[2] (int compareTo(Object)): o.__Tag == net/sourceforge/pebble/domain/Year
    //#pre[3] (int compareTo(Object)): init'ed(o.year)
    //#pre[4] (int compareTo(Object)): o.year - this.year in -4_294_967_295..2_147_483_648
    //#pre[6] (int compareTo(Object)): this.__Tag == net/sourceforge/pebble/domain/Year
    //#pre[7] (int compareTo(Object)): init'ed(this.year)
    //#post(int compareTo(Object)): return_value == -(o.year - this.year)
    //#post(int compareTo(Object)): init'ed(return_value)
    //#year.java:200: end of method: int net.sourceforge.pebble.domain.Year.compareTo(Object)
  }

  /**
   * Gets a string representation of this object.
   *
   * @return  a String
   */
  public String toString() {
    return "" + this.year;
    //#year.java:209: method: String net.sourceforge.pebble.domain.Year.toString()
    //#input(String toString()): this
    //#input(String toString()): this.year
    //#output(String toString()): return_value
    //#pre[2] (String toString()): init'ed(this.year)
    //#post(String toString()): return_value != null
    //#year.java:209: end of method: String net.sourceforge.pebble.domain.Year.toString()
  }

}    //#output(net.sourceforge.pebble.domain.Year__static_init): __Descendant_Table[net/sourceforge/pebble/domain/Year]
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.compareTo(Ljava/lang/Object;)I
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getArchives()Ljava/util/List;
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getBlogForFirstMonth()Lnet/sourceforge/pebble/domain/Month;
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getBlogForMonth(I)Lnet/sourceforge/pebble/domain/Month;
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getBlogForNextMonth(Lnet/sourceforge/pebble/domain/Month;)Lnet/sourceforge/pebble/domain/Month;
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getBlogForPreviousMonth(Lnet/sourceforge/pebble/domain/Month;)Lnet/sourceforge/pebble/domain/Month;
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getDate()Ljava/util/Date;
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getMonths()[Lnet/sourceforge/pebble/domain/Month;
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getYear()I
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.init()V
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.setDate(Ljava/util/Date;)V
    //#output(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#output(net.sourceforge.pebble.domain.Year__static_init): net/sourceforge/pebble/domain/TimePeriod.__Descendant_Table[net/sourceforge/pebble/domain/Year]
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Descendant_Table[net/sourceforge/pebble/domain/Year] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.domain.Year__static_init): net/sourceforge/pebble/domain/TimePeriod.__Descendant_Table[net/sourceforge/pebble/domain/Year] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.compareTo(Ljava/lang/Object;)I == &compareTo
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getArchives()Ljava/util/List; == &getArchives
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog; == &net/sourceforge/pebble/domain/TimePeriod.getBlog
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getBlogForFirstMonth()Lnet/sourceforge/pebble/domain/Month; == &getBlogForFirstMonth
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getBlogForMonth(I)Lnet/sourceforge/pebble/domain/Month; == &getBlogForMonth
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getBlogForNextMonth(Lnet/sourceforge/pebble/domain/Month;)Lnet/sourceforge/pebble/domain/Month; == &getBlogForNextMonth
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getBlogForPreviousMonth(Lnet/sourceforge/pebble/domain/Month;)Lnet/sourceforge/pebble/domain/Month; == &getBlogForPreviousMonth
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getCalendar()Ljava/util/Calendar; == &getCalendar
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getDate()Ljava/util/Date; == &net/sourceforge/pebble/domain/TimePeriod.getDate
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getMonths()[Lnet/sourceforge/pebble/domain/Month; == &getMonths
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.getYear()I == &getYear
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.init()V == &init
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.setDate(Ljava/util/Date;)V == &net/sourceforge/pebble/domain/TimePeriod.setDate
    //#post(net.sourceforge.pebble.domain.Year__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &toString
    //#year.java:: end of method: net.sourceforge.pebble.domain.Year.net.sourceforge.pebble.domain.Year__static_init
    //#year.java:: end of class: net.sourceforge.pebble.domain.Year
