RFR : 7178639 : (XXS) Remove incorrect documentation from Deque.push(E e)
Mike Duigou
mike.duigou at oracle.com
Tue Apr 30 01:14:39 UTC 2013
Looks reasonable to me. Could BlockingDeque::push() just use {@inheritDoc} for main body doc?
Mike
On Apr 29 2013, at 18:05 , Martin Buchholz wrote:
> Below is my proposed alternative fix, that also adds some missing @throws, reuses some existing wording, and makes small improvements to existing @throws specs (maintaining these specs is very tedious...)
>
> Index: src/main/java/util/Deque.java
> ===================================================================
> RCS file: /export/home/jsr166/jsr166/jsr166/src/main/java/util/Deque.java,v
> retrieving revision 1.24
> diff -u -U 15 -r1.24 Deque.java
> --- src/main/java/util/Deque.java 11 Feb 2013 17:27:45 -0000 1.24
> +++ src/main/java/util/Deque.java 30 Apr 2013 01:01:56 -0000
> @@ -155,51 +155,53 @@
> * methods, but instead inherit the identity-based versions from class
> * {@code Object}.
> *
> * <p>This interface is a member of the <a
> * href="{@docRoot}/../technotes/guides/collections/index.html"> Java Collections
> * Framework</a>.
> *
> * @author Doug Lea
> * @author Josh Bloch
> * @since 1.6
> * @param <E> the type of elements held in this collection
> */
> public interface Deque<E> extends Queue<E> {
> /**
> * Inserts the specified element at the front of this deque if it is
> - * possible to do so immediately without violating capacity restrictions.
> - * When using a capacity-restricted deque, it is generally preferable to
> - * use method {@link #offerFirst}.
> + * possible to do so immediately without violating capacity restrictions,
> + * throwing an {@code IllegalStateException} if no space is currently
> + * available. When using a capacity-restricted deque, it is generally
> + * preferable to use method {@link #offerFirst}.
> *
> * @param e the element to add
> * @throws IllegalStateException if the element cannot be added at this
> * time due to capacity restrictions
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
> */
> void addFirst(E e);
>
> /**
> * Inserts the specified element at the end of this deque if it is
> - * possible to do so immediately without violating capacity restrictions.
> - * When using a capacity-restricted deque, it is generally preferable to
> - * use method {@link #offerLast}.
> + * possible to do so immediately without violating capacity restrictions,
> + * throwing an {@code IllegalStateException} if no space is currently
> + * available. When using a capacity-restricted deque, it is generally
> + * preferable to use method {@link #offerLast}.
> *
> * <p>This method is equivalent to {@link #add}.
> *
> * @param e the element to add
> * @throws IllegalStateException if the element cannot be added at this
> * time due to capacity restrictions
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
> */
> void addLast(E e);
>
> @@ -441,32 +443,31 @@
> * returns {@code null} if this deque is empty.
> *
> * <p>This method is equivalent to {@link #peekFirst()}.
> *
> * @return the head of the queue represented by this deque, or
> * {@code null} if this deque is empty
> */
> E peek();
>
>
> // *** Stack methods ***
>
> /**
> * Pushes an element onto the stack represented by this deque (in other
> * words, at the head of this deque) if it is possible to do so
> - * immediately without violating capacity restrictions, returning
> - * {@code true} upon success and throwing an
> + * immediately without violating capacity restrictions, throwing an
> * {@code IllegalStateException} if no space is currently available.
> *
> * <p>This method is equivalent to {@link #addFirst}.
> *
> * @param e the element to push
> * @throws IllegalStateException if the element cannot be added at this
> * time due to capacity restrictions
> * @throws ClassCastException if the class of the specified element
> * prevents it from being added to this deque
> * @throws NullPointerException if the specified element is null and this
> * deque does not permit null elements
> * @throws IllegalArgumentException if some property of the specified
> * element prevents it from being added to this deque
> */
> void push(E e);
> Index: src/main/java/util/concurrent/BlockingDeque.java
> ===================================================================
> RCS file: /export/home/jsr166/jsr166/jsr166/src/main/java/util/concurrent/BlockingDeque.java,v
> retrieving revision 1.25
> diff -u -U 15 -r1.25 BlockingDeque.java
> --- src/main/java/util/concurrent/BlockingDeque.java 11 Feb 2013 17:27:45 -0000 1.25
> +++ src/main/java/util/concurrent/BlockingDeque.java 30 Apr 2013 01:01:57 -0000
> @@ -596,28 +596,29 @@
> * @return the number of elements in this deque
> */
> public int size();
>
> /**
> * Returns an iterator over the elements in this deque in proper sequence.
> * The elements will be returned in order from first (head) to last (tail).
> *
> * @return an iterator over the elements in this deque in proper sequence
> */
> Iterator<E> iterator();
>
> // *** Stack methods ***
>
> /**
> - * Pushes an element onto the stack represented by this deque. In other
> - * words, inserts the element at the front of this deque unless it would
> - * violate capacity restrictions.
> + * Pushes an element onto the stack represented by this deque (in other
> + * words, at the head of this deque) if it is possible to do so
> + * immediately without violating capacity restrictions, throwing an
> + * {@code IllegalStateException} if no space is currently available.
> *
> * <p>This method is equivalent to {@link #addFirst(Object) addFirst}.
> *
> * @throws IllegalStateException {@inheritDoc}
> * @throws ClassCastException {@inheritDoc}
> * @throws NullPointerException if the specified element is null
> * @throws IllegalArgumentException {@inheritDoc}
> */
> void push(E e);
> }
> Index: src/main/java/util/concurrent/ConcurrentLinkedDeque.java
> ===================================================================
> RCS file: /export/home/jsr166/jsr166/jsr166/src/main/java/util/concurrent/ConcurrentLinkedDeque.java,v
> retrieving revision 1.43
> diff -u -U 15 -r1.43 ConcurrentLinkedDeque.java
> --- src/main/java/util/concurrent/ConcurrentLinkedDeque.java 27 Mar 2013 19:46:34 -0000 1.43
> +++ src/main/java/util/concurrent/ConcurrentLinkedDeque.java 30 Apr 2013 01:01:57 -0000
> @@ -989,35 +989,51 @@
> }
>
> /**
> * Inserts the specified element at the tail of this deque.
> * As the deque is unbounded, this method will never throw
> * {@link IllegalStateException} or return {@code false}.
> *
> * @return {@code true} (as specified by {@link Collection#add})
> * @throws NullPointerException if the specified element is null
> */
> public boolean add(E e) {
> return offerLast(e);
> }
>
> public E poll() { return pollFirst(); }
> - public E remove() { return removeFirst(); }
> public E peek() { return peekFirst(); }
> +
> + /**
> + * @throws NoSuchElementException {@inheritDoc}
> + */
> + public E remove() { return removeFirst(); }
> +
> + /**
> + * @throws NoSuchElementException {@inheritDoc}
> + */
> + public E pop() { return removeFirst(); }
> +
> + /**
> + * @throws NoSuchElementException {@inheritDoc}
> + */
> public E element() { return getFirst(); }
> +
> + /**
> + * @throws NullPointerException {@inheritDoc}
> + */
> public void push(E e) { addFirst(e); }
> - public E pop() { return removeFirst(); }
>
> /**
> * Removes the first element {@code e} such that
> * {@code o.equals(e)}, if such an element exists in this deque.
> * If the deque does not contain the element, it is unchanged.
> *
> * @param o element to be removed from this deque, if present
> * @return {@code true} if the deque contained the specified element
> * @throws NullPointerException if the specified element is null
> */
> public boolean removeFirstOccurrence(Object o) {
> checkNotNull(o);
> for (Node<E> p = first(); p != null; p = succ(p)) {
> E item = p.item;
> if (item != null && o.equals(item) && p.casItem(item, null)) {
> Index: src/main/java/util/concurrent/LinkedBlockingDeque.java
> ===================================================================
> RCS file: /export/home/jsr166/jsr166/jsr166/src/main/java/util/concurrent/LinkedBlockingDeque.java,v
> retrieving revision 1.44
> diff -u -U 15 -r1.44 LinkedBlockingDeque.java
> --- src/main/java/util/concurrent/LinkedBlockingDeque.java 27 Mar 2013 19:46:34 -0000 1.44
> +++ src/main/java/util/concurrent/LinkedBlockingDeque.java 30 Apr 2013 01:01:57 -0000
> @@ -280,40 +280,40 @@
> unlinkLast();
> } else {
> p.next = n;
> n.prev = p;
> x.item = null;
> // Don't mess with x's links. They may still be in use by
> // an iterator.
> --count;
> notFull.signal();
> }
> }
>
> // BlockingDeque methods
>
> /**
> - * @throws IllegalStateException {@inheritDoc}
> - * @throws NullPointerException {@inheritDoc}
> + * @throws IllegalStateException if this deque is full
> + * @throws NullPointerException {@inheritDoc}
> */
> public void addFirst(E e) {
> if (!offerFirst(e))
> throw new IllegalStateException("Deque full");
> }
>
> /**
> - * @throws IllegalStateException {@inheritDoc}
> + * @throws IllegalStateException if this deque is full
> * @throws NullPointerException {@inheritDoc}
> */
> public void addLast(E e) {
> if (!offerLast(e))
> throw new IllegalStateException("Deque full");
> }
>
> /**
> * @throws NullPointerException {@inheritDoc}
> */
> public boolean offerFirst(E e) {
> if (e == null) throw new NullPointerException();
> Node<E> node = new Node<E>(e);
> final ReentrantLock lock = this.lock;
> lock.lock();
> @@ -588,32 +588,31 @@
> return false;
> } finally {
> lock.unlock();
> }
> }
>
> // BlockingQueue methods
>
> /**
> * Inserts the specified element at the end of this deque unless it would
> * violate capacity restrictions. When using a capacity-restricted deque,
> * it is generally preferable to use method {@link #offer(Object) offer}.
> *
> * <p>This method is equivalent to {@link #addLast}.
> *
> - * @throws IllegalStateException if the element cannot be added at this
> - * time due to capacity restrictions
> + * @throws IllegalStateException if this deque is full
> * @throws NullPointerException if the specified element is null
> */
> public boolean add(E e) {
> addLast(e);
> return true;
> }
>
> /**
> * @throws NullPointerException if the specified element is null
> */
> public boolean offer(E e) {
> return offerLast(e);
> }
>
> /**
> @@ -726,32 +725,32 @@
> try {
> int n = Math.min(maxElements, count);
> for (int i = 0; i < n; i++) {
> c.add(first.item); // In this order, in case add() throws.
> unlinkFirst();
> }
> return n;
> } finally {
> lock.unlock();
> }
> }
>
> // Stack methods
>
> /**
> - * @throws IllegalStateException {@inheritDoc}
> - * @throws NullPointerException {@inheritDoc}
> + * @throws IllegalStateException if this deque is full
> + * @throws NullPointerException {@inheritDoc}
> */
> public void push(E e) {
> addFirst(e);
> }
>
> /**
> * @throws NoSuchElementException {@inheritDoc}
> */
> public E pop() {
> return removeFirst();
> }
>
> // Collection methods
>
> /**
> @@ -817,31 +816,31 @@
> * collection, especially when count is close to capacity.
> */
>
> // /**
> // * Adds all of the elements in the specified collection to this
> // * queue. Attempts to addAll of a queue to itself result in
> // * {@code IllegalArgumentException}. Further, the behavior of
> // * this operation is undefined if the specified collection is
> // * modified while the operation is in progress.
> // *
> // * @param c collection containing elements to be added to this queue
> // * @return {@code true} if this queue changed as a result of the call
> // * @throws ClassCastException {@inheritDoc}
> // * @throws NullPointerException {@inheritDoc}
> // * @throws IllegalArgumentException {@inheritDoc}
> -// * @throws IllegalStateException {@inheritDoc}
> +// * @throws IllegalStateException if this deque is full
> // * @see #add(Object)
> // */
> // public boolean addAll(Collection<? extends E> c) {
> // if (c == null)
> // throw new NullPointerException();
> // if (c == this)
> // throw new IllegalArgumentException();
> // final ReentrantLock lock = this.lock;
> // lock.lock();
> // try {
> // boolean modified = false;
> // for (E e : c)
> // if (linkLast(e))
> // modified = true;
> // return modified;
>
>
>
> On Mon, Apr 29, 2013 at 4:56 PM, Mike Duigou <mike.duigou at oracle.com> wrote:
> OK, I will wait on that and hopefully Chris can pick it up on the next jsr166 sync.
>
> Mike
>
> On Apr 29 2013, at 16:43 , Martin Buchholz wrote:
>
>> As always for changes to files maintained in jsr166 CVS, we'd like changes to flow through jsr166 CVS into openjdk proper.
>>
>> In this case, there are some issues with missing exception specs in implementing classes. I'll come up with a diff.
>>
>> Martin
>>
>>
>> On Fri, Apr 26, 2013 at 5:12 PM, Mike Duigou <mike.duigou at oracle.com> wrote:
>> Hello all;
>>
>> A very small change to review.
>>
>> http://cr.openjdk.java.net/~mduigou/JDK-7178639/0/webrev/
>>
>> The change removes some erroneous documentation from the Deque push() method.
>>
>> Mike
>>
>
>
More information about the core-libs-dev
mailing list