public static string GetMethodSignature
        (
            this IMethodSymbol methodSymbol,
            bool shouldOverride            = false,
            string newMethodName           = null,                        // if null - same name
            Accessibility newAccessibility = Accessibility.NotApplicable, // means the same
            bool?isVirtualFlag             = false,
            bool isAbstract = false
        )
        {
            Accessibility accessibility =
                newAccessibility.GetAccessibility(methodSymbol);

            string methodName = newMethodName;

            if (methodName == null)
            {
                methodName = methodSymbol.Name;
            }

            bool isVirtual = isVirtualFlag ?? methodSymbol.IsVirtual;

            string result =
                GetMemberDeclarationCode
                (
                    methodName,
                    methodSymbol.ReturnType as INamedTypeSymbol,
                    accessibility,
                    methodSymbol.IsStatic,
                    shouldOverride,
                    isAbstract,
                    isVirtual,
                    methodSymbol.IsAsync
                );

            result +=
                methodSymbol.GetTypeArgsStr(methodSymbol.TypeArguments);

            result += methodSymbol.Parameters.GetMethodParams(true);

            return(result);
        }