[autocomplete] 57/143: Completion choices are now grouped by relevance, not just sorted lexicographically.
Benjamin Mesing
ben at alioth.debian.org
Sat Oct 19 12:53:17 UTC 2013
This is an automated email from the git hooks/post-receive script.
ben pushed a commit to branch master
in repository autocomplete.
commit 5eeec487dc2f843169bebb4dabc771713454e7d9
Author: bobbylight <robert at fifesoft.com>
Date: Sat Dec 11 19:38:11 2010 +0000
Completion choices are now grouped by relevance, not just sorted lexicographically.
---
.../fife/ui/autocomplete/AbstractCompletion.java | 35 +++++++++++++++----
.../ui/autocomplete/AutoCompletePopupWindow.java | 1 +
src/org/fife/ui/autocomplete/AutoCompletion.java | 6 ++--
src/org/fife/ui/autocomplete/Completion.java | 29 +++++++++++++++-
.../ui/autocomplete/CompletionProviderBase.java | 36 ++++++++++++++++++++
5 files changed, 98 insertions(+), 9 deletions(-)
diff --git a/src/org/fife/ui/autocomplete/AbstractCompletion.java b/src/org/fife/ui/autocomplete/AbstractCompletion.java
index 7a9d36c..b657025 100644
--- a/src/org/fife/ui/autocomplete/AbstractCompletion.java
+++ b/src/org/fife/ui/autocomplete/AbstractCompletion.java
@@ -41,13 +41,21 @@ import javax.swing.text.JTextComponent;
* @author Robert Futrell
* @version 1.0
*/
-public abstract class AbstractCompletion implements Completion, Comparable {
+public abstract class AbstractCompletion implements Completion {
/**
* The provider that created this completion;
*/
private CompletionProvider provider;
+ /**
+ * The relevance of this completion. Completion instances with higher
+ * "relevance" values are inserted higher into the list of possible
+ * completions than those with lower values. Completion instances with
+ * equal relevance values are sorted alphabetically.
+ */
+ private int relevance;
+
/**
* Constructor.
@@ -60,11 +68,7 @@ public abstract class AbstractCompletion implements Completion, Comparable {
/**
- * Compares this completion to another one lexicographically, ignoring
- * case.
- *
- * @param o Another completion instance.
- * @return How this completion compares to the other one.
+ * {@inheritDoc}
*/
public int compareTo(Object o) {
if (o==this) {
@@ -108,6 +112,14 @@ public abstract class AbstractCompletion implements Completion, Comparable {
/**
+ * {@inheritDoc}
+ */
+ public int getRelevance() {
+ return relevance;
+ }
+
+
+ /**
* The default implementation returns <code>null</code>. Subclasses
* can override this method.
*
@@ -119,6 +131,17 @@ public abstract class AbstractCompletion implements Completion, Comparable {
/**
+ * Sets the relevance of this completion.
+ *
+ * @param relevance The new relevance of this completion.
+ * @see #getRelevance()
+ */
+ public void setRelevance(int relevance) {
+ this.relevance = relevance;
+ }
+
+
+ /**
* Returns a string representation of this completion. The default
* implementation returns {@link #getInputText()}.
*
diff --git a/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java b/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java
index daa2a7c..68a0952 100644
--- a/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java
+++ b/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java
@@ -760,6 +760,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
}
+
/**
* Updates the <tt>LookAndFeel</tt> of this window and the description
* window.
diff --git a/src/org/fife/ui/autocomplete/AutoCompletion.java b/src/org/fife/ui/autocomplete/AutoCompletion.java
index 0017db8..61ddba0 100644
--- a/src/org/fife/ui/autocomplete/AutoCompletion.java
+++ b/src/org/fife/ui/autocomplete/AutoCompletion.java
@@ -482,9 +482,11 @@ public class AutoCompletion {
/**
- * Hides the parameter tool tip, if it is visible.
+ * Hides the parameter tool tip and/or the parameter choices window, if
+ * either one is visible.
*
- * @return Whether the tool tip window was visible.
+ * @return Whether either of the two windows were visible (and thus
+ * hidden).
*/
private boolean hideToolTipWindow() {
if (descToolTip!=null) {
diff --git a/src/org/fife/ui/autocomplete/Completion.java b/src/org/fife/ui/autocomplete/Completion.java
index a5b9eb8..924dc80 100644
--- a/src/org/fife/ui/autocomplete/Completion.java
+++ b/src/org/fife/ui/autocomplete/Completion.java
@@ -49,7 +49,17 @@ import javax.swing.text.JTextComponent;
* @version 1.0
* @see AbstractCompletion
*/
-public interface Completion {
+public interface Completion extends Comparable {
+
+
+ /**
+ * Compares this completion to another one lexicographically, ignoring
+ * case.
+ *
+ * @param o Another completion instance.
+ * @return How this completion compares to the other one.
+ */
+ public int compareTo(Object o);
/**
@@ -88,6 +98,23 @@ public interface Completion {
/**
+ * Returns the "relevance" of this completion. This is used when sorting
+ * completions by their relevance. It is an abstract concept that may
+ * mean different things to different languages, and may depend on the
+ * context of the completion.<p>
+ *
+ * By default, all completions have a relevance of <code>0</code>. The
+ * higher the value returned by this method, the higher up in the list
+ * this completion will be; the lower the value returned, the lower it will
+ * be. <code>Completion</code>s with equal relevance values will be
+ * sorted alphabetically.
+ *
+ * @return The relevance of this completion.
+ */
+ public int getRelevance();
+
+
+ /**
* Returns the text to insert as the result of this auto-completion. This
* is the "complete" text, including any text that replaces what the user
* has already typed.
diff --git a/src/org/fife/ui/autocomplete/CompletionProviderBase.java b/src/org/fife/ui/autocomplete/CompletionProviderBase.java
index 9275755..7a8bcc7 100644
--- a/src/org/fife/ui/autocomplete/CompletionProviderBase.java
+++ b/src/org/fife/ui/autocomplete/CompletionProviderBase.java
@@ -23,6 +23,7 @@
package org.fife.ui.autocomplete;
import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import javax.swing.ListCellRenderer;
import javax.swing.text.BadLocationException;
@@ -85,6 +86,13 @@ public abstract class CompletionProviderBase implements CompletionProvider {
protected static final String EMPTY_STRING = "";
+ /**
+ * Comparator used to sort completions by their relevance before sorting
+ * them lexicographically.
+ */
+ private static final Comparator sortByRelevanceComparator =
+ new SortByRelevanceComparator();
+
/**
* {@inheritDoc}
@@ -99,12 +107,22 @@ public abstract class CompletionProviderBase implements CompletionProvider {
* {@inheritDoc}
*/
public List getCompletions(JTextComponent comp) {
+
List completions = getCompletionsImpl(comp);
if (parent!=null) {
completions.addAll(parent.getCompletions(comp));
Collections.sort(completions);
}
+
+ // NOTE: We can't sort by relevance prior to this; we need to have
+ // things alphabetical so we can easily narrow down completions to
+ // those starting with what was already typed.
+ if (/*sortByRelevance*/true) {
+ Collections.sort(completions, sortByRelevanceComparator);
+ }
+
return completions;
+
}
@@ -226,4 +244,22 @@ public abstract class CompletionProviderBase implements CompletionProvider {
}
+ /**
+ * Compares two <code>Completion</code>s by their relevance before
+ * sorting them lexicographically.
+ */
+ public static class SortByRelevanceComparator implements Comparator {
+
+ public int compare(Object o1, Object o2) {
+ Completion c1 = (Completion)o1;
+ Completion c2 = (Completion)o2;
+ int rel1 = c1.getRelevance();
+ int rel2 = c2.getRelevance();
+ int diff = rel2 - rel1;//rel1 - rel2;
+ return diff==0 ? c1.compareTo(c2) : diff;
+ }
+
+ }
+
+
}
\ No newline at end of file
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/autocomplete.git
More information about the pkg-java-commits
mailing list