protected override void ContextClicked()
        {
            if (SelectionContainsRuleContainer)
            {
                GenericMenu menu = new GenericMenu();
                menu.AddItem(new GUIContent("Run Analyze Rule"), false, RunAllSelectedRules);
                menu.AddItem(new GUIContent("Clear Analyze Results"), false, ClearAllSelectedRules);

                if (SelectionContainsFixableRule && SelectionContainsErrors)
                {
                    menu.AddItem(new GUIContent("Fix Analyze Rule"), false, FixAllSelectedRules);
                }
                else
                {
                    menu.AddDisabledItem(new GUIContent("Fix Analyze Rule"));
                }

                IList <int> selectedIds = GetSelection();
                if (selectedIds.Count == 1)
                {
                    AnalyzeRuleContainerTreeViewItem analyzeRuleContainer = FindItem(selectedIds[0], rootItem) as AnalyzeRuleContainerTreeViewItem;
                    if (analyzeRuleContainer != null)
                    {
                        foreach (var customMenuItem in analyzeRuleContainer.analyzeRule.GetCustomContextMenuItems())
                        {
                            if (customMenuItem.MenuEnabled)
                            {
                                menu.AddItem(new GUIContent(customMenuItem.MenuName), customMenuItem.ToggledOn, () => customMenuItem.MenuAction());
                            }
                            else
                            {
                                menu.AddDisabledItem(new GUIContent(customMenuItem.MenuName));
                            }
                        }
                    }
                }

                menu.ShowAsContext();
                Repaint();
            }
            else
            {
                var selectedIds = this.GetSelection();
                List <AnalyzeResultsTreeViewItem> items = new List <AnalyzeResultsTreeViewItem>();
                foreach (int id in selectedIds)
                {
                    var item = FindItem(id, rootItem) as AnalyzeResultsTreeViewItem;
                    if (item != null)
                    {
                        items.Add(item);
                    }
                }

                if (items.Count > 0)
                {
                    AnalyzeResultsTreeViewItem.ContextClicked(items);
                }
            }
        }
        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);
        }