protected override TreeViewItem BuildRoot()
        {
            m_CurrentDepth = 0;
            var root = new TreeViewItem(-1, -1);

            root.children = new List <TreeViewItem>();

            string baseName       = "Analyze Rules";
            string fixableRules   = "Fixable Rules";
            string unfixableRules = "Unfixable Rules";

            AnalyzeRuleContainerTreeViewItem baseViewItem = new AnalyzeRuleContainerTreeViewItem(baseName.GetHashCode(), m_CurrentDepth, baseName);

            baseViewItem.children           = new List <TreeViewItem>();
            baseViewItem.analyzeRule.CanFix = true;

            root.AddChild(baseViewItem);

            m_CurrentDepth++;

            var fixable   = new AnalyzeRuleContainerTreeViewItem(fixableRules.GetHashCode(), m_CurrentDepth, fixableRules);
            var unfixable = new AnalyzeRuleContainerTreeViewItem(unfixableRules.GetHashCode(), m_CurrentDepth, unfixableRules);

            fixable.analyzeRule.CanFix   = true;
            unfixable.analyzeRule.CanFix = false;

            baseViewItem.AddChild(fixable);
            baseViewItem.AddChild(unfixable);

            m_CurrentDepth++;

            for (int i = 0; i < AnalyzeRuleGUI.Rules.Count; i++)
            {
                AnalyzeRuleContainerTreeViewItem ruleContainer = new AnalyzeRuleContainerTreeViewItem(
                    AnalyzeRuleGUI.Rules[i].ruleName.GetHashCode(), m_CurrentDepth, AnalyzeRuleGUI.Rules[i]);

                if (ruleContainer.analyzeRule.CanFix)
                {
                    fixable.AddChild(ruleContainer);
                }
                else
                {
                    unfixable.AddChild(ruleContainer);
                }
            }

            m_CurrentDepth++;

            int index          = 0;
            var ruleContainers = GatherAllInheritRuleContainers(baseViewItem);

            foreach (var ruleContainer in ruleContainers)
            {
                if (ruleContainer != null && resultData.Data.ContainsKey(ruleContainer.analyzeRule.ruleName))
                {
                    EditorUtility.DisplayProgressBar("Calculating Results for " + ruleContainer.displayName, "", (index / ruleContainers.Count) % 100);
                    BuildResults(ruleContainer, resultData.Data[ruleContainer.analyzeRule.ruleName]);
                }

                index++;
            }

            EditorUtility.ClearProgressBar();
            return(root);
        }