Hi again,

This commit makes GregorianCalendar.setDefaultFields() set only
fields that are undefined.

Cheers,
Gary
Index: ChangeLog
===================================================================
RCS file: /cvsroot/classpath/classpath/ChangeLog,v
retrieving revision 1.9239.2.7
diff -u -r1.9239.2.7 ChangeLog
--- ChangeLog   13 Apr 2007 13:01:50 -0000      1.9239.2.7
+++ ChangeLog   13 Apr 2007 13:05:06 -0000
@@ -1,3 +1,9 @@
+2007-04-13  Gary Benson  <[EMAIL PROTECTED]>
+
+       * java/util/GregorianCalendar.java
+       (defaults): Moved from within setDefaultFields.
+       (setDefaultFields): Only set fields that are undefined.
+
 2007-04-13  Gary Benson  <[EMAIL PROTECTED]>
 
        * java/util/Calendar.java
Index: java/util/GregorianCalendar.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/util/GregorianCalendar.java,v
retrieving revision 1.49.4.4
diff -u -r1.49.4.4 GregorianCalendar.java
--- java/util/GregorianCalendar.java    13 Apr 2007 11:47:12 -0000      1.49.4.4
+++ java/util/GregorianCalendar.java    13 Apr 2007 13:05:06 -0000
@@ -495,18 +495,30 @@
       throw new IllegalArgumentException("Illegal DST_OFFSET.");
   }
 
+  // Default values for all fields, except DAY_OF_WEEK which
+  // defaults to getFirstDayOfWeek().  Note that according to
+  // the spec DAY_OF_WEEK_IN_MONTH defaults to 1, but Sun set
+  // it to 0 so we do too.
+  private int[] defaults = {
+    AD, 1970, JANUARY, 0, 0, 1, 0, -1, 0, AM, 0, 0, 0, 0, 0, 0, 0
+  };
+
   /**
    * Set all fields to their default values.
    */
   private void setDefaultFields()
   {
-    // According to the spec DAY_OF_WEEK_IN_MONTH defaults to 1,
-    // but Sun set it to 0 so we do too.
-    int[] defaults = {
-      AD, 1970, JANUARY, 0, 0, 1, 0, -1, 0, AM, 0, 0, 0, 0, 0, 0, 0
-    };
-    System.arraycopy(defaults, 0, fields, 0, FIELD_COUNT);
-    fields[DAY_OF_WEEK] = getFirstDayOfWeek();
+    for (int i = 0; i < FIELD_COUNT; i++)
+      {
+       if (isSet[i])
+         continue;
+
+       if (i == DAY_OF_WEEK)
+         fields[i] = getFirstDayOfWeek();
+       else
+         fields[i] = defaults[i];
+      }
+
     // It seems odd that a call to computeTime() should cause
     // areFieldsSet to become true, but that's what Sun do...
     areFieldsSet = true;

Reply via email to