On Mon, 13 May 2024 08:47:50 GMT, Raffaello Giulietti <rgiulie...@openjdk.org> wrote:
> All random number generator algorithms are implemented in module `java.base`. > The usage of `ServiceLoader` in `j.u.r.RandomGeneratorFactory` is no longer > needed. src/java.base/share/classes/java/util/random/RandomGeneratorFactory.java line 190: > 188: if (properties == null) { // double-checking idiom > 189: RandomGeneratorProperties props = > rgClass.getDeclaredAnnotation(RandomGeneratorProperties.class); > 190: Objects.requireNonNull(props, rgClass + " missing > annotation"); Hello Raffaello, with the `RandomGenerator` implementations now all residing within the java.base module, I think an additional advantage of that is that, it will now allow us to remove this internal `RandomGeneratorProperties` annotation and thus this reflection code. I think one way to do that would be something like this within this `RandomGeneratorFactory` class itself: private record RandomGenEntry(Class<?> randomGenClass, int i, int j, int k, int equiDistribution, boolean stochastic, boolean hardware) { } private static final Map<String, RandomGenEntry> FACTORY_MAP = ... // construct the map where the `FACTORY_MAP` will be keyed to the alogrithm and the value will be a record which holds these additional details about the `RandomGenerator`. This current PR is about getting rid of ServiceLoader usage. So if you want to remove the usage of this annotation and reflection is a separate PR that's fine with me. Furthermore, although I don't see the necessity of an annotation for what we are doing here, if you think that the removal of the annotation and reflection isn't worth doing, that is OK too. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/19212#discussion_r1598417990