Exemplo n.º 1
0
        protected Indexer addBaseIndexer(ref ExtClass baseObjectClass)
        {
            string[] baseObjectClassIndexerDocs = this.processor.GenerateJsDocs
                                ? new string[] {
                "Any other property or method.",
                "@see https://github.com/microsoft/TypeScript/issues/3755"
            }
                                : null;
            Indexer baseIndexer = new Indexer(
                "others",
                new List <string>()
            {
                "string"
            },
                new List <string>()
            {
                "any"
            },
                baseObjectClassIndexerDocs,
                baseObjectClass.Name.FullName,
                true
                );

            baseObjectClass.AddMemberIndexer(baseIndexer);
            return(baseIndexer);
        }
Exemplo n.º 2
0
        protected ExtClass generateDefinitionsClassesTryToFindTheSameMethodClass(ExtClass standardClass, string methodName)
        {
            ExtClass currentClass = standardClass;
            ExtClass parentClass;
            Store    store  = this.processor.Store;
            ExtClass result = null;

            while (true)
            {
                if (currentClass.Members.Methods.ContainsKey(methodName))
                {
                    result = currentClass;
                    break;
                }
                if (currentClass.Extends == null)
                {
                    break;
                }
                parentClass = store.GetParentClassByCurrentClassFullName(currentClass.Name.FullName);
                if (parentClass == null)
                {
                    break;
                }
                currentClass = parentClass;
            }
            return(result);
        }
Exemplo n.º 3
0
        protected void generateBrowserGlobalProxyClass(string browserGlobalClass, bool addAnyOtherMemberIndexer = false)
        {
            // Generate global class extended from browser global "Object" to be able
            // extend this global browser Object from any namespace:
            string extGlobalClassName = SpecialsGenerator.GLOBAL_CLASS_BASE
                                        .Replace("<browserGlobalClassName>", browserGlobalClass);
            ExtClass baseObjectClass = new ExtClass(
                extGlobalClassName, browserGlobalClass, new string[] {
                $"Browser's global `{browserGlobalClass}` definition proxy class ",
                $"for classes in `Ext.*` namespace(s) to not pointing to `Ext.{browserGlobalClass}`."
            }
                );

            baseObjectClass.Package = ExtJsPackage.CORE;
            //baseObjectClass.SrcJson = "Generator";
            baseObjectClass.Name.PackagedNamespace = this.processor.Reader.GetPackagedNamespaceFromFullClassName(
                extGlobalClassName
                );
            baseObjectClass.ClassType = ClassType.CLASS_ALIAS;
            if (addAnyOtherMemberIndexer)
            {
                this.addBaseIndexer(ref baseObjectClass);
            }
            this.processor.Store.AddExtClass(baseObjectClass);
        }
Exemplo n.º 4
0
        protected Property generateDefinitionsClassesTryToFindTheSameProp(ExtClass standardClass, string propName)
        {
            ExtClass currentClass = standardClass;
            ExtClass parentClass;
            Store    store  = this.processor.Store;
            Property result = null;

            while (true)
            {
                if (currentClass.Members.Properties.ContainsKey(propName))
                {
                    result = currentClass.Members.Properties[propName] as Property;
                    break;
                }
                if (currentClass.Extends == null)
                {
                    break;
                }
                parentClass = store.GetParentClassByCurrentClassFullName(currentClass.Name.FullName);
                if (parentClass == null)
                {
                    break;
                }
                currentClass = parentClass;
            }
            return(result);
        }
Exemplo n.º 5
0
 static Ex1()
 {
     ExtClass.create("Ext.Carousel", new
     {
         fullscreen = true,
         defaults   = new { styleHtmlContent = true },
         items      = new object[]
         {
             new
             {
                 html  = "Item 1",
                 style = "background-color= #5E99CC"
             },
             new
             {
                 html  = "Item 2",
                 style = "background-color= #759E60"
             },
             new
             {
                 html = "Item 3"
             }
         }
     });
 }
Exemplo n.º 6
0
        protected internal bool GenerateConfigurationsInterfaces(specialsGeneratorProgressHandler progressHandler)
        {
            ExtClass baseConfigInterface = this.addBaseInterface(
                SpecialsGenerator.BASE_CONFIGS_INTERFACE_NAME,
                "Base configurations interface.",
                ClassType.CLASS_CONFIGS
                );

            this.addBaseIndexer(ref baseConfigInterface);
            int      processedClassesCount = 0;
            ExtClass configClass;
            Store    store        = this.processor.Store;
            ExtClass extBaseClass = store.GetByFullName("Ext.Base");

            if (extBaseClass == null)
            {
                throw new Exception("Class `Ext.Base` not found!");
            }
            foreach (ExtClass standardClass in store.ExtStandardClasses)
            {
                if (standardClass.Members.Configations.Count > 0)
                {
                    configClass = new ExtClass(
                        standardClass.Name.FullName + SpecialsGenerator.CONFIGS_NAME_ADDITION,
                        SpecialsGenerator.BASE_CONFIGS_INTERFACE_NAME,
                        standardClass.Docs
                        );
                    configClass.Package = standardClass.Package;
                    //configClass.SrcJson = standardClass.SrcJson;
                    configClass.Name.PackagedNamespace = standardClass.Name.PackagedNamespace;
                    configClass.ClassType = ClassType.CLASS_CONFIGS;
                    configClass.Link      = new string[] {
                        standardClass.Name.FullName,
                        this.processor.Reader.GetLinkHrefForClass(
                            standardClass.Name.FullName
                            )
                    };
                    foreach (var confMemberItem in standardClass.Members.Configations)
                    {
                        configClass.Members.Configations.Add(
                            confMemberItem.Key,
                            (confMemberItem.Value as Configuration).Clone()
                            );
                    }
                    // Add only template methods:
                    this.generateConfigurationsInterfacesTemplateMethods(
                        standardClass, ref configClass
                        );
                    // Add only instance methods from Ext.Base:
                    this.generateConfigurationsInterfacesExtBaseMethods(
                        standardClass, extBaseClass, ref configClass
                        );
                    configClass.HasMembers = true;
                    store.AddExtClass(configClass);
                }
                processedClassesCount += 1;
                progressHandler.Invoke(processedClassesCount, standardClass.Name.FullName);
            }
            return(true);
        }
Exemplo n.º 7
0
        protected void generateConfigurationsInterfacesTemplateMethods(ExtClass standardClass, ref ExtClass configClass)
        {
            List <Member> methodMemberVariants;
            Method        firstMethodVariant;

            foreach (var methodMemberItem in standardClass.Members.Methods)
            {
                firstMethodVariant = methodMemberItem.Value.FirstOrDefault <Member>() as Method;
                if (!firstMethodVariant.IsTemplate)
                {
                    continue;
                }
                methodMemberVariants = new List <Member>();
                Method newMethodVariant;
                foreach (var methodVariant in methodMemberItem.Value)
                {
                    newMethodVariant = (methodVariant as Method).Clone();
                    newMethodVariant.OwnedByCurrent = true;                     // always render js docs for config interfaces, there is no inheritance
                    methodMemberVariants.Add(newMethodVariant);
                }
                configClass.Members.Methods.Add(
                    methodMemberItem.Key,
                    methodMemberVariants
                    );
            }
        }
Exemplo n.º 8
0
        protected string generateMethodWithPropFlags(ExtClass extClass, Method methodVariant, Property mixedProp)
        {
            string result = "";

            // UPDATE for constructing .Def classes: do not render access modifiers anywhere!

            /*
             * if (methodVariant.AccessModTs == AccessModifier.NONE)
             *      methodVariant.AccessModTs = methodVariant.AccessModJs;
             * if (methodVariant.AccessModTs == AccessModifier.NONE)
             *      methodVariant.AccessModTs = AccessModifier.PUBLIC;
             * if (mixedProp.AccessModTs == AccessModifier.NONE)
             *      mixedProp.AccessModTs = mixedProp.AccessModJs;
             * if (mixedProp.AccessModTs == AccessModifier.NONE)
             *      mixedProp.AccessModTs = AccessModifier.PUBLIC;
             * int methodVariantAcVal = (int)methodVariant.AccessModTs;
             * int mixedPropAcVal = (int)mixedProp.AccessModTs;
             * if (methodVariantAcVal > mixedPropAcVal) {
             *      result = methodVariant.AccessModTs.ToString();
             * } else if (mixedPropAcVal > methodVariantAcVal) {
             *      result = mixedProp.AccessModTs.ToString();
             * } else {
             *      result = mixedProp.AccessModTs.ToString();
             * }
             * result = result.ToLower();
             * if (methodVariant.IsStatic || mixedProp.IsStatic)
             *      result += " static";
             */

            if (methodVariant.IsStatic || mixedProp.IsStatic)
            {
                result = "static";
            }
            return(result);
        }
Exemplo n.º 9
0
        protected string generateMethodFlags(ExtClass extClass, Method methodVariant)
        {
            List <string> flags = new List <string>();

            // UPDATE for constructing .Def classes: do not render access modifiers anywhere!

            /*
             * if (methodVariant.AccessModTs == AccessModifier.NONE)
             *      methodVariant.AccessModTs = methodVariant.AccessModJs;
             * if (methodVariant.AccessModTs == AccessModifier.NONE)
             *      methodVariant.AccessModTs = AccessModifier.PUBLIC;
             * flags.Add(AccessModifiers.Values[methodVariant.AccessModTs]);
             */

            if (methodVariant.IsStatic || extClass.Name.FullName == "Ext")
            {
                flags.Add("static");
            }
            string result = String.Join(" ", flags);

            if (flags.Count > 0)
            {
                result += " ";
            }
            return(result);
        }
Exemplo n.º 10
0
        protected void generateInterfaceStaticPropertiesAndMethods(ExtClass extClass)
        {
            bool priv = this.processor.GeneratePrivateMembers;

            // Generate static properties:
            this.generateProperties(extClass, false, false, AccessModifier.PUBLIC, AccessModifier.PUBLIC);
            this.generateProperties(extClass, false, false, AccessModifier.PUBLIC, AccessModifier.PROTECTED);
            if (priv)
            {
                this.generateProperties(extClass, false, false, AccessModifier.PUBLIC, AccessModifier.PRIVATE);
            }
            this.generateProperties(extClass, false, false, AccessModifier.PROTECTED, AccessModifier.PROTECTED);
            if (priv)
            {
                this.generateProperties(extClass, false, false, AccessModifier.PROTECTED, AccessModifier.PRIVATE);
            }
            // this.generateClassProperties(extClass, false, false,AccessModifier.PRIVATE, AccessModifier.PRIVATE);

            // Generate static methods:
            this.generateMethods(extClass, false, false, AccessModifier.PUBLIC, AccessModifier.PUBLIC);
            this.generateMethods(extClass, false, false, AccessModifier.PUBLIC, AccessModifier.PROTECTED);
            if (priv)
            {
                this.generateMethods(extClass, false, false, AccessModifier.PUBLIC, AccessModifier.PRIVATE);
            }
            this.generateMethods(extClass, false, false, AccessModifier.PROTECTED, AccessModifier.PROTECTED);
            if (priv)
            {
                this.generateMethods(extClass, false, false, AccessModifier.PROTECTED, AccessModifier.PRIVATE);
            }
            // this.generateClassMethods(extClass, false, false, AccessModifier.PRIVATE, AccessModifier.PRIVATE);
        }
Exemplo n.º 11
0
        protected void generateClassOpen(ExtClass extClass)
        {
            string line = "";

            if (!extClass.Name.IsInModule)
            {
                line += "declare ";
            }
            if ((extClass.Singleton && extClass.Name.FullName != "Ext") /*|| extClass.ClassType == ClassType.CLASS_DEFINITIONS*/)
            {
                // Render singleton classes as interfaces and public static props on classes named as it's namespace:
                line += "interface " + extClass.Name.ClassName;
            }
            else
            {
                // Render standard non-singleton classes in standard way:
                line += "class " + extClass.Name.ClassName;
            }
            if (extClass.Extends != null)
            {
                line += " extends " + this.checkBrowserGlobalClass(extClass.Extends.FullName);
            }
            line += " {";
            this.writeResultLine(line);
            this.whileSpaceLevel += 1;
        }
Exemplo n.º 12
0
        protected string getClassOptimalizedNamespaceName(ExtClass extClass, List <List <string> > packageOptimalizedNs)
        {
            string        packagedNs         = extClass.Name.PackagedNamespace;
            List <string> packagedNsExploded = packagedNs.Split('.').ToList <string>();
            // Select namespaces level to use by namespace parts count:
            int namespacesIndex = packagedNsExploded.Count;
            // Select optimalized namespaces:
            List <string> packageOptimalizedNsInLevel = packageOptimalizedNs[namespacesIndex];

            // Check if optimalized namespaces in level has current class namespace
            // and if not, use the last namespace, because it's always the other namespace
            if (packageOptimalizedNsInLevel.Contains(packagedNs))
            {
                return(packagedNs);
            }
            // If there is no optimalized amespace for class, try
            // to remove tha last namespace part and try to find
            // the "name.space.other" namespace for class:
            string namespaceOther = this.getNsLevelOtherNamespace(
                packagedNsExploded, packageOptimalizedNsInLevel, extClass.Name.FullName
                );

            if (packageOptimalizedNsInLevel.Contains(namespaceOther))
            {
                return(namespaceOther);
            }
            return(packageOptimalizedNsInLevel.LastOrDefault <string>());
        }
Exemplo n.º 13
0
        protected void readAndAddCfgOrProp(ref ExtClass extClass, ExtObjectMember member, string currentClassName, bool cfgsCompleting)
        {
            string      name  = this.sanitizeName(member.Name);
            ParsedTypes types = this.typesParser.Parse(
                cfgsCompleting
                                        ? TypeDefinitionPlace.CONFIGURATION
                                        : TypeDefinitionPlace.PROPERTY,
                currentClassName,
                member.Name,
                member.Type
                );
            bool   ownedByCurrent = member.Owner.Length == currentClassName.Length && member.Owner == currentClassName;
            string rawDocs        = String.IsNullOrEmpty(member.Doc) ? "" : member.Doc;
            bool   required       = member.Required.HasValue
                                ? member.Required == true
                                : rawDocs.Contains("(required)");

            if (cfgsCompleting)
            {
                this.readAndAddCfg(
                    ref extClass, member, types, ownedByCurrent, required
                    );
            }
            else
            {
                this.readAndAddProp(
                    ref extClass, member, types, ownedByCurrent, required
                    );
            }
        }
Exemplo n.º 14
0
        protected void readAndAddProp(ref ExtClass extClass, ExtObjectMember member, ParsedTypes types, bool ownedByCurrent, bool required)
        {
            string name = this.sanitizeName(member.Name);

            string[] docs = this.readJsDocs(member.Doc, JsDocsType.PROPERTY, extClass.Name.FullName, name);
            //if (extClass.Name.FullName == "Ext.Base")
            //	Debugger.Break();
            Property newPropItem = new Property(
                name, types.CfgOrProp, docs, member.Owner, ownedByCurrent
                );

            //newPropItem.DefaultValue = String.IsNullOrEmpty(member.Default) ? "" : member.Default;
            newPropItem.DefaultValue = member.Default == "" ? "''" : member.Default;
            newPropItem.Deprecated   = this.readJsDocsDeprecated(
                member.Deprecated, extClass.Name.FullName, name
                );
            newPropItem.AccessModJs = this.readItemAccessModifier(member);
            newPropItem.AccessModTs = newPropItem.AccessModJs;
            newPropItem.IsStatic    = (member.Static.HasValue && member.Static.Value == true);
            newPropItem.IsReadOnly  = (member.Readonly.HasValue && member.Readonly.Value == true);
            if (!newPropItem.IsReadOnly)
            {
                string nameUpper = name.ToUpper();
                if (name == nameUpper && types.CfgOrProp.Count == 1)
                {
                    newPropItem.IsReadOnly = true;                     // it's looking like some contant:
                }
            }
            newPropItem.Renderable = extClass.Extends == null || name == "self";             // force render if it is class without any parent
            extClass.AddMemberProperty(newPropItem);
        }
Exemplo n.º 15
0
        protected string generatePropertyFlags(ExtClass extClass, Property prop, bool classProcessing)
        {
            List <string> flags = new List <string>();
            bool          renderedAsSingletonInterface = extClass.Singleton && extClass.Name.FullName != "Ext";

            if (classProcessing && !renderedAsSingletonInterface)
            {
                // UPDATE for constructing .Def classes: do not render access modifiers anywhere!

                /*
                 * if (prop.AccessModTs == AccessModifier.NONE)
                 *      prop.AccessModTs = prop.AccessModJs;
                 * if (prop.AccessModTs == AccessModifier.NONE)
                 *      prop.AccessModTs = AccessModifier.PUBLIC;
                 * flags.Add(AccessModifiers.Values[prop.AccessModTs]);
                 */

                if (prop.IsStatic || extClass.Name.FullName == "Ext")
                {
                    flags.Add("static");
                }
                if (prop.IsReadOnly)
                {
                    flags.Add("readonly");
                }
            }
            string result = String.Join(" ", flags);

            if (flags.Count > 0)
            {
                result += " ";
            }
            return(result);
        }
Exemplo n.º 16
0
        protected void generateInterfaceInstanceMethodsNotInConfigs(ExtClass extClass)
        {
            // Generate all non-private instance methods not in configs (without any access modifier, because we are inside interface):
            Dictionary <string, Member>         configs = extClass.Members.Configations;
            Dictionary <string, List <Member> > methods = extClass.Members.Methods;
            Method firstMethodVariant;

            foreach (var methodItem in methods)
            {
                // Method has no variants:
                if (methodItem.Value.Count == 0)
                {
                    continue;
                }
                firstMethodVariant = methodItem.Value[0] as Method;
                // If method is constructor - do not render it in config interface object between other methods:
                if (firstMethodVariant.IsConstructor)
                {
                    continue;
                }
                // Mixed template method with config will be rendered between configs,
                // so continue to standard rendering only if not mixed:
                if (!configs.ContainsKey(firstMethodVariant.Name))
                {
                    // Standard method variants rendering:
                    this.generateClassMethodVariants(extClass, methodItem.Value, false);
                }
            }
        }
Exemplo n.º 17
0
        protected void generateEventJsDocs(ExtClass extClass, Event eventVariant)
        {
            List <string> docLines = new List <string>();

            if (eventVariant.Doc != null && eventVariant.Doc.Length > 0)
            {
                docLines.AddRange(eventVariant.Doc);
            }
            docLines.Add("@event");
            this.generateMemberDocCommentDeprecated(
                ref docLines, eventVariant
                );
            this.generateEventJsDocsParams(eventVariant, ref docLines);
            if (docLines.Count == 1)
            {
                this.writeResultLine("/** " + docLines[0] + " */");
            }
            else
            {
                this.writeResultLine("/** ");
                foreach (string docLine in docLines)
                {
                    this.writeResultLine(" * " + docLine);
                }
                this.writeResultLine(" */");
            }
        }
Exemplo n.º 18
0
        protected internal void _addExtClass(ExtClass extClass, bool merge = false)
        {
            //if (extClass == null) Debugger.Break();
            int index;

            if (this.ExtClassesMap.ContainsKey(extClass.Name.FullName) && merge)
            {
                index = this.ExtClassesMap[extClass.Name.FullName];
                this.ExtAllClasses[index].MergeWithMembers(extClass);
            }
            else
            {
                index = this.ExtAllClasses.Count;
                this.ExtAllClasses.Add(extClass);
                this.ExtClassesMap.Add(extClass.Name.FullName, index);
                if (extClass.Extends != null)
                {
                    this.ExtClassesWithParent.Add(index);
                }
                if (extClass.ClassType == ExtTypes.Enums.ClassType.CLASS_STANDARD)
                {
                    this.ExtStandardClasses.Add(extClass);
                    if (extClass.Singleton)
                    {
                        this.ExtStandardSingletonClasses.Add(extClass);
                    }
                }
                else if (extClass.ClassType == ExtTypes.Enums.ClassType.CLASS_ALIAS)
                {
                    this.ExtAliasClasses.Add(extClass);
                }
                else if (extClass.ClassType == ExtTypes.Enums.ClassType.CLASS_METHOD_PARAM_CALLBACK)
                {
                    this.ExtCallbackClasses.Add(extClass.Name.FullName, extClass);
                }
                else if (extClass.ClassType == ExtTypes.Enums.ClassType.CLASS_METHOD_PARAM_CONF_OBJ)
                {
                    this.ExtMethodParamsClasses.Add(extClass);
                }
                else if (extClass.ClassType == ExtTypes.Enums.ClassType.CLASS_STATICS)
                {
                    this.ExtStaticsClasses.Add(extClass);
                }
                else if (extClass.ClassType == ExtTypes.Enums.ClassType.CLASS_CONFIGS)
                {
                    this.ExtStaticsClasses.Add(extClass);
                }
                else if (extClass.ClassType == ExtTypes.Enums.ClassType.CLASS_DEFINITIONS)
                {
                    this.ExtDefinitionsClasses.Add(extClass);
                }
                else if (extClass.ClassType == ExtTypes.Enums.ClassType.CLASS_EVENTS)
                {
                    this.ExtEventsClasses.Add(extClass);
                }
            }
        }
Exemplo n.º 19
0
        protected void readAndAddMethod(ref ExtClass extClass, ExtObjectMember extObjectMember, ref FuncParamsSyntaxCollections funcParamsSyntaxCollections, string currentClassName, string methodName, bool ownedByCurrent, bool isStatic)
        {
            string[] docs = this.readJsDocs(extObjectMember.Doc, JsDocsType.METHOD, currentClassName, methodName);
            Method   item = new Method(
                methodName, funcParamsSyntaxCollections.StandardParamsSyntax, docs, extObjectMember.Owner, ownedByCurrent
                );

            item.Deprecated = this.readJsDocsDeprecated(
                extObjectMember.Deprecated, currentClassName, methodName
                );
            item.AccessModJs     = this.readItemAccessModifier(extObjectMember);
            item.AccessModTs     = item.AccessModJs;
            item.ExistenceReason = ExistenceReasonType.NATURAL;
            item.IsStatic        = isStatic;
            item.IsChainable     = (extObjectMember.Chainable.HasValue && extObjectMember.Chainable.Value == true);
            item.IsTemplate      = (extObjectMember.Template.HasValue && extObjectMember.Template.Value == true);
            item.Renderable      = extClass.Extends == null || extObjectMember.Name == "statics";        // force render if it is class without any parent
            if (item.IsChainable)
            {
                item.Renderable = true;                 // always render chanable method with it's return type
                item.ReturnTypes.Add(extClass.Name.FullName);
            }
            else
            {
                if (extObjectMember.Return != null)
                {
                    item.ReturnTypes = this.readAndAddMethodReturn(
                        ref extClass, extObjectMember, currentClassName, isStatic
                        );
                }
                else
                {
                    item.ReturnTypes.Add("void");
                }
            }
            if (extObjectMember.Return != null && extObjectMember.Return.Doc != null)
            {
                item.ReturnDocs = this.readJsDocs(
                    extObjectMember.Return.Doc,
                    JsDocsType.METHOD_RETURN,
                    currentClassName,
                    "return"
                    );
            }
            extClass.AddMemberMethod(item);
            if (funcParamsSyntaxCollections.SpreadParamsSyntax.Count > 0)
            {
                // There is necessary to add second method form,
                // because there was last param with standard param
                // syntax mixed with spread param syntax:
                Method itemClone = item.Clone();
                itemClone.OwnedByCurrent = item.OwnedByCurrent;
                itemClone.Params         = funcParamsSyntaxCollections.SpreadParamsSyntax;
                extClass.AddMemberMethod(itemClone);
            }
        }
Exemplo n.º 20
0
        protected void readFunctionParamConfObjectProperties(string currentClassName, string extParamsPseudoClassName, string eventOrMethodName, string baseClassOrInterfaceFullName, string pseudoClassDoc, IList <MemberParamProperty> funcParamConfObjectProps, bool eventsCompleting, bool isStatic)
        {
            ConfigProperty funcParamConfObjectPropOther;
            ExtClass       extParamConfObject = new ExtClass(
                extParamsPseudoClassName,
                (baseClassOrInterfaceFullName == "Object"
                                        ? SpecialsGenerator.BASE_PARAMS_INTERFACE_NAME
                                        : baseClassOrInterfaceFullName),
                this.readJsDocs(
                    pseudoClassDoc,
                    eventsCompleting
                                                ? JsDocsType.EVENT_PARAM_CONF_OBJ
                                                : JsDocsType.METHOD_PARAM_CONF_OBJ,
                    extParamsPseudoClassName
                    )
                );

            extParamConfObject.Package = this.currentPackage.Type;
            //extParamConfObject.SrcJson = this.srcJson;
            extParamConfObject.Name.PackagedNamespace = this.GetPackagedNamespaceFromFullClassName(
                currentClassName
                );
            if (eventsCompleting)
            {
                extParamConfObject.Link = new string[] {
                    currentClassName + "." + eventOrMethodName,
                    this.GetLinkHrefForClassEvent(
                        currentClassName, eventOrMethodName
                        )
                };
            }
            else
            {
                extParamConfObject.Link = new string[] {
                    currentClassName + "." + eventOrMethodName,
                    this.GetLinkHrefForClassMethod(
                        currentClassName, isStatic, eventOrMethodName
                        )
                };
            }
            extParamConfObject.ClassType = ClassType.CLASS_METHOD_PARAM_CONF_OBJ;
            foreach (MemberParamProperty funcParamConfObjectProp in funcParamConfObjectProps)
            {
                funcParamConfObjectPropOther = this.readFunctionParamConfObjectProperty(
                    extParamsPseudoClassName,
                    pseudoClassDoc,
                    funcParamConfObjectProp,
                    eventOrMethodName,
                    eventsCompleting,
                    isStatic
                    );
                extParamConfObject.AddMemberProperty(funcParamConfObjectPropOther);
            }
            this.processor.Store.AddExtClass(extParamConfObject);
        }
Exemplo n.º 21
0
        protected void consolidateParentsCountsOrderForClass(
            ref Dictionary <int, Dictionary <int, Dictionary <string, int> > > orderStore,
            ref ExtClass extClass
            )
        {
            Dictionary <string, int> extClassesMap = this.processor.Store.ExtClassesMap;
            List <ExtClass>          extAllClasses = this.processor.Store.ExtAllClasses;
            int parentsCount     = 0;
            int modulePartsCount = 0;
            Dictionary <int, Dictionary <string, int> > parentsCountsRecord;
            Dictionary <string, int> classesInModuleRecord;
            int      classMapIndex;
            ExtClass recursiveClassItem;

            // detect how many parent classes this class have:
            recursiveClassItem = extClass;
            while (true)
            {
                if (recursiveClassItem.Extends == null)
                {
                    break;
                }
                parentsCount += 1;
                if (!extClassesMap.ContainsKey(recursiveClassItem.Extends.FullName))
                {
                    // class is extended from some unknown class type,
                    // so it's not possible to determinate more parent classes:
                    break;
                }
                classMapIndex      = extClassesMap[recursiveClassItem.Extends.FullName];
                recursiveClassItem = extAllClasses[classMapIndex];
                extClass.Parents.Add(recursiveClassItem);
            }
            // detect how complicated is module name:
            if (extClass.Name.IsInModule)
            {
                modulePartsCount = extClass.Name.NamespaceName.Split('.').Length;
            }
            // prepare order store place:
            if (!orderStore.ContainsKey(parentsCount))
            {
                orderStore.Add(parentsCount, new Dictionary <int, Dictionary <string, int> >());
            }
            parentsCountsRecord = orderStore[parentsCount];
            if (!parentsCountsRecord.ContainsKey(modulePartsCount))
            {
                parentsCountsRecord.Add(modulePartsCount, new Dictionary <string, int>());
            }
            classesInModuleRecord = parentsCountsRecord[modulePartsCount];
            classesInModuleRecord.Add(
                extClass.Name.FullName,
                extClassesMap[extClass.Name.FullName]
                );
        }
Exemplo n.º 22
0
        protected void generateInterfaceOpenClose(ExtClass extClass)
        {
            string line = "interface " + extClass.Name.ClassName;

            if (extClass.Extends != null)
            {
                line += " extends " + this.checkBrowserGlobalClass(extClass.Extends.FullName);
            }
            line += " {}";
            this.writeResultLine(line);
        }
Exemplo n.º 23
0
        // used only in class `ExtGlobalObject` and in interfaces `Ext.base.(Cfg|Params|Statics|Events)`
        protected void generateMemberIndexer(ExtClass extClass, Indexer indexer)
        {
            if (this.processor.GenerateJsDocs)
            {
                this.writeResultLine("/** @indexer */");
            }
            string line = indexer.IsReadOnly ? "readonly " : "";

            line += "[" + indexer.Name + ": " + String.Join(" | ", indexer.KeyTypes) + "]: "
                    + this.generateMemberIndexerTypes(indexer) + ";";
            this.writeResultLine(line);
        }
Exemplo n.º 24
0
        protected void resolveMethodsExtending(
            ref ExtClass currentExtClass,
            Dictionary <string, List <Member> > methodsCollection,
            bool instanceMethodsProcessing
            )
        {
            bool currentMethodVariantsAreNecessaryToDefine;

            string[]      methodsCollectionKeys = methodsCollection.Keys.ToArray <string>();
            string        methodName;
            List <Member> currentMethodVariants;
            Dictionary <string, List <Member> > methodsTree;
            Method firstMethodVariant;

            for (int i = 0; i < methodsCollectionKeys.Length; i++)
            {
                methodName            = methodsCollectionKeys[i];
                currentMethodVariants = methodsCollection[methodName];
                firstMethodVariant    = currentMethodVariants.FirstOrDefault <Member>() as Method;
                if (firstMethodVariant.IsChainable)
                {
                    methodsCollection[methodName] = this.resolveMethodsExtendingChainableParents(
                        ref currentExtClass,
                        ref currentMethodVariants,
                        instanceMethodsProcessing,
                        methodName
                        );
                }
                else
                {
                    currentMethodVariantsAreNecessaryToDefine = firstMethodVariant.Renderable;
                    methodsTree = new Dictionary <string, List <Member> >()
                    {
                        { currentExtClass.Name.FullName, currentMethodVariants }
                    };
                    this.resolveMethodsExtendingTraverse(
                        ref currentExtClass,
                        ref currentMethodVariants,
                        ref methodsTree,
                        ref currentMethodVariantsAreNecessaryToDefine,
                        instanceMethodsProcessing,
                        methodName
                        );
                    methodsCollection[methodName] = this.resolveMethodsExtendingAccessModifiers(
                        ref currentMethodVariants,
                        ref methodsTree,
                        instanceMethodsProcessing,
                        currentMethodVariantsAreNecessaryToDefine
                        );
                }
            }
        }
Exemplo n.º 25
0
        public void Resolve(ref ExtClass extClass)
        {
            bool hasParents = extClass.Extends == null;

            if (hasParents)
            {
                this.setBaseClassPropsAndMethodsNotInherite(ref extClass);
            }
            else
            {
                this.resolveMembersExtending(ref extClass);
            }
        }
Exemplo n.º 26
0
        protected void generateMethods(ExtClass extClass, bool instanceMembers, bool classProcessing, AccessModifier typeScriptAccessMod, AccessModifier javascriptAccessMod)
        {
            Dictionary <string, Member> props = instanceMembers
                                ? extClass.Members.Properties
                                : extClass.Members.PropertiesStatic;
            Dictionary <string, List <Member> > methods = instanceMembers
                                ? extClass.Members.Methods
                                : extClass.Members.MethodsStatic;
            Method   firstMethodVariant;
            Property mixedProp;
            bool     renderedAsSingletonInterface = extClass.Singleton && extClass.Name.FullName != "Ext";

            foreach (var methodItem in methods)
            {
                // Method has no variants:
                if (methodItem.Value.Count == 0)
                {
                    continue;
                }
                firstMethodVariant = methodItem.Value[0] as Method;
                // Method variants are not necessary to render, they are extended naturaly in the same form:
                if (!firstMethodVariant.Renderable)
                {
                    continue;
                }
                // Method variants are not possible to render, because class is rendered as singleton interface,
                // where is not possible to render inherited method variants:
                if (renderedAsSingletonInterface && firstMethodVariant.Inherited)
                {
                    continue;
                }
                // If method variants have currently required access modifiers:
                if (
                    (firstMethodVariant.AccessModTs & typeScriptAccessMod) != 0 &&
                    (firstMethodVariant.AccessModJs & javascriptAccessMod) != 0
                    )
                {
                    if (props.ContainsKey(firstMethodVariant.Name))
                    {
                        // Mixed method variants with property - always caused by two mixins classes:
                        mixedProp = props[firstMethodVariant.Name] as Property;
                        this.generateClassMethodVariantsWithProperty(extClass, methodItem.Value, mixedProp, classProcessing);
                    }
                    else
                    {
                        // Standard method variants rendering:
                        this.generateClassMethodVariants(extClass, methodItem.Value, classProcessing);
                    }
                }
            }
        }
Exemplo n.º 27
0
        protected void generateInterfaceEvent(ExtClass extClass, Event eventVariant)
        {
            // Generate TypeScript doc comments for standard configuration:
            if (this.processor.GenerateJsDocs && !extClass.Private)
            {
                this.generateEventJsDocs(extClass, eventVariant);
            }
            // generate TypeScript definition code:
            string line = eventVariant.Name + "? ("
                          + this.generateMethodParams(extClass, eventVariant.Params)
                          + "): void;";

            this.writeResultLine(line);
        }
Exemplo n.º 28
0
        protected void generateConfigurationJsDocs(ExtClass extClass, Configuration config)
        {
            List <string> docLines = new List <string>();

            if (config.Doc != null && config.Doc.Length > 0)
            {
                docLines.AddRange(config.Doc);
            }
            if (extClass.ClassType == ClassType.CLASS_CONFIGS)
            {
                docLines.Add("@configuration");
            }
            if (config.Required)
            {
                docLines.Add("@required");
            }
            else
            {
                docLines.Add("@optional");
            }
            if (extClass.ClassType == ClassType.CLASS_CONFIGS)
            {
                if (!String.IsNullOrEmpty(config.DefaultValue))
                {
                    docLines.Add(
                        "@default " + config.DefaultValue.Replace("*/", "*\\/")
                        );
                }
            }
            this.generateMemberDocCommentDeprecated(
                ref docLines, config
                );
            this.generateConfigurationDocCommentTypes(
                ref docLines, config
                );
            if (docLines.Count == 1)
            {
                this.writeResultLine("/** " + docLines[0] + " */");
            }
            else
            {
                this.writeResultLine("/** ");
                foreach (string docLine in docLines)
                {
                    this.writeResultLine(" * " + docLine);
                }
                this.writeResultLine(" */");
            }
        }
Exemplo n.º 29
0
        protected void generateInterfacePropertyConfiguration(ExtClass extClass, ConfigProperty configProp)
        {
            if (this.processor.GenerateJsDocs && !extClass.Private)
            {
                // Generate TypeScript doc comments for standard property:
                this.generateConfigPropertyJsDocs(extClass, configProp);
            }

            // generate TypeScript definition code:
            string line = configProp.Name + (configProp.Required ? ": " : "?: ")
                          + this.generateConfigPropertyTypes(configProp)
                          + ";";

            this.writeResultLine(line);
        }
Exemplo n.º 30
0
 protected internal void AddExtClass(ExtClass extClass, bool merge = false)
 {
     if (this.insideLock)
     {
         this._addExtClass(extClass, merge);
     }
     else
     {
         lock (this.addLock) {
             this.insideLock = true;
             this._addExtClass(extClass, merge);
             this.insideLock = false;
         }
     }
 }
Exemplo n.º 31
0
        public static bool IsStatic(ExtClass ec, string member) {
            if (ec.Name == "DialogManager") return true;
            if (ec.Name == "EventObject") return false;
            if (ec.Singleton) return true;

            return false;
        }