@Override public void addProblemElement( final RefEntity refElement, boolean filterSuppressed, @NotNull final CommonProblemDescriptor... descriptors) { if (refElement == null) return; if (descriptors.length == 0) return; if (filterSuppressed) { if (!isOutputPathSet() || !(myToolWrapper instanceof LocalInspectionToolWrapper)) { synchronized (lock) { Map<RefEntity, CommonProblemDescriptor[]> problemElements = getProblemElements(); CommonProblemDescriptor[] problems = problemElements.get(refElement); problems = problems == null ? descriptors : mergeDescriptors(problems, descriptors); problemElements.put(refElement, problems); } for (CommonProblemDescriptor description : descriptors) { getProblemToElements().put(description, refElement); collectQuickFixes(description.getFixes(), refElement); } } else { writeOutput(descriptors, refElement); } } else { // just need to collect problems for (CommonProblemDescriptor descriptor : descriptors) { getProblemToElements().put(descriptor, refElement); } } final GlobalInspectionContextImpl context = getContext(); if (myToolWrapper instanceof LocalInspectionToolWrapper) { final InspectionResultsView view = context.getView(); if (view == null || !(refElement instanceof RefElement)) { return; } UIUtil.invokeLaterIfNeeded( new Runnable() { @Override public void run() { if (!isDisposed()) { final InspectionNode toolNode; synchronized (myToolLock) { if (myToolNode == null) { final HighlightSeverity currentSeverity = getSeverity((RefElement) refElement); toolNode = view.addTool( myToolWrapper, HighlightDisplayLevel.find(currentSeverity), context.getUIOptions().GROUP_BY_SEVERITY); } else { toolNode = myToolNode; if (toolNode.isTooBigForOnlineRefresh()) { return; } } } final Map<RefEntity, CommonProblemDescriptor[]> problems = new HashMap<RefEntity, CommonProblemDescriptor[]>(); problems.put(refElement, descriptors); final Map<String, Set<RefEntity>> contents = new HashMap<String, Set<RefEntity>>(); final String groupName = refElement.getRefManager().getGroupName((RefElement) refElement); Set<RefEntity> content = contents.get(groupName); if (content == null) { content = new HashSet<RefEntity>(); contents.put(groupName, content); } content.add(refElement); view.getProvider() .appendToolNodeContent( context, toolNode, (InspectionTreeNode) toolNode.getParent(), context.getUIOptions().SHOW_STRUCTURE, contents, problems, (DefaultTreeModel) view.getTree().getModel()); context.addView(view); } } }); } }