@Override
  public @NotNull PsiCatchSection createCatchSection(@NotNull PsiType exceptionType,
                                                     @NotNull String exceptionName,
                                                     @Nullable PsiElement context) throws IncorrectOperationException {
    if (!(exceptionType instanceof PsiClassType || exceptionType instanceof PsiDisjunctionType)) {
      throw new IncorrectOperationException("Unexpected type:" + exceptionType);
    }

    String text = "catch (" + exceptionType.getCanonicalText(true) +  " " + exceptionName + ") {}";
    DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, CATCH_SECTION, level(context)), context);
    PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
    if (!(element instanceof PsiCatchSection)) {
      throw new IncorrectOperationException("Incorrect catch section '" + text + "'. Parsed element: " + element);
    }

    Project project = myManager.getProject();
    JavaPsiImplementationHelper helper = JavaPsiImplementationHelper.getInstance(project);
    helper.setupCatchBlock(exceptionName, exceptionType, context, (PsiCatchSection)element);
    CodeStyleManager styleManager = CodeStyleManager.getInstance(project);
    PsiCatchSection catchSection = (PsiCatchSection)styleManager.reformat(element);

    GeneratedMarkerVisitor.markGenerated(catchSection);
    return catchSection;
  }
@Override
  public @NotNull PsiCatchSection createCatchSection(@NotNull PsiType exceptionType,
                                                     @NotNull String exceptionName,
                                                     @Nullable PsiElement context)