URLConnection.java (position): New field.
authorBryce McKinlay <mckinlay@redhat.com>
Thu, 22 Jul 2004 01:33:11 +0000 (01:33 +0000)
committerBryce McKinlay <bryce@gcc.gnu.org>
Thu, 22 Jul 2004 01:33:11 +0000 (02:33 +0100)
2004-07-21  Bryce McKinlay  <mckinlay@redhat.com>

* java/net/URLConnection.java (position): New field.
(dateFormat1, dateFormat2, dateFormat3): Removed.
(dateFormats): New field.
(getHeaderFieldDate): Use new dateFormats array. Re-use
parsePosition each time instead of re-allocating.
(initializeDateFormats): Initialize 'dateFormats'.

From-SVN: r85033

libjava/ChangeLog
libjava/java/net/URLConnection.java

index 7b3a48632421b794c8a81379e827586698938f45..45bc5ca61ea447852954937f6f3a1b72652c693c 100644 (file)
@@ -1,3 +1,12 @@
+2004-07-21  Bryce McKinlay  <mckinlay@redhat.com>
+
+       * java/net/URLConnection.java (position): New field.
+       (dateFormat1, dateFormat2, dateFormat3): Removed.
+       (dateFormats): New field.
+       (getHeaderFieldDate): Use new dateFormats array. Re-use parsePosition
+       each time instead of re-allocating.
+       (initializeDateFormats): Initialize 'dateFormats'.
+
 2004-07-20  Bryce McKinlay  <mckinlay@redhat.com>
 
        PR libgcj/16591
index 867a53450c8c0cb0ad7f8040e1820b6c2bf11944..7b5f6a5dd187c38caa38a7a65e2055d029ae7c84 100644 (file)
@@ -165,11 +165,12 @@ public abstract class URLConnection
   protected URL url;
 
   private static Hashtable handlers = new Hashtable();
-  private static SimpleDateFormat dateFormat1;
-  private static SimpleDateFormat dateFormat2;
-  private static SimpleDateFormat dateFormat3;
+  private static SimpleDateFormat[] dateFormats;
   private static boolean dateformats_initialized;
 
+  /* Cached ParsePosition, used when parsing dates. */
+  private ParsePosition position;
+
   /**
    * Creates a URL connection to a given URL. A real connection is not made.
    * Use #connect to do this.
@@ -366,19 +367,24 @@ public abstract class URLConnection
   {
     if (! dateformats_initialized)
       initializeDateFormats();
+    
+    if (position == null)
+      position = new ParsePosition(0);
 
     long result = defaultValue;
     String str = getHeaderField(name);
 
     if (str != null)
       {
-       Date date;
-       if ((date = dateFormat1.parse(str, new ParsePosition(0))) != null)
-         result = date.getTime();
-       else if ((date = dateFormat2.parse(str, new ParsePosition(0))) != null)
-         result = date.getTime();
-       else if ((date = dateFormat3.parse(str, new ParsePosition(0))) != null)
-         result = date.getTime();
+       for (int i = 0; i < dateFormats.length; i++)
+         {
+           SimpleDateFormat df = dateFormats[i];
+           position.setIndex(0);
+           position.setErrorIndex(0);
+           Date date = df.parse(str, position);
+           if (date != null)
+             return date.getTime();
+         }
       }
 
     return result;
@@ -1040,17 +1046,18 @@ public abstract class URLConnection
   // We don't put these in a static initializer, because it creates problems
   // with initializer co-dependency: SimpleDateFormat's constructors eventually 
   // depend on URLConnection (via the java.text.*Symbols classes).
-  private synchronized void initializeDateFormats()
+  private static synchronized void initializeDateFormats()
   {
     if (dateformats_initialized)
       return;
 
     Locale locale = new Locale("En", "Us", "Unix");
-    dateFormat1 =
+    dateFormats = new SimpleDateFormat[3];
+    dateFormats[0] =
       new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss 'GMT'", locale);
-    dateFormat2 =
+    dateFormats[1] =
       new SimpleDateFormat("EEEE, dd-MMM-yy hh:mm:ss 'GMT'", locale);
-    dateFormat3 = new SimpleDateFormat("EEE MMM d hh:mm:ss yyyy", locale);
+    dateFormats[2] = new SimpleDateFormat("EEE MMM d hh:mm:ss yyyy", locale);
     dateformats_initialized = true;
   }
 }