On Fri, 11 Mar 2022 01:25:28 GMT, Yasser Bazzi <d...@openjdk.java.net> wrote:

>> Hi, could i get a review on this implementation proposed by Stuart Marks, i 
>> decided to use the 
>> https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/random/RandomGenerator.html
>>  interface to create the default method `asRandom()` that wraps around the 
>> newer algorithms to be used on classes that do not accept the new interface.
>> 
>> Some things to note as proposed by the bug report, the protected method 
>> next(int bits) is not overrided and setSeed() method if left blank up to 
>> discussion on what to do with it.
>> 
>> Small test done on 
>> https://gist.github.com/YShow/da678561419cda8e32fccf3a27a649d4
>
> Yasser Bazzi has updated the pull request incrementally with two additional 
> commits since the last revision:
> 
>  - Merge branch 'randomwrapper' of https://github.com/YShow/jdk.git into 
> randomwrapper
>  - Remove atomicLong allocation and override next(int) method to throw UOE

A small spec change is necessary; please make it here, and I'll copy it into 
the CSR.

src/java.base/share/classes/java/util/Random.java line 98:

> 96:         private RandomWrapper(RandomGenerator randomToWrap) {
> 97:             super(null);
> 98:             this.generator = Objects.requireNonNull(randomToWrap);

Can remove `requireNonNull` here; see other comments. At your option, add a 
comment saying that `randomToWrap` must not be null. This is easy to verify 
since there's only one caller elsewhere in this file.

src/java.base/share/classes/java/util/Random.java line 320:

> 318:      * @param generator the {@code RandomGenerator} calls are delegated 
> to
> 319:      * @return the delegating {@code Random} instance
> 320:      */

Need to add

    @throws NullPointerException if generator is null

src/java.base/share/classes/java/util/Random.java line 327:

> 325:         return new RandomWrapper(generator);
> 326:     }
> 327: 

I'd suggest adding

    Objects.requireNonNull(generator)

as the first line of this method. In fact if null is passed, NPE is thrown 
already, as the `instanceof` will be false and then the `RandomWrapper` 
constructor will throw NPE. However, verifying this requires a bit of hunting 
around and some flow analysis to determine this. Might as well make the null 
check explicit at the top of this method. The now-redundant check can be 
removed from `RandomWrapper`.

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

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

Reply via email to