diff --git a/src/de/steamwar/command/CommandPart.java b/src/de/steamwar/command/CommandPart.java index 926ad2a..b902892 100644 --- a/src/de/steamwar/command/CommandPart.java +++ b/src/de/steamwar/command/CommandPart.java @@ -165,7 +165,7 @@ class CommandPart { } private Collection tabCompletes(T sender, String[] args, List mappedArgs, int startIndex) { - return TabCompletionCache.tabComplete(sender, args[startIndex], (AbstractTypeMapper) typeMapper, command, () -> { + return TabCompletionCache.tabComplete(sender, args[startIndex], (AbstractTypeMapper) typeMapper, () -> { try { return typeMapper.tabCompletes(sender, new PreviousArguments(Arrays.copyOf(args, startIndex), mappedArgs.toArray()), args[startIndex]); } catch (Throwable e) { diff --git a/src/de/steamwar/command/TabCompletionCache.java b/src/de/steamwar/command/TabCompletionCache.java index 4e50a18..551ce19 100644 --- a/src/de/steamwar/command/TabCompletionCache.java +++ b/src/de/steamwar/command/TabCompletionCache.java @@ -57,22 +57,23 @@ public class TabCompletionCache { @AllArgsConstructor private static class TabCompletions { - private AbstractSWCommand command; private long timestamp; private Collection tabCompletions; } - Collection tabComplete(Object sender, String arg, AbstractTypeMapper typeMapper, AbstractSWCommand command, Supplier> tabCompleteSupplier) { + Collection tabComplete(Object sender, String arg, AbstractTypeMapper typeMapper, Supplier> tabCompleteSupplier) { if (!cached.contains(typeMapper)) return tabCompleteSupplier.get(); + String normalizedArg = typeMapper.normalize(sender, arg); if (normalizedArg == null) normalizedArg = ""; - Key key = global.contains(typeMapper) ? new Key(null, normalizedArg, typeMapper) : new Key(sender, normalizedArg, typeMapper); + Key key = new Key(global.contains(typeMapper) ? null : sender, normalizedArg, typeMapper); + TabCompletions tabCompletions = tabCompletionCache.computeIfAbsent(key, ignore -> { - return new TabCompletions(command, System.currentTimeMillis(), tabCompleteSupplier.get()); + return new TabCompletions(System.currentTimeMillis(), tabCompleteSupplier.get()); }); - if (tabCompletions.command != command || System.currentTimeMillis() - tabCompletions.timestamp > cacheDuration.get(typeMapper)) { - tabCompletions = new TabCompletions(command, System.currentTimeMillis(), tabCompleteSupplier.get()); - tabCompletionCache.put(key, tabCompletions); + + if (System.currentTimeMillis() - tabCompletions.timestamp > cacheDuration.get(typeMapper)) { + tabCompletions.tabCompletions = tabCompleteSupplier.get(); } tabCompletions.timestamp = System.currentTimeMillis(); return tabCompletions.tabCompletions;