if(currentOption.getCompleter() != null &&
currentOption.getActivator().isActivated(parser.getProcessedCommand())) {
CompleterInvocation completions =
invocationProviders.getCompleterProvider().enhanceCompleterInvocation(
new CompleterData(completeOperation.getAeshContext(), completeObject.getValue(), parser.getCommand()));
currentOption.getCompleter().complete(completions);
completeOperation.addCompletionCandidatesTerminalString(completions.getCompleterValues());
completeOperation.setOffset( completeOperation.getCursor() - completeObject.getOffset());
completeOperation.setIgnoreOffset(completions.doIgnoreOffset());
completeOperation.setIgnoreStartsWith(completions.isIgnoreStartsWith());
if(completions.getCompleterValues().size() == 1) {
//if the contain spaces we need to add the number of spaces to the size
// of the value.length since they are chopped off during parsing
if(completeObject.getValue().indexOf(Parser.SPACE_CHAR) > 0) {
completeOperation.setOffset( completeOperation.getCursor() -
(completeObject.getOffset() + Parser.findNumberOfSpacesInWord(completeObject.getValue())));
}
if(completeOperation.getCompletionCandidates().get(0).containSpaces())
completeOperation.getCompletionCandidates().get(0).switchSpacesToEscapedSpaces();
completeOperation.doAppendSeparator( completions.isAppendSpace());
}
}
//only try to complete default values if completer is null
else if(currentOption.getDefaultValues().size() > 0) {
CompleterInvocation completions =
invocationProviders.getCompleterProvider().enhanceCompleterInvocation(
new CompleterData(completeOperation.getAeshContext(), completeObject.getValue(), parser.getCommand()));
new DefaultValueOptionCompleter(currentOption.getDefaultValues()).complete(completions);
completeOperation.addCompletionCandidatesTerminalString(completions.getCompleterValues());
completeOperation.setOffset( completeOperation.getCursor() - completeObject.getOffset());
completeOperation.setIgnoreOffset(completions.doIgnoreOffset());
completeOperation.setIgnoreStartsWith(completions.isIgnoreStartsWith());
if(completions.getCompleterValues().size() == 1) {
//if the contain spaces we need to add the number of spaces to the size
// of the value.length since they are chopped off during parsing
if(completeObject.getValue().indexOf(Parser.SPACE_CHAR) > 0) {
completeOperation.setOffset( completeOperation.getCursor() -
(completeObject.getOffset() + Parser.findNumberOfSpacesInWord(completeObject.getValue())));
}
if(completeOperation.getCompletionCandidates().get(0).containSpaces())
completeOperation.getCompletionCandidates().get(0).switchSpacesToEscapedSpaces();
completeOperation.doAppendSeparator( completions.isAppendSpace());
}
}
}
else if(completeObject.isArgument()) {
String lastWord = Parser.findEscapedSpaceWordCloseToEnd(completeOperation.getBuffer());
String rest = completeOperation.getBuffer().substring(0, completeOperation.getBuffer().length() - lastWord.length());
try {
parser.getCommandPopulator().populateObject(parser.getCommand(), parser.parse(rest), invocationProviders,
completeOperation.getAeshContext(), false);
}
catch (CommandLineParserException | OptionValidatorException ignored) { }
if(parser.getProcessedCommand().getArgument() != null &&
parser.getProcessedCommand().getArgument().getCompleter() != null) {
CompleterInvocation completions =
invocationProviders.getCompleterProvider().enhanceCompleterInvocation(
new CompleterData(completeOperation.getAeshContext(), completeObject.getValue(), parser.getCommand()));
parser.getProcessedCommand().getArgument().getCompleter().complete(completions);
completeOperation.addCompletionCandidatesTerminalString(completions.getCompleterValues());
completeOperation.setOffset( completeOperation.getCursor() - completeObject.getOffset());
completeOperation.setIgnoreOffset(completions.doIgnoreOffset());
completeOperation.setIgnoreStartsWith(completions.isIgnoreStartsWith());
if(completions.getCompleterValues().size() == 1) {
if(completeObject.getValue().indexOf(Parser.SPACE_CHAR) > 0) {
completeOperation.setOffset( completeOperation.getCursor() -
(completeObject.getOffset() + Parser.findNumberOfSpacesInWord(completeObject.getValue())));
}
if(completeOperation.getCompletionCandidates().get(0).containSpaces())
completeOperation.getCompletionCandidates().get(0).switchSpacesToEscapedSpaces();
completeOperation.doAppendSeparator( completions.isAppendSpace());
}
}
else if(parser.getProcessedCommand().getArgument() != null &&
parser.getProcessedCommand().getArgument().getDefaultValues().size() > 0) {
CompleterInvocation completions =
invocationProviders.getCompleterProvider().enhanceCompleterInvocation(
new CompleterData(completeOperation.getAeshContext(), completeObject.getValue(), parser.getCommand()));
new DefaultValueOptionCompleter( parser.getProcessedCommand().getArgument().getDefaultValues()).complete(completions);
completeOperation.addCompletionCandidatesTerminalString(completions.getCompleterValues());
completeOperation.setOffset( completeOperation.getCursor() - completeObject.getOffset());
completeOperation.setIgnoreOffset(completions.doIgnoreOffset());
completeOperation.setIgnoreStartsWith(completions.isIgnoreStartsWith());