GNU Classpath merge.

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.

From-SVN: r58772
This commit is contained in:
Mark Wielaard 2002-11-03 20:27:31 +00:00
parent c33c471beb
commit de36f65dd1
9 changed files with 109 additions and 32 deletions

View file

@ -1,3 +1,42 @@
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.
2002-11-02 Tom Tromey <tromey@redhat.com> 2002-11-02 Tom Tromey <tromey@redhat.com>
* java/lang/Class.h: Move JV_STATE_ERROR before JV_STATE_DONE. * java/lang/Class.h: Move JV_STATE_ERROR before JV_STATE_DONE.

View file

@ -734,7 +734,9 @@ public class DataInputStream extends FilterInputStream implements DataInput
static String convertFromUTF(byte[] buf) static String convertFromUTF(byte[] buf)
throws EOFException, UTFDataFormatException 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; ) for (int i = 0; i < buf.length; )
{ {

View file

@ -191,10 +191,7 @@ public final class Double extends Number implements Comparable
*/ */
public static Double valueOf(String s) public static Double valueOf(String s)
{ {
// XXX just call new Double(parseDouble(s)); return new Double(parseDouble(s));
if (s == null)
throw new NullPointerException();
return new Double(s);
} }
/** /**

View file

@ -462,7 +462,6 @@ public class Proxy implements Serializable
private static native Class generateProxyClass0(ClassLoader loader, private static native Class generateProxyClass0(ClassLoader loader,
ProxyData data); ProxyData data);
/** /**
* Helper class for mapping unique ClassLoader and interface combinations * Helper class for mapping unique ClassLoader and interface combinations
* to proxy classes. * to proxy classes.
@ -490,6 +489,8 @@ public class Proxy implements Serializable
*/ */
ProxyType(ClassLoader loader, Class[] interfaces) ProxyType(ClassLoader loader, Class[] interfaces)
{ {
if (loader == null)
loader = ClassLoader.getSystemClassLoader();
this.loader = loader; this.loader = loader;
this.interfaces = interfaces; this.interfaces = interfaces;
} }
@ -501,12 +502,56 @@ public class Proxy implements Serializable
*/ */
public int hashCode() 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++) for (int i = 0; i < interfaces.length; i++)
hash = hash * 31 + interfaces[i].hashCode(); hash = hash * 31 + interfaces[i].hashCode();
return hash; 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. * Calculates equality.
* *
@ -518,15 +563,10 @@ public class Proxy implements Serializable
ProxyType pt = (ProxyType) other; ProxyType pt = (ProxyType) other;
if (loader != pt.loader || interfaces.length != pt.interfaces.length) if (loader != pt.loader || interfaces.length != pt.interfaces.length)
return false; return false;
int i = interfaces.length; return sameTypes(interfaces, pt.interfaces);
while (--i >= 0)
if (interfaces[i] != pt.interfaces[i])
return false;
return true;
} }
} // class ProxyType } // class ProxyType
/** /**
* Helper class which allows hashing of a method name and signature * Helper class which allows hashing of a method name and signature
* without worrying about return type, declaring class, or throws clause, * without worrying about return type, declaring class, or throws clause,
@ -681,7 +721,6 @@ public class Proxy implements Serializable
} }
} // class ProxySignature } // class ProxySignature
/** /**
* A flat representation of all data needed to generate bytecode/instantiate * A flat representation of all data needed to generate bytecode/instantiate
* a proxy class. This is basically a struct. * a proxy class. This is basically a struct.
@ -820,7 +859,6 @@ public class Proxy implements Serializable
} }
} // class ProxyData } // class ProxyData
/** /**
* Does all the work of building a class. By making this a nested class, * 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 * this code is not loaded in memory if the VM has a native

View file

@ -63,7 +63,7 @@ import java.io.UnsupportedEncodingException;
public class URLDecoder public class URLDecoder
{ {
/** /**
* Constructor for compatibility with Sun's JDK. * Public contructor. Note that this class has only static methods.
*/ */
public URLDecoder () public URLDecoder ()
{ {
@ -116,8 +116,6 @@ public class URLDecoder
public static String decode(String s, String encoding) public static String decode(String s, String encoding)
throws UnsupportedEncodingException throws UnsupportedEncodingException
{ {
StringBuffer result = new StringBuffer();
// First convert all '+' characters to spaces. // First convert all '+' characters to spaces.
String str = s.replace('+', ' '); String str = s.replace('+', ' ');
@ -126,6 +124,7 @@ public class URLDecoder
int start = 0; int start = 0;
byte[] bytes = null; byte[] bytes = null;
int length = str.length(); int length = str.length();
StringBuffer result = new StringBuffer(length);
while ((i = str.indexOf('%', start)) >= 0) while ((i = str.indexOf('%', start)) >= 0)
{ {
// Add all non-encoded characters to the result buffer // Add all non-encoded characters to the result buffer

View file

@ -1,5 +1,5 @@
/* URLEncoder.java -- Class to convert strings to a properly encoded URL /* 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. This file is part of GNU Classpath.
@ -39,7 +39,7 @@ package java.net;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
/** /*
* Written using on-line Java Platform 1.2/1.4 API Specification, as well * Written using on-line Java Platform 1.2/1.4 API Specification, as well
* as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998). * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
* Status: Believed complete and correct. * Status: Believed complete and correct.
@ -102,11 +102,11 @@ public class URLEncoder
public static String encode(String s, String encoding) public static String encode(String s, String encoding)
throws UnsupportedEncodingException throws UnsupportedEncodingException
{ {
StringBuffer result = new StringBuffer();
int length = s.length(); int length = s.length();
int start = 0; int start = 0;
int i = 0; int i = 0;
StringBuffer result = new StringBuffer(length);
while (true) while (true)
{ {
while ( i < length && isSafe(s.charAt(i)) ) while ( i < length && isSafe(s.charAt(i)) )

View file

@ -558,7 +558,9 @@ public class ArrayList extends AbstractList
// We serialize unused list entries to preserve capacity. // We serialize unused list entries to preserve capacity.
int len = data.length; int len = data.length;
s.writeInt(len); 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]); s.writeObject(data[i]);
} }
@ -578,7 +580,7 @@ public class ArrayList extends AbstractList
s.defaultReadObject(); s.defaultReadObject();
int capacity = s.readInt(); int capacity = s.readInt();
data = new Object[capacity]; data = new Object[capacity];
for (int i = 0; i < capacity; i++) for (int i = 0; i < size; i++)
data[i] = s.readObject(); data[i] = s.readObject();
} }
} }

View file

@ -139,7 +139,7 @@ public class ZipInputStream extends InflaterInputStream implements ZipConstants
public ZipEntry getNextEntry() throws IOException public ZipEntry getNextEntry() throws IOException
{ {
if (crc == null) if (crc == null)
throw new IllegalStateException("Closed."); throw new IOException("Stream closed.");
if (entry != null) if (entry != null)
closeEntry(); closeEntry();
@ -216,7 +216,7 @@ public class ZipInputStream extends InflaterInputStream implements ZipConstants
public void closeEntry() throws IOException public void closeEntry() throws IOException
{ {
if (crc == null) if (crc == null)
throw new IllegalStateException("Closed."); throw new IOException("Stream closed.");
if (entry == null) if (entry == null)
return; return;
@ -287,7 +287,7 @@ public class ZipInputStream extends InflaterInputStream implements ZipConstants
public int read(byte[] b, int off, int len) throws IOException public int read(byte[] b, int off, int len) throws IOException
{ {
if (crc == null) if (crc == null)
throw new IllegalStateException("Closed."); throw new IOException("Stream closed.");
if (entry == null) if (entry == null)
return -1; return -1;
boolean finished = false; boolean finished = false;

View file

@ -158,12 +158,12 @@ public class ZipOutputStream extends DeflaterOutputStream implements ZipConstant
* is not set in the entry, the current time is used. * is not set in the entry, the current time is used.
* @param entry the entry. * @param entry the entry.
* @exception IOException if an I/O error occured. * @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 public void putNextEntry(ZipEntry entry) throws IOException
{ {
if (entries == null) if (entries == null)
throw new IllegalStateException("ZipOutputStream was finished"); throw new ZipException("ZipOutputStream was finished");
int method = entry.getMethod(); int method = entry.getMethod();
int flags = 0; int flags = 0;
@ -249,12 +249,12 @@ public class ZipOutputStream extends DeflaterOutputStream implements ZipConstant
/** /**
* Closes the current entry. * Closes the current entry.
* @exception IOException if an I/O error occured. * @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 public void closeEntry() throws IOException
{ {
if (curEntry == null) if (curEntry == null)
throw new IllegalStateException("No open entry"); throw new ZipException("No open entry");
/* First finish the deflater, if appropriate */ /* First finish the deflater, if appropriate */
if (curMethod == DEFLATED) if (curMethod == DEFLATED)
@ -300,12 +300,12 @@ public class ZipOutputStream extends DeflaterOutputStream implements ZipConstant
/** /**
* Writes the given buffer to the current entry. * Writes the given buffer to the current entry.
* @exception IOException if an I/O error occured. * @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 public void write(byte[] b, int off, int len) throws IOException
{ {
if (curEntry == null) if (curEntry == null)
throw new IllegalStateException("No open entry."); throw new ZipException("No open entry.");
switch (curMethod) switch (curMethod)
{ {