@VisibleForTesting public Iterable<String> generateSuggestions() { Parser parser = new Parser(metadata); ParseState state = parser.parse(arguments); Class<? extends Suggester> suggesterClass = BUILTIN_SUGGESTERS.get(state.getLocation()); if (suggesterClass != null) { SuggesterMetadata suggesterMetadata = MetadataLoader.loadSuggester(suggesterClass); if (suggesterMetadata != null) { ImmutableMap.Builder<Class<?>, Object> bindings = ImmutableMap.<Class<?>, Object>builder() .put(GlobalMetadata.class, metadata); if (state.getGroup() != null) { bindings.put(CommandGroupMetadata.class, state.getGroup()); } if (state.getCommand() != null) { bindings.put(CommandMetadata.class, state.getCommand()); } Suggester suggester = createInstance(suggesterMetadata.getSuggesterClass(), ImmutableList.<OptionMetadata>of(), null, null, null, suggesterMetadata.getMetadataInjections(), bindings.build()); return suggester.suggest(); } } return ImmutableList.of(); }