From ce5eb700b84cd57c942d6d484a482632da0f4f7f Mon Sep 17 00:00:00 2001 From: Nathan Adams Date: Tue, 25 Jul 2017 13:18:22 +0200 Subject: [PATCH] Removed DynamicParsedArgument, undoing previous work to split it up. Realized that returning a fixed partial is the same thing, but doesn't complicate the code so much. --- .../brigadier/arguments/BoolArgumentType.java | 5 +- .../arguments/CommandArgumentType.java | 3 +- .../arguments/IntegerArgumentType.java | 5 +- .../arguments/StringArgumentType.java | 9 ++- .../brigadier/context/CommandContext.java | 3 +- .../context/DynamicParsedArgument.java | 54 --------------- .../context/FixedParsedArgument.java | 46 ------------- .../brigadier/context/ParsedArgument.java | 42 ++++++++++-- .../arguments/BoolArgumentTypeTest.java | 2 - .../brigadier/context/CommandContextTest.java | 16 ----- .../context/DynamicParsedArgumentTest.java | 68 ------------------- .../context/FixedParsedArgumentTest.java | 27 -------- .../brigadier/context/ParsedArgumentTest.java | 25 +++++++ 13 files changed, 72 insertions(+), 233 deletions(-) delete mode 100644 src/main/java/com/mojang/brigadier/context/DynamicParsedArgument.java delete mode 100644 src/main/java/com/mojang/brigadier/context/FixedParsedArgument.java delete mode 100644 src/test/java/com/mojang/brigadier/context/DynamicParsedArgumentTest.java delete mode 100644 src/test/java/com/mojang/brigadier/context/FixedParsedArgumentTest.java create mode 100644 src/test/java/com/mojang/brigadier/context/ParsedArgumentTest.java diff --git a/src/main/java/com/mojang/brigadier/arguments/BoolArgumentType.java b/src/main/java/com/mojang/brigadier/arguments/BoolArgumentType.java index 2bc6d02..7109e31 100644 --- a/src/main/java/com/mojang/brigadier/arguments/BoolArgumentType.java +++ b/src/main/java/com/mojang/brigadier/arguments/BoolArgumentType.java @@ -3,7 +3,6 @@ package com.mojang.brigadier.arguments; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.CommandContextBuilder; -import com.mojang.brigadier.context.FixedParsedArgument; import com.mojang.brigadier.context.ParsedArgument; import com.mojang.brigadier.exceptions.CommandException; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; @@ -31,9 +30,9 @@ public class BoolArgumentType implements ArgumentType { } if (raw.equals("true")) { - return new FixedParsedArgument<>(raw, true); + return new ParsedArgument<>(raw, true); } else if (raw.equals("false")) { - return new FixedParsedArgument<>(raw, false); + return new ParsedArgument<>(raw, false); } else { throw ERROR_INVALID.create(); } diff --git a/src/main/java/com/mojang/brigadier/arguments/CommandArgumentType.java b/src/main/java/com/mojang/brigadier/arguments/CommandArgumentType.java index 9ae4d79..afbd6f8 100644 --- a/src/main/java/com/mojang/brigadier/arguments/CommandArgumentType.java +++ b/src/main/java/com/mojang/brigadier/arguments/CommandArgumentType.java @@ -2,7 +2,6 @@ package com.mojang.brigadier.arguments; import com.mojang.brigadier.ParseResults; import com.mojang.brigadier.context.CommandContextBuilder; -import com.mojang.brigadier.context.FixedParsedArgument; import com.mojang.brigadier.context.ParsedArgument; import com.mojang.brigadier.exceptions.CommandException; @@ -19,7 +18,7 @@ public class CommandArgumentType implements ArgumentType> { final ParseResults parse = contextBuilder.getDispatcher().parse(command, contextBuilder.getSource()); //noinspection unchecked - return new FixedParsedArgument<>(command, (ParseResults) parse); + return new ParsedArgument<>(command, (ParseResults) parse); } @Override diff --git a/src/main/java/com/mojang/brigadier/arguments/IntegerArgumentType.java b/src/main/java/com/mojang/brigadier/arguments/IntegerArgumentType.java index fdf1b62..b2bd188 100644 --- a/src/main/java/com/mojang/brigadier/arguments/IntegerArgumentType.java +++ b/src/main/java/com/mojang/brigadier/arguments/IntegerArgumentType.java @@ -1,16 +1,13 @@ package com.mojang.brigadier.arguments; -import com.google.common.base.Splitter; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.CommandContextBuilder; -import com.mojang.brigadier.context.FixedParsedArgument; import com.mojang.brigadier.context.ParsedArgument; import com.mojang.brigadier.exceptions.CommandException; import com.mojang.brigadier.exceptions.ParameterizedCommandExceptionType; import java.util.Objects; -import java.util.Set; public class IntegerArgumentType implements ArgumentType { public static final ParameterizedCommandExceptionType ERROR_NOT_A_NUMBER = new ParameterizedCommandExceptionType("argument.integer.invalid", "Expected an integer, found '${found}'", "found"); @@ -77,7 +74,7 @@ public class IntegerArgumentType implements ArgumentType { throw ERROR_TOO_BIG.create(value, maximum); } - return new FixedParsedArgument<>(raw, value); + return new ParsedArgument<>(raw, value); } catch (NumberFormatException ignored) { throw ERROR_NOT_A_NUMBER.create(number); } diff --git a/src/main/java/com/mojang/brigadier/arguments/StringArgumentType.java b/src/main/java/com/mojang/brigadier/arguments/StringArgumentType.java index 042bd48..9df3d4f 100644 --- a/src/main/java/com/mojang/brigadier/arguments/StringArgumentType.java +++ b/src/main/java/com/mojang/brigadier/arguments/StringArgumentType.java @@ -3,7 +3,6 @@ package com.mojang.brigadier.arguments; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.CommandContextBuilder; -import com.mojang.brigadier.context.FixedParsedArgument; import com.mojang.brigadier.context.ParsedArgument; import com.mojang.brigadier.exceptions.CommandException; import com.mojang.brigadier.exceptions.ParameterizedCommandExceptionType; @@ -40,14 +39,14 @@ public class StringArgumentType implements ArgumentType { @Override public ParsedArgument parse(String command, CommandContextBuilder contextBuilder) throws CommandException { if (type == StringType.GREEDY_PHRASE) { - return new FixedParsedArgument<>(command, command); + return new ParsedArgument<>(command, command); } else if (type == StringType.SINGLE_WORD) { int index = command.indexOf(CommandDispatcher.ARGUMENT_SEPARATOR); if (index > 0) { final String word = command.substring(0, index); - return new FixedParsedArgument<>(word, word); + return new ParsedArgument<>(word, word); } else { - return new FixedParsedArgument<>(command, command); + return new ParsedArgument<>(command, command); } } else { StringBuilder result = new StringBuilder(); @@ -90,7 +89,7 @@ public class StringArgumentType implements ArgumentType { i++; } - return new FixedParsedArgument<>(command.substring(0, i), result.toString()); + return new ParsedArgument<>(command.substring(0, i), result.toString()); } } diff --git a/src/main/java/com/mojang/brigadier/context/CommandContext.java b/src/main/java/com/mojang/brigadier/context/CommandContext.java index d6ab34f..b843c7b 100644 --- a/src/main/java/com/mojang/brigadier/context/CommandContext.java +++ b/src/main/java/com/mojang/brigadier/context/CommandContext.java @@ -5,14 +5,13 @@ 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 Command command; + private final Map> arguments; private final Map, String> nodes; private final String input; diff --git a/src/main/java/com/mojang/brigadier/context/DynamicParsedArgument.java b/src/main/java/com/mojang/brigadier/context/DynamicParsedArgument.java deleted file mode 100644 index 4eb8beb..0000000 --- a/src/main/java/com/mojang/brigadier/context/DynamicParsedArgument.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.mojang.brigadier.context; - -import java.util.function.Function; - -public class DynamicParsedArgument implements ParsedArgument { - private final String raw; - private Function supplier; - private boolean evaluated; - private T result; - - public DynamicParsedArgument(String raw, Function supplier) { - this.raw = raw; - this.supplier = supplier; - } - - @Override - public String getRaw() { - return raw; - } - - @Override - public T getResult(S source) { - if (!evaluated) { - result = supplier.apply(source); - evaluated = true; - } - return result; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof DynamicParsedArgument)) return false; - - DynamicParsedArgument that = (DynamicParsedArgument) o; - - if (!raw.equals(that.raw)) return false; - if (!supplier.equals(that.supplier)) return false; - - return true; - } - - @Override - public int hashCode() { - int result = raw.hashCode(); - result = 31 * result + supplier.hashCode(); - return result; - } - - @Override - 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 deleted file mode 100644 index da19481..0000000 --- a/src/main/java/com/mojang/brigadier/context/FixedParsedArgument.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.mojang.brigadier.context; - -public class FixedParsedArgument implements ParsedArgument { - private final String raw; - private final T result; - - public FixedParsedArgument(String raw, T result) { - this.raw = raw; - this.result = result; - } - - @Override - public String getRaw() { - return raw; - } - - @Override - public T getResult(S source) { - return result; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof FixedParsedArgument)) return false; - - FixedParsedArgument that = (FixedParsedArgument) o; - - if (!raw.equals(that.raw)) return false; - if (!result.equals(that.result)) return false; - - return true; - } - - @Override - public int hashCode() { - int result = raw.hashCode(); - result = 31 * result + this.result.hashCode(); - return result; - } - - @Override - 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 846be5c..efb8dc9 100644 --- a/src/main/java/com/mojang/brigadier/context/ParsedArgument.java +++ b/src/main/java/com/mojang/brigadier/context/ParsedArgument.java @@ -1,9 +1,43 @@ package com.mojang.brigadier.context; -public interface ParsedArgument { - String getRaw(); +public class ParsedArgument { + private final String raw; + private final T result; - T getResult(S source); + public ParsedArgument(String raw, T result) { + this.raw = raw; + this.result = result; + } - ParsedArgument copy(); + public String getRaw() { + return raw; + } + + public T getResult(S source) { + return result; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ParsedArgument)) return false; + + ParsedArgument that = (ParsedArgument) o; + + if (!raw.equals(that.raw)) return false; + if (!result.equals(that.result)) return false; + + return true; + } + + @Override + public int hashCode() { + int result = raw.hashCode(); + result = 31 * result + this.result.hashCode(); + return result; + } + + public ParsedArgument copy() { + return new ParsedArgument<>(raw, result); + } } diff --git a/src/test/java/com/mojang/brigadier/arguments/BoolArgumentTypeTest.java b/src/test/java/com/mojang/brigadier/arguments/BoolArgumentTypeTest.java index 57dc6e0..bb6b3a9 100644 --- a/src/test/java/com/mojang/brigadier/arguments/BoolArgumentTypeTest.java +++ b/src/test/java/com/mojang/brigadier/arguments/BoolArgumentTypeTest.java @@ -3,8 +3,6 @@ package com.mojang.brigadier.arguments; import com.mojang.brigadier.context.CommandContextBuilder; import com.mojang.brigadier.context.ParsedArgument; import com.mojang.brigadier.exceptions.CommandException; -import org.hamcrest.Matchers; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/src/test/java/com/mojang/brigadier/context/CommandContextTest.java b/src/test/java/com/mojang/brigadier/context/CommandContextTest.java index c2d374e..cda7d2b 100644 --- a/src/test/java/com/mojang/brigadier/context/CommandContextTest.java +++ b/src/test/java/com/mojang/brigadier/context/CommandContextTest.java @@ -82,20 +82,4 @@ public class CommandContextTest { assertThat(context.getInput(), is("foo 100 baz")); } - - @Test - public void testCopy() throws Exception { - Object first = new Object(); - Object second = new Object(); - @SuppressWarnings("unchecked") Function supplier = (Function) mock(Function.class); - - 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.apply(source)).thenReturn(second); - CommandContext copy = context.copy(); - assertThat(context, is(equalTo(copy))); - assertThat(copy.getArgument("test", Object.class), is(second)); - } } \ No newline at end of file diff --git a/src/test/java/com/mojang/brigadier/context/DynamicParsedArgumentTest.java b/src/test/java/com/mojang/brigadier/context/DynamicParsedArgumentTest.java deleted file mode 100644 index ccbcdc7..0000000 --- a/src/test/java/com/mojang/brigadier/context/DynamicParsedArgumentTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.mojang.brigadier.context; - -import com.google.common.testing.EqualsTester; -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; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class DynamicParsedArgumentTest { - private DynamicParsedArgument subject; - @Mock - private Function supplier; - @Mock - private Object source; - - @Before - public void setUp() throws Exception { - subject = new DynamicParsedArgument<>("raw", supplier); - } - - @Test - public void suppliedOnce() throws Exception { - Object result = new Object(); - when(supplier.apply(source)).thenReturn(result); - - assertThat("first evaluation", subject.getResult(source), is(result)); - assertThat("already evaluated", subject.getResult(source), is(result)); - - verify(supplier, times(1)).apply(source); - } - - @Test - public void copy() throws Exception { - Object result = new Object(); - when(supplier.apply(source)).thenReturn(result); - assertThat(subject.getResult(source), is(result)); - - Object newResult = new Object(); - 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)).apply(source); - } - - @Test - public void testEquals() throws Exception { - new EqualsTester() - .addEqualityGroup(new FixedParsedArgument<>("foo", "bar"), new FixedParsedArgument<>("foo", "bar")) - .addEqualityGroup(new FixedParsedArgument<>("bar", "baz"), new FixedParsedArgument<>("bar", "baz")) - .addEqualityGroup(new FixedParsedArgument<>("foo", "baz"), new FixedParsedArgument<>("foo", "baz")) - .testEquals(); - } -} \ No newline at end of file diff --git a/src/test/java/com/mojang/brigadier/context/FixedParsedArgumentTest.java b/src/test/java/com/mojang/brigadier/context/FixedParsedArgumentTest.java deleted file mode 100644 index 3cc107d..0000000 --- a/src/test/java/com/mojang/brigadier/context/FixedParsedArgumentTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mojang.brigadier.context; - -import com.google.common.testing.EqualsTester; -import org.hamcrest.Matchers; -import org.junit.Assert; -import org.junit.Test; - -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; - -public class FixedParsedArgumentTest { - @Test - public void testEquals() throws Exception { - new EqualsTester() - .addEqualityGroup(new FixedParsedArgument<>("foo", "bar"), new FixedParsedArgument<>("foo", "bar")) - .addEqualityGroup(new FixedParsedArgument<>("bar", "baz"), new FixedParsedArgument<>("bar", "baz")) - .addEqualityGroup(new FixedParsedArgument<>("foo", "baz"), new FixedParsedArgument<>("foo", "baz")) - .testEquals(); - } - - @Test - public void copy() throws Exception { - 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/context/ParsedArgumentTest.java b/src/test/java/com/mojang/brigadier/context/ParsedArgumentTest.java new file mode 100644 index 0000000..86be285 --- /dev/null +++ b/src/test/java/com/mojang/brigadier/context/ParsedArgumentTest.java @@ -0,0 +1,25 @@ +package com.mojang.brigadier.context; + +import com.google.common.testing.EqualsTester; +import org.junit.Test; + +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +public class ParsedArgumentTest { + @Test + public void testEquals() throws Exception { + new EqualsTester() + .addEqualityGroup(new ParsedArgument<>("foo", "bar"), new ParsedArgument<>("foo", "bar")) + .addEqualityGroup(new ParsedArgument<>("bar", "baz"), new ParsedArgument<>("bar", "baz")) + .addEqualityGroup(new ParsedArgument<>("foo", "baz"), new ParsedArgument<>("foo", "baz")) + .testEquals(); + } + + @Test + public void copy() throws Exception { + final ParsedArgument argument = new ParsedArgument<>("foo", "bar"); + assertThat(argument.copy(), is(equalTo(argument))); + } +} \ No newline at end of file