Пример #1
0
        /// <summary>
        /// Merges two settings files together.
        /// </summary>
        /// <param name="originalSettings">
        /// The original settings.
        /// </param>
        /// <param name="overridingSettings">
        /// The settings which are overriding the original settings.
        /// </param>
        /// <returns>
        /// Returns the merged settings.
        /// </returns>
        private static Settings MergeSettings(Settings originalSettings, Settings overridingSettings)
        {
            Param.AssertNotNull(originalSettings, "originalSettings");
            Param.AssertNotNull(overridingSettings, "overridingSettings");

            //// TODO Not sure why this has to be true
            //// TODO Also where are we getting a different core from?
            Debug.Assert(originalSettings.Core == overridingSettings.Core, "The settings must come from the same core instance.");

            // Create a new merged settings object.
            Settings mergedSettings = new Settings(originalSettings.Core);

            // Merge the global settings together.
            MergePropertyCollections(originalSettings.GlobalSettings, overridingSettings.GlobalSettings, mergedSettings.GlobalSettings);

            // Merge the parser settings together. Loop through the settings for each parser in the original settings.
            foreach (AddInPropertyCollection originalParserSettings in originalSettings.ParserSettings)
            {
                // Try to find settings for this parser in the overriding settings.
                AddInPropertyCollection overridingParserSettings = overridingSettings.GetAddInSettings(originalParserSettings.AddIn);

                // Create a new merged parser settings object.
                AddInPropertyCollection mergedParserSettings = new AddInPropertyCollection(originalParserSettings.AddIn);
                mergedSettings.SetAddInSettings(mergedParserSettings);

                // Merge the parser settings together.
                MergePropertyCollections(originalParserSettings, overridingParserSettings, mergedParserSettings);
            }

            // Now loop through the settings for each parser in the overriding settings. If there are any parser
            // settings here that aren't in the merged settings, then copy the settings directly from the overriding settings.
            // This means that there were no settings for this parser in the original settings.
            foreach (AddInPropertyCollection overridingParserSettings in overridingSettings.ParserSettings)
            {
                AddInPropertyCollection mergedParserSettings = mergedSettings.GetAddInSettings(overridingParserSettings.AddIn);
                if (mergedParserSettings == null)
                {
                    mergedSettings.SetAddInSettings((AddInPropertyCollection)overridingParserSettings.Clone());
                }
            }

            // Merge the analyzer settings together. Loop through the settings for each analyzer in the original settings.
            foreach (AddInPropertyCollection originalAnalyzerSettings in originalSettings.AnalyzerSettings)
            {
                // Try to find settings for this analyzer in the overriding settings.
                AddInPropertyCollection overridingAnalyzerSettings = overridingSettings.GetAddInSettings(originalAnalyzerSettings.AddIn);

                // Create a new merged analyzer settings object.
                AddInPropertyCollection mergedAnalyzerSettings = new AddInPropertyCollection(originalAnalyzerSettings.AddIn);
                mergedSettings.SetAddInSettings(mergedAnalyzerSettings);

                // Merge the analyer settings together.
                MergePropertyCollections(originalAnalyzerSettings, overridingAnalyzerSettings, mergedAnalyzerSettings);
            }

            // Now loop through the settings for each analyzer in the overriding settings. If there are any analyzer
            // settings here that aren't in the merged settings, then copy the settings directly from the overriding settings.
            // This means that there were no settings for this analyzer in the original settings.
            foreach (AddInPropertyCollection overridingAnalyzerSettings in overridingSettings.AnalyzerSettings)
            {
                AddInPropertyCollection mergedAnalyzerSettings = mergedSettings.GetAddInSettings(overridingAnalyzerSettings.AddIn);
                if (mergedAnalyzerSettings == null)
                {
                    mergedSettings.SetAddInSettings((AddInPropertyCollection)overridingAnalyzerSettings.Clone());
                }
            }

            // Merge the write times together. Set the write time of the merged settings file to the most
            // recent write time of the two file which were merged.
            if (originalSettings.WriteTime.CompareTo(overridingSettings.WriteTime) > 0)
            {
                mergedSettings.WriteTime = originalSettings.WriteTime;
            }
            else
            {
                mergedSettings.WriteTime = overridingSettings.WriteTime;
            }

            return(mergedSettings);
        }