This change breaks the code example on how to use the class, see below:

On Tue, 20 May 2025 at 15:51, <ggreg...@apache.org> wrote:

> This is an automated email from the ASF dual-hosted git repository.
>
> ggregory pushed a commit to branch master
> in repository https://gitbox.apache.org/repos/asf/commons-text.git
>
> commit 98aae9ada74f51b52dbcf41c7ad46452721a6ffe
> Author: Gary Gregory <garydgreg...@gmail.com>
> AuthorDate: Tue May 20 10:49:31 2025 -0400
>
>     Interface TextRandomProvider extends IntUnaryOperator
> ---
>  src/changes/changes.xml                            |  1 +
>  .../apache/commons/text/RandomStringGenerator.java |  4 +--
>  .../apache/commons/text/TextRandomProvider.java    | 34
> +++++++++++++++++-----
>  3 files changed, 29 insertions(+), 10 deletions(-)
>
> diff --git a/src/changes/changes.xml b/src/changes/changes.xml
> index b5824ded..69c3ce3f 100644
> --- a/src/changes/changes.xml
> +++ b/src/changes/changes.xml
> @@ -49,6 +49,7 @@ The <action> type attribute can be add,update,fix,remove.
>      <!-- FIX -->
>      <!-- ADD -->
>      <action type="add" dev="ggregory" due-to="Gary Gregory">Interface
> StringLookup now extends UnaryOperator&lt;String&gt;.</action>
> +    <action type="add" dev="ggregory" due-to="Gary Gregory">Interface
> TextRandomProvider extends IntUnaryOperator.</action>
>      <!-- UPDATE -->
>      <action type="update" dev="ggregory" due-to="Dependabot, Gary
> Gregory">Bump org.apache.commons:commons-parent from 81 to 84 #668.</action>
>      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump
> commons-io:commons-io from 2.18.0 to 2.19.0.</action>
> diff --git
> a/src/main/java/org/apache/commons/text/RandomStringGenerator.java
> b/src/main/java/org/apache/commons/text/RandomStringGenerator.java
> index df3f3938..4a999649 100644
> --- a/src/main/java/org/apache/commons/text/RandomStringGenerator.java
> +++ b/src/main/java/org/apache/commons/text/RandomStringGenerator.java
> @@ -459,7 +459,7 @@ public final class RandomStringGenerator {
>       */
>      private int generateRandomNumber(final int minInclusive, final int
> maxInclusive) {
>          if (random != null) {
> -            return random.nextInt(maxInclusive - minInclusive + 1) +
> minInclusive;
> +            return random.applyAsInt(maxInclusive - minInclusive + 1) +
> minInclusive;
>          }
>          return ThreadLocalRandom.current().nextInt(minInclusive,
> maxInclusive + 1);
>      }
> @@ -474,7 +474,7 @@ public final class RandomStringGenerator {
>      private int generateRandomNumber(final List<Character> characterList)
> {
>          final int listSize = characterList.size();
>          if (random != null) {
> -            return
> String.valueOf(characterList.get(random.nextInt(listSize))).codePointAt(0);
> +            return
> String.valueOf(characterList.get(random.applyAsInt(listSize))).codePointAt(0);
>          }
>          return
> String.valueOf(characterList.get(ThreadLocalRandom.current().nextInt(0,
> listSize))).codePointAt(0);
>      }
> diff --git a/src/main/java/org/apache/commons/text/TextRandomProvider.java
> b/src/main/java/org/apache/commons/text/TextRandomProvider.java
> index 0190d9cb..23ba9173 100644
> --- a/src/main/java/org/apache/commons/text/TextRandomProvider.java
> +++ b/src/main/java/org/apache/commons/text/TextRandomProvider.java
> @@ -16,6 +16,8 @@
>   */
>  package org.apache.commons.text;
>
> +import java.util.function.IntUnaryOperator;
> +
>  /**
>   * TextRandomProvider implementations are used by {@link
> RandomStringGenerator}
>   * as a source of randomness.  It is highly recommended that the
> @@ -23,27 +25,43 @@ package org.apache.commons.text;
>   * library be used to provide the random number generation.
>   *
>   * <p>
> - * When using Java 8 or later, TextRandomProvider is a functional
> interface and
> - * need not be explicitly implemented.  For example:
> + * {@code TextRandomProvider} is a functional interface and need not be
> explicitly implemented.
> + * </p>
> + * <p>
> + * For example:
>   * </p>
>   * <pre>
>   * {@code
>   * UniformRandomProvider rng = RandomSource.create(...);
>   * RandomStringGenerator gen = RandomStringGenerator.builder()
> - *     .usingRandom(rng::nextInt)
> + *     .usingRandom(rng::applyAsInt)
>

This is not a valid example. The UniformRandomProvider interface does not
have a 'applyAsInt' method, so the code would not compile.



>   *     // additional builder calls as needed
>   *     .build();
>   * }
>   * </pre>
>   * @since 1.1
>   */
> -public interface TextRandomProvider {
> +public interface TextRandomProvider extends IntUnaryOperator {
> +
> +    /**
> +     * Generates an int value between 0 (inclusive) and the specified
> value (exclusive).
> +     *
> +     * @param max Bound on the random number to be returned. Must be
> positive.
> +     * @return a random int value between 0 (inclusive) and max
> (exclusive).
> +     * @since 1.14.0
> +     */
> +    @Override
> +    default int applyAsInt(final int max) {
> +        return nextInt(max);
> +    }
>
>      /**
> -     * Generates an int value between 0 (inclusive) and the specified
> value
> -     * (exclusive).
> -     * @param max  Bound on the random number to be returned. Must be
> positive.
> -     * @return a random int value between 0 (inclusive) and n (exclusive).
> +     * Generates an int value between 0 (inclusive) and the specified
> value (exclusive).
> +     *
> +     * @param max Bound on the random number to be returned. Must be
> positive.
> +     * @return a random int value between 0 (inclusive) and max
> (exclusive).
> +     * @deprecated Use {@link #applyAsInt(int)}.
>       */
> +    @Deprecated
>      int nextInt(int max);
>  }
>
>

Reply via email to