@Override
	public void addProposals(String dsl, CheckpointedStreamDefinitionException exception, CompletionKind kind, int detailLevel,
			List<String> proposals) {
		String safe = exception.getExpressionStringUntilCheckpoint();
		List<ModuleDescriptor> parsed = parser.parse("__dummy", safe, toParsingContext(kind));

		// List is in reverse order
		ModuleDescriptor lastModule = parsed.get(0);
		String lastModuleName = lastModule.getModuleName();
		ModuleType lastModuleType = lastModule.getType();
		ModuleDefinition lastModuleDefinition = moduleRegistry.findDefinition(lastModuleName, lastModuleType);

		Set<String> alreadyPresentOptions = new HashSet<String>(lastModule.getParameters().keySet().size());
		// If we're providing completions for a composed module, some options
		// may already have a value appearing from the definition of the module itself, yet
		// the user *may* want to override them anyways. So pretend they're not there
		for (String optionName : lastModule.getParameters().keySet()) {
			if (!optionName.contains(CompositeModule.OPTION_SEPARATOR)) {
				alreadyPresentOptions.add(optionName);
			}
		}
		for (ModuleOption option : moduleOptionsMetadataResolver.resolve(lastModuleDefinition)) {
			if (shouldShowOption(option, detailLevel) && !alreadyPresentOptions.contains(option.getName())) {
				proposals.add(String.format("%s --%s=", safe, option.getName()));
			}
		}

	}
Construct a new ExpandOneDashToTwoDashesRecoveryStrategy given the parser,

@param parser the parser used to parse the text the partial module definition.
@param moduleRegistry the registry to check for the existence of the last entered module
       definition.
@param moduleOptionsMetadataResolver the metadata resolver to use in order to create a list of proposals for
       module options that have not yet been specified.
spring-xd-dirt/src/main/java/org/springframework/xd/dirt/stream/completion/OptionNameAfterDashDashRecoveryStrategy.java