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