Imported GNU Classpath 0.19 + gcj-import-20051115.

* sources.am: Regenerated.
       * Makefile.in: Likewise.
       * scripts/makemake.tcl: Use glob -nocomplain.

From-SVN: r107049
This commit is contained in:
Mark Wielaard 2005-11-15 23:20:01 +00:00
parent 02e549bfaa
commit 8f523f3a10
1241 changed files with 97711 additions and 25284 deletions

View file

@ -551,7 +551,7 @@ public class ArrayList extends AbstractList
/**
* Serializes this object to the given stream.
*
* @param out the stream to write to
* @param s the stream to write to
* @throws IOException if the underlying stream fails
* @serialData the size field (int), the length of the backing array
* (int), followed by its elements (Objects) in proper order.
@ -572,7 +572,7 @@ public class ArrayList extends AbstractList
/**
* Deserializes this object from the given stream.
*
* @param in the stream to read from
* @param s the stream to read from
* @throws ClassNotFoundException if the underlying stream fails
* @throws IOException if the underlying stream fails
* @serialData the size field (int), the length of the backing array

View file

@ -2352,6 +2352,186 @@ public class Arrays
return new Arrays.ArrayList(a);
}
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
* @param a the array to represent
* @return a String representing this array
* @since 1.5
*/
public static String toString (long[] a)
{
if (a == null)
return "null";
if (a.length == 0)
return "[]";
String result = "[";
for (int i = 0; i < a.length - 1; i++)
result += String.valueOf(a[i]) + ", ";
result += String.valueOf(a[a.length - 1]) + "]";
return result;
}
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
* @param a the array to represent
* @return a String representing this array
* @since 1.5
*/
public static String toString (int[] a)
{
if (a == null)
return "null";
if (a.length == 0)
return "[]";
String result = "[";
for (int i = 0; i < a.length - 1; i++)
result += String.valueOf(a[i]) + ", ";
result += String.valueOf(a[a.length - 1]) + "]";
return result;
}
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
* @param a the array to represent
* @return a String representing this array
* @since 1.5
*/
public static String toString (short[] a)
{
if (a == null)
return "null";
if (a.length == 0)
return "[]";
String result = "[";
for (int i = 0; i < a.length - 1; i++)
result += String.valueOf(a[i]) + ", ";
result += String.valueOf(a[a.length - 1]) + "]";
return result;
}
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
* @param a the array to represent
* @return a String representing this array
* @since 1.5
*/
public static String toString (char[] a)
{
if (a == null)
return "null";
if (a.length == 0)
return "[]";
String result = "[";
for (int i = 0; i < a.length - 1; i++)
result += String.valueOf(a[i]) + ", ";
result += String.valueOf(a[a.length - 1]) + "]";
return result;
}
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
* @param a the array to represent
* @return a String representing this array
* @since 1.5
*/
public static String toString (byte[] a)
{
if (a == null)
return "null";
if (a.length == 0)
return "[]";
String result = "[";
for (int i = 0; i < a.length - 1; i++)
result += String.valueOf(a[i]) + ", ";
result += String.valueOf(a[a.length - 1]) + "]";
return result;
}
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
* @param a the array to represent
* @return a String representing this array
* @since 1.5
*/
public static String toString (boolean[] a)
{
if (a == null)
return "null";
if (a.length == 0)
return "[]";
String result = "[";
for (int i = 0; i < a.length - 1; i++)
result += String.valueOf(a[i]) + ", ";
result += String.valueOf(a[a.length - 1]) + "]";
return result;
}
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
* @param a the array to represent
* @return a String representing this array
* @since 1.5
*/
public static String toString (float[] a)
{
if (a == null)
return "null";
if (a.length == 0)
return "[]";
String result = "[";
for (int i = 0; i < a.length - 1; i++)
result += String.valueOf(a[i]) + ", ";
result += String.valueOf(a[a.length - 1]) + "]";
return result;
}
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
* @param a the array to represent
* @return a String representing this array
* @since 1.5
*/
public static String toString (double[] a)
{
if (a == null)
return "null";
if (a.length == 0)
return "[]";
String result = "[";
for (int i = 0; i < a.length - 1; i++)
result += String.valueOf(a[i]) + ", ";
result += String.valueOf(a[a.length - 1]) + "]";
return result;
}
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
* @param a the array to represent
* @return a String representing this array
* @since 1.5
*/
public static String toString (Object[] a)
{
if (a == null)
return "null";
if (a.length == 0)
return "[]";
String result = "[";
for (int i = 0; i < a.length - 1; i++)
result += String.valueOf(a[i]) + ", ";
result += String.valueOf(a[a.length - 1]) + "]";
return result;
}
/**
* Inner class used by {@link #asList(Object[])} to provide a list interface
* to an array. The name, though it clashes with java.util.ArrayList, is

View file

@ -914,8 +914,19 @@ public abstract class Calendar implements Serializable, Cloneable
*/
public boolean equals(Object o)
{
return (o instanceof Calendar)
&& getTimeInMillis() == ((Calendar) o).getTimeInMillis();
if (! (o instanceof Calendar))
return false;
Calendar cal = (Calendar) o;
if (getTimeInMillis() == ((Calendar) o).getTimeInMillis()
&& cal.getFirstDayOfWeek() == getFirstDayOfWeek()
&& cal.isLenient() == isLenient()
&& cal.getMinimalDaysInFirstWeek() == getMinimalDaysInFirstWeek())
{
TimeZone self = getTimeZone();
TimeZone oth = cal.getTimeZone();
return self == null ? oth == null : self.equals(oth);
}
return false;
}
/**
@ -926,7 +937,13 @@ public abstract class Calendar implements Serializable, Cloneable
public int hashCode()
{
long time = getTimeInMillis();
return (int) ((time & 0xffffffffL) ^ (time >> 32));
int val = (int) ((time & 0xffffffffL) ^ (time >> 32));
val += (getFirstDayOfWeek() + (isLenient() ? 1230 : 1237)
+ getMinimalDaysInFirstWeek());
TimeZone self = getTimeZone();
if (self != null)
val ^= self.hashCode();
return val;
}
/**

View file

@ -1731,8 +1731,8 @@ public class Collections
}
/**
* The implementation of {@link #singletonMap(Object)}. This class name
* is required for compatibility with Sun's JDK serializability.
* The implementation of {@link #singletonMap(Object, Object)}. This class
* name is required for compatibility with Sun's JDK serializability.
*
* @author Eric Blake (ebb9@email.byu.edu)
*/
@ -2518,12 +2518,13 @@ public class Collections
}
/**
* Add an element to the end of the underlying list (optional operation).
* If the list imposes restraints on what can be inserted, such as no null
* elements, this should be documented. A lock is obtained on the mutex before
* any of the elements are added.
* Add the contents of a collection to the underlying list at the given
* index (optional operation). If the list imposes restraints on what
* can be inserted, such as no null elements, this should be documented.
* A lock is obtained on the mutex before any of the elements are added.
*
* @param o the object to add
* @param index the index at which to insert
* @param c the collection to add
* @return <code>true</code>, as defined by Collection for a modified list
* @throws UnsupportedOperationException if this list does not support the
* add operation
@ -3858,7 +3859,7 @@ public class Collections
/**
* Called only by trusted code to specify the mutex as well as the set.
* @param sync the mutex
* @param l the list
* @param ss the set
*/
SynchronizedSortedSet(Object sync, SortedSet ss)
{

View file

@ -868,6 +868,17 @@ public class GregorianCalendar extends Calendar
areFieldsSet = isSet[ERA] = isSet[YEAR] = isSet[MONTH] = isSet[WEEK_OF_YEAR] = isSet[WEEK_OF_MONTH] = isSet[DAY_OF_MONTH] = isSet[DAY_OF_YEAR] = isSet[DAY_OF_WEEK] = isSet[DAY_OF_WEEK_IN_MONTH] = isSet[AM_PM] = isSet[HOUR] = isSet[HOUR_OF_DAY] = isSet[MINUTE] = isSet[SECOND] = isSet[MILLISECOND] = isSet[ZONE_OFFSET] = isSet[DST_OFFSET] = true;
}
/**
* Return a hash code for this object, following the general contract
* specified by {@link Object#hashCode()}.
* @return the hash code
*/
public int hashCode()
{
int val = (int) ((gregorianCutover >>> 32) ^ (gregorianCutover & 0xffffffff));
return super.hashCode() ^ val;
}
/**
* Compares the given calendar with this. An object, o, is
@ -890,7 +901,8 @@ public class GregorianCalendar extends Calendar
return false;
GregorianCalendar cal = (GregorianCalendar) o;
return (cal.getTimeInMillis() == getTimeInMillis());
return (cal.gregorianCutover == gregorianCutover
&& super.equals(o));
}
/**

View file

@ -449,7 +449,7 @@ public class HashMap extends AbstractMap
*
* @param value the value to search for in this HashMap
* @return true if at least one key maps to the value
* @see containsKey(Object)
* @see #containsKey(Object)
*/
public boolean containsValue(Object value)
{

View file

@ -0,0 +1,57 @@
/* InvalidPropertiesFormatException.java
Copyright (C) 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package java.util;
import java.io.IOException;
// FIXME: serialization methods should throw NotSerializableException
/** @since 1.5 */
public class InvalidPropertiesFormatException extends IOException
{
public InvalidPropertiesFormatException(String message)
{
super(message);
}
public InvalidPropertiesFormatException(Throwable cause)
{
super();
initCause(cause);
}
}

View file

@ -915,7 +915,7 @@ public final class Locale implements Serializable, Cloneable
/**
* Write the locale to an object stream.
*
* @param output the stream to write to
* @param s the stream to write to
* @throws IOException if the write fails
* @serialData The first three fields are Strings representing language,
* country, and variant. The fourth field is a placeholder for
@ -935,7 +935,7 @@ public final class Locale implements Serializable, Cloneable
/**
* Reads a locale from the input stream.
*
* @param input the stream to read from
* @param s the stream to read from
* @throws IOException if reading fails
* @throws ClassNotFoundException if reading fails
* @serialData the hashCode is always invalid and must be recomputed

View file

@ -324,10 +324,10 @@ public interface Map
* this must be:
*
<p><pre>(o instanceof Map.Entry)
&& (getKey() == null ? ((HashMap) o).getKey() == null
: getKey().equals(((HashMap) o).getKey()))
&& (getValue() == null ? ((HashMap) o).getValue() == null
: getValue().equals(((HashMap) o).getValue()))</pre>
&& (getKey() == null ? ((Map.Entry) o).getKey() == null
: getKey().equals(((Map.Entry) o).getKey()))
&& (getValue() == null ? ((Map.Entry) o).getValue() == null
: getValue().equals(((Map.Entry) o).getValue()))</pre>
*
* @param o the object to compare
*

View file

@ -47,6 +47,25 @@ import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.ext.DefaultHandler2;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Element;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;
/**
* A set of persistent properties, which can be saved or loaded from a stream.
* A property list may also contain defaults, searched if the main list
@ -200,12 +219,15 @@ label = Name:\\u0020</pre>
// The characters up to the next Whitespace, ':', or '='
// describe the key. But look for escape sequences.
StringBuffer key = new StringBuffer();
// Try to short-circuit when there is no escape char.
int start = pos;
boolean needsEscape = line.indexOf('\\', pos) != -1;
StringBuilder key = needsEscape ? new StringBuilder() : null;
while (pos < line.length()
&& ! Character.isWhitespace(c = line.charAt(pos++))
&& c != '=' && c != ':')
{
if (c == '\\')
if (needsEscape && c == '\\')
{
if (pos == line.length())
{
@ -249,11 +271,20 @@ label = Name:\\u0020</pre>
}
}
}
else
else if (needsEscape)
key.append(c);
}
boolean isDelim = (c == ':' || c == '=');
String keyString;
if (needsEscape)
keyString = key.toString();
else if (isDelim || Character.isWhitespace(c))
keyString = line.substring(start, pos - 1);
else
keyString = line.substring(start, pos);
while (pos < line.length()
&& Character.isWhitespace(c = line.charAt(pos)))
pos++;
@ -266,7 +297,15 @@ label = Name:\\u0020</pre>
pos++;
}
StringBuffer element = new StringBuffer(line.length() - pos);
// Short-circuit if no escape chars found.
if (!needsEscape)
{
put(keyString, line.substring(pos));
continue;
}
// Escape char found so iterate through the rest of the line.
StringBuilder element = new StringBuilder(line.length() - pos);
while (pos < line.length())
{
c = line.charAt(pos++);
@ -322,7 +361,7 @@ label = Name:\\u0020</pre>
else
element.append(c);
}
put(key.toString(), element.toString());
put(keyString, element.toString());
}
}
@ -386,7 +425,7 @@ label = Name:\\u0020</pre>
Iterator iter = entrySet ().iterator ();
int i = size ();
StringBuffer s = new StringBuffer (); // Reuse the same buffer.
StringBuilder s = new StringBuilder (); // Reuse the same buffer.
while (--i >= 0)
{
Map.Entry entry = (Map.Entry) iter.next ();
@ -529,7 +568,7 @@ label = Name:\\u0020</pre>
* leading spaces must be escaped for the value
* @see #store(OutputStream, String)
*/
private void formatForOutput(String str, StringBuffer buffer, boolean key)
private void formatForOutput(String str, StringBuilder buffer, boolean key)
{
if (key)
{
@ -578,4 +617,299 @@ label = Name:\\u0020</pre>
head = key;
}
}
/**
* <p>
* Encodes the properties as an XML file using the UTF-8 encoding.
* The format of the XML file matches the DTD
* <a href="http://java.sun.com/dtd/properties.dtd">
* http://java.sun.com/dtd/properties.dtd</a>.
* </p>
* <p>
* Invoking this method provides the same behaviour as invoking
* <code>storeToXML(os, comment, "UTF-8")</code>.
* </p>
*
* @param os the stream to output to.
* @param comment a comment to include at the top of the XML file, or
* <code>null</code> if one is not required.
* @throws IOException if the serialization fails.
* @throws NullPointerException if <code>os</code> is null.
* @since 1.5
*/
public void storeToXML(OutputStream os, String comment)
throws IOException
{
storeToXML(os, comment, "UTF-8");
}
/**
* <p>
* Encodes the properties as an XML file using the supplied encoding.
* The format of the XML file matches the DTD
* <a href="http://java.sun.com/dtd/properties.dtd">
* http://java.sun.com/dtd/properties.dtd</a>.
* </p>
*
* @param os the stream to output to.
* @param comment a comment to include at the top of the XML file, or
* <code>null</code> if one is not required.
* @param encoding the encoding to use for the XML output.
* @throws IOException if the serialization fails.
* @throws NullPointerException if <code>os</code> or <code>encoding</code>
* is null.
* @since 1.5
*/
public void storeToXML(OutputStream os, String comment, String encoding)
throws IOException
{
if (os == null)
throw new NullPointerException("Null output stream supplied.");
if (encoding == null)
throw new NullPointerException("Null encoding supplied.");
try
{
DOMImplementationRegistry registry =
DOMImplementationRegistry.newInstance();
DOMImplementation domImpl = registry.getDOMImplementation("LS 3.0");
DocumentType doctype =
domImpl.createDocumentType("properties", null,
"http://java.sun.com/dtd/properties.dtd");
Document doc = domImpl.createDocument(null, "properties", doctype);
Element root = doc.getDocumentElement();
if (comment != null)
{
Element commentElement = doc.createElement("comment");
commentElement.appendChild(doc.createTextNode(comment));
root.appendChild(commentElement);
}
Iterator iterator = entrySet().iterator();
while (iterator.hasNext())
{
Map.Entry entry = (Map.Entry) iterator.next();
Element entryElement = doc.createElement("entry");
entryElement.setAttribute("key", (String) entry.getKey());
entryElement.appendChild(doc.createTextNode((String)
entry.getValue()));
root.appendChild(entryElement);
}
DOMImplementationLS loadAndSave = (DOMImplementationLS) domImpl;
LSSerializer serializer = loadAndSave.createLSSerializer();
LSOutput output = loadAndSave.createLSOutput();
output.setByteStream(os);
output.setEncoding(encoding);
serializer.write(doc, output);
}
catch (ClassNotFoundException e)
{
throw (IOException)
new IOException("The XML classes could not be found.").initCause(e);
}
catch (InstantiationException e)
{
throw (IOException)
new IOException("The XML classes could not be instantiated.")
.initCause(e);
}
catch (IllegalAccessException e)
{
throw (IOException)
new IOException("The XML classes could not be accessed.")
.initCause(e);
}
}
/**
* <p>
* Decodes the contents of the supplied <code>InputStream</code> as
* an XML file, which represents a set of properties. The format of
* the XML file must match the DTD
* <a href="http://java.sun.com/dtd/properties.dtd">
* http://java.sun.com/dtd/properties.dtd</a>.
* </p>
*
* @param in the input stream from which to receive the XML data.
* @throws IOException if an I/O error occurs in reading the input data.
* @throws InvalidPropertiesFormatException if the input data does not
* constitute an XML properties
* file.
* @throws NullPointerException if <code>in</code> is null.
* @since 1.5
*/
public void loadFromXML(InputStream in)
throws IOException, InvalidPropertiesFormatException
{
if (in == null)
throw new NullPointerException("Null input stream supplied.");
try
{
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(false); /* Don't use the URI */
XMLReader parser = factory.newSAXParser().getXMLReader();
PropertiesHandler handler = new PropertiesHandler();
parser.setContentHandler(handler);
parser.setProperty("http://xml.org/sax/properties/lexical-handler",
handler);
parser.parse(new InputSource(in));
}
catch (SAXException e)
{
throw (InvalidPropertiesFormatException)
new InvalidPropertiesFormatException("Error in parsing XML.").
initCause(e);
}
catch (ParserConfigurationException e)
{
throw (IOException)
new IOException("An XML parser could not be found.").
initCause(e);
}
}
/**
* This class deals with the parsing of XML using
* <a href="http://java.sun.com/dtd/properties.dtd">
* http://java.sun.com/dtd/properties.dtd</a>.
*
* @author Andrew John Hughes (gnu_andrew@member.fsf.org)
* @since 1.5
*/
private class PropertiesHandler
extends DefaultHandler2
{
/**
* The current key.
*/
private String key;
/**
* The current value.
*/
private String value;
/**
* A flag to check whether a valid DTD declaration has been seen.
*/
private boolean dtdDeclSeen;
/**
* Constructs a new Properties handler.
*/
public PropertiesHandler()
{
key = null;
value = null;
dtdDeclSeen = false;
}
/**
* <p>
* Captures the start of the DTD declarations, if they exist.
* A valid properties file must declare the following doctype:
* </p>
* <p>
* <code>!DOCTYPE properties SYSTEM
* "http://java.sun.com/dtd/properties.dtd"</code>
* </p>
*
* @param name the name of the document type.
* @param publicId the public identifier that was declared, or
* null if there wasn't one.
* @param systemId the system identifier that was declared, or
* null if there wasn't one.
* @throws SAXException if some error occurs in parsing.
*/
public void startDTD(String name, String publicId, String systemId)
throws SAXException
{
if (name.equals("properties") &&
publicId == null &&
systemId.equals("http://java.sun.com/dtd/properties.dtd"))
{
dtdDeclSeen = true;
}
else
throw new SAXException("Invalid DTD declaration: " + name);
}
/**
* Captures the start of an XML element.
*
* @param uri the namespace URI.
* @param localName the local name of the element inside the namespace.
* @param qName the local name qualified with the namespace URI.
* @param attributes the attributes of this element.
* @throws SAXException if some error occurs in parsing.
*/
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException
{
if (qName.equals("entry"))
{
int index = attributes.getIndex("key");
if (index != -1)
key = attributes.getValue(index);
}
else if (qName.equals("comment") || qName.equals("properties"))
{
/* Ignore it */
}
else
throw new SAXException("Invalid tag: " + qName);
}
/**
* Captures characters within an XML element.
*
* @param ch the array of characters.
* @param start the start index of the characters to use.
* @param length the number of characters to use from the start index on.
* @throws SAXException if some error occurs in parsing.
*/
public void characters(char[] ch, int start, int length)
throws SAXException
{
if (key != null)
value = new String(ch,start,length);
}
/**
* Captures the end of an XML element.
*
* @param uri the namespace URI.
* @param localName the local name of the element inside the namespace.
* @param qName the local name qualified with the namespace URI.
* @throws SAXException if some error occurs in parsing.
*/
public void endElement(String uri, String localName,
String qName)
throws SAXException
{
if (qName.equals("entry"))
{
if (value == null)
value = "";
setProperty(key, value);
key = null;
value = null;
}
}
/**
* Captures the end of the XML document. If a DTD declaration has
* not been seen, the document is erroneous and an exception is thrown.
*
* @throws SAXException if the correct DTD declaration didn't appear.
*/
public void endDocument()
throws SAXException
{
if (!dtdDeclSeen)
throw new SAXException("No appropriate DTD declaration was seen.");
}
} // class PropertiesHandler
} // class Properties

View file

@ -102,7 +102,7 @@ public class Random implements Serializable
* in next.
*
* @serial the internal state of this generator
* @see #next()
* @see #next(int)
*/
private long seed;

View file

@ -419,7 +419,11 @@ public abstract class ResourceBundle
}
}
throw new MissingResourceException("Bundle " + baseName + " not found",
throw new MissingResourceException("Bundle " + baseName
+ " not found for locale "
+ locale
+ " by classloader "
+ classLoader,
baseName, "");
}
@ -508,8 +512,7 @@ public abstract class ResourceBundle
*
* @param baseName the raw bundle name, without locale qualifiers
* @param locale the locale
* @param classloader the classloader
* @param bundle the backup (parent) bundle
* @param classLoader the classloader
* @param wantBase whether a resource bundle made only from the base name
* (with no locale information attached) should be returned.
* @return the resource bundle if it was loaded, otherwise the backup

View file

@ -468,6 +468,7 @@ public class SimpleTimeZone extends TimeZone
* @param dayOfWeek The day of week where daylight savings start.
* @param time The time in milliseconds standard time where daylight
* savings start.
* @exception IllegalArgumentException if parameters are out of range.
* @see SimpleTimeZone
*/
public void setStartRule(int month, int day, int dayOfWeek, int time)
@ -796,7 +797,7 @@ public class SimpleTimeZone extends TimeZone
* dst and standard time.
* @param calYear the year of the date to check (for leap day checking).
* @param calMonth the month of the date to check.
* @param calDay the day of month of the date to check.
* @param calDayOfMonth the day of month of the date to check.
* @param calDayOfWeek the day of week of the date to check.
* @param calMillis the millis of day of the date to check (standard time).
* @param mode the change mode; same semantic as startMode.

View file

@ -1,5 +1,5 @@
/* Timer.java -- Timer that runs TimerTasks at a later time.
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -297,12 +297,67 @@ public class Timer
this.notify();
}
/**
* Remove all canceled tasks from the queue.
*/
public synchronized int purge()
{
int removed = 0;
// Null out any elements that are canceled. Skip element 0 as
// it is the sentinel.
for (int i = elements; i > 0; --i)
{
if (heap[i].scheduled < 0)
{
++removed;
// Remove an element by pushing the appropriate child
// into place, and then iterating to the bottom of the
// tree.
int index = i;
while (heap[index] != null)
{
int child = 2 * index;
if (child >= heap.length)
{
// Off end; we're done.
heap[index] = null;
break;
}
if (child + 1 >= heap.length || heap[child + 1] == null)
{
// Nothing -- we're done.
}
else if (heap[child] == null
|| (heap[child].scheduled
> heap[child + 1].scheduled))
++child;
heap[index] = heap[child];
index = child;
}
}
}
// Make a new heap if we shrank enough.
int newLen = heap.length;
while (elements - removed + DEFAULT_SIZE / 2 <= newLen / 4)
newLen /= 2;
if (newLen != heap.length)
{
TimerTask[] newHeap = new TimerTask[newLen];
System.arraycopy(heap, 0, newHeap, 0, elements + 1);
heap = newHeap;
}
return removed;
}
} // TaskQueue
/**
* The scheduler that executes all the tasks on a particular TaskQueue,
* reschedules any repeating tasks and that waits when no task has to be
* executed immediatly. Stops running when canceled or when the parent
* executed immediately. Stops running when canceled or when the parent
* Timer has been finalized and no more tasks have to be executed.
*/
private static final class Scheduler implements Runnable
@ -419,6 +474,30 @@ public class Timer
this(daemon, Thread.NORM_PRIORITY);
}
/**
* Create a new Timer whose Thread has the indicated name. It will have
* normal priority and will not be a daemon thread.
* @param name the name of the Thread
* @since 1.5
*/
public Timer(String name)
{
this(false, Thread.NORM_PRIORITY, name);
}
/**
* Create a new Timer whose Thread has the indicated name. It will have
* normal priority. The boolean argument controls whether or not it
* will be a daemon thread.
* @param name the name of the Thread
* @param daemon true if the Thread should be a daemon thread
* @since 1.5
*/
public Timer(String name, boolean daemon)
{
this(daemon, Thread.NORM_PRIORITY, name);
}
/**
* Creates a new Timer with a daemon Thread as scheduler if daemon is true,
* with the priority given and a default name.
@ -612,4 +691,14 @@ public class Timer
{
queue.setNullOnEmpty(true);
}
/**
* Removes all cancelled tasks from the queue.
* @return the number of tasks removed
* @since 1.5
*/
public int purge()
{
return queue.purge();
}
}

View file

@ -1146,7 +1146,7 @@ public class TreeMap extends AbstractMap
*
* @param s the stream to read from
* @param count the number of keys to read
* @param readValue true to read values, false to insert "" as the value
* @param readValues true to read values, false to insert "" as the value
* @throws ClassNotFoundException if the underlying stream fails
* @throws IOException if the underlying stream fails
* @see #readObject(ObjectInputStream)

View file

@ -241,7 +241,8 @@ public class WeakHashMap extends AbstractMap implements Map
// This method will get inlined.
cleanQueue();
if (knownMod != modCount)
throw new ConcurrentModificationException();
throw new ConcurrentModificationException(knownMod + " != "
+ modCount);
}
/**
@ -698,21 +699,20 @@ public class WeakHashMap extends AbstractMap implements Map
// bucket may be enqueued later by the garbage collection, and
// internalRemove will be called a second time.
bucket.slot = -1;
if (buckets[slot] == bucket)
buckets[slot] = bucket.next;
else
WeakBucket prev = null;
WeakBucket next = buckets[slot];
while (next != bucket)
{
WeakBucket prev = buckets[slot];
/* This may throw a NullPointerException. It shouldn't but if
* a race condition occurred (two threads removing the same
* bucket at the same time) it may happen. <br>
* But with race condition many much worse things may happen
* anyway.
*/
while (prev.next != bucket)
prev = prev.next;
prev.next = bucket.next;
if (next == null) throw new InternalError("WeakHashMap in incosistent state");
prev = next;
next = prev.next;
}
if (prev == null)
buckets[slot] = bucket.next;
else
prev.next = bucket.next;
size--;
}

View file

@ -80,10 +80,10 @@ public class Manifest implements Cloneable
/**
* Creates a Manifest from the supplied input stream.
*
* @see read(Inputstream)
* @see write(OutputStream)
* @see #read(InputStream)
* @see #write(OutputStream)
*
* @param InputStream the input stream to read the manifest from
* @param in the input stream to read the manifest from
* @exception IOException when an i/o exception occurs or the input stream
* does not describe a valid manifest
*/
@ -102,7 +102,7 @@ public class Manifest implements Cloneable
* a particular entry also changes the attributes of that entry in the
* original manifest.
*
* @see clone()
* @see #clone()
* @param man the Manifest to copy from
*/
public Manifest(Manifest man)

View file

@ -43,10 +43,6 @@ import java.io.FileOutputStream;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.util.LinkedList;
import java.util.ListIterator;

View file

@ -191,8 +191,8 @@ h.setFormatter(h.getFormatter());</pre>
* Returns the character encoding which this handler uses for publishing
* log records.
*
* @param encoding the name of a character encoding, or <code>null</code>
* for the default platform encoding.
* @return the name of a character encoding, or <code>null</code>
* for the default platform encoding.
*/
public String getEncoding()
{
@ -252,7 +252,7 @@ h.setFormatter(h.getFormatter());</pre>
* Sets the <code>Filter</code> for controlling which
* log records will be published by this <code>Handler</code>.
*
* @return the <code>Filter</code> to use, or
* @param filter the <code>Filter</code> to use, or
* <code>null</code> to filter log records purely based
* on their severity level.
*/

View file

@ -664,7 +664,7 @@ public class LogManager
{
try
{
return (new Boolean(getLogManager().getProperty(name))).booleanValue();
return (Boolean.valueOf(getLogManager().getProperty(name))).booleanValue();
}
catch (Exception ex)
{
@ -682,7 +682,7 @@ public class LogManager
*
* @param defaultValue the value that will be returned if the
* property is not defined, or if
* {@link Level.parse(java.lang.String)} does not like
* {@link Level#parse(java.lang.String)} does not like
* the property value.
*/
static Level getLevelProperty(String propertyName, Level defaultValue)

View file

@ -41,6 +41,8 @@ package java.util.logging;
public final class LoggingPermission
extends java.security.BasicPermission
{
private static final long serialVersionUID = 63564341580231582L;
/**
* Creates a new LoggingPermission.
*

View file

@ -85,7 +85,7 @@ public class SimpleFormatter
/**
* Formats a log record into a String.
*
* @param the log record to be formatted.
* @param record the log record to be formatted.
*
* @return a short human-readable message, typically one or two
* lines. Lines are separated using the default platform line

View file

@ -307,7 +307,7 @@ public class XMLFormatter
*
* @return a string for the header.
*
* @param handler the handler which will prepend the returned
* @param h the handler which will prepend the returned
* string in front of the first log record. This method
* will inspect certain properties of the handler, for
* example its encoding, in order to construct the header.

View file

@ -230,15 +230,15 @@ public abstract class Preferences {
}
/**
* Returns the system preferences node for the package of an object.
* The package node name of the object is determined by dropping the
* class name of the object of the fully quallified class name and
* replacing all '.' to '/' in the package name. If the class of the
* Returns the system preferences node for the package of a class.
* The package node name of the class is determined by dropping the
* final component of the fully qualified class name and
* changing all '.' to '/' in the package name. If the class of the
* object has no package then the package node name is "&lt;unnamed&gt;".
* The returened node is <code>systemRoot().node(packageNodeName)</code>.
* The returned node is <code>systemRoot().node(packageNodeName)</code>.
*
* @param o Object whose default system preference node is requested
* @returns system preferences node that should be used by object o
* @param c Object whose default system preference node is requested
* @returns system preferences node that should be used by class c
* @exception SecurityException when a security manager is installed and
* the caller does not have <code>RuntimePermission("preferences")</code>.
*/
@ -249,15 +249,15 @@ public abstract class Preferences {
}
/**
* Returns the user preferences node for the package of an object.
* The package node name of the object is determined by dropping the
* class name of the object of the fully quallified class name and
* replacing all '.' to '/' in the package name. If the class of the
* Returns the user preferences node for the package of a class.
* The package node name of the class is determined by dropping the
* final component of the fully qualified class name and
* changing all '.' to '/' in the package name. If the class of the
* object has no package then the package node name is "&lt;unnamed&gt;".
* The returened node is <code>userRoot().node(packageNodeName)</code>.
* The returned node is <code>userRoot().node(packageNodeName)</code>.
*
* @param o Object whose default user preference node is requested
* @returns user preferences node that should be used by object o
* @param c Object whose default userpreference node is requested
* @returns userpreferences node that should be used by class c
* @exception SecurityException when a security manager is installed and
* the caller does not have <code>RuntimePermission("preferences")</code>.
*/

View file

@ -227,9 +227,9 @@ public final class Matcher
* If the match succeeds then more information can be obtained via the
* start, end, and group methods.
*
* @see #start
* @see #end
* @see #group
* @see #start()
* @see #end()
* @see #group()
*/
public boolean matches ()
{
@ -267,7 +267,7 @@ public final class Matcher
}
/**
* @param group The index of a capturing group in this matcher's pattern
* @returns the index of a capturing group in this matcher's pattern
*
* @exception IllegalStateException If no match has yet been attempted,
* or if the previous match operation failed

View file

@ -183,7 +183,7 @@ class PendingBuffer
/**
* Flushes the pending buffer and returns that data in a new array
*
* @param output the output stream
* @return the output stream
*/
public final byte[] toByteArray()

View file

@ -144,9 +144,18 @@ public class ZipFile implements ZipConstants
private void checkZipFile() throws IOException, ZipException
{
byte[] magicBuf = new byte[4];
raf.read(magicBuf);
boolean validRead = true;
if (readLeInt(magicBuf, 0) != LOCSIG)
try
{
raf.readFully(magicBuf);
}
catch (EOFException eof)
{
validRead = false;
}
if (validRead == false || readLeInt(magicBuf, 0) != LOCSIG)
{
raf.close();
throw new ZipException("Not a valid zip file");
@ -377,7 +386,7 @@ public class ZipFile implements ZipConstants
* Checks that the ZipFile is still open and reads entries when necessary.
*
* @exception IllegalStateException when the ZipFile has already been closed.
* @exception IOEexception when the entries could not be read.
* @exception IOException when the entries could not be read.
*/
private HashMap getEntries() throws IOException
{
@ -395,7 +404,7 @@ public class ZipFile implements ZipConstants
/**
* Searches for a zip entry in this archive with the given name.
*
* @param the name. May contain directory components separated by
* @param name the name. May contain directory components separated by
* slashes ('/').
* @return the zip entry, or null if no entry with that name exists.
*