private int CalcNumOfRootElements(Alias alias)
        {
            int result   = 0;
            var aliasDef = alias.AliasDefinition;

            if (aliasDef == null)
            {
                return(0);
            }
            if (aliasDef.HasCircularReference)
            {
                return(0);
            }
            PairCollection <Entity> entities = null;

            if (aliasDef.Delimiter == DelimiterEnum.CC)
            {
                var choiceInfo = JsonGenerator.FindChoiceInfo(_choiceStack.Peek(), alias);
                if (choiceInfo?.Children != null)
                {
                    entities = ((Element)choiceInfo.Children[0].ChoiceNode).Entities;
                }
            }
            else
            {
                entities = aliasDef.Entities;
            }

            if (entities == null)
            {
                return(result);
            }
            foreach (var entity in entities)
            {
                if (entity is DOM.Element)
                {
                    result++;
                    continue;
                }

                var scopeEntity = entity as Scope;
                if (scopeEntity != null)
                {
                    result += CalcNumOfRootElements(scopeEntity);
                    continue;
                }

                var aliasEntity = entity as DOM.Alias;
                if (aliasEntity != null)
                {
                    result += CalcNumOfRootElements((Alias)aliasEntity);
                    continue;
                }
            }
            return(result);
        }