void (@NotNull Element element) { // must be first - compatibility writeVersion(element); mySerializer.writeExternal(this, element); synchronized (myLock) { if (!myInitialized) { for (Element el : myUninitializedSettings.values()) { element.addContent(el.clone()); } return; } } Set<String> changedToolNames = getChangedToolNames(); if (changedToolNames == null) { return; } List<String> allToolNames = new ArrayList<>(myTools.keySet()); allToolNames.addAll(myUninitializedSettings.keySet()); allToolNames.sort(null); for (String toolName : allToolNames) { Element toolElement = myUninitializedSettings.get(toolName); if (toolElement != null) { element.addContent(toolElement.clone()); continue; } if (!myLockedProfile && !changedToolNames.contains(toolName)) { markSettingsMerged(toolName, element); continue; } ToolsImpl toolList = myTools.get(toolName); LOG.assertTrue(toolList != null); Element inspectionElement = new Element(INSPECTION_TOOL_TAG); inspectionElement.setAttribute(CLASS_TAG, toolName); try { toolList.writeExternal(inspectionElement); } catch (WriteExternalException e) { LOG.error(e); continue; } if (!areSettingsMerged(toolName, inspectionElement)) { element.addContent(inspectionElement); } } getPathMacroManager().collapsePaths(element); }