/// <summary> /// Fills the given analyzer node with it's rules. /// </summary> /// <param name="analyzer">Source analyzer</param> /// <param name="analyzerIter">Analyzer node iterator.</param> private void FillAnalyzerRules(SourceAnalyzer analyzer, Gtk.TreeIter analyzerIter) { IEnumerable<Rule> addinRules = null; // We must use reflection at the moment to get all analyzer rules. PropertyInfo prop = analyzer.GetType().GetProperty("AddInRules", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (prop != null && prop.CanRead) { addinRules = prop.GetValue(analyzer, null) as IEnumerable<Rule>; } if (addinRules != null) { Dictionary<string, Gtk.TreeIter> tempRuleGroups = new Dictionary<string, Gtk.TreeIter>(); foreach (Rule rule in addinRules) { // Only show rules which can be disabled. if (rule.CanDisable) { // Get or create the rule group node for this rule, if necessary. Gtk.TreeIter ruleParentIter = analyzerIter; if (!string.IsNullOrEmpty(rule.RuleGroup)) { if (!tempRuleGroups.TryGetValue(rule.RuleGroup, out ruleParentIter)) { ruleParentIter = this.rulesStore.AppendValues(analyzerIter, false, null, rule, null, false); tempRuleGroups.Add(rule.RuleGroup, ruleParentIter); } } bool isChecked = rule.EnabledByDefault; BooleanProperty enabledDisabledSetting = analyzer.GetRuleSetting(this.SettingsHandler.MergedSettings, rule.Name, "Enabled") as BooleanProperty; if (enabledDisabledSetting != null) { isChecked = enabledDisabledSetting.Value; } bool isOverridden = this.DetectRuleOverride(analyzer, rule, isChecked, false); Gtk.TreeIter ruleIter = this.rulesStore.AppendValues(ruleParentIter, isChecked, null, rule, analyzer, isOverridden); this.SetParentIterValues(ruleIter, isChecked, null); if (isOverridden) { this.rulesStore.SetValue(ruleParentIter, (int)TreeStoreColumns.Overridden, true); this.rulesStore.SetValue(analyzerIter, (int)TreeStoreColumns.Overridden, true); } } } } }