--- /dev/null 2015-04-26 06:51:08.003313989 -0700 +++ new/jdk/src/jdk.jline/share/classes/jdk/internal/jline/console/completer/StringsCompleter.java 2015-06-18 03:04:44.347661597 -0700 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2002-2012, the original author or authors. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + * + * http://www.opensource.org/licenses/bsd-license.php + */ +package jdk.internal.jline.console.completer; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; + +import static jdk.internal.jline.internal.Preconditions.checkNotNull; + +/** + * Completer for a set of strings. + * + * @author Jason Dillon + * @since 2.3 + */ +public class StringsCompleter + implements Completer +{ + private final SortedSet strings = new TreeSet(); + + public StringsCompleter() { + // empty + } + + public StringsCompleter(final Collection strings) { + checkNotNull(strings); + getStrings().addAll(strings); + } + + public StringsCompleter(final String... strings) { + this(Arrays.asList(strings)); + } + + public Collection getStrings() { + return strings; + } + + public int complete(final String buffer, final int cursor, final List candidates) { + // buffer could be null + checkNotNull(candidates); + + if (buffer == null) { + candidates.addAll(strings); + } + else { + for (String match : strings.tailSet(buffer)) { + if (!match.startsWith(buffer)) { + break; + } + + candidates.add(match); + } + } + + if (candidates.size() == 1) { + candidates.set(0, candidates.get(0) + " "); + } + + return candidates.isEmpty() ? -1 : 0; + } +}