void (@NotNull RefEntity refEntity, @NotNull CommonProblemDescriptor descriptor, @NotNull Element element) { PsiElement psiElement = descriptor instanceof ProblemDescriptor ? ((ProblemDescriptor)descriptor).getPsiElement() : null; try { @NonNls Element problemClassElement = new Element(INSPECTION_RESULTS_PROBLEM_CLASS_ELEMENT); problemClassElement.setAttribute(INSPECTION_RESULTS_ID_ATTRIBUTE, myToolWrapper.getShortName()); problemClassElement.addContent(sanitizeIllegalXmlChars(myToolWrapper.getDisplayName())); HighlightSeverity severity = InspectionToolResultExporter.getSeverity(refEntity, psiElement, this); SeverityRegistrar severityRegistrar = myContext.getCurrentProfile().getProfileManager().getSeverityRegistrar(); HighlightInfoType type = descriptor instanceof ProblemDescriptor ? ProblemDescriptorUtil .highlightTypeFromDescriptor((ProblemDescriptor)descriptor, severity, severityRegistrar) : ProblemDescriptorUtil .getHighlightInfoType(ProblemHighlightType.GENERIC_ERROR_OR_WARNING, severity, severityRegistrar); problemClassElement.setAttribute(INSPECTION_RESULTS_SEVERITY_ATTRIBUTE, type.getSeverity(psiElement).getName()); problemClassElement.setAttribute(INSPECTION_RESULTS_ATTRIBUTE_KEY_ATTRIBUTE, type.getAttributesKey().getExternalName()); element.addContent(problemClassElement); if (myToolWrapper instanceof GlobalInspectionToolWrapper) { GlobalInspectionTool globalInspectionTool = ((GlobalInspectionToolWrapper)myToolWrapper).getTool(); QuickFix<?>[] fixes = descriptor.getFixes(); if (fixes != null) { @NonNls Element hintsElement = new Element(INSPECTION_RESULTS_HINTS_ELEMENT); for (QuickFix<?> fix : fixes) { String hint = globalInspectionTool.getHint(fix); if (hint != null) { @NonNls Element hintElement = new Element(INSPECTION_RESULTS_HINT_ELEMENT); hintElement.setAttribute(INSPECTION_RESULTS_VALUE_ATTRIBUTE, sanitizeIllegalXmlChars(hint)); hintsElement.addContent(hintElement); } } element.addContent(hintsElement); } } @NonNls String template = descriptor.getDescriptionTemplate(); String highlightedText = ProblemDescriptorUtil.extractHighlightedText(descriptor, psiElement); @NonNls String problemText = StringUtil .replace(StringUtil.replace(template, "#ref", psiElement != null ? highlightedText : ""), " #loc ", " "); Element descriptionElement = new Element(INSPECTION_RESULTS_DESCRIPTION_ELEMENT); descriptionElement.addContent(sanitizeIllegalXmlChars(problemText)); element.addContent(descriptionElement); Element highLightedElement = new Element("highlighted_element"); highLightedElement.addContent(sanitizeIllegalXmlChars(highlightedText)); element.addContent(highLightedElement); Element language = new Element(INSPECTION_RESULTS_LANGUAGE); language.addContent(psiElement != null ? psiElement.getLanguage().getID() : ""); element.addContent(language); if (descriptor instanceof ProblemDescriptorBase) { TextRange textRange = ((ProblemDescriptorBase)descriptor).getTextRangeForNavigation(); if (textRange != null) { int offset = textRange.getStartOffset() - ((ProblemDescriptorBase)descriptor).getLineStartOffset(); int length = textRange.getLength(); element.addContent(new Element("offset").addContent(String.valueOf(offset))); element.addContent(new Element("length").addContent(String.valueOf(length))); } } } catch (ProcessCanceledException e) { throw e; } catch (RuntimeException e) { String message = "Cannot save results for " + refEntity.getName() + ", inspection which caused problem: " + myToolWrapper.getShortName() + ", problem descriptor " + descriptor; if (psiElement != null) { message += ", element class: " + psiElement.getClass() + ", containing file: " + psiElement.getContainingFile(); } LOG.error(message, e); } }