private boolean doCompleteOptionValue(InvocationProviders invocationProviders, AeshCompleteOperation completeOperation, ProcessedOption currentOption, ParsedWord.Status selectedWordStatus) { String value = currentOption.getLastValue(); //if value is null or ends with a separator if(value == null || currentOption.getEndsWithSeparator()) value = ""; if(currentOption.completer() != null && currentOption.hasValue() && currentOption.activator().isActivated(new ParsedCommand(parser.getProcessedCommand()))) { CompleterInvocation completions = invocationProviders.getCompleterProvider().enhanceCompleterInvocation( new CompleterData(completeOperation.getContext(), value, parser.getCommand())); currentOption.completer().complete(completions); completeOperation.addCompletionCandidatesTerminalString(completions.getCompleterValues()); verifyCompleteValue(completeOperation, completions, value, selectedWordStatus, currentOption); } //only try to complete default values if completer is null else if(currentOption.getDefaultValues().size() > 0) { CompleterInvocation completions = invocationProviders.getCompleterProvider().enhanceCompleterInvocation( new CompleterData(completeOperation.getContext(), value, parser.getCommand())); new DefaultValueOptionCompleter(currentOption.getDefaultValues()).complete(completions); completeOperation.addCompletionCandidatesTerminalString(completions.getCompleterValues()); verifyCompleteValue(completeOperation, completions, value, selectedWordStatus, currentOption); } else if(!currentOption.hasValue()) { completeOperation.doAppendSeparator(true); } return completeOperation.getCompletionCandidates().size() > 0; }