RFR [9] 8039527: Broken links in ConcurrentMap javadoc

Chris Hegarty chris.hegarty at oracle.com
Thu Apr 10 10:27:50 UTC 2014


On 10 Apr 2014, at 11:03, David Holmes <david.holmes at oracle.com> wrote:

> Looks good to me too Chris.

Thanks for looking at this David. Unfortunately I pushed before receiving this mail, so you are not listed as a reviewer on the changeset,

> But I can't help wonder if there is a design flaw in javadoc here, as this means you should never use relative links in any doc element that might be inherited. Which almost reduces to never use relative links. :(

Right. This could be considered an issue with javadoc. It is difficult to say if relative hrefs should be resolved against the subtypes package hierarchy. At the very least a bug against the javadoc tool should be filed so that we can get final clarification on expected behaviour. I will do this.

-Chris.


> 
> David
> 
> On 10/04/2014 12:07 AM, Chris Hegarty wrote:
>> java.util.concurrent.ConcurrentMap contains several broken links to
>> Collection.html#optional-restrictions. See
>> 
>> http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html
>> 
>> 
>> The issue is caused by the use of '{@inheritDoc}' in many '@throws'
>> definitions. ConcurrentMap's superType Map, is in the java.util package.
>> Map has documentation references to Collection.html, which is in the
>> same package as Map, java.util, but since ConcurrentMap is not in
>> java.util it needs different relative links, or better still links
>> relative to the docRoot.
>> 
>> Trivial diffs inline:
>> 
>> diff --git a/src/share/classes/java/util/Map.java
>> b/src/share/classes/java/util/Map.java
>> --- a/src/share/classes/java/util/Map.java
>> +++ b/src/share/classes/java/util/Map.java
>> @@ -157,10 +157,10 @@
>>       *         key
>>       * @throws ClassCastException if the key is of an inappropriate
>> type for
>>       *         this map
>> -     * (<a href="Collection.html#optional-restrictions">optional</a>)
>> +     * (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws NullPointerException if the specified key is null and
>> this map
>>       *         does not permit null keys
>> -     * (<a href="Collection.html#optional-restrictions">optional</a>)
>> +     * (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       */
>>      boolean containsKey(Object key);
>> 
>> @@ -177,10 +177,10 @@
>>       *         specified value
>>       * @throws ClassCastException if the value is of an inappropriate
>> type for
>>       *         this map
>> -     * (<a href="Collection.html#optional-restrictions">optional</a>)
>> +     * (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws NullPointerException if the specified value is null and
>> this
>>       *         map does not permit null values
>> -     * (<a href="Collection.html#optional-restrictions">optional</a>)
>> +     * (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       */
>>      boolean containsValue(Object value);
>> 
>> @@ -204,10 +204,10 @@
>>       *         {@code null} if this map contains no mapping for the key
>>       * @throws ClassCastException if the key is of an inappropriate
>> type for
>>       *         this map
>> -     * (<a href="Collection.html#optional-restrictions">optional</a>)
>> +     * (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws NullPointerException if the specified key is null and
>> this map
>>       *         does not permit null keys
>> -     * (<a href="Collection.html#optional-restrictions">optional</a>)
>> +     * (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       */
>>      V get(Object key);
>> 
>> @@ -264,10 +264,10 @@
>>       *         is not supported by this map
>>       * @throws ClassCastException if the key is of an inappropriate
>> type for
>>       *         this map
>> -     * (<a href="Collection.html#optional-restrictions">optional</a>)
>> +     * (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws NullPointerException if the specified key is null and this
>>       *         map does not permit null keys
>> -     * (<a href="Collection.html#optional-restrictions">optional</a>)
>> +     * (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       */
>>      V remove(Object key);
>> 
>> @@ -577,10 +577,10 @@
>>       * {@code defaultValue} if this map contains no mapping for the key
>>       * @throws ClassCastException if the key is of an inappropriate
>> type for
>>       * this map
>> -     * (<a href="Collection.html#optional-restrictions">optional</a>)
>> +     * (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws NullPointerException if the specified key is null and
>> this map
>>       * does not permit null keys
>> -     * (<a href="Collection.html#optional-restrictions">optional</a>)
>> +     * (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @since 1.8
>>       */
>>      default V getOrDefault(Object key, V defaultValue) {
>> @@ -659,13 +659,13 @@
>>       * values
>>       * @throws ClassCastException if a replacement value is of an
>> inappropriate
>>       *         type for this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws NullPointerException if function or a replacement value
>> is null,
>>       *         and this map does not permit null keys or values
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws IllegalArgumentException if some property of a
>> replacement value
>>       *         prevents it from being stored in this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws ConcurrentModificationException if an entry is found to be
>>       * removed during iteration
>>       * @since 1.8
>> @@ -726,16 +726,16 @@
>>       *         if the implementation supports null values.)
>>       * @throws UnsupportedOperationException if the {@code put} operation
>>       *         is not supported by this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws ClassCastException if the key or value is of an
>> inappropriate
>>       *         type for this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws NullPointerException if the specified key or value is
>> null,
>>       *         and this map does not permit null keys or values
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws IllegalArgumentException if some property of the
>> specified key
>>       *         or value prevents it from being stored in this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @since 1.8
>>       */
>>      default V putIfAbsent(K key, V value) {
>> @@ -772,13 +772,13 @@
>>       * @return {@code true} if the value was removed
>>       * @throws UnsupportedOperationException if the {@code remove}
>> operation
>>       *         is not supported by this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws ClassCastException if the key or value is of an
>> inappropriate
>>       *         type for this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws NullPointerException if the specified key or value is
>> null,
>>       *         and this map does not permit null keys or values
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @since 1.8
>>       */
>>      default boolean remove(Object key, Object value) {
>> @@ -821,14 +821,14 @@
>>       * @return {@code true} if the value was replaced
>>       * @throws UnsupportedOperationException if the {@code put} operation
>>       *         is not supported by this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws ClassCastException if the class of a specified key or
>> value
>>       *         prevents it from being stored in this map
>>       * @throws NullPointerException if a specified key or newValue is
>> null,
>>       *         and this map does not permit null keys or values
>>       * @throws NullPointerException if oldValue is null and this map
>> does not
>>       *         permit null values
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws IllegalArgumentException if some property of a
>> specified key
>>       *         or value prevents it from being stored in this map
>>       * @since 1.8
>> @@ -871,10 +871,10 @@
>>       *         if the implementation supports null values.)
>>       * @throws UnsupportedOperationException if the {@code put} operation
>>       *         is not supported by this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws ClassCastException if the class of the specified key or
>> value
>>       *         prevents it from being stored in this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws NullPointerException if the specified key or value is
>> null,
>>       *         and this map does not permit null keys or values
>>       * @throws IllegalArgumentException if some property of the
>> specified key
>> @@ -942,10 +942,10 @@
>>       *         is null
>>       * @throws UnsupportedOperationException if the {@code put} operation
>>       *         is not supported by this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws ClassCastException if the class of the specified key or
>> value
>>       *         prevents it from being stored in this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @since 1.8
>>       */
>>      default V computeIfAbsent(K key,
>> @@ -1003,10 +1003,10 @@
>>       *         remappingFunction is null
>>       * @throws UnsupportedOperationException if the {@code put} operation
>>       *         is not supported by this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws ClassCastException if the class of the specified key or
>> value
>>       *         prevents it from being stored in this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @since 1.8
>>       */
>>      default V computeIfPresent(K key,
>> @@ -1079,10 +1079,10 @@
>>       *         remappingFunction is null
>>       * @throws UnsupportedOperationException if the {@code put} operation
>>       *         is not supported by this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws ClassCastException if the class of the specified key or
>> value
>>       *         prevents it from being stored in this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @since 1.8
>>       */
>>      default V compute(K key,
>> @@ -1157,10 +1157,10 @@
>>       *         value is associated with the key
>>       * @throws UnsupportedOperationException if the {@code put} operation
>>       *         is not supported by this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws ClassCastException if the class of the specified key or
>> value
>>       *         prevents it from being stored in this map
>> -     *         (<a
>> href="Collection.html#optional-restrictions">optional</a>)
>> +     *         (<a
>> href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
>> 
>>       * @throws NullPointerException if the specified key is null and
>> this map
>>       *         does not support null keys or the value or
>> remappingFunction is
>>       *         null
>> 
>> -Chris.




More information about the core-libs-dev mailing list