void (@NotNull Collection<? extends ProblemDescriptor> descriptors, boolean filterSuppressed, @NotNull GlobalInspectionContext context, @Nullable LocalInspectionTool tool, @NotNull InspectionToolResultExporter dpi, @NotNull TripleFunction<? super LocalInspectionTool, ? super PsiElement, ? super GlobalInspectionContext, ? extends RefElement> getProblemElementFunction) { if (descriptors.isEmpty()) return; Map<RefElement, List<ProblemDescriptor>> problems = new HashMap<>(); RefManagerImpl refManager = (RefManagerImpl)context.getRefManager(); for (ProblemDescriptor descriptor : descriptors) { PsiElement element = descriptor.getPsiElement(); if (element == null) continue; if (filterSuppressed) { String alternativeId; String id; if (refManager.isDeclarationsFound() && (context.isSuppressed(element, id = tool.getID()) || (alternativeId = tool.getAlternativeID()) != null && !alternativeId.equals(id) && context.isSuppressed(element, alternativeId))) { continue; } if (SuppressionUtil.inspectionResultSuppressed(element, tool)) continue; } RefElement refElement = getProblemElementFunction.fun(tool, element, context); List<ProblemDescriptor> elementProblems = problems.computeIfAbsent(refElement, __ -> new ArrayList<>()); elementProblems.add(descriptor); } for (Map.Entry<RefElement, List<ProblemDescriptor>> entry : problems.entrySet()) { List<ProblemDescriptor> problemDescriptors = entry.getValue(); RefElement refElement = entry.getKey(); CommonProblemDescriptor[] descriptions = problemDescriptors.toArray(CommonProblemDescriptor.EMPTY_ARRAY); dpi.addProblemElement(refElement, filterSuppressed, descriptions); } }