JDK 9 RFR of JDK-8031369: Fix raw types warnings in sun.misc.{Cache, SoftCache}

Mike Duigou mike.duigou at oracle.com
Wed Jan 8 01:23:35 UTC 2014


Can you add the javadoc @deprecated <alternative> deprecation notice as well?

Otherwise looks good.

Mike
On Jan 7 2014, at 15:58 , Joe Darcy <joe.darcy at oracle.com> wrote:

> Hello,
> 
> Please review the fix below to address
> 
>    JDK-8031369: Fix raw types warnings in sun.misc.{Cache, SoftCache}
> 
> by a quick-and-dirty generification and deprecation of some very old classes
> 
>    http://cr.openjdk.java.net/~darcy/8031369.0/
> 
> Corresponding patch below.
> 
> In the fullness of time, these classes should probably be removed from the platform, but for the moment I'm more concerned with eliminating the several dozen lint warnings in this code.
> 
> Thanks,
> 
> -Joe
> 
> --- old/src/share/classes/sun/misc/Cache.java    2014-01-07 15:51:32.000000000 -0800
> +++ new/src/share/classes/sun/misc/Cache.java    2014-01-07 15:51:32.000000000 -0800
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (c) 1995, 1996, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
>  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>  *
>  * This code is free software; you can redistribute it and/or modify it
> @@ -74,8 +74,9 @@
>  * @see java.lang.Object#equals
>  * @see sun.misc.Ref
>  */
> + at Deprecated
> public
> -class Cache extends Dictionary {
> +    class Cache extends Dictionary<Object, Object> {
>     /**
>      * The hash table data.
>      */
> @@ -163,7 +164,7 @@
>      * @see Cache#elements
>      * @see Enumeration
>      */
> -    public synchronized Enumeration keys() {
> +    public synchronized Enumeration<Object> keys() {
>         return new CacheEnumerator(table, true);
>     }
> 
> @@ -173,7 +174,7 @@
>      * @see Cache#keys
>      * @see Enumeration
>      */
> -    public synchronized Enumeration elements() {
> +    public synchronized Enumeration<Object> elements() {
>         return new CacheEnumerator(table, false);
>     }
> 
> @@ -305,7 +306,7 @@
>  * A Cache enumerator class.  This class should remain opaque
>  * to the client. It will use the Enumeration interface.
>  */
> -class CacheEnumerator implements Enumeration {
> +class CacheEnumerator implements Enumeration<Object> {
>     boolean keys;
>     int index;
>     CacheEntry table[];
> --- old/src/share/classes/sun/misc/SoftCache.java    2014-01-07 15:51:33.000000000 -0800
> +++ new/src/share/classes/sun/misc/SoftCache.java    2014-01-07 15:51:33.000000000 -0800
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
>  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>  *
>  * This code is free software; you can redistribute it and/or modify it
> @@ -101,8 +101,8 @@
>  * @see         java.lang.ref.SoftReference
>  */
> 
> -
> -public class SoftCache extends AbstractMap implements Map {
> + at Deprecated
> +public class SoftCache extends AbstractMap<Object, Object> implements Map<Object, Object> {
> 
>     /* The basic idea of this implementation is to maintain an internal HashMap
>        that maps keys to soft references whose referents are the keys' values;
> @@ -115,18 +115,18 @@
>      */
> 
> 
> -    static private class ValueCell extends SoftReference {
> +    static private class ValueCell extends SoftReference<Object> {
>         static private Object INVALID_KEY = new Object();
>         static private int dropped = 0;
>         private Object key;
> 
> -        private ValueCell(Object key, Object value, ReferenceQueue queue) {
> +        private ValueCell(Object key, Object value, ReferenceQueue<Object> queue) {
>             super(value, queue);
>             this.key = key;
>         }
> 
>         private static ValueCell create(Object key, Object value,
> -                                        ReferenceQueue queue)
> + ReferenceQueue<Object> queue)
>         {
>             if (value == null) return null;
>             return new ValueCell(key, value, queue);
> @@ -154,10 +154,10 @@
> 
> 
>     /* Hash table mapping keys to ValueCells */
> -    private Map hash;
> +    private Map<Object, Object> hash;
> 
>     /* Reference queue for cleared ValueCells */
> -    private ReferenceQueue queue = new ReferenceQueue();
> +    private ReferenceQueue<Object> queue = new ReferenceQueue<>();
> 
> 
>     /* Process any ValueCells that have been cleared and enqueued by the
> @@ -189,7 +189,7 @@
>      *                                   factor is less than zero
>      */
>     public SoftCache(int initialCapacity, float loadFactor) {
> -        hash = new HashMap(initialCapacity, loadFactor);
> +        hash = new HashMap<>(initialCapacity, loadFactor);
>     }
> 
>     /**
> @@ -202,7 +202,7 @@
>      *                                   or equal to zero
>      */
>     public SoftCache(int initialCapacity) {
> -        hash = new HashMap(initialCapacity);
> +        hash = new HashMap<>(initialCapacity);
>     }
> 
>     /**
> @@ -210,7 +210,7 @@
>      * capacity and the default load factor.
>      */
>     public SoftCache() {
> -        hash = new HashMap();
> +        hash = new HashMap<>();
>     }
> 
> 
> @@ -348,13 +348,13 @@
>     /* Internal class for entries.
>        Because it uses SoftCache.this.queue, this class cannot be static.
>      */
> -    private class Entry implements Map.Entry {
> -        private Map.Entry ent;
> +    private class Entry implements Map.Entry<Object, Object> {
> +        private Map.Entry<Object, Object> ent;
>         private Object value;   /* Strong reference to value, to prevent the GC
>                                    from flushing the value while this Entry
>                                    exists */
> 
> -        Entry(Map.Entry ent, Object value) {
> +        Entry(Map.Entry<Object, Object> ent, Object value) {
>             this.ent = ent;
>             this.value = value;
>         }
> @@ -371,9 +371,10 @@
>             return ent.setValue(ValueCell.create(ent.getKey(), value, queue));
>         }
> 
> +        @SuppressWarnings("unchecked")
>         public boolean equals(Object o) {
>             if (! (o instanceof Map.Entry)) return false;
> -            Map.Entry e = (Map.Entry)o;
> +            Map.Entry<Object, Object> e = (Map.Entry<Object, Object>)o;
>             return (valEquals(ent.getKey(), e.getKey())
>                     && valEquals(value, e.getValue()));
>         }
> @@ -388,18 +389,18 @@
> 
> 
>     /* Internal class for entry sets */
> -    private class EntrySet extends AbstractSet {
> -        Set hashEntries = hash.entrySet();
> +    private class EntrySet extends AbstractSet<Map.Entry<Object, Object>> {
> +        Set<Map.Entry<Object, Object>> hashEntries = hash.entrySet();
> 
> -        public Iterator iterator() {
> +        public Iterator<Map.Entry<Object, Object>> iterator() {
> 
> -            return new Iterator() {
> -                Iterator hashIterator = hashEntries.iterator();
> +            return new Iterator<Map.Entry<Object, Object>>() {
> +                Iterator<Map.Entry<Object, Object>> hashIterator = hashEntries.iterator();
>                 Entry next = null;
> 
>                 public boolean hasNext() {
>                     while (hashIterator.hasNext()) {
> -                        Map.Entry ent = (Map.Entry)hashIterator.next();
> +                        Map.Entry<Object, Object> ent = hashIterator.next();
>                         ValueCell vc = (ValueCell)ent.getValue();
>                         Object v = null;
>                         if ((vc != null) && ((v = vc.get()) == null)) {
> @@ -412,7 +413,7 @@
>                     return false;
>                 }
> 
> -                public Object next() {
> +                public Map.Entry<Object, Object> next() {
>                     if ((next == null) && !hasNext())
>                         throw new NoSuchElementException();
>                     Entry e = next;
> @@ -433,7 +434,7 @@
> 
>         public int size() {
>             int j = 0;
> -            for (Iterator i = iterator(); i.hasNext(); i.next()) j++;
> +            for (Iterator<Map.Entry<Object, Object>> i = iterator(); i.hasNext(); i.next()) j++;
>             return j;
>         }
> 
> @@ -446,12 +447,12 @@
>     }
> 
> 
> -    private Set entrySet = null;
> +    private Set<Map.Entry<Object, Object>> entrySet = null;
> 
>     /**
>      * Return a <code>Set</code> view of the mappings in this cache.
>      */
> -    public Set entrySet() {
> +    public Set<Map.Entry<Object, Object>> entrySet() {
>         if (entrySet == null) entrySet = new EntrySet();
>         return entrySet;
>     }
> 




More information about the core-libs-dev mailing list