@Override
	@SuppressWarnings("fallthrough")
	public void addProposals(String dsl, CheckpointedStreamDefinitionException exception, CompletionKind kind, int detailLevel,
			List<String> proposals) {
		if ("".equals(dsl)) {
			switch (kind) {
				case module:
					// Add processors
					addAllModulesOfType(proposals, exception.getExpressionStringUntilCheckpoint(), processor);//NOSONAR
					// FALL THRU as composed modules can be either
					// source | processors - or -
					// processors | sink
				case stream:
					// Add sources
					addAllModulesOfType(proposals, exception.getExpressionStringUntilCheckpoint(), source);
					break;
				case job:
					// Add jobs
					addAllModulesOfType(proposals, exception.getExpressionStringUntilCheckpoint(), job);
					break;

				default:
					break;
			}
		} // There *was* some text, make sure it was a channel prefix
		else if (exception.getTokenPointer() > 0) {
			Assert.isTrue(exception.getTokens().get(exception.getTokenPointer() - 1).getKind() == TokenKind.GT);
			switch (kind) {
				case stream:
					addAllModulesOfType(proposals, dsl, processor);
					addAllModulesOfType(proposals, dsl, sink);
					break;
				case job:
				case module:
				default:
					break;
			}
		}

	}
Construct a new EmptyStartYieldsModulesRecoveryStrategy given the parser and ModuleDefinition repository.

@param parser the parser used to parse the text the partial module definition.
@param moduleRegistry the registry to use for looking up all modules of a given type.
spring-xd-dirt/src/main/java/org/springframework/xd/dirt/stream/completion/EmptyStartYieldsModulesRecoveryStrategy.java