Add sender to compound argument mappers

This commit is contained in:
broccolai 2020-10-06 07:36:15 +01:00 committed by Alexander Söderberg
parent aaa6386ca3
commit caf1cc5b39
5 changed files with 23 additions and 19 deletions

View file

@ -48,8 +48,8 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
/**
* A command consists out of a chain of {@link CommandArgument command arguments}.
@ -495,7 +495,7 @@ public class Command<C> {
final @NonNull TypeToken<O> outputType,
final @NonNull Pair<String, String> names,
final @NonNull Pair<Class<U>, Class<V>> parserPair,
final @NonNull Function<Pair<U, V>, O> mapper,
final @NonNull BiFunction<C, Pair<U, V>, O> mapper,
final @NonNull Description description) {
if (this.commandManager == null) {
throw new IllegalStateException("This cannot be called from a command that has no command manager attached");
@ -559,7 +559,7 @@ public class Command<C> {
final @NonNull Triplet<String, String, String> names,
final @NonNull Triplet<Class<U>, Class<V>,
Class<W>> parserTriplet,
final @NonNull Function<Triplet<U, V, W>, O> mapper,
final @NonNull BiFunction<C, Triplet<U, V, W>, O> mapper,
final @NonNull Description description) {
if (this.commandManager == null) {
throw new IllegalStateException("This cannot be called from a command that has no command manager attached");

View file

@ -31,7 +31,7 @@ import cloud.commandframework.types.tuples.Pair;
import io.leangen.geantyref.TypeToken;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.function.Function;
import java.util.function.BiFunction;
/**
* A compound argument consisting of two inner arguments
@ -59,7 +59,7 @@ public class ArgumentPair<C, U, V, O> extends CompoundArgument<Pair<U, V>, C, O>
final @NonNull Pair<@NonNull String, @NonNull String> names,
final @NonNull Pair<@NonNull Class<U>, @NonNull Class<V>> types,
final @NonNull Pair<@NonNull ArgumentParser<C, U>, @NonNull ArgumentParser<C, V>> parserPair,
final @NonNull Function<@NonNull Pair<@NonNull U, @NonNull V>, @NonNull O> mapper,
final @NonNull BiFunction<@NonNull C, @NonNull Pair<@NonNull U, @NonNull V>, @NonNull O> mapper,
final @NonNull TypeToken<O> valueType) {
super(required, name, names, parserPair, types, mapper, o -> Pair.of((U) o[0], (V) o[1]), valueType);
}
@ -129,7 +129,7 @@ public class ArgumentPair<C, U, V, O> extends CompoundArgument<Pair<U, V>, C, O>
this.names,
this.types,
this.parserPair,
Function.identity(),
(sender, pair) -> pair,
new TypeToken<Pair<U, V>>() {
});
}
@ -143,7 +143,7 @@ public class ArgumentPair<C, U, V, O> extends CompoundArgument<Pair<U, V>, C, O>
* @return Created pair
*/
public <O> @NonNull ArgumentPair<C, U, V, O> withMapper(final @NonNull TypeToken<O> clazz,
final @NonNull Function<@NonNull Pair<@NonNull U,
final @NonNull BiFunction<@NonNull C, @NonNull Pair<@NonNull U,
@NonNull V>, @NonNull O> mapper) {
return new ArgumentPair<C, U, V, O>(this.required, this.name, this.names, this.types, this.parserPair, mapper, clazz);
}
@ -158,7 +158,7 @@ public class ArgumentPair<C, U, V, O> extends CompoundArgument<Pair<U, V>, C, O>
*/
public <O> @NonNull ArgumentPair<@NonNull C, @NonNull U, @NonNull V, @NonNull O> withMapper(
final @NonNull Class<O> clazz,
final @NonNull Function<@NonNull Pair<@NonNull U, @NonNull V>, @NonNull O> mapper) {
final @NonNull BiFunction<@NonNull C, @NonNull Pair<@NonNull U, @NonNull V>, @NonNull O> mapper) {
return this.withMapper(TypeToken.get(clazz), mapper);
}

View file

@ -31,7 +31,7 @@ import cloud.commandframework.types.tuples.Triplet;
import io.leangen.geantyref.TypeToken;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.function.Function;
import java.util.function.BiFunction;
/**
* A compound argument consisting of three inner arguments
@ -61,7 +61,8 @@ public class ArgumentTriplet<C, U, V, W, O> extends CompoundArgument<Triplet<U,
final @NonNull Triplet<@NonNull Class<U>, @NonNull Class<V>, @NonNull Class<W>> types,
final @NonNull Triplet<@NonNull ArgumentParser<C, U>, @NonNull ArgumentParser<C, V>,
@NonNull ArgumentParser<C, W>> parserTriplet,
final @NonNull Function<@NonNull Triplet<U, @NonNull V, @NonNull W>, @NonNull O> mapper,
final @NonNull BiFunction<@NonNull C,
@NonNull Triplet<U, @NonNull V, @NonNull W>, @NonNull O> mapper,
final @NonNull TypeToken<O> valueType) {
super(required, name, names, parserTriplet, types, mapper, o -> Triplet.of((U) o[0], (V) o[1], (W) o[2]), valueType);
}
@ -140,7 +141,7 @@ public class ArgumentTriplet<C, U, V, W, O> extends CompoundArgument<Triplet<U,
this.names,
this.types,
this.parserTriplet,
Function.identity(),
(sender, triplet) -> triplet,
new TypeToken<Triplet<U, V, W>>() {
});
}
@ -155,7 +156,7 @@ public class ArgumentTriplet<C, U, V, W, O> extends CompoundArgument<Triplet<U,
*/
public <O> @NonNull ArgumentTriplet<@NonNull C, @NonNull U, @NonNull V,
@NonNull W, @NonNull O> withMapper(final @NonNull TypeToken<O> clazz,
final @NonNull Function<@NonNull Triplet<@NonNull U,
final @NonNull BiFunction<@NonNull C, @NonNull Triplet<@NonNull U,
@NonNull V, @NonNull W>, @NonNull O> mapper) {
return new ArgumentTriplet<>(this.required, this.name, this.names, this.types, this.parserTriplet, mapper, clazz);
}
@ -169,8 +170,9 @@ public class ArgumentTriplet<C, U, V, W, O> extends CompoundArgument<Triplet<U,
* @return Created triplet
*/
public <O> @NonNull ArgumentTriplet<C, U, V, W, O> withMapper(final @NonNull Class<O> clazz,
final @NonNull Function<@NonNull Triplet<@NonNull U,
@NonNull V, @NonNull W>, @NonNull O> mapper) {
final @NonNull BiFunction<@NonNull C,
@NonNull Triplet<@NonNull U, @NonNull V,
@NonNull W>, @NonNull O> mapper) {
return new ArgumentTriplet<>(this.required, this.name, this.names, this.types,
this.parserTriplet, mapper, TypeToken.get(clazz));
}

View file

@ -33,6 +33,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.List;
import java.util.Queue;
import java.util.function.BiFunction;
import java.util.function.Function;
/**
@ -53,7 +54,7 @@ public class CompoundArgument<T extends Tuple, C, O> extends CommandArgument<C,
final @NonNull Tuple names,
final @NonNull Tuple parserTuple,
final @NonNull Tuple types,
final @NonNull Function<@NonNull T, @NonNull O> mapper,
final @NonNull BiFunction<@NonNull C, @NonNull T, @NonNull O> mapper,
final @NonNull Function<@NonNull Object[], @NonNull T> tupleFactory,
final @NonNull TypeToken<O> valueType) {
super(required,
@ -98,11 +99,11 @@ public class CompoundArgument<T extends Tuple, C, O> extends CommandArgument<C,
private static final class CompoundParser<T extends Tuple, C, O> implements ArgumentParser<C, O> {
private final Object[] parsers;
private final Function<T, O> mapper;
private final BiFunction<C, T, O> mapper;
private final Function<Object[], T> tupleFactory;
private CompoundParser(final @NonNull Tuple parserTuple,
final @NonNull Function<@NonNull T, @NonNull O> mapper,
final @NonNull BiFunction<@NonNull C, @NonNull T, @NonNull O> mapper,
final @NonNull Function<@NonNull Object[], @NonNull T> tupleFactory) {
this.parsers = parserTuple.toArray();
this.mapper = mapper;
@ -128,7 +129,8 @@ public class CompoundArgument<T extends Tuple, C, O> extends CommandArgument<C,
* Now check if the mapper threw any exceptions
*/
try {
return ArgumentParseResult.success(this.mapper.apply(this.tupleFactory.apply(output)));
return ArgumentParseResult.success(this.mapper.apply(commandContext.getSender(),
this.tupleFactory.apply(output)));
} catch (final Exception e) {
return ArgumentParseResult.failure(e);
}

View file

@ -96,7 +96,7 @@ class CommandTreeTest {
.argument(ArgumentPair.of(manager, "vec", Pair.of("x", "y"),
Pair.of(Double.class, Double.class))
.withMapper(Vector2.class,
pair -> new Vector2(pair.getFirst(), pair.getSecond()))
(sender, pair) -> new Vector2(pair.getFirst(), pair.getSecond()))
)
.handler(c -> {
final Vector2 vector2 = c.get("vec");