void (SearchableConfigurable configurable, Map<SearchableConfigurable, Set<OptionDescription>> options, Map<String, Element> roots, boolean splitByResourcePath) { Element configurableElement = createConfigurableElement(configurable); writeOptions(configurableElement, options.get(configurable)); if (configurable instanceof ConfigurableWrapper) { UnnamedConfigurable wrapped = ((ConfigurableWrapper)configurable).getConfigurable(); if (wrapped instanceof SearchableConfigurable) { configurable = (SearchableConfigurable)wrapped; } } if (configurable instanceof KeymapPanel) { for (Map.Entry<String, Set<OptionDescription>> entry : processKeymap(splitByResourcePath).entrySet()) { Element entryElement = createConfigurableElement(configurable); writeOptions(entryElement, entry.getValue()); addElement(roots, entryElement, entry.getKey()); } } else if (configurable instanceof OptionsContainingConfigurable) { processOptionsContainingConfigurable((OptionsContainingConfigurable)configurable, configurableElement); } else if (configurable instanceof PluginManagerConfigurable) { TreeSet<OptionDescription> optionDescriptions = new TreeSet<>(); wordsToOptionDescriptors(Collections.singleton(IdeBundle.message("plugin.manager.repositories")), null, optionDescriptions); for (OptionDescription description : optionDescriptions) { configurableElement.addContent( createOptionElement(null, IdeBundle.message("plugin.manager.repositories"), description.getOption())); } } else if (configurable instanceof AllFileTemplatesConfigurable) { for (Map.Entry<String, Set<OptionDescription>> entry : processFileTemplates(splitByResourcePath).entrySet()) { Element entryElement = createConfigurableElement(configurable); writeOptions(entryElement, entry.getValue()); addElement(roots, entryElement, entry.getKey()); } } String module = splitByResourcePath ? getModuleByClass(configurable.getOriginalClass()) : ""; addElement(roots, configurableElement, module); }