void (GrMethodCall methodCallExpression) { final GrExpression invoked = methodCallExpression.getInvokedExpression(); final GrExpression[] exprs = methodCallExpression.getExpressionArguments(); final GrNamedArgument[] namedArgs = methodCallExpression.getNamedArguments(); final GrClosableBlock[] clArgs = methodCallExpression.getClosureArguments(); if (invoked instanceof GrReferenceExpression) { final GroovyResolveResult resolveResult = ((GrReferenceExpression)invoked).advancedResolve(); final PsiElement resolved = resolveResult.getElement(); if (resolved instanceof PsiMethod) { final GrExpression qualifier = ((GrReferenceExpression)invoked).getQualifier();//todo replace null-qualifier with this-reference invokeMethodOn( ((PsiMethod)resolved), qualifier, exprs, namedArgs, clArgs, resolveResult.getSubstitutor(), methodCallExpression ); return; } else if (resolved == null) { final GrExpression qualifier = ((GrReferenceExpression)invoked).getQualifier(); final GrExpression[] args = generateArgsForInvokeMethod(((GrReferenceExpression)invoked).getReferenceName(), exprs, namedArgs, clArgs, methodCallExpression); GenerationUtil.invokeMethodByName(qualifier, "invokeMethod", args, GrNamedArgument.EMPTY_ARRAY, GrClosableBlock.EMPTY_ARRAY, this, methodCallExpression); return; } } GenerationUtil.invokeMethodByName(invoked, "call", exprs, namedArgs, clArgs, this, methodCallExpression); }