JDK 9 RFR of JDK-8031369: Fix raw types warnings in sun.misc.{Cache, SoftCache}
Joe Darcy
joe.darcy at oracle.com
Wed Jan 8 01:39:16 UTC 2014
Hi Mike,
On 01/07/2014 05:23 PM, Mike Duigou wrote:
> Can you add the javadoc @deprecated <alternative> deprecation notice as well?
Sure; for Cache I'll point to LinkedHashMap and I'll look into finding a
alternative to SoftCache.
Thanks for the review,
-Joe
>
> 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