RFR JDK 8 javac lint cleanup of java.lang.ref
Joe Darcy
joe.darcy at oracle.com
Thu Jul 25 20:33:05 UTC 2013
Hello,
Please review these changes to remove the javac lint warnings from the
java.lang.ref package:
8021429 Fix lint warnings in java.lang.ref
http://cr.openjdk.java.net/~darcy/8021429.0/
Care was taken to not change any signatures of public API elements.
After doing a clean build, all the java.lang.ref regression tests pass.
Full patch below.
Thanks,
-Joe
--- old/src/share/classes/java/lang/ref/FinalReference.java 2013-07-25
13:29:12.000000000 -0700
+++ new/src/share/classes/java/lang/ref/FinalReference.java 2013-07-25
13:29:12.000000000 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights
reserved.
+ * Copyright (c) 1997, 2013, 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
@@ -25,13 +25,12 @@
package java.lang.ref;
-
-/* Final references, used to implement finalization */
-
+/**
+ * Final references, used to implement finalization
+ */
class FinalReference<T> extends Reference<T> {
public FinalReference(T referent, ReferenceQueue<? super T> q) {
super(referent, q);
}
-
}
--- old/src/share/classes/java/lang/ref/Finalizer.java 2013-07-25
13:29:13.000000000 -0700
+++ new/src/share/classes/java/lang/ref/Finalizer.java 2013-07-25
13:29:13.000000000 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights
reserved.
+ * Copyright (c) 1997, 2013, 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
@@ -29,16 +29,16 @@
import java.security.AccessController;
-final class Finalizer extends FinalReference { /* Package-private; must
be in
- same package as the
Reference
- class */
+final class Finalizer extends FinalReference<Object> { /*
Package-private; must be in
+ same package as
the Reference
+ class */
/* A native method that invokes an arbitrary object's finalize
method is
required since the finalize method is protected
*/
static native void invokeFinalizeMethod(Object o) throws Throwable;
- private static ReferenceQueue queue = new ReferenceQueue();
+ private static ReferenceQueue<Object> queue = new ReferenceQueue<>();
private static Finalizer unfinalized = null;
private static final Object lock = new Object();
--- old/src/share/classes/java/lang/ref/Reference.java 2013-07-25
13:29:14.000000000 -0700
+++ new/src/share/classes/java/lang/ref/Reference.java 2013-07-25
13:29:13.000000000 -0700
@@ -96,6 +96,7 @@
* Enqueued: next reference in queue (or this if last)
* Inactive: this
*/
+ @SuppressWarnings("rawtypes")
Reference next;
/* When active: next element in a discovered reference list
maintained by GC (or this if last)
@@ -119,7 +120,7 @@
* them. This list is protected by the above lock object. The
* list uses the discovered field to link its elements.
*/
- private static Reference pending = null;
+ private static Reference<Object> pending = null;
/* High-priority thread to enqueue pending References
*/
@@ -131,7 +132,7 @@
public void run() {
for (;;) {
- Reference r;
+ Reference<Object> r;
synchronized (lock) {
if (pending != null) {
r = pending;
@@ -166,7 +167,7 @@
continue;
}
- ReferenceQueue q = r.queue;
+ ReferenceQueue<Object> q = r.queue;
if (q != ReferenceQueue.NULL) q.enqueue(r);
}
}
--- old/src/share/classes/java/lang/ref/ReferenceQueue.java 2013-07-25
13:29:14.000000000 -0700
+++ new/src/share/classes/java/lang/ref/ReferenceQueue.java 2013-07-25
13:29:14.000000000 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights
reserved.
+ * Copyright (c) 1997, 2013, 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
@@ -40,14 +40,14 @@
*/
public ReferenceQueue() { }
- private static class Null extends ReferenceQueue {
- boolean enqueue(Reference r) {
+ private static class Null<S> extends ReferenceQueue<S> {
+ boolean enqueue(Reference<? extends S> r) {
return false;
}
}
- static ReferenceQueue NULL = new Null();
- static ReferenceQueue ENQUEUED = new Null();
+ static ReferenceQueue<Object> NULL = new Null<>();
+ static ReferenceQueue<Object> ENQUEUED = new Null<>();
static private class Lock { };
private Lock lock = new Lock();
@@ -58,7 +58,7 @@
synchronized (lock) {
// Check that since getting the lock this reference hasn't
already been
// enqueued (and even then removed)
- ReferenceQueue queue = r.queue;
+ ReferenceQueue<?> queue = r.queue;
if ((queue == NULL) || (queue == ENQUEUED)) {
return false;
}
@@ -75,10 +75,13 @@
}
}
+ @SuppressWarnings("unchecked")
private Reference<? extends T> reallyPoll() { /* Must hold
lock */
Reference<? extends T> r = head;
if (r != null) {
- head = (r.next == r) ? null : r.next;
+ head = (r.next == r) ?
+ null :
+ r.next; // Unchecked due to the next field having a raw
type in Reference
r.queue = NULL;
r.next = r;
queueLength--;
More information about the core-libs-dev
mailing list