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