Skip to content

Commit

Permalink
Let on, then and orElse accept varargs, close #4486
Browse files Browse the repository at this point in the history
Motivation:

So users can directly write:

```java
repeat(5).on(
   chain1,
   chain2
)
```

instead of

```java
repeat(5).on(
  exec(
    chain1,
    chain2
  )
)
```

or

```java
repeat(5).on(
    chain1
      .exec(chain2)
  )
)
```
  • Loading branch information
slandelle committed Dec 6, 2023
1 parent be40fef commit 9e727a5
Show file tree
Hide file tree
Showing 26 changed files with 457 additions and 323 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@
public final class Choice {
private Choice() {}

public static WithKey withKey(@NonNull Object key, @NonNull ChainBuilder chain) {
return new WithKey(key, chain);
public static WithKey withKey(
@NonNull Object key, @NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return new WithKey(key, chain.exec(chains));
}

public static WithWeight withWeight(double weight, @NonNull ChainBuilder chain) {
return new WithWeight(weight, chain);
public static WithWeight withWeight(
double weight, @NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return new WithWeight(weight, chain.exec(chains));
}

/** A choice with an expected key */
Expand All @@ -39,7 +41,7 @@ public static final class WithKey {
* @param key the expected key
* @param chain the chain that will be triggered if the switch matches the expected key
*/
public WithKey(@NonNull Object key, @NonNull ChainBuilder chain) {
private WithKey(@NonNull Object key, @NonNull ChainBuilder chain) {
this.key = key;
this.chain = chain;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2479,11 +2479,12 @@ public static RoundRobinSwitch.On<ChainBuilder> roundRobinSwitch() {
* Errors#exitBlockOnFail(ChainBuilder)}.
*
* @param chain the chain to interrupt on error
* @param chains other chains
* @return a new ChainBuilder
*/
@NonNull
public static ChainBuilder exitBlockOnFail(@NonNull ChainBuilder chain) {
return ChainBuilder.EMPTY.exitBlockOnFail(chain);
public static ChainBuilder exitBlockOnFail(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return ChainBuilder.EMPTY.exitBlockOnFail(chain.exec(chains));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,12 @@ final class Then<T extends StructureBuilder<T, ?>> {
* Define the chain to be executed when the condition is true
*
* @param chain the chain
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T then(@NonNull ChainBuilder chain) {
return wrapped.then_(chain);
public T then(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.then_(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -129,11 +129,12 @@ final class Then<T extends StructureBuilder<T, ?>> {
* Define the chain to be executed when the actual and expected values are equal
*
* @param chain the "then" chain
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T then(ChainBuilder chain) {
return wrapped.then_(chain);
public T then(ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.then_(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,12 @@ final class Then<T extends StructureBuilder<T, ?>> {
* Define the chain to be executed when the actual and expected values are equal
*
* @param chain the "then "chain
* @param chains other chains
* @return the DSL component for defining the "else" block
*/
@NonNull
public OrElse<T> then(@NonNull ChainBuilder chain) {
return new OrElse<>(wrapped.then_(chain));
public OrElse<T> then(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return new OrElse<>(wrapped.then_(chain.exec(chains)));
}
}

Expand All @@ -160,12 +161,13 @@ final class OrElse<T extends StructureBuilder<T, ?>> {
/**
* Define the chain to be executed when the actual and expected values are not equal
*
* @param orElseChain the "then "chain
* @param chain the "then "chain
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T orElse(@NonNull ChainBuilder orElseChain) {
return wrapped.orElse(orElseChain);
public T orElse(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.orElse(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,12 @@ final class Then<T extends StructureBuilder<T, ?>> {
* Define the chain to be executed when the condition is true
*
* @param chain the chain
* @param chains other chains
* @return the DSL component for defining the "else" block
*/
@NonNull
public OrElse<T> then(@NonNull ChainBuilder chain) {
return new OrElse<>(wrapped.then_(chain));
public OrElse<T> then(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return new OrElse<>(wrapped.then_(chain.exec(chains)));
}
}

Expand All @@ -99,12 +100,13 @@ final class OrElse<T extends StructureBuilder<T, ?>> {
/**
* Define the chain to be executed when the condition is false
*
* @param orElseChain the "then "chain
* @param chain the "then "chain
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T orElse(@NonNull ChainBuilder orElseChain) {
return wrapped.orElse(orElseChain);
public T orElse(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.orElse(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,13 @@ final class OrElse<T extends StructureBuilder<T, ?>> {
/**
* Define the "else" block
*
* @param orElseChain the chain to execute if the actual value doesn't match any of the choices
* @param chain the chain to execute if the actual value doesn't match any of the choices
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T orElse(@NonNull ChainBuilder orElseChain) {
return wrapped.orElse(orElseChain);
public T orElse(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.orElse(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -101,12 +101,13 @@ final class OrElse<T extends StructureBuilder<T, ?>> {
* Define the chain to be executed when the random number falls into the gap between 100% and
* the sum of the weights of the choices.
*
* @param orElseChain the "then "chain
* @param chain the "then "chain
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T orElse(@NonNull ChainBuilder orElseChain) {
return wrapped.orElse(orElseChain);
public T orElse(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.orElse(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,13 @@ public interface Errors<
/**
* Define a block that is interrupted for a given virtual user if it experiences a failure.
*
* @param chain the block to be eventually interrupted
* @param chain the chain to interrupt on error
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
default T exitBlockOnFail(@NonNull ChainBuilder chain) {
return make(wrapped -> wrapped.exitBlockOnFail(chain.wrapped));
default T exitBlockOnFail(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return make(wrapped -> wrapped.exitBlockOnFail(chain.exec(chains).wrapped));
}

/**
Expand Down Expand Up @@ -147,12 +148,13 @@ final class TryMax<T extends StructureBuilder<T, ?>> {
/**
* Define the tried block
*
* @param chain the tried block
* @param chain the loop content
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T on(@NonNull ChainBuilder chain) {
return wrapped.trying(chain);
public T on(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.trying(chain.exec(chains));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,12 @@ final class On<T extends StructureBuilder<T, ?>> {
* Define the wrapped block
*
* @param chain the wrapped block
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T on(@NonNull ChainBuilder chain) {
return wrapped.grouping(chain);
public T on(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.grouping(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,12 @@ final class On<T extends StructureBuilder<T, ?>> {
* Define the loop content
*
* @param chain the loop content
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T on(@NonNull ChainBuilder chain) {
return wrapped.loop(chain);
public T on(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.loop(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -512,11 +512,12 @@ final class On<T extends StructureBuilder<T, ?>> {
* Define the loop content
*
* @param chain the loop content
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T on(@NonNull ChainBuilder chain) {
return wrapped.loop(chain);
public T on(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.loop(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,12 @@ final class On<T extends StructureBuilder<T, ?>> {
* Define the loop content
*
* @param chain the loop content
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T on(@NonNull ChainBuilder chain) {
return wrapped.loop(chain);
public T on(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.loop(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -516,11 +516,12 @@ final class On<T extends StructureBuilder<T, ?>> {
* Define the loop content
*
* @param chain the loop content
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T on(@NonNull ChainBuilder chain) {
return wrapped.loop(chain);
public T on(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.loop(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -273,11 +273,12 @@ final class On<T extends StructureBuilder<T, ?>> {
* Define the loop content
*
* @param chain the loop content
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T on(@NonNull ChainBuilder chain) {
return wrapped.loop(chain);
public T on(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.loop(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -135,11 +135,12 @@ final class On<T extends StructureBuilder<T, ?>> {
* Define the loop content
*
* @param chain the loop content
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T on(@NonNull ChainBuilder chain) {
return wrapped.loop(chain);
public T on(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.loop(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,12 @@ final class On<T extends StructureBuilder<T, ?>> {
* Define the loop content
*
* @param chain the loop content
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T on(@NonNull ChainBuilder chain) {
return wrapped.loop(chain);
public T on(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.loop(chain.exec(chains));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -128,11 +128,12 @@ final class On<T extends StructureBuilder<T, ?>> {
* Define the loop content
*
* @param chain the loop content
* @param chains other chains
* @return a new {@link StructureBuilder}
*/
@NonNull
public T on(@NonNull ChainBuilder chain) {
return wrapped.loop(chain);
public T on(@NonNull ChainBuilder chain, @NonNull ChainBuilder... chains) {
return wrapped.loop(chain.exec(chains));
}
}
}

0 comments on commit 9e727a5

Please sign in to comment.