--- /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;
+ }
+}