@Override
  public void visitClosure(@NotNull GrClosableBlock closure) {
    super.visitClosure(closure);

    myHolder.newSilentAnnotation(HighlightSeverity.INFORMATION).range(closure.getLBrace()).textAttributes(GroovySyntaxHighlighter.CLOSURE_ARROW_AND_BRACES).create();
    PsiElement rBrace = closure.getRBrace();
    if (rBrace != null) {
      myHolder.newSilentAnnotation(HighlightSeverity.INFORMATION).range(rBrace).textAttributes(GroovySyntaxHighlighter.CLOSURE_ARROW_AND_BRACES).create();
    }
    PsiElement closureArrow = closure.getArrow();
    if (closureArrow != null) {
      myHolder.newSilentAnnotation(HighlightSeverity.INFORMATION).range(closureArrow).textAttributes(GroovySyntaxHighlighter.CLOSURE_ARROW_AND_BRACES).create();
    }

    if (!FunctionalExpressionFlowUtil.isFlatDFAAllowed()) {
      if (TypeInferenceHelper.isTooComplexTooAnalyze(closure)) {
        int startOffset = closure.getTextRange().getStartOffset();
        int endOffset;
        PsiElement arrow = closure.getArrow();
        if (arrow != null) {
          endOffset = arrow.getTextRange().getEndOffset();
        }
        else {
          Document document = PsiDocumentManager.getInstance(closure.getProject()).getDocument(closure.getContainingFile());
          if (document == null) return;
          String text = document.getText();
          endOffset = Math.min(closure.getTextRange().getEndOffset(), text.indexOf('\n', startOffset));
        }
        myHolder.newAnnotation(HighlightSeverity.WEAK_WARNING, GroovyBundle.message("closure.is.too.complex.to.analyze")).range(new TextRange(startOffset, endOffset)).create();
      }
    }
  }
@Override
  public void visitClosure(@NotNull GrClosableBlock closure)