From 1219ef1e4d18006cab59d574c646c8c80326f8ba Mon Sep 17 00:00:00 2001 From: bobbylight Date: Sun, 2 Aug 2026 21:29:11 -0400 Subject: [PATCH] fix: include first overload when searching for matching completions The backward search for sibling overloads in getCompletionsImpl() stopped at pos>0 instead of pos>=0, so the completion at index 0 of a matching group was never checked or added, even when it matched. Fixes #101 --- .../AbstractCompletionProvider.java | 2 +- .../AbstractCompletionProviderTest.java | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 AutoComplete/src/test/java/org/fife/ui/autocomplete/AbstractCompletionProviderTest.java diff --git a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AbstractCompletionProvider.java b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AbstractCompletionProvider.java index 5d3b8d6..0239f74 100644 --- a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AbstractCompletionProvider.java +++ b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AbstractCompletionProvider.java @@ -177,7 +177,7 @@ protected List getCompletionsImpl(JTextComponent comp) { // of one of those overloads, but we must return all of them, // so search backward until we find the first one. int pos = index - 1; - while (pos>0 && + while (pos>=0 && comparator.compare(completions.get(pos), text)==0) { retVal.add(completions.get(pos)); pos--; diff --git a/AutoComplete/src/test/java/org/fife/ui/autocomplete/AbstractCompletionProviderTest.java b/AutoComplete/src/test/java/org/fife/ui/autocomplete/AbstractCompletionProviderTest.java new file mode 100644 index 0000000..770308e --- /dev/null +++ b/AutoComplete/src/test/java/org/fife/ui/autocomplete/AbstractCompletionProviderTest.java @@ -0,0 +1,46 @@ +/* + * This library is distributed under a modified BSD license. See the included + * LICENSE.md file for details. + */ +package org.fife.ui.autocomplete; + +import javax.swing.JTextArea; +import java.util.List; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + + +class AbstractCompletionProviderTest { + + /** + * Regression test for https://github.com/bobbylight/AutoComplete/issues/101 - + * when several completions share the same input text (e.g. overloaded + * methods), the first one in the sorted completion list was never + * included in the returned results, due to an off-by-one error. + */ + @Test + void getCompletions_allOverloadsReturned_evenTheFirstOneInTheList() { + + DefaultCompletionProvider provider = new DefaultCompletionProvider(); + BasicCompletion overload1 = new BasicCompletion(provider, "get", "overload 1"); + BasicCompletion overload2 = new BasicCompletion(provider, "get", "overload 2"); + BasicCompletion overload3 = new BasicCompletion(provider, "get", "overload 3"); + provider.addCompletion(overload1); + provider.addCompletion(overload2); + provider.addCompletion(overload3); + + JTextArea textArea = new JTextArea("get"); + textArea.setCaretPosition(textArea.getText().length()); + + List completions = provider.getCompletions(textArea); + + Assertions.assertEquals(3, completions.size()); + Assertions.assertTrue(completions.contains(overload1)); + Assertions.assertTrue(completions.contains(overload2)); + Assertions.assertTrue(completions.contains(overload3)); + + } + + +}