Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8265137: java.util.Random suddenly has new public methods nowhere documented #3469

Closed
wants to merge 10 commits into from
60 changes: 15 additions & 45 deletions src/java.base/share/classes/java/util/Random.java
Expand Up @@ -27,15 +27,12 @@

import java.io.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.random.RandomGenerator;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import jdk.internal.util.random.RandomSupport.*;

import jdk.internal.util.random.RandomSupport.AbstractSpliteratorGenerator;
import jdk.internal.util.random.RandomSupport.RandomGeneratorProperties;
import jdk.internal.util.random.RandomSupport.RandomIntsSpliterator;
import jdk.internal.util.random.RandomSupport.RandomLongsSpliterator;
import jdk.internal.util.random.RandomSupport.RandomDoublesSpliterator;
import static jdk.internal.util.random.RandomSupport.*;

import jdk.internal.misc.Unsafe;
Expand Down Expand Up @@ -85,8 +82,7 @@
i = 48, j = 0, k = 0,
equidistribution = 0
)
public class Random extends AbstractSpliteratorGenerator
implements java.io.Serializable {
public class Random implements RandomGenerator, java.io.Serializable {
/** use serialVersionUID from JDK 1.1 for interoperability */
@java.io.Serial
static final long serialVersionUID = 3905348978240129619L;
Expand Down Expand Up @@ -615,32 +611,6 @@ private void resetSeed(long seedVal) {
unsafe.putReferenceVolatile(this, seedOffset, new AtomicLong(seedVal));
}

// Methods required by class AbstractSpliteratorGenerator

/**
* @hidden
*/
@Override
public Spliterator.OfInt makeIntsSpliterator(long index, long fence, int origin, int bound) {
return new RandomIntsSpliterator(this, index, fence, origin, bound);
}

/**
* @hidden
*/
@Override
public Spliterator.OfLong makeLongsSpliterator(long index, long fence, long origin, long bound) {
return new RandomLongsSpliterator(this, index, fence, origin, bound);
}

/**
* @hidden
*/
@Override
public Spliterator.OfDouble makeDoublesSpliterator(long index, long fence, double origin, double bound) {
return new RandomDoublesSpliterator(this, index, fence, origin, bound);
}

/**
* Returns a stream producing the given {@code streamSize} number of
* pseudorandom {@code int} values.
Expand All @@ -656,7 +626,7 @@ public Spliterator.OfDouble makeDoublesSpliterator(long index, long fence, doubl
*/
@Override
public IntStream ints(long streamSize) {
return super.ints(streamSize);
return AbstractSpliteratorGenerator.ints(this, streamSize);
}

/**
Expand All @@ -674,7 +644,7 @@ public IntStream ints(long streamSize) {
*/
@Override
public IntStream ints() {
return super.ints();
return AbstractSpliteratorGenerator.ints(this);
}

/**
Expand Down Expand Up @@ -711,7 +681,7 @@ public IntStream ints() {
*/
@Override
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound) {
return super.ints(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.ints(this, streamSize, randomNumberOrigin, randomNumberBound);
}

/**
Expand Down Expand Up @@ -749,7 +719,7 @@ public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberB
*/
@Override
public IntStream ints(int randomNumberOrigin, int randomNumberBound) {
return super.ints(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.ints(this, randomNumberOrigin, randomNumberBound);
}

/**
Expand All @@ -767,7 +737,7 @@ public IntStream ints(int randomNumberOrigin, int randomNumberBound) {
*/
@Override
public LongStream longs(long streamSize) {
return super.longs(streamSize);
return AbstractSpliteratorGenerator.longs(this, streamSize);
}

/**
Expand All @@ -785,7 +755,7 @@ public LongStream longs(long streamSize) {
*/
@Override
public LongStream longs() {
return super.longs();
return AbstractSpliteratorGenerator.longs(this);
}

/**
Expand Down Expand Up @@ -827,7 +797,7 @@ public LongStream longs() {
*/
@Override
public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound) {
return super.longs(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.longs(this, streamSize, randomNumberOrigin, randomNumberBound);
}

/**
Expand Down Expand Up @@ -870,7 +840,7 @@ public LongStream longs(long streamSize, long randomNumberOrigin, long randomNum
*/
@Override
public LongStream longs(long randomNumberOrigin, long randomNumberBound) {
return super.longs(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.longs(this, randomNumberOrigin, randomNumberBound);
}

/**
Expand All @@ -889,7 +859,7 @@ public LongStream longs(long randomNumberOrigin, long randomNumberBound) {
*/
@Override
public DoubleStream doubles(long streamSize) {
return super.doubles(streamSize);
return AbstractSpliteratorGenerator.doubles(this, streamSize);
}

/**
Expand All @@ -908,7 +878,7 @@ public DoubleStream doubles(long streamSize) {
*/
@Override
public DoubleStream doubles() {
return super.doubles();
return AbstractSpliteratorGenerator.doubles(this);
}

/**
Expand Down Expand Up @@ -940,7 +910,7 @@ public DoubleStream doubles() {
*/
@Override
public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound) {
return super.doubles(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.doubles(this, streamSize, randomNumberOrigin, randomNumberBound);
}

/**
Expand Down Expand Up @@ -972,6 +942,6 @@ public DoubleStream doubles(long streamSize, double randomNumberOrigin, double r
*/
@Override
public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound) {
return super.doubles(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.doubles(this, randomNumberOrigin, randomNumberBound);
}
}
24 changes: 0 additions & 24 deletions src/java.base/share/classes/java/util/SplittableRandom.java
Expand Up @@ -280,30 +280,6 @@ public SplittableRandom split(SplittableGenerator source) {
return new SplittableRandom(source.nextLong(), mixGamma(source.nextLong()));
}

/**
* @hidden
*/
@Override
public Spliterator.OfInt makeIntsSpliterator(long index, long fence, int origin, int bound) {
return super.makeIntsSpliterator(index, fence, origin, bound);
}

/**
* @hidden
*/
@Override
public Spliterator.OfLong makeLongsSpliterator(long index, long fence, long origin, long bound) {
return super.makeLongsSpliterator(index, fence, origin, bound);
}

/**
* @hidden
*/
@Override
public Spliterator.OfDouble makeDoublesSpliterator(long index, long fence, double origin, double bound) {
return super.makeDoublesSpliterator(index, fence, origin, bound);
}

@Override
public int nextInt() {
return mix32(nextSeed());
Expand Down
Expand Up @@ -51,11 +51,7 @@
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import jdk.internal.util.random.RandomSupport;
import jdk.internal.util.random.RandomSupport.AbstractSpliteratorGenerator;
import jdk.internal.util.random.RandomSupport.RandomIntsSpliterator;
import jdk.internal.util.random.RandomSupport.RandomLongsSpliterator;
import jdk.internal.util.random.RandomSupport.RandomDoublesSpliterator;
import jdk.internal.util.random.RandomSupport.RandomGeneratorProperties;
import jdk.internal.util.random.RandomSupport.*;
import jdk.internal.misc.Unsafe;
import jdk.internal.misc.VM;

Expand Down Expand Up @@ -396,48 +392,6 @@ private Object readResolve() {
/** The common ThreadLocalRandom */
private static final ThreadLocalRandom instance = new ThreadLocalRandom();

private static final class ThreadLocalRandomProxy extends Random {
@java.io.Serial
static final long serialVersionUID = 0L;


static final AbstractSpliteratorGenerator proxy = new ThreadLocalRandomProxy();


public int nextInt() {
return ThreadLocalRandom.current().nextInt();
}

public long nextLong() {
return ThreadLocalRandom.current().nextLong();
}
}

// Methods required by class AbstractSpliteratorGenerator
/**
* @hidden
*/
@Override
public Spliterator.OfInt makeIntsSpliterator(long index, long fence, int origin, int bound) {
return new RandomIntsSpliterator(ThreadLocalRandomProxy.proxy, index, fence, origin, bound);
}

/**
* @hidden
*/
@Override
public Spliterator.OfLong makeLongsSpliterator(long index, long fence, long origin, long bound) {
return new RandomLongsSpliterator(ThreadLocalRandomProxy.proxy, index, fence, origin, bound);
}

/**
* @hidden
*/
@Override
public Spliterator.OfDouble makeDoublesSpliterator(long index, long fence, double origin, double bound) {
return new RandomDoublesSpliterator(ThreadLocalRandomProxy.proxy, index, fence, origin, bound);
}

/**
* The next seed for default constructors.
*/
Expand All @@ -457,6 +411,19 @@ public Spliterator.OfDouble makeDoublesSpliterator(long index, long fence, doubl
}
}

@SuppressWarnings("serial")
private static final class ThreadLocalRandomProxy extends Random {
static final Random PROXY = new ThreadLocalRandomProxy();

public int nextInt() {
return ThreadLocalRandom.current().nextInt();
}

public long nextLong() {
return ThreadLocalRandom.current().nextLong();
}
}

/**
* {@inheritDoc}
*/
Expand Down Expand Up @@ -579,7 +546,7 @@ public double nextDouble(double origin, double bound) {
*/
@Override
public IntStream ints(long streamSize) {
return super.ints(streamSize);
return AbstractSpliteratorGenerator.ints(ThreadLocalRandomProxy.PROXY, streamSize);
}

/**
Expand All @@ -590,7 +557,7 @@ public IntStream ints(long streamSize) {
*/
@Override
public IntStream ints() {
return super.ints();
return AbstractSpliteratorGenerator.ints(ThreadLocalRandomProxy.PROXY);
}

/**
Expand All @@ -600,7 +567,7 @@ public IntStream ints() {
*/
@Override
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound) {
return super.ints(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.ints(ThreadLocalRandomProxy.PROXY, streamSize, randomNumberOrigin, randomNumberBound);
}

/**
Expand All @@ -612,7 +579,7 @@ public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberB
*/
@Override
public IntStream ints(int randomNumberOrigin, int randomNumberBound) {
return super.ints(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.ints(ThreadLocalRandomProxy.PROXY, randomNumberOrigin, randomNumberBound);
}

/**
Expand All @@ -622,7 +589,7 @@ public IntStream ints(int randomNumberOrigin, int randomNumberBound) {
*/
@Override
public LongStream longs(long streamSize) {
return super.longs(streamSize);
return AbstractSpliteratorGenerator.longs(ThreadLocalRandomProxy.PROXY, streamSize);
}

/**
Expand All @@ -633,7 +600,7 @@ public LongStream longs(long streamSize) {
*/
@Override
public LongStream longs() {
return super.longs();
return AbstractSpliteratorGenerator.longs(ThreadLocalRandomProxy.PROXY);
}

/**
Expand All @@ -643,7 +610,7 @@ public LongStream longs() {
*/
@Override
public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound) {
return super.longs(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.longs(ThreadLocalRandomProxy.PROXY, streamSize, randomNumberOrigin, randomNumberBound);
}

/**
Expand All @@ -655,7 +622,7 @@ public LongStream longs(long streamSize, long randomNumberOrigin, long randomNum
*/
@Override
public LongStream longs(long randomNumberOrigin, long randomNumberBound) {
return super.longs(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.longs(ThreadLocalRandomProxy.PROXY, randomNumberOrigin, randomNumberBound);
}

/**
Expand All @@ -665,7 +632,7 @@ public LongStream longs(long randomNumberOrigin, long randomNumberBound) {
*/
@Override
public DoubleStream doubles(long streamSize) {
return super.doubles(streamSize);
return AbstractSpliteratorGenerator.doubles(ThreadLocalRandomProxy.PROXY, streamSize);
}

/**
Expand All @@ -676,7 +643,7 @@ public DoubleStream doubles(long streamSize) {
*/
@Override
public DoubleStream doubles() {
return super.doubles();
return AbstractSpliteratorGenerator.doubles(ThreadLocalRandomProxy.PROXY);
}

/**
Expand All @@ -686,7 +653,7 @@ public DoubleStream doubles() {
*/
@Override
public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound) {
return super.doubles(streamSize, randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.doubles(ThreadLocalRandomProxy.PROXY, streamSize, randomNumberOrigin, randomNumberBound);
}

/**
Expand All @@ -698,7 +665,7 @@ public DoubleStream doubles(long streamSize, double randomNumberOrigin, double r
*/
@Override
public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound) {
return super.doubles(randomNumberOrigin, randomNumberBound);
return AbstractSpliteratorGenerator.doubles(ThreadLocalRandomProxy.PROXY, randomNumberOrigin, randomNumberBound);
}

}