void (@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); } }