diff --git a/src/main/java/com/mojang/brigadier/arguments/CommandArgumentType.java b/src/main/java/com/mojang/brigadier/arguments/CommandArgumentType.java index f968a74..61be7ba 100644 --- a/src/main/java/com/mojang/brigadier/arguments/CommandArgumentType.java +++ b/src/main/java/com/mojang/brigadier/arguments/CommandArgumentType.java @@ -6,7 +6,7 @@ import com.mojang.brigadier.exceptions.CommandException; import java.util.Set; public interface CommandArgumentType { - ParsedArgument parse(String command) throws CommandException; + ParsedArgument parse(String command) throws CommandException; void listSuggestions(String command, Set output); } diff --git a/src/main/java/com/mojang/brigadier/arguments/IntegerArgumentType.java b/src/main/java/com/mojang/brigadier/arguments/IntegerArgumentType.java index 3e56f74..684b43d 100644 --- a/src/main/java/com/mojang/brigadier/arguments/IntegerArgumentType.java +++ b/src/main/java/com/mojang/brigadier/arguments/IntegerArgumentType.java @@ -42,7 +42,7 @@ public class IntegerArgumentType implements CommandArgumentType { } @Override - public ParsedArgument parse(String command) throws CommandException { + public ParsedArgument parse(String command) throws CommandException { String raw = SPLITTER.split(command).iterator().next(); try { diff --git a/src/main/java/com/mojang/brigadier/arguments/StringArgumentType.java b/src/main/java/com/mojang/brigadier/arguments/StringArgumentType.java index bb170d8..7aee66c 100644 --- a/src/main/java/com/mojang/brigadier/arguments/StringArgumentType.java +++ b/src/main/java/com/mojang/brigadier/arguments/StringArgumentType.java @@ -39,7 +39,7 @@ public class StringArgumentType implements CommandArgumentType { } @Override - public ParsedArgument parse(String command) throws CommandException { + public ParsedArgument parse(String command) throws CommandException { if (type == StringType.GREEDY_PHRASE) { return new FixedParsedArgument<>(command, command); } else if (type == StringType.SINGLE_WORLD) { diff --git a/src/main/java/com/mojang/brigadier/context/CommandContext.java b/src/main/java/com/mojang/brigadier/context/CommandContext.java index ef472d5..d6ab34f 100644 --- a/src/main/java/com/mojang/brigadier/context/CommandContext.java +++ b/src/main/java/com/mojang/brigadier/context/CommandContext.java @@ -5,17 +5,18 @@ import com.google.common.collect.Maps; import com.google.common.primitives.Primitives; import com.mojang.brigadier.Command; import com.mojang.brigadier.tree.CommandNode; +import sun.security.x509.OIDMap; import java.util.Map; public class CommandContext { private final S source; - private final Map> arguments; + private final Map> arguments; private final Command command; private final Map, String> nodes; private final String input; - public CommandContext(S source, Map> arguments, Command command, Map, String> nodes, String input) { + public CommandContext(S source, Map> arguments, Command command, Map, String> nodes, String input) { this.source = source; this.arguments = arguments; this.command = command; @@ -33,16 +34,17 @@ public class CommandContext { @SuppressWarnings("unchecked") public V getArgument(String name, Class clazz) { - ParsedArgument argument = arguments.get(name); + ParsedArgument argument = arguments.get(name); if (argument == null) { throw new IllegalArgumentException("No such argument '" + name + "' exists on this command"); } - if (Primitives.wrap(clazz).isAssignableFrom(argument.getResult().getClass())) { - return ((ParsedArgument) argument).getResult(); + final Object result = argument.getResult(source); + if (Primitives.wrap(clazz).isAssignableFrom(result.getClass())) { + return (V) result; } else { - throw new IllegalArgumentException("Argument '" + name + "' is defined as " + argument.getResult().getClass().getSimpleName() + ", not " + clazz); + throw new IllegalArgumentException("Argument '" + name + "' is defined as " + result.getClass().getSimpleName() + ", not " + clazz); } } @@ -79,7 +81,7 @@ public class CommandContext { } public CommandContext copy() { - Map> arguments = Maps.newLinkedHashMap(); + Map> arguments = Maps.newLinkedHashMap(); this.arguments.forEach((k, v) -> arguments.put(k, v.copy())); return new CommandContext<>(source, arguments, command, nodes, input); } diff --git a/src/main/java/com/mojang/brigadier/context/CommandContextBuilder.java b/src/main/java/com/mojang/brigadier/context/CommandContextBuilder.java index 962332a..44828ff 100644 --- a/src/main/java/com/mojang/brigadier/context/CommandContextBuilder.java +++ b/src/main/java/com/mojang/brigadier/context/CommandContextBuilder.java @@ -8,7 +8,7 @@ import com.mojang.brigadier.tree.CommandNode; import java.util.Map; public class CommandContextBuilder { - private final Map> arguments = Maps.newHashMap(); + private final Map> arguments = Maps.newHashMap(); private final Map, String> nodes = Maps.newLinkedHashMap(); private final StringBuilder input = new StringBuilder(); private S source; @@ -27,12 +27,12 @@ public class CommandContextBuilder { return source; } - public CommandContextBuilder withArgument(String name, ParsedArgument argument) { + public CommandContextBuilder withArgument(String name, ParsedArgument argument) { this.arguments.put(name, argument); return this; } - public Map> getArguments() { + public Map> getArguments() { return arguments; } diff --git a/src/main/java/com/mojang/brigadier/context/DynamicParsedArgument.java b/src/main/java/com/mojang/brigadier/context/DynamicParsedArgument.java index 4edb165..4eb8beb 100644 --- a/src/main/java/com/mojang/brigadier/context/DynamicParsedArgument.java +++ b/src/main/java/com/mojang/brigadier/context/DynamicParsedArgument.java @@ -1,14 +1,14 @@ package com.mojang.brigadier.context; -import java.util.function.Supplier; +import java.util.function.Function; -public class DynamicParsedArgument implements ParsedArgument { +public class DynamicParsedArgument implements ParsedArgument { private final String raw; - private Supplier supplier; + private Function supplier; private boolean evaluated; private T result; - public DynamicParsedArgument(String raw, Supplier supplier) { + public DynamicParsedArgument(String raw, Function supplier) { this.raw = raw; this.supplier = supplier; } @@ -19,9 +19,9 @@ public class DynamicParsedArgument implements ParsedArgument { } @Override - public T getResult() { + public T getResult(S source) { if (!evaluated) { - result = supplier.get(); + result = supplier.apply(source); evaluated = true; } return result; @@ -48,7 +48,7 @@ public class DynamicParsedArgument implements ParsedArgument { } @Override - public ParsedArgument copy() { + public ParsedArgument copy() { return new DynamicParsedArgument<>(raw, supplier); } } diff --git a/src/main/java/com/mojang/brigadier/context/FixedParsedArgument.java b/src/main/java/com/mojang/brigadier/context/FixedParsedArgument.java index 4d54931..da19481 100644 --- a/src/main/java/com/mojang/brigadier/context/FixedParsedArgument.java +++ b/src/main/java/com/mojang/brigadier/context/FixedParsedArgument.java @@ -1,6 +1,6 @@ package com.mojang.brigadier.context; -public class FixedParsedArgument implements ParsedArgument { +public class FixedParsedArgument implements ParsedArgument { private final String raw; private final T result; @@ -15,7 +15,7 @@ public class FixedParsedArgument implements ParsedArgument { } @Override - public T getResult() { + public T getResult(S source) { return result; } @@ -40,7 +40,7 @@ public class FixedParsedArgument implements ParsedArgument { } @Override - public ParsedArgument copy() { + public ParsedArgument copy() { return new FixedParsedArgument<>(raw, result); } } diff --git a/src/main/java/com/mojang/brigadier/context/ParsedArgument.java b/src/main/java/com/mojang/brigadier/context/ParsedArgument.java index 578888b..846be5c 100644 --- a/src/main/java/com/mojang/brigadier/context/ParsedArgument.java +++ b/src/main/java/com/mojang/brigadier/context/ParsedArgument.java @@ -1,9 +1,9 @@ package com.mojang.brigadier.context; -public interface ParsedArgument { +public interface ParsedArgument { String getRaw(); - T getResult(); + T getResult(S source); - ParsedArgument copy(); + ParsedArgument copy(); } diff --git a/src/main/java/com/mojang/brigadier/tree/ArgumentCommandNode.java b/src/main/java/com/mojang/brigadier/tree/ArgumentCommandNode.java index b6bfb2d..ce1ab63 100644 --- a/src/main/java/com/mojang/brigadier/tree/ArgumentCommandNode.java +++ b/src/main/java/com/mojang/brigadier/tree/ArgumentCommandNode.java @@ -2,7 +2,6 @@ package com.mojang.brigadier.tree; import com.mojang.brigadier.Command; import com.mojang.brigadier.arguments.CommandArgumentType; -import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.builder.RequiredArgumentBuilder; import com.mojang.brigadier.context.CommandContextBuilder; import com.mojang.brigadier.context.ParsedArgument; @@ -44,7 +43,7 @@ public class ArgumentCommandNode extends CommandNode { @Override public String parse(String command, CommandContextBuilder contextBuilder) throws CommandException { - ParsedArgument parsed = type.parse(command); + ParsedArgument parsed = type.parse(command); int start = parsed.getRaw().length(); contextBuilder.withArgument(name, parsed); diff --git a/src/test/java/com/mojang/brigadier/arguments/IntegerArgumentTypeTest.java b/src/test/java/com/mojang/brigadier/arguments/IntegerArgumentTypeTest.java index 699fbd6..a84baf5 100644 --- a/src/test/java/com/mojang/brigadier/arguments/IntegerArgumentTypeTest.java +++ b/src/test/java/com/mojang/brigadier/arguments/IntegerArgumentTypeTest.java @@ -7,11 +7,12 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.CommandContextBuilder; import com.mojang.brigadier.context.ParsedArgument; import com.mojang.brigadier.exceptions.CommandException; -import com.mojang.brigadier.exceptions.CommandExceptionType; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; -import java.util.Map; import java.util.Set; import static com.mojang.brigadier.arguments.IntegerArgumentType.integer; @@ -21,8 +22,11 @@ import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; +@RunWith(MockitoJUnitRunner.class) public class IntegerArgumentTypeTest { private IntegerArgumentType type; + @Mock + private Object source; @Before public void setUp() throws Exception { @@ -31,10 +35,10 @@ public class IntegerArgumentTypeTest { @Test public void testParse() throws Exception { - ParsedArgument result = type.parse("50"); + ParsedArgument result = type.parse("50"); assertThat(result.getRaw(), is("50")); - assertThat(result.getResult(), is(50)); + assertThat(result.getResult(source), is(50)); } @Test @@ -61,10 +65,10 @@ public class IntegerArgumentTypeTest { @Test public void testParseLowerLimit() throws Exception { - ParsedArgument result = type.parse("-100"); + ParsedArgument result = type.parse("-100"); assertThat(result.getRaw(), is("-100")); - assertThat(result.getResult(), is(-100)); + assertThat(result.getResult(source), is(-100)); } @Test @@ -80,10 +84,10 @@ public class IntegerArgumentTypeTest { @Test public void testParseHigherLimit() throws Exception { - ParsedArgument result = type.parse("100"); + ParsedArgument result = type.parse("100"); assertThat(result.getRaw(), is("100")); - assertThat(result.getResult(), is(100)); + assertThat(result.getResult(source), is(100)); } @Test diff --git a/src/test/java/com/mojang/brigadier/arguments/StringArgumentTypeTest.java b/src/test/java/com/mojang/brigadier/arguments/StringArgumentTypeTest.java index 6bead93..a44a014 100644 --- a/src/test/java/com/mojang/brigadier/arguments/StringArgumentTypeTest.java +++ b/src/test/java/com/mojang/brigadier/arguments/StringArgumentTypeTest.java @@ -3,8 +3,10 @@ package com.mojang.brigadier.arguments; import com.google.common.collect.Sets; import com.mojang.brigadier.context.ParsedArgument; import com.mojang.brigadier.exceptions.CommandException; -import com.sun.xml.internal.ws.api.ComponentEx; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; import java.util.Collections; import java.util.Set; @@ -25,97 +27,100 @@ import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; +@RunWith(MockitoJUnitRunner.class) public class StringArgumentTypeTest { private StringArgumentType type; + @Mock + private Object source; @Test public void testParseWord() throws Exception { type = word(); - ParsedArgument result = type.parse("hello world"); + ParsedArgument result = type.parse("hello world"); assertThat(result.getRaw(), is("hello")); - assertThat(result.getResult(), is("hello")); + assertThat(result.getResult(source), is("hello")); } @Test public void testParseWord_empty() throws Exception { type = word(); - ParsedArgument result = type.parse(""); + ParsedArgument result = type.parse(""); assertThat(result.getRaw(), is("")); - assertThat(result.getResult(), is("")); + assertThat(result.getResult(source), is("")); } @Test public void testParseWord_simple() throws Exception { type = word(); - ParsedArgument result = type.parse("hello"); + ParsedArgument result = type.parse("hello"); assertThat(result.getRaw(), is("hello")); - assertThat(result.getResult(), is("hello")); + assertThat(result.getResult(source), is("hello")); } @Test public void testParseString() throws Exception { type = string(); - ParsedArgument result = type.parse("hello world"); + ParsedArgument result = type.parse("hello world"); assertThat(result.getRaw(), is("hello")); - assertThat(result.getResult(), is("hello")); + assertThat(result.getResult(source), is("hello")); } @Test public void testParseGreedyString() throws Exception { type = greedyString(); - ParsedArgument result = type.parse("hello world"); + ParsedArgument result = type.parse("hello world"); assertThat(result.getRaw(), is("hello world")); - assertThat(result.getResult(), is("hello world")); + assertThat(result.getResult(source), is("hello world")); } @Test public void testParse() throws Exception { type = string(); - ParsedArgument result = type.parse("hello"); + ParsedArgument result = type.parse("hello"); assertThat(result.getRaw(), is("hello")); - assertThat(result.getResult(), is("hello")); + assertThat(result.getResult(source), is("hello")); } @Test public void testParseWordQuoted() throws Exception { type = word(); - ParsedArgument result = type.parse("\"hello \\\" world\""); + ParsedArgument result = type.parse("\"hello \\\" world\""); assertThat(result.getRaw(), is("\"hello")); - assertThat(result.getResult(), is("\"hello")); + assertThat(result.getResult(source), is("\"hello")); } @Test public void testParseQuoted() throws Exception { type = string(); - ParsedArgument result = type.parse("\"hello \\\" world\""); + ParsedArgument result = type.parse("\"hello \\\" world\""); assertThat(result.getRaw(), is("\"hello \\\" world\"")); - assertThat(result.getResult(), is("hello \" world")); + assertThat(result.getResult(source), is("hello \" world")); } @Test public void testParseQuotedWithRemaining() throws Exception { type = string(); - ParsedArgument result = type.parse("\"hello \\\" world\" with remaining"); + ParsedArgument result = type.parse("\"hello \\\" world\" with remaining"); assertThat(result.getRaw(), is("\"hello \\\" world\"")); - assertThat(result.getResult(), is("hello \" world")); + assertThat(result.getResult(source), is("hello \" world")); } @Test public void testParseNotQuoted() throws Exception { type = string(); - ParsedArgument result = type.parse("hello world"); + ParsedArgument result = type.parse("hello world"); assertThat(result.getRaw(), is("hello")); - assertThat(result.getResult(), is("hello")); + assertThat(result.getResult(source), is("hello")); } @Test @@ -133,10 +138,10 @@ public class StringArgumentTypeTest { @Test public void testParseQuote_earlyUnquoteWithRemaining() throws Exception { type = string(); - ParsedArgument result = type.parse("\"hello\" world"); + ParsedArgument result = type.parse("\"hello\" world"); assertThat(result.getRaw(), is("\"hello\"")); - assertThat(result.getResult(), is("hello")); + assertThat(result.getResult(source), is("hello")); } @Test @@ -154,10 +159,10 @@ public class StringArgumentTypeTest { @Test public void testParseQuote_lateQuoteWithRemaining() throws Exception { type = string(); - ParsedArgument result = type.parse("hello \"world\""); + ParsedArgument result = type.parse("hello \"world\""); assertThat(result.getRaw(), is("hello")); - assertThat(result.getResult(), is("hello")); + assertThat(result.getResult(source), is("hello")); } @Test @@ -187,10 +192,10 @@ public class StringArgumentTypeTest { @Test public void testParseEmpty() throws Exception { type = string(); - ParsedArgument result = type.parse(""); + ParsedArgument result = type.parse(""); assertThat(result.getRaw(), is("")); - assertThat(result.getResult(), is("")); + assertThat(result.getResult(source), is("")); } @Test diff --git a/src/test/java/com/mojang/brigadier/context/CommandContextTest.java b/src/test/java/com/mojang/brigadier/context/CommandContextTest.java index fc802e3..4d511f9 100644 --- a/src/test/java/com/mojang/brigadier/context/CommandContextTest.java +++ b/src/test/java/com/mojang/brigadier/context/CommandContextTest.java @@ -9,6 +9,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import java.util.function.Function; import java.util.function.Supplier; import static com.mojang.brigadier.arguments.IntegerArgumentType.integer; @@ -84,13 +85,13 @@ public class CommandContextTest { public void testCopy() throws Exception { Object first = new Object(); Object second = new Object(); - @SuppressWarnings("unchecked") Supplier supplier = (Supplier) mock(Supplier.class); + @SuppressWarnings("unchecked") Function supplier = (Function) mock(Function.class); - when(supplier.get()).thenReturn(first); + when(supplier.apply(source)).thenReturn(first); CommandContext context = builder.withNode(literal("test").build(), "test").withArgument("test", new DynamicParsedArgument<>("test", supplier)).build(); assertThat(context.getArgument("test", Object.class), is(first)); - when(supplier.get()).thenReturn(second); + when(supplier.apply(source)).thenReturn(second); CommandContext copy = context.copy(); assertThat(context, is(equalTo(copy))); assertThat(copy.getArgument("test", Object.class), is(second)); diff --git a/src/test/java/com/mojang/brigadier/context/DynamicParsedArgumentTest.java b/src/test/java/com/mojang/brigadier/context/DynamicParsedArgumentTest.java index f7ce6f5..ccbcdc7 100644 --- a/src/test/java/com/mojang/brigadier/context/DynamicParsedArgumentTest.java +++ b/src/test/java/com/mojang/brigadier/context/DynamicParsedArgumentTest.java @@ -1,14 +1,13 @@ package com.mojang.brigadier.context; import com.google.common.testing.EqualsTester; -import org.hamcrest.Matchers; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import java.util.function.Function; import java.util.function.Supplier; import static org.hamcrest.Matchers.equalTo; @@ -20,9 +19,11 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class DynamicParsedArgumentTest { - private DynamicParsedArgument subject; + private DynamicParsedArgument subject; @Mock - private Supplier supplier; + private Function supplier; + @Mock + private Object source; @Before public void setUp() throws Exception { @@ -32,28 +33,28 @@ public class DynamicParsedArgumentTest { @Test public void suppliedOnce() throws Exception { Object result = new Object(); - when(supplier.get()).thenReturn(result); + when(supplier.apply(source)).thenReturn(result); - assertThat("first evaluation", subject.getResult(), is(result)); - assertThat("already evaluated", subject.getResult(), is(result)); + assertThat("first evaluation", subject.getResult(source), is(result)); + assertThat("already evaluated", subject.getResult(source), is(result)); - verify(supplier, times(1)).get(); + verify(supplier, times(1)).apply(source); } @Test public void copy() throws Exception { Object result = new Object(); - when(supplier.get()).thenReturn(result); - assertThat(subject.getResult(), is(result)); + when(supplier.apply(source)).thenReturn(result); + assertThat(subject.getResult(source), is(result)); Object newResult = new Object(); - when(supplier.get()).thenReturn(newResult); - ParsedArgument copy = subject.copy(); - assertThat(copy.getResult(), is(newResult)); + when(supplier.apply(source)).thenReturn(newResult); + ParsedArgument copy = subject.copy(); + assertThat(copy.getResult(source), is(newResult)); assertThat(copy, is(equalTo(subject))); - verify(supplier, times(2)).get(); + verify(supplier, times(2)).apply(source); } @Test diff --git a/src/test/java/com/mojang/brigadier/context/FixedParsedArgumentTest.java b/src/test/java/com/mojang/brigadier/context/FixedParsedArgumentTest.java index 502a6b8..3cc107d 100644 --- a/src/test/java/com/mojang/brigadier/context/FixedParsedArgumentTest.java +++ b/src/test/java/com/mojang/brigadier/context/FixedParsedArgumentTest.java @@ -21,7 +21,7 @@ public class FixedParsedArgumentTest { @Test public void copy() throws Exception { - final FixedParsedArgument argument = new FixedParsedArgument<>("foo", "bar"); + final FixedParsedArgument argument = new FixedParsedArgument<>("foo", "bar"); assertThat(argument.copy(), is(equalTo(argument))); } } \ No newline at end of file diff --git a/src/test/java/com/mojang/brigadier/tree/ArgumentCommandNodeTest.java b/src/test/java/com/mojang/brigadier/tree/ArgumentCommandNodeTest.java index 462e957..7c6776f 100644 --- a/src/test/java/com/mojang/brigadier/tree/ArgumentCommandNodeTest.java +++ b/src/test/java/com/mojang/brigadier/tree/ArgumentCommandNodeTest.java @@ -24,6 +24,7 @@ import static org.mockito.Mockito.mock; public class ArgumentCommandNodeTest extends AbstractCommandNodeTest { private ArgumentCommandNode node; private CommandContextBuilder contextBuilder; + private Object source = new Object(); @Override protected CommandNode getCommandNode() { @@ -41,7 +42,7 @@ public class ArgumentCommandNodeTest extends AbstractCommandNodeTest { assertThat(node.parse("123 456", contextBuilder), is(" 456")); assertThat(contextBuilder.getArguments().containsKey("foo"), is(true)); - assertThat(contextBuilder.getArguments().get("foo").getResult(), is(123)); + assertThat(contextBuilder.getArguments().get("foo").getResult(source), is(123)); } @Test @@ -49,7 +50,7 @@ public class ArgumentCommandNodeTest extends AbstractCommandNodeTest { assertThat(node.parse("123", contextBuilder), is("")); assertThat(contextBuilder.getArguments().containsKey("foo"), is(true)); - assertThat(contextBuilder.getArguments().get("foo").getResult(), is(123)); + assertThat(contextBuilder.getArguments().get("foo").getResult(source), is(123)); } @Test