From 0fbe1fe6a259249105f890e82c373b2d9904b666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20S=C3=B6derberg?= Date: Wed, 30 Sep 2020 10:27:20 +0200 Subject: [PATCH] :truck: Finalize annotation transition --- .../java/cloud/commandframework/Command.java | 23 +++---- .../cloud/commandframework/CommandTree.java | 22 ++++++- .../arguments/CommandArgument.java | 4 +- .../arguments/compound/ArgumentPair.java | 2 +- .../arguments/compound/ArgumentTriplet.java | 4 +- .../arguments/compound/CompoundArgument.java | 2 +- .../arguments/compound/package-info.java | 2 +- .../arguments/standard/StringArgument.java | 2 +- .../arguments/standard/UUIDArgument.java | 2 +- .../types/tuples/Triplet.java | 6 +- .../CommandPermissionTest.java | 7 +-- .../CommandPostProcessorTest.java | 4 +- .../CommandPreProcessorTest.java | 4 +- .../commandframework/TestCommandManager.java | 7 +-- .../cloud/commandframework/BukkitTest.java | 63 ++++++++++--------- .../BukkitPluginRegistrationHandler.java | 8 +-- .../bukkit/CloudCommodoreManager.java | 11 ++-- .../bukkit/parsers/MaterialArgument.java | 39 +++++------- .../bukkit/parsers/OfflinePlayerArgument.java | 63 ++++++++++--------- .../bukkit/parsers/PlayerArgument.java | 60 +++++++++--------- .../bukkit/parsers/WorldArgument.java | 39 +++++------- 21 files changed, 184 insertions(+), 190 deletions(-) diff --git a/cloud-core/src/main/java/cloud/commandframework/Command.java b/cloud-core/src/main/java/cloud/commandframework/Command.java index a7e72254..ed4758db 100644 --- a/cloud-core/src/main/java/cloud/commandframework/Command.java +++ b/cloud-core/src/main/java/cloud/commandframework/Command.java @@ -423,10 +423,9 @@ public class Command { */ public @NonNull Builder argumentPair(@NonNull final String name, @NonNull final TypeToken outputType, - @NonNull final Pair<@NonNull String, @NonNull String> names, - @NonNull final Pair<@NonNull Class, @NonNull Class> parserPair, - @NonNull final Function, - @NonNull O> mapper, + @NonNull final Pair names, + @NonNull final Pair, Class> parserPair, + @NonNull final Function, O> mapper, @NonNull final Description description) { if (this.commandManager == null) { throw new IllegalStateException("This cannot be called from a command that has no command manager attached"); @@ -455,10 +454,8 @@ public class Command { * @return Builder instance with the argument inserted */ public @NonNull Builder argumentTriplet(@NonNull final String name, - @NonNull final Triplet<@NonNull String, - @NonNull String, @NonNull String> names, - @NonNull final Triplet<@NonNull Class, - @NonNull Class, @NonNull Class> parserTriplet, + @NonNull final Triplet names, + @NonNull final Triplet, Class, Class> parserTriplet, @NonNull final Description description) { if (this.commandManager == null) { throw new IllegalStateException("This cannot be called from a command that has no command manager attached"); @@ -489,12 +486,10 @@ public class Command { */ public @NonNull Builder argumentTriplet(@NonNull final String name, @NonNull final TypeToken outputType, - @NonNull final Triplet<@NonNull String, - @NonNull String, @NonNull String> names, - @NonNull final Triplet<@NonNull Class, - @NonNull Class, @NonNull Class> parserTriplet, - @NonNull final Function<@NonNull Triplet<@NonNull U, - @NonNull V, @NonNull W>, @NonNull O> mapper, + @NonNull final Triplet names, + @NonNull final Triplet, Class, + Class> parserTriplet, + @NonNull final Function, O> mapper, @NonNull final Description description) { if (this.commandManager == null) { throw new IllegalStateException("This cannot be called from a command that has no command manager attached"); diff --git a/cloud-core/src/main/java/cloud/commandframework/CommandTree.java b/cloud-core/src/main/java/cloud/commandframework/CommandTree.java index 308ed92b..1abde9f9 100644 --- a/cloud-core/src/main/java/cloud/commandframework/CommandTree.java +++ b/cloud-core/src/main/java/cloud/commandframework/CommandTree.java @@ -28,13 +28,31 @@ import cloud.commandframework.arguments.StaticArgument; import cloud.commandframework.arguments.compound.CompoundArgument; import cloud.commandframework.arguments.parser.ArgumentParseResult; import cloud.commandframework.context.CommandContext; -import cloud.commandframework.exceptions.*; +import cloud.commandframework.exceptions.AmbiguousNodeException; +import cloud.commandframework.exceptions.ArgumentParseException; +import cloud.commandframework.exceptions.InvalidCommandSenderException; +import cloud.commandframework.exceptions.InvalidSyntaxException; +import cloud.commandframework.exceptions.NoCommandInLeafException; +import cloud.commandframework.exceptions.NoPermissionException; +import cloud.commandframework.exceptions.NoSuchCommandException; import cloud.commandframework.permission.CommandPermission; import cloud.commandframework.permission.OrPermission; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Queue; import java.util.stream.Collectors; /** diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/CommandArgument.java b/cloud-core/src/main/java/cloud/commandframework/arguments/CommandArgument.java index 1ad0f4a1..e2a26656 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/CommandArgument.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/CommandArgument.java @@ -265,7 +265,7 @@ public class CommandArgument implements Comparable> } @Override - public final int compareTo(@NonNull CommandArgument o) { + public final int compareTo(@NonNull final CommandArgument o) { if (this instanceof StaticArgument) { if (o instanceof StaticArgument) { return (this.getName().compareTo(o.getName())); @@ -474,7 +474,7 @@ public class CommandArgument implements Comparable> return this.defaultValue; } - protected final @NonNull BiFunction<@NonNull CommandContext,@NonNull String, @NonNull List> + protected final @NonNull BiFunction<@NonNull CommandContext, @NonNull String, @NonNull List> getSuggestionsProvider() { return this.suggestionsProvider; } diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/compound/ArgumentPair.java b/cloud-core/src/main/java/cloud/commandframework/arguments/compound/ArgumentPair.java index eeff8505..1efc24c8 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/compound/ArgumentPair.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/compound/ArgumentPair.java @@ -1,7 +1,7 @@ // // MIT License // -// Copyright (c) 2020 Alexander Söderberg +// Copyright (c) 2020 Alexander Söderberg & Contributors // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/compound/ArgumentTriplet.java b/cloud-core/src/main/java/cloud/commandframework/arguments/compound/ArgumentTriplet.java index 73a7de1d..1f00e72b 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/compound/ArgumentTriplet.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/compound/ArgumentTriplet.java @@ -1,7 +1,7 @@ // // MIT License // -// Copyright (c) 2020 Alexander Söderberg +// Copyright (c) 2020 Alexander Söderberg & Contributors // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -134,7 +134,7 @@ public class ArgumentTriplet extends CompoundArgument> simple() { + @NonNull W, Triplet> simple() { return new ArgumentTriplet<>(this.required, this.name, this.names, diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/compound/CompoundArgument.java b/cloud-core/src/main/java/cloud/commandframework/arguments/compound/CompoundArgument.java index 76d16e56..79b29f33 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/compound/CompoundArgument.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/compound/CompoundArgument.java @@ -1,7 +1,7 @@ // // MIT License // -// Copyright (c) 2020 Alexander Söderberg +// Copyright (c) 2020 Alexander Söderberg & Contributors // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/compound/package-info.java b/cloud-core/src/main/java/cloud/commandframework/arguments/compound/package-info.java index 1a2f7ac7..0014f429 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/compound/package-info.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/compound/package-info.java @@ -1,7 +1,7 @@ // // MIT License // -// Copyright (c) 2020 Alexander Söderberg +// Copyright (c) 2020 Alexander Söderberg & Contributors // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/standard/StringArgument.java b/cloud-core/src/main/java/cloud/commandframework/arguments/standard/StringArgument.java index 42df178e..1793231b 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/standard/StringArgument.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/standard/StringArgument.java @@ -119,7 +119,7 @@ public final class StringArgument extends CommandArgument { * @return Created argument */ public static @NonNull CommandArgument optional(@NonNull final String name, - @NonNull String defaultString) { + @NonNull final String defaultString) { return StringArgument.newBuilder(name).asOptionalWithDefault(defaultString).build(); } diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/standard/UUIDArgument.java b/cloud-core/src/main/java/cloud/commandframework/arguments/standard/UUIDArgument.java index 0520c8d8..46c24a8e 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/standard/UUIDArgument.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/standard/UUIDArgument.java @@ -1,7 +1,7 @@ // // MIT License // -// Copyright (c) 2020 Alexander Söderberg +// Copyright (c) 2020 Alexander Söderberg & Contributors // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal diff --git a/cloud-core/src/main/java/cloud/commandframework/types/tuples/Triplet.java b/cloud-core/src/main/java/cloud/commandframework/types/tuples/Triplet.java index fb280e7d..d7e70a68 100644 --- a/cloud-core/src/main/java/cloud/commandframework/types/tuples/Triplet.java +++ b/cloud-core/src/main/java/cloud/commandframework/types/tuples/Triplet.java @@ -70,7 +70,7 @@ public class Triplet implements Tuple { * * @return First value */ - public final @NonNull U getFirst() { + public final U getFirst() { return this.first; } @@ -79,7 +79,7 @@ public class Triplet implements Tuple { * * @return Second value */ - public final @NonNull V getSecond() { + public final V getSecond() { return this.second; } @@ -88,7 +88,7 @@ public class Triplet implements Tuple { * * @return Third value */ - public final @NonNull W getThird() { + public final W getThird() { return this.third; } diff --git a/cloud-core/src/test/java/cloud/commandframework/CommandPermissionTest.java b/cloud-core/src/test/java/cloud/commandframework/CommandPermissionTest.java index 1b105bdd..6005ba03 100644 --- a/cloud-core/src/test/java/cloud/commandframework/CommandPermissionTest.java +++ b/cloud-core/src/test/java/cloud/commandframework/CommandPermissionTest.java @@ -30,8 +30,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import javax.annotation.Nonnull; - class CommandPermissionTest { private final static CommandManager manager = new PermissionOutputtingCommandManager(); @@ -59,12 +57,11 @@ class CommandPermissionTest { } @Override - public boolean hasPermission(@Nonnull final TestCommandSender sender, - @Nonnull final String permission) { + public boolean hasPermission(final TestCommandSender sender, + final String permission) { return acceptOne && permission.equalsIgnoreCase("test.permission.four"); } - @Nonnull @Override public CommandMeta createDefaultCommandMeta() { return SimpleCommandMeta.empty(); diff --git a/cloud-core/src/test/java/cloud/commandframework/CommandPostProcessorTest.java b/cloud-core/src/test/java/cloud/commandframework/CommandPostProcessorTest.java index d5ea1b4b..6ab82b72 100644 --- a/cloud-core/src/test/java/cloud/commandframework/CommandPostProcessorTest.java +++ b/cloud-core/src/test/java/cloud/commandframework/CommandPostProcessorTest.java @@ -31,8 +31,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import javax.annotation.Nonnull; - public class CommandPostProcessorTest { private static CommandManager manager; @@ -56,7 +54,7 @@ public class CommandPostProcessorTest { static final class SamplePostprocessor implements CommandPostprocessor { @Override - public void accept(@Nonnull final CommandPostprocessingContext context) { + public void accept(final CommandPostprocessingContext context) { ConsumerService.interrupt(); } diff --git a/cloud-core/src/test/java/cloud/commandframework/CommandPreProcessorTest.java b/cloud-core/src/test/java/cloud/commandframework/CommandPreProcessorTest.java index 2d503780..d39ac14e 100644 --- a/cloud-core/src/test/java/cloud/commandframework/CommandPreProcessorTest.java +++ b/cloud-core/src/test/java/cloud/commandframework/CommandPreProcessorTest.java @@ -32,8 +32,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import javax.annotation.Nonnull; - public class CommandPreProcessorTest { private static CommandManager manager; @@ -72,7 +70,7 @@ public class CommandPreProcessorTest { static final class SamplePreprocessor implements CommandPreprocessor { @Override - public void accept(@Nonnull final CommandPreprocessingContext context) { + public void accept(final CommandPreprocessingContext context) { try { final int num = Integer.parseInt(context.getInputQueue().removeFirst()); context.getCommandContext().store("int", num); diff --git a/cloud-core/src/test/java/cloud/commandframework/TestCommandManager.java b/cloud-core/src/test/java/cloud/commandframework/TestCommandManager.java index 8446a76c..e394c45d 100644 --- a/cloud-core/src/test/java/cloud/commandframework/TestCommandManager.java +++ b/cloud-core/src/test/java/cloud/commandframework/TestCommandManager.java @@ -27,8 +27,6 @@ import cloud.commandframework.execution.CommandExecutionCoordinator; import cloud.commandframework.internal.CommandRegistrationHandler; import cloud.commandframework.meta.SimpleCommandMeta; -import javax.annotation.Nonnull; - public class TestCommandManager extends CommandManager { /** @@ -38,15 +36,14 @@ public class TestCommandManager extends CommandManager { super(CommandExecutionCoordinator.simpleCoordinator(), CommandRegistrationHandler.nullCommandRegistrationHandler()); } - @Nonnull + @Override public final SimpleCommandMeta createDefaultCommandMeta() { return SimpleCommandMeta.empty(); } @Override - public final boolean hasPermission(@Nonnull final TestCommandSender sender, - @Nonnull final String permission) { + public final boolean hasPermission(final TestCommandSender sender, final String permission) { System.out.printf("Testing permission: %s\n", permission); return !permission.equalsIgnoreCase("no"); } diff --git a/cloud-minecraft/cloud-bukkit-test/src/main/java/cloud/commandframework/BukkitTest.java b/cloud-minecraft/cloud-bukkit-test/src/main/java/cloud/commandframework/BukkitTest.java index 0c8bbf58..eaf9bfa1 100644 --- a/cloud-minecraft/cloud-bukkit-test/src/main/java/cloud/commandframework/BukkitTest.java +++ b/cloud-minecraft/cloud-bukkit-test/src/main/java/cloud/commandframework/BukkitTest.java @@ -49,7 +49,7 @@ import cloud.commandframework.extra.confirmation.CommandConfirmationManager; import cloud.commandframework.meta.SimpleCommandMeta; import cloud.commandframework.paper.PaperCommandManager; import cloud.commandframework.types.tuples.Triplet; -import com.google.common.reflect.TypeToken; +import io.leangen.geantyref.TypeToken; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -61,8 +61,8 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.util.Vector; +import org.checkerframework.checker.nullness.qual.NonNull; -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -152,8 +152,8 @@ public final class BukkitTest extends JavaPlugin { }) .build()) .command(mgr.commandBuilder("uuidtest") - .handler(c -> c.getSender().sendMessage("Hey yo dum, provide a UUID idiot. Thx!")) - .build()) + .handler(c -> c.getSender().sendMessage("Hey yo dum, provide a UUID idiot. Thx!")) + .build()) .command(mgr.commandBuilder("uuidtest") .argument(UUID.class, "uuid", builder -> builder .asRequired() @@ -200,8 +200,10 @@ public final class BukkitTest extends JavaPlugin { .argument(StringArgument.required("string")) .handler(c -> c.getSender().sendMessage("Executed the command")) .build()) - .command(mgr.commandBuilder("annotationass").handler(c -> c.getSender() - .sendMessage(ChatColor.YELLOW + "Du e en ananas!")).build()) + .command(mgr.commandBuilder("annotationass") + .handler(c -> c.getSender() + .sendMessage(ChatColor.YELLOW + "Du e en ananas!")) + .build()) .command(mgr.commandBuilder("cloud") .literal("confirm") .handler(confirmationManager.createConfirmationExecutionHandler()).build()) @@ -220,33 +222,33 @@ public final class BukkitTest extends JavaPlugin { } } -private void registerTeleportCommand(@Nonnull final BukkitCommandManager manager) { - manager.command(mgr.commandBuilder("teleport") - .meta("description", "Takes in a location and teleports the player there") - .withSenderType(Player.class) - .argument(WorldArgument.required("world"), Description.of("World name")) - .argumentTriplet("coords", - TypeToken.of(Vector.class), - Triplet.of("x", "y", "z"), - Triplet.of(Double.class, Double.class, Double.class), - triplet -> new Vector(triplet.getFirst(), triplet.getSecond(), triplet.getThird()), - Description.of("Coordinates")) - .handler(context -> { - context.getSender().sendMessage(ChatColor.GOLD + "Teleporting!"); - Bukkit.getScheduler().runTask(this, () -> { - final World world = context.getRequired("world"); - final Vector vector = context.getRequired("coords"); - ((Player) context.getSender()).teleport(vector.toLocation(world)); - }); - }) - .build()); -} + private void registerTeleportCommand(@NonNull final BukkitCommandManager manager) { + manager.command(mgr.commandBuilder("teleport") + .meta("description", "Takes in a location and teleports the player there") + .withSenderType(Player.class) + .argument(WorldArgument.required("world"), Description.of("World name")) + .argumentTriplet("coords", + TypeToken.get(Vector.class), + Triplet.of("x", "y", "z"), + Triplet.of(Double.class, Double.class, Double.class), + triplet -> new Vector(triplet.getFirst(), triplet.getSecond(), triplet.getThird()), + Description.of("Coordinates")) + .handler(context -> { + context.getSender().sendMessage(ChatColor.GOLD + "Teleporting!"); + Bukkit.getScheduler().runTask(this, () -> { + final World world = context.getRequired("world"); + final Vector vector = context.getRequired("coords"); + ((Player) context.getSender()).teleport(vector.toLocation(world)); + }); + }) + .build()); + } @CommandDescription("Test cloud command using @CommandMethod") @CommandMethod(value = "annotation|a [number]", permission = "some.permission.node") - private void annotatedCommand(@Nonnull final Player player, + private void annotatedCommand(@NonNull final Player player, @Argument(value = "input", description = "Some string") @Completions("one,two,duck") - @Nonnull final String input, + @NonNull final String input, @Argument(value = "number", defaultValue = "5", description = "A number") @Range(min = "10", max = "100") final int number) { player.sendMessage(ChatColor.GOLD + "Your input was: " + ChatColor.AQUA + input + ChatColor.GREEN + " (" + number + ")"); @@ -265,8 +267,7 @@ private void registerTeleportCommand(@Nonnull final BukkitCommandManager implements CommandRegistrationHandler { } @Override - public boolean registerCommand(@Nonnull final Command command) { + public boolean registerCommand(@NonNull final Command command) { /* We only care about the root command argument */ final CommandArgument commandArgument = command.getArguments().get(0); if (this.registeredCommands.containsKey(commandArgument)) { @@ -111,9 +111,9 @@ class BukkitPluginRegistrationHandler implements CommandRegistrationHandler { return true; } - protected void registerExternal(@Nonnull final String label, - @Nonnull final Command command, - @Nonnull final BukkitCommand bukkitCommand) { + protected void registerExternal(@NonNull final String label, + @NonNull final Command command, + @NonNull final BukkitCommand bukkitCommand) { } } diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudCommodoreManager.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudCommodoreManager.java index 9f1532fd..faad04da 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudCommodoreManager.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/CloudCommodoreManager.java @@ -30,8 +30,7 @@ import com.mojang.brigadier.tree.LiteralCommandNode; import me.lucko.commodore.Commodore; import me.lucko.commodore.CommodoreProvider; import org.bukkit.Bukkit; - -import javax.annotation.Nonnull; +import org.checkerframework.checker.nullness.qual.NonNull; @SuppressWarnings("ALL") class CloudCommodoreManager extends BukkitPluginRegistrationHandler { @@ -40,7 +39,7 @@ class CloudCommodoreManager extends BukkitPluginRegistrationHandler { private final CloudBrigadierManager brigadierManager; private final Commodore commodore; - CloudCommodoreManager(@Nonnull final BukkitCommandManager commandManager) + CloudCommodoreManager(@NonNull final BukkitCommandManager commandManager) throws BukkitCommandManager.BrigadierFailureException { if (!CommodoreProvider.isSupported()) { throw new BukkitCommandManager.BrigadierFailureException(BukkitCommandManager @@ -53,9 +52,9 @@ class CloudCommodoreManager extends BukkitPluginRegistrationHandler { } @Override - protected void registerExternal(@Nonnull final String label, - @Nonnull final Command command, - @Nonnull final BukkitCommand bukkitCommand) { + protected void registerExternal(@NonNull final String label, + @NonNull final Command command, + @NonNull final BukkitCommand bukkitCommand) { final com.mojang.brigadier.Command cmd = o -> 1; final LiteralCommandNode literalCommandNode = this.brigadierManager .createLiteralCommandNode(label, command, (o, p) -> true, cmd); diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/MaterialArgument.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/MaterialArgument.java index 1c223868..f0c94032 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/MaterialArgument.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/MaterialArgument.java @@ -23,14 +23,14 @@ // package cloud.commandframework.bukkit.parsers; -import cloud.commandframework.arguments.parser.ArgumentParser; import cloud.commandframework.arguments.CommandArgument; import cloud.commandframework.arguments.parser.ArgumentParseResult; +import cloud.commandframework.arguments.parser.ArgumentParser; import cloud.commandframework.context.CommandContext; import org.bukkit.Material; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.util.EnumSet; import java.util.List; import java.util.Queue; @@ -45,9 +45,10 @@ import java.util.stream.Collectors; public class MaterialArgument extends CommandArgument { protected MaterialArgument(final boolean required, - @Nonnull final String name, - @Nonnull final String defaultValue, - @Nullable final BiFunction, String, List> suggestionsProvider) { + @NonNull final String name, + @NonNull final String defaultValue, + @Nullable final BiFunction<@NonNull CommandContext, @NonNull String, + @NonNull List<@NonNull String>> suggestionsProvider) { super(required, name, new MaterialParser<>(), defaultValue, Material.class, suggestionsProvider); } @@ -58,8 +59,7 @@ public class MaterialArgument extends CommandArgument { * @param Command sender type * @return Created builder */ - @Nonnull - public static MaterialArgument.Builder newBuilder(@Nonnull final String name) { + public static MaterialArgument.@NonNull Builder newBuilder(@NonNull final String name) { return new MaterialArgument.Builder<>(name); } @@ -70,8 +70,7 @@ public class MaterialArgument extends CommandArgument { * @param Command sender type * @return Created argument */ - @Nonnull - public static CommandArgument required(@Nonnull final String name) { + public static @NonNull CommandArgument required(@NonNull final String name) { return MaterialArgument.newBuilder(name).asRequired().build(); } @@ -82,8 +81,7 @@ public class MaterialArgument extends CommandArgument { * @param Command sender type * @return Created argument */ - @Nonnull - public static CommandArgument optional(@Nonnull final String name) { + public static @NonNull CommandArgument optional(@NonNull final String name) { return MaterialArgument.newBuilder(name).asOptional().build(); } @@ -95,15 +93,14 @@ public class MaterialArgument extends CommandArgument { * @param Command sender type * @return Created argument */ - @Nonnull - public static CommandArgument optional(@Nonnull final String name, - @Nonnull final Material material) { + public static @NonNull CommandArgument optional(@NonNull final String name, + @NonNull final Material material) { return MaterialArgument.newBuilder(name).asOptionalWithDefault(material.name().toLowerCase()).build(); } public static final class Builder extends CommandArgument.Builder { - protected Builder(@Nonnull final String name) { + protected Builder(@NonNull final String name) { super(Material.class, name); } @@ -112,10 +109,9 @@ public class MaterialArgument extends CommandArgument { public static final class MaterialParser implements ArgumentParser { - @Nonnull @Override - public ArgumentParseResult parse(@Nonnull final CommandContext commandContext, - @Nonnull final Queue inputQueue) { + public @NonNull ArgumentParseResult parse(@NonNull final CommandContext commandContext, + @NonNull final Queue<@NonNull String> inputQueue) { final String input = inputQueue.peek(); if (input == null) { return ArgumentParseResult.failure(new NullPointerException("No input was provided")); @@ -142,7 +138,7 @@ public class MaterialArgument extends CommandArgument { * * @param input Input */ - public MaterialParseException(@Nonnull final String input) { + public MaterialParseException(@NonNull final String input) { this.input = input; } @@ -151,8 +147,7 @@ public class MaterialArgument extends CommandArgument { * * @return Input */ - @Nonnull - public String getInput() { + public @NonNull String getInput() { return this.input; } diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/OfflinePlayerArgument.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/OfflinePlayerArgument.java index a3289df0..fd7dd99a 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/OfflinePlayerArgument.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/OfflinePlayerArgument.java @@ -1,7 +1,7 @@ // // MIT License // -// Copyright (c) 2020 Alexander Söderberg +// Copyright (c) 2020 Alexander Söderberg & Contributors // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -30,20 +30,30 @@ import cloud.commandframework.context.CommandContext; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; import java.util.Queue; import java.util.function.BiFunction; +/** + * Argument type that parses into {@link OfflinePlayer}. This is not thread safe. This + * may also result in a blocking request to get the UUID for the offline player. + *

+ * Avoid using this type if possible. + * + * @param Command sender type + */ @SuppressWarnings("unused") public final class OfflinePlayerArgument extends CommandArgument { + private OfflinePlayerArgument(final boolean required, - @Nonnull final String name, - @Nonnull final String defaultValue, - @Nullable final BiFunction, String, List> suggestionsProvider) { + @NonNull final String name, + @NonNull final String defaultValue, + @Nullable final BiFunction<@NonNull CommandContext, @NonNull String, + @NonNull List<@NonNull String>> suggestionsProvider) { super(required, name, new OfflinePlayerParser<>(), defaultValue, OfflinePlayer.class, suggestionsProvider); } @@ -54,8 +64,7 @@ public final class OfflinePlayerArgument extends CommandArgument Command sender type * @return Created builder */ - @Nonnull - public static Builder newBuilder(@Nonnull final String name) { + public static @NonNull Builder newBuilder(@NonNull final String name) { return new Builder<>(name); } @@ -66,8 +75,7 @@ public final class OfflinePlayerArgument extends CommandArgument Command sender type * @return Created component */ - @Nonnull - public static CommandArgument required(@Nonnull final String name) { + public static @NonNull CommandArgument required(@NonNull final String name) { return OfflinePlayerArgument.newBuilder(name).asRequired().build(); } @@ -78,29 +86,27 @@ public final class OfflinePlayerArgument extends CommandArgument Command sender type * @return Created component */ - @Nonnull - public static CommandArgument optional(@Nonnull final String name) { + public static @NonNull CommandArgument optional(@NonNull final String name) { return OfflinePlayerArgument.newBuilder(name).asOptional().build(); } /** * Create a new required command component with a default value * - * @param name Component name - * @param defaultNum Default num - * @param Command sender type + * @param name Component name + * @param defaultPlayer Default player + * @param Command sender type * @return Created component */ - @Nonnull - public static CommandArgument optional(@Nonnull final String name, - final String defaultNum) { - return OfflinePlayerArgument.newBuilder(name).asOptionalWithDefault(defaultNum).build(); + public static @NonNull CommandArgument optional(@NonNull final String name, + @NonNull final String defaultPlayer) { + return OfflinePlayerArgument.newBuilder(name).asOptionalWithDefault(defaultPlayer).build(); } public static final class Builder extends CommandArgument.Builder { - protected Builder(@Nonnull final String name) { + protected Builder(@NonNull final String name) { super(OfflinePlayer.class, name); } @@ -109,9 +115,8 @@ public final class OfflinePlayerArgument extends CommandArgument build() { + public @NonNull OfflinePlayerArgument build() { return new OfflinePlayerArgument<>(this.isRequired(), this.getName(), this.getDefaultValue(), this.getSuggestionsProvider()); } @@ -121,10 +126,9 @@ public final class OfflinePlayerArgument extends CommandArgument implements ArgumentParser { - @Nonnull @Override - public ArgumentParseResult parse(@Nonnull final CommandContext commandContext, - @Nonnull final Queue inputQueue) { + public @NonNull ArgumentParseResult parse(@NonNull final CommandContext commandContext, + @NonNull final Queue inputQueue) { final String input = inputQueue.peek(); if (input == null) { return ArgumentParseResult.failure(new NullPointerException("No input was provided")); @@ -141,10 +145,9 @@ public final class OfflinePlayerArgument extends CommandArgument suggestions(@Nonnull final CommandContext commandContext, - @Nonnull final String input) { + public @NonNull List<@NonNull String> suggestions(@NonNull final CommandContext commandContext, + @NonNull final String input) { List output = new ArrayList<>(); for (Player player : Bukkit.getOnlinePlayers()) { @@ -168,7 +171,7 @@ public final class OfflinePlayerArgument extends CommandArgument extends CommandArgument Command sender type + */ @SuppressWarnings("unused") public final class PlayerArgument extends CommandArgument { + private PlayerArgument(final boolean required, - @Nonnull final String name, - @Nonnull final String defaultValue, - @Nullable final BiFunction, String, List> suggestionsProvider) { + @NonNull final String name, + @NonNull final String defaultValue, + @Nullable final BiFunction<@NonNull CommandContext, @NonNull String, + @NonNull List<@NonNull String>> suggestionsProvider) { super(required, name, new PlayerParser<>(), defaultValue, Player.class, suggestionsProvider); } @@ -53,8 +60,7 @@ public final class PlayerArgument extends CommandArgument { * @param Command sender type * @return Created builder */ - @Nonnull - public static Builder newBuilder(@Nonnull final String name) { + public static @NonNull Builder newBuilder(@NonNull final String name) { return new Builder<>(name); } @@ -65,8 +71,7 @@ public final class PlayerArgument extends CommandArgument { * @param Command sender type * @return Created component */ - @Nonnull - public static CommandArgument required(@Nonnull final String name) { + public static @NonNull CommandArgument required(@NonNull final String name) { return PlayerArgument.newBuilder(name).asRequired().build(); } @@ -77,29 +82,27 @@ public final class PlayerArgument extends CommandArgument { * @param Command sender type * @return Created component */ - @Nonnull - public static CommandArgument optional(@Nonnull final String name) { + public static @NonNull CommandArgument optional(@NonNull final String name) { return PlayerArgument.newBuilder(name).asOptional().build(); } /** * Create a new required command component with a default value * - * @param name Component name - * @param defaultNum Default num - * @param Command sender type + * @param name Component name + * @param defaultPlayer Default player + * @param Command sender type * @return Created component */ - @Nonnull - public static CommandArgument optional(@Nonnull final String name, - final String defaultNum) { - return PlayerArgument.newBuilder(name).asOptionalWithDefault(defaultNum).build(); + public static @NonNull CommandArgument optional(@NonNull final String name, + @NonNull final String defaultPlayer) { + return PlayerArgument.newBuilder(name).asOptionalWithDefault(defaultPlayer).build(); } public static final class Builder extends CommandArgument.Builder { - protected Builder(@Nonnull final String name) { + protected Builder(@NonNull final String name) { super(Player.class, name); } @@ -108,9 +111,8 @@ public final class PlayerArgument extends CommandArgument { * * @return Constructed component */ - @Nonnull @Override - public PlayerArgument build() { + public @NonNull PlayerArgument build() { return new PlayerArgument<>(this.isRequired(), this.getName(), this.getDefaultValue(), this.getSuggestionsProvider()); } @@ -119,10 +121,9 @@ public final class PlayerArgument extends CommandArgument { private static final class PlayerParser implements ArgumentParser { - @Nonnull @Override - public ArgumentParseResult parse(@Nonnull final CommandContext commandContext, - @Nonnull final Queue inputQueue) { + public @NonNull ArgumentParseResult parse(@NonNull final CommandContext commandContext, + @NonNull final Queue<@NonNull String> inputQueue) { final String input = inputQueue.peek(); if (input == null) { return ArgumentParseResult.failure(new NullPointerException("No input was provided")); @@ -139,10 +140,9 @@ public final class PlayerArgument extends CommandArgument { return ArgumentParseResult.success(player); } - @Nonnull @Override - public List suggestions(@Nonnull final CommandContext commandContext, - @Nonnull final String input) { + public @NonNull List<@NonNull String> suggestions(@NonNull final CommandContext commandContext, + @NonNull final String input) { List output = new ArrayList<>(); for (Player player : Bukkit.getOnlinePlayers()) { @@ -166,7 +166,7 @@ public final class PlayerArgument extends CommandArgument { * * @param input String input */ - public PlayerParseException(@Nonnull final String input) { + public PlayerParseException(@NonNull final String input) { this.input = input; } @@ -175,7 +175,7 @@ public final class PlayerArgument extends CommandArgument { * * @return String value */ - public String getInput() { + public @NonNull String getInput() { return input; } diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/WorldArgument.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/WorldArgument.java index 63dae90e..57d07650 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/WorldArgument.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/WorldArgument.java @@ -29,9 +29,9 @@ import cloud.commandframework.arguments.parser.ArgumentParser; import cloud.commandframework.context.CommandContext; import org.bukkit.Bukkit; import org.bukkit.World; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.util.List; import java.util.Queue; import java.util.function.BiFunction; @@ -45,8 +45,8 @@ import java.util.stream.Collectors; public class WorldArgument extends CommandArgument { protected WorldArgument(final boolean required, - @Nonnull final String name, - @Nonnull final String defaultValue, + @NonNull final String name, + @NonNull final String defaultValue, @Nullable final BiFunction, String, List> suggestionsProvider) { super(required, name, new WorldParser<>(), defaultValue, World.class, suggestionsProvider); } @@ -58,8 +58,7 @@ public class WorldArgument extends CommandArgument { * @param Command sender type * @return Created builder */ - @Nonnull - public static CommandArgument.Builder newBuilder(@Nonnull final String name) { + public static CommandArgument.@NonNull Builder newBuilder(@NonNull final String name) { return new WorldArgument.Builder<>(name); } @@ -70,8 +69,7 @@ public class WorldArgument extends CommandArgument { * @param Command sender type * @return Created argument */ - @Nonnull - public static CommandArgument required(@Nonnull final String name) { + public static @NonNull CommandArgument required(@NonNull final String name) { return WorldArgument.newBuilder(name).asRequired().build(); } @@ -82,8 +80,7 @@ public class WorldArgument extends CommandArgument { * @param Command sender type * @return Created argument */ - @Nonnull - public static CommandArgument optional(@Nonnull final String name) { + public static @NonNull CommandArgument optional(@NonNull final String name) { return WorldArgument.newBuilder(name).asOptional().build(); } @@ -95,22 +92,20 @@ public class WorldArgument extends CommandArgument { * @param Command sender type * @return Created argument */ - @Nonnull - public static CommandArgument optional(@Nonnull final String name, - @Nonnull final String defaultValue) { + public static @NonNull CommandArgument optional(@NonNull final String name, + @NonNull final String defaultValue) { return WorldArgument.newBuilder(name).asOptionalWithDefault(defaultValue).build(); } public static final class Builder extends CommandArgument.Builder { - protected Builder(@Nonnull final String name) { + protected Builder(@NonNull final String name) { super(World.class, name); } - @Nonnull @Override - public CommandArgument build() { + public @NonNull CommandArgument build() { return new WorldArgument<>(this.isRequired(), this.getName(), this.getDefaultValue(), this.getSuggestionsProvider()); } } @@ -118,10 +113,9 @@ public class WorldArgument extends CommandArgument { public static final class WorldParser implements ArgumentParser { - @Nonnull @Override - public ArgumentParseResult parse(@Nonnull final CommandContext commandContext, - @Nonnull final Queue inputQueue) { + public @NonNull ArgumentParseResult parse(@NonNull final CommandContext commandContext, + @NonNull final Queue inputQueue) { final String input = inputQueue.peek(); if (input == null) { return ArgumentParseResult.failure(new NullPointerException("No input was provided")); @@ -136,9 +130,8 @@ public class WorldArgument extends CommandArgument { return ArgumentParseResult.success(world); } - @Nonnull @Override - public List suggestions(@Nonnull final CommandContext commandContext, @Nonnull final String input) { + public @NonNull List suggestions(@NonNull final CommandContext commandContext, @NonNull final String input) { return Bukkit.getWorlds().stream().map(World::getName).collect(Collectors.toList()); } @@ -154,7 +147,7 @@ public class WorldArgument extends CommandArgument { * * @param input Input */ - public WorldParseException(@Nonnull final String input) { + public WorldParseException(@NonNull final String input) { this.input = input; } @@ -163,7 +156,7 @@ public class WorldArgument extends CommandArgument { * * @return Input */ - public String getInput() { + public @NonNull String getInput() { return this.input; }