class ConfigDescriptionRegistry {

    public @Nullable ConfigDescription getConfigDescription(URI uri, @Nullable Locale locale) {
        List<ConfigDescriptionParameter> parameters = new ArrayList<>();
        List<ConfigDescriptionParameterGroup> parameterGroups = new ArrayList<>();

        boolean found = false;
        Set<URI> aliases = getAliases(uri);
        for (URI alias : aliases) {
            logger.debug("No config description found for '{}', using alias '{}' instead", uri, alias);
            found |= fillFromProviders(alias, locale, parameters, parameterGroups);
        }

        found |= fillFromProviders(uri, locale, parameters, parameterGroups);

        if (found) {
            List<ConfigDescriptionParameter> parametersWithOptions = new ArrayList<>(parameters.size());
            for (ConfigDescriptionParameter parameter : parameters) {
                parametersWithOptions.add(getConfigOptions(uri, aliases, parameter, locale));
            }

            // Return the new configuration description
            return ConfigDescriptionBuilder.create(uri).withParameters(parametersWithOptions)
                    .withParameterGroups(parameterGroups).build();
        } else {
            // Otherwise null
            return null;
        }
    }

}