void (@NotNull PsiParameter parameter, @NotNull Consumer<? super HighlightInfo.Builder> errorSink) { PsiElement scope = parameter.getDeclarationScope(); if (!(scope instanceof PsiCatchSection catchSection)) return; PsiCatchSection[] allCatchSections = catchSection.getTryStatement().getCatchSections(); int startFrom = ArrayUtilRt.find(allCatchSections, catchSection) - 1; if (startFrom < 0) return; List<PsiTypeElement> typeElements = PsiUtil.getParameterTypeElements(parameter); boolean isInMultiCatch = typeElements.size() > 1; for (PsiTypeElement typeElement : typeElements) { PsiClass catchClass = PsiUtil.resolveClassInClassTypeOnly(typeElement.getType()); if (catchClass == null) continue; for (int i = startFrom; i >= 0; i--) { PsiCatchSection upperCatchSection = allCatchSections[i]; PsiType upperCatchType = upperCatchSection.getCatchType(); boolean highlight = upperCatchType instanceof PsiDisjunctionType ? checkMultipleTypes(catchClass, ((PsiDisjunctionType)upperCatchType).getDisjunctions()) : checkSingleType(catchClass, upperCatchType); if (highlight) { String className = PsiFormatUtil.formatClass(catchClass, PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_FQ_NAME); String description = JavaErrorBundle.message("exception.already.caught", className); HighlightInfo.Builder builder = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(typeElement).descriptionAndTooltip(description); IntentionAction action; if (isInMultiCatch) { action = getFixFactory().createDeleteMultiCatchFix(typeElement); } else { action = getFixFactory().createDeleteCatchFix(parameter); } builder.registerFix(action, null, null, null, null); builder.registerFix(getFixFactory().createMoveCatchUpFix(catchSection, upperCatchSection), null, null, null, null); errorSink.accept(builder); } } } }