Example #1
0
        protected internal bool ConsolidateParentsCountsOrder(consolidateProgressHandler progressHandler)
        {
            this.progressHandler = progressHandler;
            // dct key: parents counts, dct value: (dct key: modules parts count, dct value: (dct with class names as keys and class indexes as values))
            Dictionary <int, Dictionary <int, Dictionary <string, int> > > orderStore = new Dictionary <int, Dictionary <int, Dictionary <string, int> > >();
            ExtClass extClass;
            int      processedClassesCount = 0;

            for (int i = 0; i < this.processor.Store.ExtAllClasses.Count; i++)
            {
                extClass = this.processor.Store.ExtAllClasses[i];
                // check if class is not only the method params function callback class object,
                // because those classes are rendered directly, not as types:
                if (extClass.ClassType == ExtTypes.Enums.ClassType.CLASS_METHOD_PARAM_CALLBACK)
                {
                    processedClassesCount += 1;
                    this.progressHandler.Invoke(processedClassesCount, extClass.Name.FullName);
                    continue;
                }
                this.consolidateParentsCountsOrderForClass(
                    ref orderStore, ref extClass
                    );
                processedClassesCount += 1;
                this.progressHandler.Invoke(processedClassesCount, extClass.Name.FullName);
            }
            this.consolidateParentsCountsOrderSortCollections(
                orderStore, processedClassesCount
                );
            return(true);
        }
Example #2
0
        protected internal bool ConsolidateClassesIntoNsGroups(consolidateProgressHandler progressHandler)
        {
            this.progressHandler = progressHandler;
            int    extClassesIndex = 0;
            string optimalizedNamespaceName;
            bool   indexesRecordExist;
            Dictionary <string, List <int> > extBaseNsClasses;
            List <int> extClassesIndexes;
            // Consolidate classes into optimalized package namespaces groups:
            ExtClass     extClass;
            ExtJsPackage package;

            for (int i = 0; i < this.processor.Store.ExtAllClasses.Count; i++)
            {
                //if (i == 160) Debugger.Break();
                extClass = this.processor.Store.ExtAllClasses[i];
                // Check if class is not only the method params function callback class object,
                // because those classes are rendered directly, not as types:
                if (extClass.ClassType == ExtTypes.Enums.ClassType.CLASS_METHOD_PARAM_CALLBACK)
                {
                    extClassesIndex += 1;
                    this.progressHandler.Invoke(extClassesIndex, extClass.Name.FullName);
                    continue;
                }
                package = extClass.Package;
                // Consolidate class index into optimalized namespace group:
                optimalizedNamespaceName = this.getClassOptimalizedNamespaceName(
                    extClass, this.processor.Store.ExtBaseNs[package]
                    );
                if (!this.processor.Store.ExtBaseNsClasses.ContainsKey(package))
                {
                    this.processor.Store.ExtBaseNsClasses.Add(package, new Dictionary <string, List <int> >());
                }
                extBaseNsClasses   = this.processor.Store.ExtBaseNsClasses[package];
                indexesRecordExist = extBaseNsClasses.ContainsKey(optimalizedNamespaceName);
                if (indexesRecordExist)
                {
                    extClassesIndexes = extBaseNsClasses[optimalizedNamespaceName];
                }
                else
                {
                    extClassesIndexes = new List <int>();
                }
                extClassesIndexes.Add(extClassesIndex);
                if (indexesRecordExist)
                {
                    extBaseNsClasses[optimalizedNamespaceName] = extClassesIndexes;
                }
                else
                {
                    extBaseNsClasses.Add(optimalizedNamespaceName, extClassesIndexes);
                }
                //
                extClassesIndex += 1;
                this.progressHandler.Invoke(extClassesIndex, extClass.Name.FullName);
            }
            return(true);
        }
Example #3
0
        protected internal bool OptimalizeNamespacesIntoGroups(consolidateProgressHandler progressHandler)
        {
            this.progressHandler = progressHandler;
            int          extClassesIndex = 0;
            ExtJsPackage package;
            Dictionary <ExtJsPackage, List <Dictionary <string, int> > > allPackagesBaseNamespaces = new Dictionary <ExtJsPackage, List <Dictionary <string, int> > >();
            List <Dictionary <string, int> > packageBaseNamespaces = new List <Dictionary <string, int> >();
            ExtClass extClass;

            for (int i = 0; i < this.processor.Store.ExtAllClasses.Count; i++)
            {
                extClass = this.processor.Store.ExtAllClasses[i];
                // Check if class is not only the method params function callback class object,
                // because those classes are rendered directly, not as types:
                if (extClass.ClassType == ExtTypes.Enums.ClassType.CLASS_METHOD_PARAM_CALLBACK)
                {
                    extClassesIndex += 1;
                    this.progressHandler.Invoke(extClassesIndex, extClass.Name.FullName);
                    continue;
                }
                package = extClass.Package;
                if (!allPackagesBaseNamespaces.ContainsKey(package))
                {
                    allPackagesBaseNamespaces.Add(package, new List <Dictionary <string, int> >());
                }
                packageBaseNamespaces = allPackagesBaseNamespaces[package];
                this.consolidateClassesPackagedNamespaces(extClass, ref packageBaseNamespaces);
                extClassesIndex += 1;
                this.progressHandler.Invoke(extClassesIndex, extClass.Name.FullName);
            }
            // Consolidate namespaces with lowest class counts into small packages:
            foreach (var item in allPackagesBaseNamespaces)
            {
                this.processor.Store.ExtBaseNs.Add(
                    item.Key,

                    /*this.consolidateClassNamespacesNotOptimalized(
                     *      item.Value
                     * )*/
                    this.consolidateClassesPackagedNamespacesOptimalized(
                        item.Value
                        )
                    );
            }
            return(true);
        }
Example #4
0
        protected internal bool GenerateAlternativeClasses(consolidateProgressHandler progressHandler)
        {
            // generate empty classes to use classes alternative names:
            int      extClassesIndex = 0;
            ExtClass alternativeAliasClass;
            Store    store  = this.processor.Store;
            Reader   reader = this.processor.Reader;

            foreach (ExtClass extClass in store.ExtStandardClasses)
            {
                if (extClass.AlternativeNames.Count > 0)
                {
                    foreach (NameInfo altClassNameInfo in extClass.AlternativeNames)
                    {
                        alternativeAliasClass = new ExtClass(
                            altClassNameInfo, extClass.Name
                            );
                        alternativeAliasClass.Package = extClass.Package;
                        //alternativeAliasClass.SrcJson = extClass.SrcJson;
                        alternativeAliasClass.Name.PackagedNamespace = reader.GetPackagedNamespaceFromFullClassName(
                            extClass.Name.FullName
                            );
                        alternativeAliasClass.ClassType = ClassType.CLASS_ALIAS;
                        if (store.ExtClassesMap.ContainsKey(
                                alternativeAliasClass.Name.FullName
                                ))
                        {
                            try {
                                throw new Exception(
                                          "There was not possible to create alias class `"
                                          + alternativeAliasClass.Name.FullName
                                          + " ` for class `"
                                          + extClass.Name.FullName
                                          + "`. Class with this name already exists."
                                          );
                            } catch (Exception e) {
                                this.processor.Exceptions.Add(e);
                            }
                        }
                        else
                        {
                            store.AddExtClass(alternativeAliasClass);
                        }
                    }
                }
                extClassesIndex += 1;
                progressHandler.Invoke(
                    extClassesIndex,
                    extClass.Name.FullName
                    );
            }
            // Generate proxy classes for global browser classes like:
            // Object, Array, Date, Element, Function, Error, Promise:
            foreach (string jsGlobalAlsoInExtNs in JavascriptInternals.JsGlobalsAlsoInExtNamespace)
            {
                this.generateBrowserGlobalProxyClass(jsGlobalAlsoInExtNs);
            }
            this.generateBaseMethodParamsAndReturnsInterfaces();

            return(true);
        }