public void startCompletion(JTextField field) {
		if (!attachees.contains(field)) {
			throw new IllegalArgumentException("Given field is not attached");
		}
		Set<String> visited = new HashSet<>();
		while (true) {
			String before = getPrefix(field);
			if (!visited.add(before)) {
				return;
			}
			Collection<T> comp = model.computeCompletions(before);
			if (comp == null || comp.size() == 0) {
				return;
			}
			else if (comp.size() == 1) {
				T sel = comp.iterator().next();
				if (getCompletionCanDefault(sel)) {
					completionActivated(comp.iterator().next());
				}
				else {
					setCompletionListVisible(true);
					updateDisplayContents();
					return;
				}
			}
			else if (!isCompletionListVisible()) {
				setCompletionListVisible(true);
				updateDisplayContents();
				return;
			}
		}
	}
Starts the autocompleter on the given text field.

<p>
First, this repeatedly attempts auto-activation. When there are many suggestions, or when
auto-activation is prevented (see {@link #getCompletionCanDefault(Object)
getCompletionCanDefault(T)}), a list is displayed (usually below the caret) containing the
suggestions given the fields current contents. The list remains open until either the user
cancels it (usually via ESC) or the user activates a suggestion.

<p>
<b>NOTE:</b> The text field must already be attached.

@param field the field on which to start autocompletion.
Ghidra/Framework/Docking/src/main/java/docking/widgets/autocomplete/TextFieldAutocompleter.java