diff -r a659ccd1888d -r ddbd9744a3d5 src/jdk.internal.le/share/classes/jdk/internal/jline/console/completer/AggregateCompleter.java --- a/src/jdk.internal.le/share/classes/jdk/internal/jline/console/completer/AggregateCompleter.java Tue Dec 11 11:45:43 2018 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2002-2016, 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.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.LinkedList; -import java.util.List; - -import static jdk.internal.jline.internal.Preconditions.checkNotNull; - -/** - * Completer which contains multiple completers and aggregates them together. - * - * @author Jason Dillon - * @since 2.3 - */ -public class AggregateCompleter - implements Completer -{ - private final List completers = new ArrayList(); - - public AggregateCompleter() { - // empty - } - - /** - * Construct an AggregateCompleter with the given collection of completers. - * The completers will be used in the iteration order of the collection. - * - * @param completers the collection of completers - */ - public AggregateCompleter(final Collection completers) { - checkNotNull(completers); - this.completers.addAll(completers); - } - - /** - * Construct an AggregateCompleter with the given completers. - * The completers will be used in the order given. - * - * @param completers the completers - */ - public AggregateCompleter(final Completer... completers) { - this(Arrays.asList(completers)); - } - - /** - * Retrieve the collection of completers currently being aggregated. - * - * @return the aggregated completers - */ - public Collection getCompleters() { - return completers; - } - - /** - * Perform a completion operation across all aggregated completers. - * - * @see Completer#complete(String, int, java.util.List) - * @return the highest completion return value from all completers - */ - public int complete(final String buffer, final int cursor, final List candidates) { - // buffer could be null - checkNotNull(candidates); - - List completions = new ArrayList(completers.size()); - - // Run each completer, saving its completion results - int max = -1; - for (Completer completer : completers) { - Completion completion = new Completion(candidates); - completion.complete(completer, buffer, cursor); - - // Compute the max cursor position - max = Math.max(max, completion.cursor); - - completions.add(completion); - } - - // Append candidates from completions which have the same cursor position as max - for (Completion completion : completions) { - if (completion.cursor == max) { - candidates.addAll(completion.candidates); - } - } - - return max; - } - - /** - * @return a string representing the aggregated completers - */ - @Override - public String toString() { - return getClass().getSimpleName() + "{" + - "completers=" + completers + - '}'; - } - - private class Completion - { - public final List candidates; - - public int cursor; - - public Completion(final List candidates) { - checkNotNull(candidates); - this.candidates = new LinkedList(candidates); - } - - public void complete(final Completer completer, final String buffer, final int cursor) { - checkNotNull(completer); - this.cursor = completer.complete(buffer, cursor, candidates); - } - } -}