Skip to content

Commit c2a72c3

Browse files
committed
Add basic support for overriden methods
1 parent bfc151f commit c2a72c3

File tree

3 files changed

+39
-8
lines changed

3 files changed

+39
-8
lines changed

src/main/java/fr/zcraft/quartzlib/components/commands/CommandEndpoint.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.ArrayList;
55
import java.util.List;
66
import org.bukkit.command.CommandSender;
7+
import org.jetbrains.annotations.Nullable;
78

89
class CommandEndpoint extends CommandNode {
910
private final List<CommandMethod> methods = new ArrayList<>();
@@ -14,7 +15,12 @@ class CommandEndpoint extends CommandNode {
1415

1516
@Override
1617
void run(Object parentInstance, CommandSender sender, String[] args) throws CommandException {
17-
this.methods.get(0).run(parentInstance, sender, args);
18+
CommandMethod method = findMatchingMethod(args);
19+
method.run(parentInstance, sender, args);
20+
}
21+
22+
@Nullable CommandMethod findMatchingMethod(String[] args) {
23+
return this.methods.stream().filter(m -> m.getArguments().length == args.length).findFirst().orElse(null);
1824
}
1925

2026
void addMethod(CommandMethod method) {

src/main/java/fr/zcraft/quartzlib/components/commands/CommandMethod.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010
import java.util.ArrayList;
1111
import java.util.List;
1212
import org.bukkit.command.CommandSender;
13+
import org.jetbrains.annotations.NotNull;
14+
import org.jetbrains.annotations.Nullable;
1315

1416
class CommandMethod {
15-
private final Method method;
16-
private final String name;
17-
private final CommandMethodArgument[] arguments;
17+
@NotNull private final Method method;
18+
@NotNull private final String name;
19+
@NotNull private final CommandMethodArgument[] arguments;
1820
private final int parameterCount;
19-
private CommandMethodSenderArgument senderArgument = null;
21+
@Nullable private CommandMethodSenderArgument senderArgument = null;
2022

2123
CommandMethod(Method method, TypeCollection typeCollection) {
2224
this.method = method;
@@ -37,7 +39,7 @@ class CommandMethod {
3739
this.parameterCount = parameters.length;
3840
}
3941

40-
public String getName() {
42+
public @NotNull String getName() {
4143
return name;
4244
}
4345

@@ -66,11 +68,11 @@ private Object[] parseArguments(CommandSender sender, String[] args)
6668
return parsed;
6769
}
6870

69-
public CommandMethodArgument[] getArguments() {
71+
public @NotNull CommandMethodArgument[] getArguments() {
7072
return arguments;
7173
}
7274

73-
public Method getMethod() {
75+
public @NotNull Method getMethod() {
7476
return method;
7577
}
7678
}

src/test/java/fr/zcraft/quartzlib/components/commands/CommandGraphTests.java

+23
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,29 @@ public void add() {
160160
Assert.assertArrayEquals(new boolean[] {true}, ran);
161161
}
162162

163+
@Test
164+
public void canHandleOverrides() throws CommandException {
165+
final String[] argValue = {""};
166+
167+
class FooCommand {
168+
public void add(String arg) {
169+
argValue[0] = arg;
170+
}
171+
172+
public void add() {
173+
argValue[0] = "bar";
174+
}
175+
}
176+
177+
commands.addCommand("foo", FooCommand.class, () -> new FooCommand());
178+
179+
commands.run(server.addPlayer(), "foo", "add", "pomf");
180+
Assert.assertArrayEquals(new String[] {"pomf"}, argValue);
181+
182+
commands.run(server.addPlayer(), "foo", "add");
183+
Assert.assertArrayEquals(new String[] {"bar"}, argValue);
184+
}
185+
163186
enum FooEnum {
164187
FOO, BAR
165188
}

0 commit comments

Comments
 (0)