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 bool ShouldIncludeMethod(Component fileJson, Members thisMethod, bool isSingleton, bool isInterface, bool staticOnly, List <string> processedNames)
        {
            bool result = false;

            if (TypeManager.IsOwner(fileJson, thisMethod.Owner) || (fileJson.Mixins != null && fileJson.Mixins.Contains(thisMethod.Owner)) || isSingleton)
            {
                if ((!isInterface && (!isSingleton || (isSingleton && thisMethod.Name != "constructor"))) || (isInterface && thisMethod.Name != "constructor"))
                {
                    if ((GeneretorConfiguration.Settings.IncludePrivate == thisMethod.Private || GeneretorConfiguration.Settings.IncludePrivate) || thisMethod.Protected || thisMethod.Template)
                    {
                        //Novo
                        if (!staticOnly || (staticOnly && (thisMethod.Static || fileJson.Singleton || SpecialCases.shouldStatic(fileJson.Name, thisMethod.Name) || thisMethod.Name == "constructor")))
                        {
                            if (!processedNames.Contains(thisMethod.Name) && thisMethod.Deprecated == null && !SpecialCases.shouldRemoveMethod(fileJson.Name, thisMethod.Name))
                            {
                                if (!string.IsNullOrEmpty(thisMethod.Doc) || (!thisMethod.Doc.ToLower().Contains("overridden and disabled")))
                                {
                                    result = true;
                                }
                            }
                        }
                    }
                }

                if (isInterface && thisMethod.Static)
                {
                    result = false;
                }
            }
            return(result);
        }