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); }