@Override
  public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
    ArrayDeque<PsiMethodCallExpression> calls = new ArrayDeque<>();
    while (true) {
      calls.addFirst(expression);
      startElement(expression);

      PsiExpression qualifierExpression = expression.getMethodExpression().getQualifierExpression();
      expression = ObjectUtils.tryCast(PsiUtil.skipParenthesizedExprDown(qualifierExpression), PsiMethodCallExpression.class);
      if (expression == null) {
        if (qualifierExpression != null) {
          qualifierExpression.accept(this);
        }
        break;
      }
    }

    for (PsiMethodCallExpression call : calls) {
      final PsiExpressionList argumentList = call.getArgumentList();
      argumentList.accept(this);
      // just to increase counter - there is some executable code here
      emitEmptyInstruction();

      //generate jumps to all handled exception handlers
      generateExceptionJumps(call, ExceptionUtil.getUnhandledExceptions(call, call.getParent()));

      finishElement(call);
    }
  }
@Override
  public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression)