From f83de2a7032cd52035aac64b469ddbba8822487b Mon Sep 17 00:00:00 2001 From: Kenzie Togami Date: Thu, 8 Aug 2019 16:28:00 -0700 Subject: [PATCH] Fix bug with spaces at end of suggestions. --- .../sk89q/worldedit/internal/command/CommandUtil.java | 10 +++++++--- .../com/sk89q/worldedit/internal/util/Substring.java | 8 ++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/command/CommandUtil.java b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/command/CommandUtil.java index b259435a1..bdcd8e541 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/command/CommandUtil.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/command/CommandUtil.java @@ -70,14 +70,18 @@ public class CommandUtil { ); return suggestions.stream() // Re-map suggestions to only operate on the last non-quoted word - .map(CommandUtil::onlyOnLastQuotedWord) - .map(suggestion -> CommandUtil.suggestLast(lastArg, suggestion)) + .map(suggestion -> onlyOnLastQuotedWord(lastArg, suggestion)) + .map(suggestion -> suggestLast(lastArg, suggestion)) .filter(Optional::isPresent) .map(Optional::get) .collect(toList()); } - private static Substring onlyOnLastQuotedWord(Substring suggestion) { + private static Substring onlyOnLastQuotedWord(Substring lastArg, Substring suggestion) { + if (suggestion.getSubstring().startsWith(lastArg.getSubstring())) { + // This is already fine. + return suggestion; + } String substr = suggestion.getSubstring(); int sp = substr.lastIndexOf(' '); if (sp < 0) { diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/util/Substring.java b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/util/Substring.java index fa4049cda..0ffe91d71 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/util/Substring.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/util/Substring.java @@ -21,6 +21,8 @@ package com.sk89q.worldedit.internal.util; import java.util.Objects; +import static com.google.common.base.Preconditions.checkArgument; + /** * An explicit substring. Provides the range from which it was taken. */ @@ -31,7 +33,7 @@ public final class Substring { * a Substring. */ public static Substring from(String original, int start) { - return wrap(original.substring(start), start, original.length()); + return new Substring(original.substring(start), start, original.length()); } /** @@ -39,13 +41,15 @@ public final class Substring { * a Substring. */ public static Substring from(String original, int start, int end) { - return wrap(original.substring(start, end), start, end); + return new Substring(original.substring(start, end), start, end); } /** * Wrap the given parameters into a Substring instance. */ public static Substring wrap(String substring, int start, int end) { + checkArgument(0 <= start, "Start must be greater than or equal to zero"); + checkArgument(start <= end, "End must be greater than or equal to start"); return new Substring(substring, start, end); }