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)) {