Another series of fixes from reverse JAPI... ChangeLog:
2008-03-11 Andrew John Hughes <[EMAIL PROTECTED]> * java/beans/beancontext/BeanContextServicesSupport.java: (BCSSProxyServiceProvider(BeanContextServiceProvider)): Add package-private constructor. * java/lang/StringBuffer.java: (ensureCapacity_unsynchronized(int)): Make package-private. * java/rmi/activation/Activatable.java: (export(ActivationID, Remote, int, RMIServerSocketFactory)): Make private. (makeId(ActivationID)): Likewise. * java/security/MessageDigest.java: (update(ByteBuffer)): Make final. * java/security/cert/PolicyQualifierInfo.java: (getPolicyQualifierId()): Likewise. (getEncoded()): Likewise. (getPolicyQualifier()): Likewise. * java/text/DateFormat.java: (ISO_YEAR_FIELD): Removed. (LOCALIZED_DAY_OF_WEEK_FIELD): Likewise. (EXTENDED_YEAR_FIELD): Likewise. (MODIFIED_JULIAN_DAY_FIELD): Likewise. (MILLISECOND_IN_DAY_FIELD): Likewise. (RFC822_TIMEZONE_FIELD): Likewise. (Field.ISO_YEAR_FIELD): Likewise. (Field.LOCALIZED_DAY_OF_WEEK_FIELD): Likewise. (Field.EXTENDED_YEAR_FIELD): Likewise. (Field.MODIFIED_JULIAN_DAY_FIELD): Likewise. (Field.MILLISECOND_IN_DAY_FIELD): Likewise. (Field.RFC822_TIMEZONE_FIELD): Likewise. * java/text/DecimalFormat.java: (format(Object,StringBuffer,FieldPosition)): Make final. * java/text/Format.java: (Format()): Make protected. * java/text/NumberFormat.java: (NumberFormat()): Likewise. * java/text/SimpleDateFormat.java: Remove code using RFC822_TIMEZONE_FIELD. * java/util/Stack.java: Use array of Objects rather than instances of T. * java/util/Vector.java: Likewise. * java/util/concurrent/CopyOnWriteArrayList.java: Don't extend AbstractList. (containsAll(Collection)): Implemented. (listIterator()): Likewise. (subList(int,int)): Likewise. * java/util/zip/Deflater.java: (getTotalIn()): Remove deprecation. (getTotalOut()): Likewise. * java/util/zip/Inflater.java, (getTotalIn()): Likewise. (getTotalOut()): Likewise. -- Andrew :) Support Free Java! Contribute to GNU Classpath and the OpenJDK http://www.gnu.org/software/classpath http://openjdk.java.net PGP Key: 94EFD9D8 (http://subkeys.pgp.net) Fingerprint = F8EF F1EA 401E 2E60 15FA 7927 142C 2591 94EF D9D8
Index: java/beans/beancontext/BeanContextServicesSupport.java =================================================================== RCS file: /sources/classpath/classpath/java/beans/beancontext/BeanContextServicesSupport.java,v retrieving revision 1.16 diff -u -3 -p -u -r1.16 BeanContextServicesSupport.java --- java/beans/beancontext/BeanContextServicesSupport.java 7 Jan 2008 21:11:24 -0000 1.16 +++ java/beans/beancontext/BeanContextServicesSupport.java 12 Mar 2008 23:24:35 -0000 @@ -86,6 +86,11 @@ public class BeanContextServicesSupport private BeanContextServiceProvider provider; + BCSSProxyServiceProvider(BeanContextServiceProvider p) + { + provider = p; + } + public Iterator getCurrentServiceSelectors (BeanContextServices bcs, Class serviceClass) { Index: java/lang/StringBuffer.java =================================================================== RCS file: /sources/classpath/classpath/java/lang/StringBuffer.java,v retrieving revision 1.36 diff -u -3 -p -u -r1.36 StringBuffer.java --- java/lang/StringBuffer.java 26 Feb 2008 23:26:00 -0000 1.36 +++ java/lang/StringBuffer.java 12 Mar 2008 23:24:35 -0000 @@ -955,7 +955,7 @@ public final class StringBuffer * @param minimumCapacity the minimum capacity * @see #ensureCapacity(int) */ - protected void ensureCapacity_unsynchronized(int minimumCapacity) + void ensureCapacity_unsynchronized(int minimumCapacity) { if (shared || minimumCapacity > value.length) { Index: java/rmi/activation/Activatable.java =================================================================== RCS file: /sources/classpath/classpath/java/rmi/activation/Activatable.java,v retrieving revision 1.11 diff -u -3 -p -u -r1.11 Activatable.java --- java/rmi/activation/Activatable.java 14 May 2007 02:20:01 -0000 1.11 +++ java/rmi/activation/Activatable.java 12 Mar 2008 23:24:36 -0000 @@ -462,8 +462,8 @@ public abstract class Activatable * means anonymous port. * @param serverSocketFactory the server socket factory */ - public static Remote export(ActivationID id, Remote obj, int port, - RMIServerSocketFactory serverSocketFactory) + private static Remote export(ActivationID id, Remote obj, int port, + RMIServerSocketFactory serverSocketFactory) throws RemoteException { ActivatableServerRef sref = null; @@ -479,7 +479,7 @@ public abstract class Activatable * * @return the object id */ - public static ObjID makeId(ActivationID aid) + private static ObjID makeId(ActivationID aid) { ObjID id = new ObjID(0); Index: java/security/MessageDigest.java =================================================================== RCS file: /sources/classpath/classpath/java/security/MessageDigest.java,v retrieving revision 1.17 diff -u -3 -p -u -r1.17 MessageDigest.java --- java/security/MessageDigest.java 10 Dec 2006 20:25:45 -0000 1.17 +++ java/security/MessageDigest.java 12 Mar 2008 23:24:36 -0000 @@ -235,7 +235,7 @@ public abstract class MessageDigest exte * @param input The input byte buffer. * @since 1.5 */ - public void update (ByteBuffer input) + public final void update (ByteBuffer input) { engineUpdate (input); } Index: java/security/cert/PolicyQualifierInfo.java =================================================================== RCS file: /sources/classpath/classpath/java/security/cert/PolicyQualifierInfo.java,v retrieving revision 1.6 diff -u -3 -p -u -r1.6 PolicyQualifierInfo.java --- java/security/cert/PolicyQualifierInfo.java 10 Dec 2006 20:25:45 -0000 1.6 +++ java/security/cert/PolicyQualifierInfo.java 12 Mar 2008 23:24:37 -0000 @@ -124,7 +124,7 @@ PolicyQualifierId ::= OBJECT IDENTIFIER * * @return This structure's OID field. */ - public String getPolicyQualifierId() + public final String getPolicyQualifierId() { return oid.toString(); } @@ -137,7 +137,7 @@ PolicyQualifierId ::= OBJECT IDENTIFIER * * @return The encoded form. */ - public byte[] getEncoded() + public final byte[] getEncoded() { return (byte[]) encoded.clone(); } @@ -149,7 +149,7 @@ PolicyQualifierId ::= OBJECT IDENTIFIER * * @return The encoded qualifier. */ - public byte[] getPolicyQualifier() + public final byte[] getPolicyQualifier() { if (qualifier == null) return new byte[0]; Index: java/text/DateFormat.java =================================================================== RCS file: /sources/classpath/classpath/java/text/DateFormat.java,v retrieving revision 1.24 diff -u -3 -p -u -r1.24 DateFormat.java --- java/text/DateFormat.java 8 Jan 2007 00:41:24 -0000 1.24 +++ java/text/DateFormat.java 12 Mar 2008 23:24:38 -0000 @@ -219,80 +219,6 @@ public abstract class DateFormat extends * In the U.S. locale, this is 'z'. */ public static final int TIMEZONE_FIELD = 17; - /** - * Represents the position of the ISO year - * pattern character in the array of - * localized pattern characters. - * In the U.S. locale, this is 'Y'. - * This is a GNU extension in accordance with - * the CLDR data used. This value may - * differ from the normal year value. - */ - public static final int ISO_YEAR_FIELD = 18; - /** - * Represents the position of the localized - * day of the week pattern character in the - * array of localized pattern characters. - * In the U.S. locale, this is 'e'. - * This is a GNU extension in accordance with - * the CLDR data used. This value only - * differs from the day of the week with - * numeric formatting, in which case the - * locale's first day of the week is used. - */ - public static final int LOCALIZED_DAY_OF_WEEK_FIELD = 19; - /** - * Represents the position of the extended year - * pattern character in the array of - * localized pattern characters. - * In the U.S. locale, this is 'u'. - * This is a GNU extension in accordance with - * the CLDR data used. This value modifies - * the year value, so as to incorporate the era. - * For example, in the Gregorian calendar system, - * the extended year is negative instead of being - * marked as BC. - */ - public static final int EXTENDED_YEAR_FIELD = 20; - /** - * Represents the position of the modified Julian - * day pattern character in the array of - * localized pattern characters. - * In the U.S. locale, this is 'g'. - * This is a GNU extension in accordance with - * the CLDR data used. This value differs - * from the standard Julian day in that days - * are marked from midnight onwards rather than - * noon, and the local time zone affects the value. - * In simple terms, it can be thought of as all - * the date fields represented as a single number. - */ - public static final int MODIFIED_JULIAN_DAY_FIELD = 21; - /** - * Represents the position of the millisecond - * in the day pattern character in the array of - * localized pattern characters. - * In the U.S. locale, this is 'A'. - * This is a GNU extension in accordance with - * the CLDR data used. This value represents - * all the time fields (excluding the time zone) - * numerically, giving the number of milliseconds - * into the day (e.g. 10 in the morning would - * be 10 * 60 * 60 * 1000). Any daylight savings - * offset also affects this value. - */ - public static final int MILLISECOND_IN_DAY_FIELD = 22; - /** - * Represents the position of the RFC822 - * timezone pattern character in the array of - * localized pattern characters. - * In the U.S. locale, this is 'Z'. - * This is a GNU extension in accordance with - * the CLDR data used. The value is the offset - * of the current time from GMT e.g. -0500 would - * be five hours prior to GMT. - */ - public static final int RFC822_TIMEZONE_FIELD = 23; public static class Field extends Format.Field { @@ -336,18 +262,6 @@ public abstract class DateFormat extends = new Field("hour0", Calendar.HOUR); public static final DateFormat.Field TIME_ZONE = new Field("timezone", Calendar.ZONE_OFFSET); - public static final DateFormat.Field ISO_YEAR - = new Field("iso year", Calendar.YEAR); - public static final DateFormat.Field LOCALIZED_DAY_OF_WEEK - = new Field("localized day of week", Calendar.DAY_OF_WEEK); - public static final DateFormat.Field EXTENDED_YEAR - = new Field("extended year", Calendar.YEAR); - public static final DateFormat.Field MODIFIED_JULIAN_DAY - = new Field("julian day", -1); - public static final DateFormat.Field MILLISECOND_IN_DAY - = new Field("millisecond in day", -1); - public static final DateFormat.Field RFC822_TIME_ZONE - = new Field("rfc822 timezone", Calendar.ZONE_OFFSET); static final DateFormat.Field[] allFields = { @@ -355,9 +269,7 @@ public abstract class DateFormat extends HOUR_OF_DAY0, MINUTE, SECOND, MILLISECOND, DAY_OF_WEEK, DAY_OF_YEAR, DAY_OF_WEEK_IN_MONTH, WEEK_OF_YEAR, WEEK_OF_MONTH, AM_PM, HOUR1, HOUR0, - TIME_ZONE, ISO_YEAR, LOCALIZED_DAY_OF_WEEK, - EXTENDED_YEAR, MODIFIED_JULIAN_DAY, MILLISECOND_IN_DAY, - RFC822_TIME_ZONE + TIME_ZONE }; // For deserialization Index: java/text/DecimalFormat.java =================================================================== RCS file: /sources/classpath/classpath/java/text/DecimalFormat.java,v retrieving revision 1.34 diff -u -3 -p -u -r1.34 DecimalFormat.java --- java/text/DecimalFormat.java 27 Oct 2007 23:33:04 -0000 1.34 +++ java/text/DecimalFormat.java 12 Mar 2008 23:24:39 -0000 @@ -310,7 +310,7 @@ public class DecimalFormat extends Numbe * field. If used on output defines the offsets of the alignment field. * @return The String representation of this long. */ - public StringBuffer format(Object obj, StringBuffer sbuf, FieldPosition pos) + public final StringBuffer format(Object obj, StringBuffer sbuf, FieldPosition pos) { if (obj instanceof BigInteger) { Index: java/text/Format.java =================================================================== RCS file: /sources/classpath/classpath/java/text/Format.java,v retrieving revision 1.16 diff -u -3 -p -u -r1.16 Format.java --- java/text/Format.java 2 Jul 2005 20:32:41 -0000 1.16 +++ java/text/Format.java 12 Mar 2008 23:24:39 -0000 @@ -81,7 +81,7 @@ public abstract class Format implements * It performs no actions, but acts as a default constructor for * subclasses. */ - public Format () + protected Format () { } Index: java/text/NumberFormat.java =================================================================== RCS file: /sources/classpath/classpath/java/text/NumberFormat.java,v retrieving revision 1.23 diff -u -3 -p -u -r1.23 NumberFormat.java --- java/text/NumberFormat.java 8 Jan 2007 00:41:24 -0000 1.23 +++ java/text/NumberFormat.java 12 Mar 2008 23:24:39 -0000 @@ -653,7 +653,7 @@ public abstract class NumberFormat exten /** * This is a default constructor for use by subclasses. */ - public NumberFormat () + protected NumberFormat () { } Index: java/text/SimpleDateFormat.java =================================================================== RCS file: /sources/classpath/classpath/java/text/SimpleDateFormat.java,v retrieving revision 1.56 diff -u -3 -p -u -r1.56 SimpleDateFormat.java --- java/text/SimpleDateFormat.java 5 Feb 2008 14:59:05 -0000 1.56 +++ java/text/SimpleDateFormat.java 12 Mar 2008 23:24:40 -0000 @@ -801,18 +801,6 @@ public class SimpleDateFormat extends Da (isDST, cf.getSize() > 3 ? TimeZone.LONG : TimeZone.SHORT); buffer.append (zoneID); break; - case RFC822_TIMEZONE_FIELD: - buffer.setDefaultAttribute(DateFormat.Field.RFC822_TIME_ZONE); - int pureMinutes = (calendar.get(Calendar.ZONE_OFFSET) + - calendar.get(Calendar.DST_OFFSET)) / (1000 * 60); - String sign = (pureMinutes < 0) ? "-" : "+"; - pureMinutes = Math.abs(pureMinutes); - int hours = pureMinutes / 60; - int minutes = pureMinutes % 60; - buffer.append(sign); - withLeadingZeros(hours, 2, buffer); - withLeadingZeros(minutes, 2, buffer); - break; default: throw new IllegalArgumentException ("Illegal pattern character " + cf.getCharacter()); Index: java/util/Stack.java =================================================================== RCS file: /sources/classpath/classpath/java/util/Stack.java,v retrieving revision 1.12 diff -u -3 -p -u -r1.12 Stack.java --- java/util/Stack.java 10 Dec 2006 20:25:46 -0000 1.12 +++ java/util/Stack.java 12 Mar 2008 23:24:40 -0000 @@ -102,13 +102,14 @@ public class Stack<T> extends Vector<T> * @return the Object popped from the stack * @throws EmptyStackException if the stack is empty */ + @SuppressWarnings("unchecked") public synchronized T pop() { if (elementCount == 0) throw new EmptyStackException(); modCount++; - T obj = elementData[--elementCount]; + T obj = (T) elementData[--elementCount]; // Set topmost element to null to assist the gc in cleanup. elementData[elementCount] = null; @@ -121,12 +122,13 @@ public class Stack<T> extends Vector<T> * @return the top Object on the stack * @throws EmptyStackException if the stack is empty */ + @SuppressWarnings("unchecked") public synchronized T peek() { if (elementCount == 0) throw new EmptyStackException(); - return elementData[elementCount - 1]; + return (T) elementData[elementCount - 1]; } /** Index: java/util/Vector.java =================================================================== RCS file: /sources/classpath/classpath/java/util/Vector.java,v retrieving revision 1.30 diff -u -3 -p -u -r1.30 Vector.java --- java/util/Vector.java 10 Dec 2006 20:25:46 -0000 1.30 +++ java/util/Vector.java 12 Mar 2008 23:24:40 -0000 @@ -95,7 +95,7 @@ public class Vector<T> extends AbstractL * in positions 0 through elementCount - 1, and all remaining slots are null. * @serial the elements */ - protected T[] elementData; + protected Object[] elementData; /** * The number of elements currently in the vector, also returned by @@ -133,7 +133,7 @@ public class Vector<T> extends AbstractL public Vector(Collection<? extends T> c) { elementCount = c.size(); - elementData = c.toArray((T[]) new Object[elementCount]); + elementData = c.toArray(new Object[elementCount]); } /** @@ -149,7 +149,7 @@ public class Vector<T> extends AbstractL { if (initialCapacity < 0) throw new IllegalArgumentException(); - elementData = (T[]) new Object[initialCapacity]; + elementData = new Object[initialCapacity]; this.capacityIncrement = capacityIncrement; } @@ -295,11 +295,12 @@ public class Vector<T> extends AbstractL return i < elementCount; } + @SuppressWarnings("unchecked") public T nextElement() { if (i >= elementCount) throw new NoSuchElementException(); - return elementData[i++]; + return (T) elementData[i++]; } }; } @@ -385,10 +386,11 @@ public class Vector<T> extends AbstractL * @throws ArrayIndexOutOfBoundsException index < 0 || index >= size() * @see #get(int) */ + @SuppressWarnings("unchecked") public synchronized T elementAt(int index) { checkBoundExclusive(index); - return elementData[index]; + return (T) elementData[index]; } /** @@ -397,12 +399,13 @@ public class Vector<T> extends AbstractL * @return the first Object in the Vector * @throws NoSuchElementException the Vector is empty */ + @SuppressWarnings("unchecked") public synchronized T firstElement() { if (elementCount == 0) throw new NoSuchElementException(); - return elementData[0]; + return (T) elementData[0]; } /** @@ -411,12 +414,13 @@ public class Vector<T> extends AbstractL * @return the last Object in the Vector * @throws NoSuchElementException the Vector is empty */ + @SuppressWarnings("unchecked") public synchronized T lastElement() { if (elementCount == 0) throw new NoSuchElementException(); - return elementData[elementCount - 1]; + return (T) elementData[elementCount - 1]; } /** @@ -604,10 +608,11 @@ public class Vector<T> extends AbstractL * @throws ArrayIndexOutOfBoundsException index < 0 || index >= size() * @since 1.2 */ + @SuppressWarnings("unchecked") public synchronized T set(int index, T element) { checkBoundExclusive(index); - T temp = elementData[index]; + T temp = (T) elementData[index]; elementData[index] = element; return temp; } @@ -660,10 +665,11 @@ public class Vector<T> extends AbstractL * @throws ArrayIndexOutOfBoundsException index < 0 || index >= size() * @since 1.2 */ + @SuppressWarnings("unchecked") public synchronized T remove(int index) { checkBoundExclusive(index); - T temp = elementData[index]; + T temp = (T) elementData[index]; modCount++; elementCount--; if (index < elementCount) Index: java/util/concurrent/CopyOnWriteArrayList.java =================================================================== RCS file: /sources/classpath/classpath/java/util/concurrent/CopyOnWriteArrayList.java,v retrieving revision 1.5 diff -u -3 -p -u -r1.5 CopyOnWriteArrayList.java --- java/util/concurrent/CopyOnWriteArrayList.java 24 Nov 2007 22:31:07 -0000 1.5 +++ java/util/concurrent/CopyOnWriteArrayList.java 12 Mar 2008 23:24:40 -0000 @@ -46,9 +46,11 @@ import java.lang.reflect.Array; import java.util.AbstractList; import java.util.Collection; +import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.List; import java.util.ListIterator; +import java.util.NoSuchElementException; import java.util.RandomAccess; /** @@ -94,8 +96,8 @@ import java.util.RandomAccess; * * @since 1.5 */ -public class CopyOnWriteArrayList<E> extends AbstractList<E> implements - List<E>, RandomAccess, Cloneable, Serializable +public class CopyOnWriteArrayList<E> + implements List<E>, RandomAccess, Cloneable, Serializable { /** * @@ -180,6 +182,28 @@ public class CopyOnWriteArrayList<E> ext } /** + * Tests whether this collection contains all the elements in a given + * collection. This implementation iterates over the given collection, + * testing whether each element is contained in this collection. If any one + * is not, false is returned. Otherwise true is returned. + * + * @param c the collection to test against + * @return true if this collection contains all the elements in the given + * collection + * @throws NullPointerException if the given collection is null + * @see #contains(Object) + */ + public boolean containsAll(Collection<?> c) + { + Iterator<?> itr = c.iterator(); + int pos = c.size(); + while (--pos >= 0) + if (!contains(itr.next())) + return false; + return true; + } + + /** * Returns the lowest index at which element appears in this List, or -1 if it * does not appear. * @@ -711,6 +735,24 @@ public class CopyOnWriteArrayList<E> ext * * @return a ListIterator containing the elements of this list in sequence. */ + public ListIterator<E> listIterator() + { + return listIterator(0); + } + + /** + * Return a ListIterator over the elements of this list starting at + * the specified index. An initial call to [EMAIL PROTECTED] next()} will thus + * return the element at [EMAIL PROTECTED] index}, while an initial call to + * [EMAIL PROTECTED] previous()} will return the element at [EMAIL PROTECTED] index-1}. The + * Iterator uses a snapshot of the state of the internal storage + * at the moment this method is called and does <strong>not</strong> support + * update operations, so no synchronization is needed to traverse the + * iterator. + * + * @param index the index at which to start iterating. + * @return a ListIterator containing the elements of this list in sequence. + */ public ListIterator<E> listIterator(final int index) { if (index < 0 || index > size()) @@ -783,6 +825,483 @@ public class CopyOnWriteArrayList<E> ext } /** + * Obtain a List view of a subsection of this list, from fromIndex + * (inclusive) to toIndex (exclusive). If the two indices are equal, the + * sublist is empty. The returned list should be modifiable if and only + * if this list is modifiable. Changes to the returned list should be + * reflected in this list. If this list is structurally modified in + * any way other than through the returned list, the result of any subsequent + * operations on the returned list is undefined. + * <p> + * + * This implementation returns a subclass of AbstractList. It stores, in + * private fields, the offset and size of the sublist, and the expected + * modCount of the backing list. If the backing list implements RandomAccess, + * the sublist will also. + * <p> + * + * The subclass's <code>set(int, Object)</code>, <code>get(int)</code>, + * <code>add(int, Object)</code>, <code>remove(int)</code>, + * <code>addAll(int, Collection)</code> and + * <code>removeRange(int, int)</code> methods all delegate to the + * corresponding methods on the backing abstract list, after + * bounds-checking the index and adjusting for the offset. The + * <code>addAll(Collection c)</code> method merely returns addAll(size, c). + * The <code>listIterator(int)</code> method returns a "wrapper object" + * over a list iterator on the backing list, which is created with the + * corresponding method on the backing list. The <code>iterator()</code> + * method merely returns listIterator(), and the <code>size()</code> method + * merely returns the subclass's size field. + * <p> + * + * All methods first check to see if the actual modCount of the backing + * list is equal to its expected value, and throw a + * ConcurrentModificationException if it is not. + * + * @param fromIndex the index that the returned list should start from + * (inclusive) + * @param toIndex the index that the returned list should go to (exclusive) + * @return a List backed by a subsection of this list + * @throws IndexOutOfBoundsException if fromIndex < 0 + * || toIndex > size() + * @throws IllegalArgumentException if fromIndex > toIndex + * @see ConcurrentModificationException + * @see RandomAccess + */ + public List<E> subList(int fromIndex, int toIndex) + { + // This follows the specification of AbstractList, but is inconsistent + // with the one in List. Don't you love Sun's inconsistencies? + if (fromIndex > toIndex) + throw new IllegalArgumentException(fromIndex + " > " + toIndex); + if (fromIndex < 0 || toIndex > size()) + throw new IndexOutOfBoundsException(); + + if (this instanceof RandomAccess) + return new RandomAccessSubList<E>(this, fromIndex, toIndex); + return new SubList<E>(this, fromIndex, toIndex); + } + + /** + * This class follows the implementation requirements set forth in + * [EMAIL PROTECTED] AbstractList#subList(int, int)}. It matches Sun's implementation + * by using a non-public top-level class in the same package. + * + * @author Original author unknown + * @author Eric Blake ([EMAIL PROTECTED]) + */ + private static class SubList<E> + extends AbstractList<E> + { + // Package visible, for use by iterator. + /** The original list. */ + final CopyOnWriteArrayList<E> backingList; + /** The index of the first element of the sublist. */ + final int offset; + /** The size of the sublist. */ + int size; + /** The backing data */ + E[] data; + + /** + * Construct the sublist. + * + * @param backing the list this comes from + * @param fromIndex the lower bound, inclusive + * @param toIndex the upper bound, exclusive + */ + SubList(CopyOnWriteArrayList<E> backing, int fromIndex, int toIndex) + { + backingList = backing; + data = backing.data; + offset = fromIndex; + size = toIndex - fromIndex; + } + + /** + * This method checks the two modCount fields to ensure that there has + * not been a concurrent modification, returning if all is okay. + * + * @throws ConcurrentModificationException if the backing list has been + * modified externally to this sublist + */ + // This can be inlined. Package visible, for use by iterator. + void checkMod() + { + if (data != backingList.data) + throw new ConcurrentModificationException(); + } + + /** + * This method checks that a value is between 0 and size (inclusive). If + * it is not, an exception is thrown. + * + * @param index the value to check + * @throws IndexOutOfBoundsException if index < 0 || index > size() + */ + // This will get inlined, since it is private. + private void checkBoundsInclusive(int index) + { + if (index < 0 || index > size) + throw new IndexOutOfBoundsException("Index: " + index + ", Size:" + + size); + } + + /** + * This method checks that a value is between 0 (inclusive) and size + * (exclusive). If it is not, an exception is thrown. + * + * @param index the value to check + * @throws IndexOutOfBoundsException if index < 0 || index >= size() + */ + // This will get inlined, since it is private. + private void checkBoundsExclusive(int index) + { + if (index < 0 || index >= size) + throw new IndexOutOfBoundsException("Index: " + index + ", Size:" + + size); + } + + /** + * Specified by AbstractList.subList to return the private field size. + * + * @return the sublist size + * @throws ConcurrentModificationException if the backing list has been + * modified externally to this sublist + */ + public int size() + { + checkMod(); + return size; + } + + /** + * Specified by AbstractList.subList to delegate to the backing list. + * + * @param index the location to modify + * @param o the new value + * @return the old value + * @throws ConcurrentModificationException if the backing list has been + * modified externally to this sublist + * @throws UnsupportedOperationException if the backing list does not + * support the set operation + * @throws IndexOutOfBoundsException if index < 0 || index >= size() + * @throws ClassCastException if o cannot be added to the backing list due + * to its type + * @throws IllegalArgumentException if o cannot be added to the backing list + * for some other reason + */ + public E set(int index, E o) + { + checkMod(); + checkBoundsExclusive(index); + return backingList.set(index + offset, o); + } + + /** + * Specified by AbstractList.subList to delegate to the backing list. + * + * @param index the location to get from + * @return the object at that location + * @throws ConcurrentModificationException if the backing list has been + * modified externally to this sublist + * @throws IndexOutOfBoundsException if index < 0 || index >= size() + */ + public E get(int index) + { + checkMod(); + checkBoundsExclusive(index); + return backingList.get(index + offset); + } + + /** + * Specified by AbstractList.subList to delegate to the backing list. + * + * @param index the index to insert at + * @param o the object to add + * @throws ConcurrentModificationException if the backing list has been + * modified externally to this sublist + * @throws IndexOutOfBoundsException if index < 0 || index > size() + * @throws UnsupportedOperationException if the backing list does not + * support the add operation. + * @throws ClassCastException if o cannot be added to the backing list due + * to its type. + * @throws IllegalArgumentException if o cannot be added to the backing + * list for some other reason. + */ + public void add(int index, E o) + { + checkMod(); + checkBoundsInclusive(index); + backingList.add(index + offset, o); + size++; + } + + /** + * Specified by AbstractList.subList to delegate to the backing list. + * + * @param index the index to remove + * @return the removed object + * @throws ConcurrentModificationException if the backing list has been + * modified externally to this sublist + * @throws IndexOutOfBoundsException if index < 0 || index >= size() + * @throws UnsupportedOperationException if the backing list does not + * support the remove operation + */ + public E remove(int index) + { + checkMod(); + checkBoundsExclusive(index); + E o = backingList.remove(index + offset); + size--; + return o; + } + + /** + * Specified by AbstractList.subList to delegate to the backing list. + * + * @param index the location to insert at + * @param c the collection to insert + * @return true if this list was modified, in other words, c is non-empty + * @throws ConcurrentModificationException if the backing list has been + * modified externally to this sublist + * @throws IndexOutOfBoundsException if index < 0 || index > size() + * @throws UnsupportedOperationException if this list does not support the + * addAll operation + * @throws ClassCastException if some element of c cannot be added to this + * list due to its type + * @throws IllegalArgumentException if some element of c cannot be added + * to this list for some other reason + * @throws NullPointerException if the specified collection is null + */ + public boolean addAll(int index, Collection<? extends E> c) + { + checkMod(); + checkBoundsInclusive(index); + int csize = c.size(); + boolean result = backingList.addAll(offset + index, c); + size += csize; + return result; + } + + /** + * Specified by AbstractList.subList to return addAll(size, c). + * + * @param c the collection to insert + * @return true if this list was modified, in other words, c is non-empty + * @throws ConcurrentModificationException if the backing list has been + * modified externally to this sublist + * @throws UnsupportedOperationException if this list does not support the + * addAll operation + * @throws ClassCastException if some element of c cannot be added to this + * list due to its type + * @throws IllegalArgumentException if some element of c cannot be added + * to this list for some other reason + * @throws NullPointerException if the specified collection is null + */ + public boolean addAll(Collection<? extends E> c) + { + return addAll(size, c); + } + + /** + * Specified by AbstractList.subList to return listIterator(). + * + * @return an iterator over the sublist + */ + public Iterator<E> iterator() + { + return listIterator(); + } + + /** + * Specified by AbstractList.subList to return a wrapper around the + * backing list's iterator. + * + * @param index the start location of the iterator + * @return a list iterator over the sublist + * @throws ConcurrentModificationException if the backing list has been + * modified externally to this sublist + * @throws IndexOutOfBoundsException if the value is out of range + */ + public ListIterator<E> listIterator(final int index) + { + checkMod(); + checkBoundsInclusive(index); + + return new ListIterator<E>() + { + private final ListIterator<E> i + = backingList.listIterator(index + offset); + private int position = index; + + /** + * Tests to see if there are any more objects to + * return. + * + * @return True if the end of the list has not yet been + * reached. + */ + public boolean hasNext() + { + return position < size; + } + + /** + * Tests to see if there are objects prior to the + * current position in the list. + * + * @return True if objects exist prior to the current + * position of the iterator. + */ + public boolean hasPrevious() + { + return position > 0; + } + + /** + * Retrieves the next object from the list. + * + * @return The next object. + * @throws NoSuchElementException if there are no + * more objects to retrieve. + * @throws ConcurrentModificationException if the + * list has been modified elsewhere. + */ + public E next() + { + if (position == size) + throw new NoSuchElementException(); + position++; + return i.next(); + } + + /** + * Retrieves the previous object from the list. + * + * @return The next object. + * @throws NoSuchElementException if there are no + * previous objects to retrieve. + * @throws ConcurrentModificationException if the + * list has been modified elsewhere. + */ + public E previous() + { + if (position == 0) + throw new NoSuchElementException(); + position--; + return i.previous(); + } + + /** + * Returns the index of the next element in the + * list, which will be retrieved by <code>next()</code> + * + * @return The index of the next element. + */ + public int nextIndex() + { + return i.nextIndex() - offset; + } + + /** + * Returns the index of the previous element in the + * list, which will be retrieved by <code>previous()</code> + * + * @return The index of the previous element. + */ + public int previousIndex() + { + return i.previousIndex() - offset; + } + + /** + * Removes the last object retrieved by <code>next()</code> + * from the list, if the list supports object removal. + * + * @throws IllegalStateException if the iterator is positioned + * before the start of the list or the last object has already + * been removed. + * @throws UnsupportedOperationException if the list does + * not support removing elements. + */ + public void remove() + { + throw new UnsupportedOperationException("Modification not supported " + + "on CopyOnWriteArrayList iterators"); + } + + + /** + * Replaces the last object retrieved by <code>next()</code> + * or <code>previous</code> with o, if the list supports object + * replacement and an add or remove operation has not already + * been performed. + * + * @throws IllegalStateException if the iterator is positioned + * before the start of the list or the last object has already + * been removed. + * @throws UnsupportedOperationException if the list doesn't support + * the addition or removal of elements. + * @throws ClassCastException if the type of o is not a valid type + * for this list. + * @throws IllegalArgumentException if something else related to o + * prevents its addition. + * @throws ConcurrentModificationException if the list + * has been modified elsewhere. + */ + public void set(E o) + { + throw new UnsupportedOperationException("Modification not supported " + + "on CopyOnWriteArrayList iterators"); + } + + /** + * Adds the supplied object before the element that would be returned + * by a call to <code>next()</code>, if the list supports addition. + * + * @param o The object to add to the list. + * @throws UnsupportedOperationException if the list doesn't support + * the addition of new elements. + * @throws ClassCastException if the type of o is not a valid type + * for this list. + * @throws IllegalArgumentException if something else related to o + * prevents its addition. + * @throws ConcurrentModificationException if the list + * has been modified elsewhere. + */ + public void add(E o) + { + throw new UnsupportedOperationException("Modification not supported " + + "on CopyOnWriteArrayList iterators"); + } + }; + } + } // class SubList + + /** + * This class is a RandomAccess version of SubList, as required by + * [EMAIL PROTECTED] AbstractList#subList(int, int)}. + * + * @author Eric Blake ([EMAIL PROTECTED]) + */ + private static final class RandomAccessSubList<E> extends SubList<E> + implements RandomAccess + { + /** + * Construct the sublist. + * + * @param backing the list this comes from + * @param fromIndex the lower bound, inclusive + * @param toIndex the upper bound, exclusive + */ + RandomAccessSubList(CopyOnWriteArrayList<E> backing, int fromIndex, int toIndex) + { + super(backing, fromIndex, toIndex); + } + } // class RandomAccessSubList + + /** * Serializes this object to the given stream. * * @param s Index: java/util/zip/Deflater.java =================================================================== RCS file: /sources/classpath/classpath/java/util/zip/Deflater.java,v retrieving revision 1.8 diff -u -3 -p -u -r1.8 Deflater.java --- java/util/zip/Deflater.java 10 Dec 2006 20:25:46 -0000 1.8 +++ java/util/zip/Deflater.java 12 Mar 2008 23:24:41 -0000 @@ -241,7 +241,6 @@ public class Deflater /** * Gets the number of input bytes processed so far. */ - @Deprecated public int getTotalIn() { return (int) engine.getTotalIn(); @@ -259,7 +258,6 @@ public class Deflater /** * Gets the number of output bytes so far. */ - @Deprecated public int getTotalOut() { return (int) totalOut; Index: java/util/zip/Inflater.java =================================================================== RCS file: /sources/classpath/classpath/java/util/zip/Inflater.java,v retrieving revision 1.10 diff -u -3 -p -u -r1.10 Inflater.java --- java/util/zip/Inflater.java 10 Dec 2006 20:25:46 -0000 1.10 +++ java/util/zip/Inflater.java 12 Mar 2008 23:24:41 -0000 @@ -246,7 +246,6 @@ public class Inflater * Gets the total number of processed compressed input bytes. * @return the total number of bytes of processed input bytes. */ - @Deprecated public int getTotalIn() { return (int) (totalIn - getRemaining()); @@ -266,7 +265,6 @@ public class Inflater * Gets the total number of output bytes returned by inflate(). * @return the total number of output bytes. */ - @Deprecated public int getTotalOut() { return (int) totalOut;
signature.asc
Description: Digital signature