On 17/10/2020 1:23 am, Kim Barrett wrote:
On Fri, 16 Oct 2020 05:41:17 GMT, David Holmes <dhol...@openjdk.org> wrote:

Kim Barrett has updated the pull request with a new target base due to a merge 
or a rebase. The incremental webrev
excludes the unrelated changes brought in by the merge/rebase. The pull request 
contains 11 additional commits since
the last revision:
  - Merge branch 'master' into refersto
  - More explicit refersTo0 comment.
  - simplify test
  - cleanup nits from Mandy
  - use Object instead of TestObject
  - improve refersTo0 descriptions
  - basic functional test
  - change referent access
  - expand test
  - remove CMS comment
  - ... and 1 more: https://git.openjdk.java.net/jdk/compare/b5adeaad...ab4e519b

src/java.base/share/classes/java/lang/ref/Reference.java line 348:

346:      * Tests if this reference object refers to {@code obj}.  If {@code 
obj} is
347:      * {@code null}, this method returns {@code true} if this reference 
object
348:      * refers to {@code null} or has been cleared.

Is there actually a distinction between clearing and referring to null?

A (not very useful) Reference can be created with a null referent.

Yes but you cannot distinguish between the two cases yet this wording is trying to make that distinction. My concern is interaction with the wording here:

  * @return  {@code true} if and only if {@code obj} is the referent
  *          of this reference object

As written it implies to me that given:

Object o = new Object();
PhantomReference r = new PhantomReference(o);
r.clear();
assert(r.refersTo(null)); // pass or fail?

then the assert should fail because "null" was not the referent, as r has been cleared - which are two distinct cases according to the initial java doc. The initial doc would be clearer if it stated words to the effect of:

"returns {@code true} if this reference object refers to {@code null} (either because it was constructed that way, or it has been cleared)."

or else the @return doc needs to account for the null case more explicitly. Also why the "if and only if" in the @return doc versus a simple "if"? What is being emphasized by using "if and only if"?

Cheers,
David
-----


-------------

PR: https://git.openjdk.java.net/jdk/pull/498

Reply via email to