This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Some Classpath merging


Hi,

The following merges a couple of classes that were recently changed in
GNU Classpath.

2002-10-31  Stephen Crawley  <crawley@dstc.edu.au>

  * java/lang/Double.java (valueOf): Return new Double(parseDouble(s)).

2002-10-31  Wu Gansha <gansha.wu@intel.com>:

  * java/util/ArrayList.java (readObject, writeObject): Only read/write
  size items.

2002-10-31  Wu Gansha <gansha.wu@intel.com>:

  * java/io/DataInputStream.java (convertFromUTF): Give StringBuffer an
  initial estimated size to avoid enlarge buffer frequently.

2002-10-31  Wu Gansha <gansha.wu@intel.com>:

  * java/lang/reflect/Proxy.java (ProxyType): Set loader to System
  ClassLoader when null.
  (ProxyType.hashCode): Loader null check no longer needed.
  (ProxyType.sameTypes): New method.
  (ProxyType.equals): Use new method.

2002-10-31  Mark Wielaard  <mark@klomp.org>

  * java/net/URLDecoder.java (decode): Initialize Stringbuffer size to
  length of String.
  * java/net/URLEncoder.java (encode): Likewise.

2002-10-31  Mark Wielaard  <mark@klomp.org>

  * java/util/zip/ZipInputStream.java (getNextEntry): Throw IOException
  when stream is closed.
  (closeEntry): Likewise.
  (read): Likewise.
  * java/util/zip/ZipOutputStream.java (putNextEntry): Throw
  * ZipException
  when no entry active.
  (closeEntry): Likewise.
  (write): Likewise.

OK to commit?

BTW, Tom could you regenerate the libgcj-classpath-compare page?

Cheers,

Mark
Index: java/io/DataInputStream.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/DataInputStream.java,v
retrieving revision 1.12
diff -u -r1.12 DataInputStream.java
--- java/io/DataInputStream.java	22 Jan 2002 22:40:14 -0000	1.12
+++ java/io/DataInputStream.java	31 Oct 2002 23:05:09 -0000
@@ -734,7 +734,9 @@
   static String convertFromUTF(byte[] buf) 
     throws EOFException, UTFDataFormatException
   {
-    StringBuffer strbuf = new StringBuffer();
+    // Give StringBuffer an initial estimated size to avoid 
+    // enlarge buffer frequently
+    StringBuffer strbuf = new StringBuffer(buf.length/2 + 2);
 
     for (int i = 0; i < buf.length; )
       {
Index: java/lang/reflect/Proxy.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/reflect/Proxy.java,v
retrieving revision 1.1
diff -u -r1.1 Proxy.java
--- java/lang/reflect/Proxy.java	30 Sep 2002 05:19:09 -0000	1.1
+++ java/lang/reflect/Proxy.java	31 Oct 2002 23:05:11 -0000
@@ -462,7 +462,6 @@
   private static native Class generateProxyClass0(ClassLoader loader,
                                                   ProxyData data);
 
-
   /**
    * Helper class for mapping unique ClassLoader and interface combinations
    * to proxy classes.
@@ -490,6 +489,8 @@
      */
     ProxyType(ClassLoader loader, Class[] interfaces)
     {
+      if (loader == null)
+         loader = ClassLoader.getSystemClassLoader();
       this.loader = loader;
       this.interfaces = interfaces;
     }
@@ -501,12 +502,56 @@
      */
     public int hashCode()
     {
-      int hash = (loader == null) ? 0 : loader.hashCode();
+      //loader is always not null
+      int hash = loader.hashCode();
       for (int i = 0; i < interfaces.length; i++)
         hash = hash * 31 + interfaces[i].hashCode();
       return hash;
     }
 
+    // A more comprehensive comparison of two arrays,
+    //   ignore array element order, and
+    //   ignore redundant elements
+    private static boolean sameTypes(Class arr1[], Class arr2[]) {
+      if (arr1.length == 1 && arr2.length == 1) {
+        return arr1[0] == arr2[0];
+      }
+        
+      // total occurrance of elements of arr1 in arr2
+      int total_occ_of_arr1_in_arr2 = 0;
+    each_type:
+      for (int i = arr1.length; --i >= 0; ) 
+      {
+        Class t = arr1[i];
+        for (int j = i; --j >= 0; ) 
+        {
+          if (t == arr1[j]) 
+          { //found duplicate type
+            continue each_type;  
+          }
+        }
+            
+        // count c(a unique element of arr1)'s 
+        //   occurrences in arr2
+        int occ_in_arr2 = 0;
+        for (int j = arr2.length; --j >= 0; ) 
+        {
+          if (t == arr2[j]) 
+          {
+            ++occ_in_arr2;
+          }
+        }
+        if (occ_in_arr2 == 0) 
+        { // t does not occur in arr2
+          return false;
+        }
+        
+        total_occ_of_arr1_in_arr2 += occ_in_arr2;
+      }
+      // now, each element of arr2 must have been visited
+      return total_occ_of_arr1_in_arr2 == arr2.length;
+    }
+
     /**
      * Calculates equality.
      *
@@ -518,15 +563,10 @@
       ProxyType pt = (ProxyType) other;
       if (loader != pt.loader || interfaces.length != pt.interfaces.length)
         return false;
-      int i = interfaces.length;
-      while (--i >= 0)
-        if (interfaces[i] != pt.interfaces[i])
-          return false;
-      return true;
+	  return sameTypes(interfaces, pt.interfaces);
     }
   } // class ProxyType
 
-
   /**
    * Helper class which allows hashing of a method name and signature
    * without worrying about return type, declaring class, or throws clause,
@@ -681,7 +721,6 @@
     }
   } // class ProxySignature
 
-
   /**
    * A flat representation of all data needed to generate bytecode/instantiate
    * a proxy class.  This is basically a struct.
@@ -820,7 +859,6 @@
     }
   } // class ProxyData
 
-
   /**
    * Does all the work of building a class. By making this a nested class,
    * this code is not loaded in memory if the VM has a native
Index: java/net/URLDecoder.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/net/URLDecoder.java,v
retrieving revision 1.7
diff -u -r1.7 URLDecoder.java
--- java/net/URLDecoder.java	25 Sep 2002 05:05:06 -0000	1.7
+++ java/net/URLDecoder.java	31 Oct 2002 23:05:11 -0000
@@ -63,7 +63,7 @@
 public class URLDecoder
 {
   /**
-   * Constructor for compatibility with Sun's JDK.
+   * Public contructor. Note that this class has only static methods.
    */
   public URLDecoder ()
   {
@@ -116,8 +116,6 @@
   public static String decode(String s, String encoding)
     throws UnsupportedEncodingException
   {
-    StringBuffer result = new StringBuffer();
-
     // First convert all '+' characters to spaces.
     String str = s.replace('+', ' ');
     
@@ -126,6 +124,7 @@
     int start = 0;
     byte[] bytes = null;
     int length = str.length();
+    StringBuffer result = new StringBuffer(length);
     while ((i = str.indexOf('%', start)) >= 0)
       {
 	// Add all non-encoded characters to the result buffer
Index: java/net/URLEncoder.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/net/URLEncoder.java,v
retrieving revision 1.6
diff -u -r1.6 URLEncoder.java
--- java/net/URLEncoder.java	25 Sep 2002 05:05:06 -0000	1.6
+++ java/net/URLEncoder.java	31 Oct 2002 23:05:11 -0000
@@ -1,5 +1,5 @@
 /* URLEncoder.java -- Class to convert strings to a properly encoded URL
-   Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -39,7 +39,7 @@
 
 import java.io.UnsupportedEncodingException;
 
-/**
+/*
  * Written using on-line Java Platform 1.2/1.4 API Specification, as well
  * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
  * Status:  Believed complete and correct.
@@ -102,11 +102,11 @@
   public static String encode(String s, String encoding)
     throws UnsupportedEncodingException
   {
-    StringBuffer result = new StringBuffer();
     int length = s.length();
     int start = 0;
     int i = 0;
 
+    StringBuffer result = new StringBuffer(length);
     while (true)
     {
       while ( i < length && isSafe(s.charAt(i)) )
Index: java/util/ArrayList.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/util/ArrayList.java,v
retrieving revision 1.12
diff -u -r1.12 ArrayList.java
--- java/util/ArrayList.java	16 Jun 2002 21:15:38 -0000	1.12
+++ java/util/ArrayList.java	31 Oct 2002 23:05:12 -0000
@@ -558,7 +558,9 @@
     // We serialize unused list entries to preserve capacity.
     int len = data.length;
     s.writeInt(len);
-    for (int i = 0; i < len; i++)
+    // it would be more efficient to just write "size" items,
+    // this need readObject read "size" items too.
+    for (int i = 0; i < size; i++)
       s.writeObject(data[i]);
   }
 
@@ -578,7 +580,7 @@
     s.defaultReadObject();
     int capacity = s.readInt();
     data = new Object[capacity];
-    for (int i = 0; i < capacity; i++)
+    for (int i = 0; i < size; i++)
       data[i] = s.readObject();
   }
 }
Index: java/util/zip/ZipInputStream.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/util/zip/ZipInputStream.java,v
retrieving revision 1.15
diff -u -r1.15 ZipInputStream.java
--- java/util/zip/ZipInputStream.java	25 Sep 2002 20:10:42 -0000	1.15
+++ java/util/zip/ZipInputStream.java	31 Oct 2002 23:05:12 -0000
@@ -139,7 +139,7 @@
   public ZipEntry getNextEntry() throws IOException
   {
     if (crc == null)
-      throw new IllegalStateException("Closed.");
+      throw new IOException("Stream closed.");
     if (entry != null)
       closeEntry();
 
@@ -216,7 +216,7 @@
   public void closeEntry() throws IOException
   {
     if (crc == null)
-      throw new IllegalStateException("Closed.");
+      throw new IOException("Stream closed.");
     if (entry == null)
       return;
 
@@ -287,7 +287,7 @@
   public int read(byte[] b, int off, int len) throws IOException
   {
     if (crc == null)
-      throw new IllegalStateException("Closed.");
+      throw new IOException("Stream closed.");
     if (entry == null)
       return -1;
     boolean finished = false;
Index: java/util/zip/ZipOutputStream.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/util/zip/ZipOutputStream.java,v
retrieving revision 1.12
diff -u -r1.12 ZipOutputStream.java
--- java/util/zip/ZipOutputStream.java	15 Jun 2002 18:31:13 -0000	1.12
+++ java/util/zip/ZipOutputStream.java	31 Oct 2002 23:05:12 -0000
@@ -158,12 +158,12 @@
    * is not set in the entry, the current time is used.
    * @param entry the entry.
    * @exception IOException if an I/O error occured.
-   * @exception IllegalStateException if stream was finished
+   * @exception ZipException if stream was finished.
    */
   public void putNextEntry(ZipEntry entry) throws IOException
   {
     if (entries == null)
-      throw new IllegalStateException("ZipOutputStream was finished");
+      throw new ZipException("ZipOutputStream was finished");
 
     int method = entry.getMethod();
     int flags = 0;
@@ -249,12 +249,12 @@
   /**
    * Closes the current entry.
    * @exception IOException if an I/O error occured.
-   * @exception IllegalStateException if no entry is active.
+   * @exception ZipException if no entry is active.
    */
   public void closeEntry() throws IOException
   {
     if (curEntry == null)
-      throw new IllegalStateException("No open entry");
+      throw new ZipException("No open entry");
 
     /* First finish the deflater, if appropriate */
     if (curMethod == DEFLATED)
@@ -300,12 +300,12 @@
   /**
    * Writes the given buffer to the current entry.
    * @exception IOException if an I/O error occured.
-   * @exception IllegalStateException if no entry is active.
+   * @exception ZipException if no entry is active.
    */
   public void write(byte[] b, int off, int len) throws IOException
   {
     if (curEntry == null)
-      throw new IllegalStateException("No open entry.");
+      throw new ZipException("No open entry.");
 
     switch (curMethod)
       {

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]