Source:
public void define(WebService.NewController context) { NewAction action = context.createAction(ACTION_SUGGESTIONS) .setDescription( "Internal WS for the top-right search engine. The result will contain component search results, grouped by their qualifiers.<p>" + "Each result contains:" + "<ul>" + "<li>the organization key</li>" + "<li>the component key</li>" + "<li>the component's name (unescaped)</li>" + "<li>optionally a display name, which puts emphasis to matching characters (this text contains html tags and parts of the html-escaped name)</li>" + "</ul>") .setSince("4.2") .setInternal(true) .setHandler(this) .setResponseExample(Resources.getResource(this.getClass(), "suggestions-example.json")) .setChangelog(new Change("6.4", "Parameter 's' is optional")); action.createParam(PARAM_QUERY) .setRequired(false) .setMinimumLength(2) .setDescription("Can contain several search tokens, separated by spaces.") .setExampleValue("sonar"); action.createParam(PARAM_MORE) .setDescription("Category, for which to display the next " + EXTENDED_LIMIT + " results (skipping the first " + DEFAULT_LIMIT + " results)") .setPossibleValues(stream(SuggestionCategory.values()).map(SuggestionCategory::getName).toArray(String[]::new)) .setSince("6.4"); action.createParam(PARAM_RECENTLY_BROWSED) .setDescription("Comma separated list of component keys, that have recently been browsed by the user. Only the first " + MAXIMUM_RECENTLY_BROWSED + " items will be used. Order is not taken into account.") .setSince("6.4") .setExampleValue("org.sonarsource:sonarqube,some.other:project") .setRequired(false) .setMaxValuesAllowed(MAXIMUM_RECENTLY_BROWSED); }

Target:
public void define(WebService.NewController context) { NewAction action = context.createAction(ACTION_SUGGESTIONS) .setDescription( "Internal WS for the top-right search engine. The result will contain component search results, grouped by their qualifiers.<p>" + "Each result contains:" + "<ul>" + "<li>the organization key</li>" + "<li>the component key</li>" + "<li>the component's name (unescaped)</li>" + "<li>optionally a display name, which puts emphasis to matching characters (this text contains html tags and parts of the html-escaped name)</li>" + "</ul>") .setSince("4.2") .setInternal(true) .setHandler(this) .setResponseExample(Resources.getResource(this.getClass(), "suggestions-example.json")) .setChangelog(new Change("6.4", "Parameter 's' is optional")); action.createParam(PARAM_QUERY) .setRequired(false) .setMinimumLength(2) .setDescription("Search query: can contain several search tokens separated by spaces.") .setExampleValue("sonar"); action.createParam(PARAM_MORE) .setDescription("Category, for which to display the next " + EXTENDED_LIMIT + " results (skipping the first " + DEFAULT_LIMIT + " results)") .setPossibleValues(stream(SuggestionCategory.values()).map(SuggestionCategory::getName).toArray(String[]::new)) .setSince("6.4"); action.createParam(PARAM_RECENTLY_BROWSED) .setDescription("Comma separated list of component keys, that have recently been browsed by the user. Only the first " + MAXIMUM_RECENTLY_BROWSED + " items will be used. Order is not taken into account.") .setSince("6.4") .setExampleValue("org.sonarsource:sonarqube,some.other:project") .setRequired(false) .setMaxValuesAllowed(MAXIMUM_RECENTLY_BROWSED); }