From 418bbd6fd9d5675e1dfba0e00818bba4f373c520 Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 18 Jul 2017 21:43:32 -0400 Subject: [PATCH] Use generics on manager to understand impl types Slight risk of API breakage but risk is minimal enough that I'm not bumping versions. 0.5.0 Migration guide suggested (Platform)CommandManager, which will set the generics for you. Only if you stored the ref as the Abstract CommandManager would you now run into generic issues. Also, cleaned up the sendMessage API's to not need Object now since we know the Generic type. This is technically an API break, but considering Locales was only released last night and the likelyhood someone overrode that method, is unlikey. If you did, just fix the method signature! Sorry <3 --- .../aikar/commands/BukkitCommandManager.java | 2 +- .../aikar/commands/BungeeCommandManager.java | 2 +- .../java/co/aikar/commands/BaseCommand.java | 2 +- .../co/aikar/commands/CommandManager.java | 29 +++++-------------- .../main/java/co/aikar/commands/Locales.java | 2 +- .../aikar/commands/SpongeCommandManager.java | 2 +- 6 files changed, 13 insertions(+), 26 deletions(-) diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java index cab82955..f645f704 100644 --- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java @@ -49,7 +49,7 @@ import java.util.logging.Level; import java.util.logging.Logger; @SuppressWarnings("WeakerAccess") -public class BukkitCommandManager extends CommandManager { +public class BukkitCommandManager extends CommandManager { @SuppressWarnings("WeakerAccess") protected final Plugin plugin; diff --git a/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java b/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java index 0a8b7a59..b3197d8d 100644 --- a/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java +++ b/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java @@ -38,7 +38,7 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; -public class BungeeCommandManager extends CommandManager { +public class BungeeCommandManager extends CommandManager { protected final Plugin plugin; protected Map registeredCommands = new HashMap<>(); diff --git a/core/src/main/java/co/aikar/commands/BaseCommand.java b/core/src/main/java/co/aikar/commands/BaseCommand.java index 01edac86..fff9d645 100644 --- a/core/src/main/java/co/aikar/commands/BaseCommand.java +++ b/core/src/main/java/co/aikar/commands/BaseCommand.java @@ -58,7 +58,7 @@ public abstract class BaseCommand { private String execSubcommand; @SuppressWarnings("WeakerAccess") private String[] origArgs; - CommandManager manager = null; + CommandManager manager = null; BaseCommand parentCommand; Map registeredCommands = new HashMap<>(); String description; diff --git a/core/src/main/java/co/aikar/commands/CommandManager.java b/core/src/main/java/co/aikar/commands/CommandManager.java index 633d3829..689a417c 100644 --- a/core/src/main/java/co/aikar/commands/CommandManager.java +++ b/core/src/main/java/co/aikar/commands/CommandManager.java @@ -23,7 +23,6 @@ package co.aikar.commands; -import co.aikar.locales.MessageKey; import co.aikar.locales.MessageKeyProvider; import com.google.common.collect.Sets; @@ -32,7 +31,7 @@ import java.lang.reflect.Parameter; import java.util.*; @SuppressWarnings("WeakerAccess") -public abstract class CommandManager { +public abstract class CommandManager > { /** * This is a stack incase a command calls a command @@ -42,20 +41,8 @@ public abstract class CommandManager { protected CommandReplacements replacements = new CommandReplacements(this); protected ExceptionHandler defaultExceptionHandler = null; protected Set supportedLanguages = Sets.newHashSet(Locale.ENGLISH); - protected Map formatters = new IdentityHashMap<>(); - protected MessageFormatter defaultFormatter; - { - MessageFormatter plain = new MessageFormatter() { - @Override - String format(Object color, String message) { - return message; - } - }; - defaultFormatter = plain; - formatters.put(MessageType.INFO, plain); - formatters.put(MessageType.SYNTAX, plain); - formatters.put(MessageType.ERROR, plain); - } + protected Map formatters = new IdentityHashMap<>(); + protected F defaultFormatter; public static CommandOperationContext getCurrentCommandOperationContext() { return commandOperationContext.get().peek(); @@ -93,6 +80,7 @@ public abstract class CommandManager { public abstract boolean hasRegisteredCommands(); public abstract boolean isCommandIssuer(Class type); + // TODO: Change this to I if we make a breaking change public abstract CommandIssuer getCommandIssuer(Object issuer); public abstract RootCommand createRootCommand(String cmd); @@ -166,13 +154,12 @@ public abstract class CommandManager { return result; } - public void sendMessage(Object issuerArg, MessageType type, MessageKeyProvider key, String... replacements) { - sendMessage(issuerArg, type, key.getMessageKey(), replacements); + public void sendMessage(I issuerArg, MessageType type, MessageKeyProvider key, String... replacements) { + sendMessage(getCommandIssuer(issuerArg), type, key, replacements); } - public void sendMessage(Object issuerArg, MessageType type, MessageKey key, String... replacements) { - CommandIssuer issuer = issuerArg instanceof CommandIssuer ? (CommandIssuer) issuerArg : getCommandIssuer(issuerArg); - String message = getLocales().getMessage(issuer, key); + public void sendMessage(CommandIssuer issuer, MessageType type, MessageKeyProvider key, String... replacements) { + String message = getLocales().getMessage(issuer, key.getMessageKey()); if (replacements.length > 0) { message = ACFUtil.replaceStrings(message, replacements); } diff --git a/core/src/main/java/co/aikar/commands/Locales.java b/core/src/main/java/co/aikar/commands/Locales.java index c698a524..bb987316 100644 --- a/core/src/main/java/co/aikar/commands/Locales.java +++ b/core/src/main/java/co/aikar/commands/Locales.java @@ -35,7 +35,7 @@ import java.util.Map; @SuppressWarnings("WeakerAccess") public class Locales { - private final CommandManager manager; + private final CommandManager manager; private final LocaleManager localeManager; private final SetMultimap loadedBundles = HashMultimap.create(); diff --git a/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java b/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java index f2f9de5d..90e95d37 100644 --- a/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java +++ b/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java @@ -40,7 +40,7 @@ import java.util.List; import java.util.Map; @SuppressWarnings("WeakerAccess") -public class SpongeCommandManager extends CommandManager { +public class SpongeCommandManager extends CommandManager { protected final PluginContainer plugin; protected Map registeredCommands = new HashMap<>();