public void IterateMethodSignatures(string tab, Component jsonFile, Members thisMethod, string optionalFlag, bool useExport, bool isInterface, bool isSingleton)
        {
            string[] tokenizedTypes = GeneretorConfiguration.Settings.UseFullTyping ? TypeManager.getTokenizedReturnTypes(thisMethod.Return) : new string[] { "any" };

            foreach (var tokenizedType in tokenizedTypes)
            {
                MethodParameters methodParameters = new MethodParameters(thisMethod);

                bool isStatic = !isInterface && ((isSingleton && (thisMethod.Static || thisMethod.Autodetected.Static)) ||
                                                 thisMethod.Static ||
                                                 SpecialCases.shouldStatic(jsonFile.Name, thisMethod.Name));

                List <string> usedPermutations = new List <string>();
                bool          methodWritten    = false;

                if (methodParameters.HasOnlyOneSignature())
                {
                    WriteMethod(tab, thisMethod.ShortDoc, thisMethod.Name, optionalFlag, methodParameters, tokenizedType, thisMethod.Return, useExport, isStatic, isInterface);
                }
                else if (ShouldCreateOverrideMethod(methodParameters.requiresOverrides, tokenizedTypes, tokenizedType))
                {
                    List <string>    overrideTypes          = methodParameters.paramNames.Select(a => "any").ToList();
                    MethodParameters overriddenMethodParams = methodParameters.CloneWithNewParamTypes(overrideTypes);
                    WriteMethod(tab, thisMethod.ShortDoc, thisMethod.Name, optionalFlag, overriddenMethodParams, "any", thisMethod.Return, useExport, isStatic, isInterface);
                    usedPermutations = overrideTypes;
                    methodWritten    = true;
                }

                if (GeneretorConfiguration.Settings.UseFullTyping && usedPermutations.Count > 0)
                {
                    ProcessSignaturePermutations(tab, thisMethod, optionalFlag, tokenizedType, methodParameters, usedPermutations, methodWritten, useExport, isStatic);
                }
            }
        }
        public void ProcessSignaturePermutations(string tab, Members thisMethod, string optionalFlag, string thisType, MethodParameters methodParameters, List <string> usedPermutations, bool methodWritten, bool useExport, bool isStatic)
        {
            List <string> paramPermutations = methodParameters.paramTypes;

            if (!methodParameters.requiresOverrides || (methodParameters.requiresOverrides && paramPermutations.Where(a => TypeManager.NormalizeType(a) == "any").Count() < paramPermutations.Count))
            {
                string thisPermutationAsString = string.Join(",", paramPermutations);

                if (!usedPermutations.Contains(thisPermutationAsString))
                {
                    MethodParameters permutationParams = methodParameters.CloneWithNewParamTypes(paramPermutations);

                    WriteMethod(tab, thisMethod.ShortDoc, thisMethod.Name, optionalFlag, permutationParams, thisType, thisMethod.Return, useExport, isStatic, methodWritten);
                    usedPermutations.Add(thisPermutationAsString);
                    methodWritten = true;
                }
            }
        }