Esempio n. 1
0
            private CaseInsensitiveBuildParameters(IReadOnlyDictionary <string, string> parameters, IReadOnlyList <DuplicateBuildParameter> duplicates, OnDuplicateParameter reporter)
            {
                m_reporter   = reporter;
                m_parameters = parameters;

                ReportDuplicates(duplicates, reporter);
            }
Esempio n. 2
0
            private static void ReportDuplicates(IReadOnlyList <DuplicateBuildParameter> duplicates, OnDuplicateParameter callback)
            {
                Contract.Requires(duplicates != null);

                if (callback != null)
                {
                    foreach (var duplicate in duplicates)
                    {
                        callback(duplicate.Key, duplicate.Value1, duplicate.Value2);
                    }
                }
            }
Esempio n. 3
0
            private static CaseInsensitiveBuildParameters Deduplicate(IEnumerable <KeyValuePair <string, string> > parameters, OnDuplicateParameter reporter)
            {
                var duplicates = new List <DuplicateBuildParameter>();

                var result = new Dictionary <string, string>(s_parametersKeyComparer);

                foreach (var envVar in parameters)
                {
                    string existingValue;
                    if (!result.TryGetValue(envVar.Key, out existingValue))
                    {
                        result.Add(envVar.Key, envVar.Value);
                    }
                    else if (!string.Equals(existingValue, envVar.Value))
                    {
                        duplicates.Add(new DuplicateBuildParameter(envVar.Key, existingValue, envVar.Value));
                    }
                }

                return(new CaseInsensitiveBuildParameters(result, duplicates.AsReadOnly(), reporter));
            }
Esempio n. 4
0
            /// <summary>
            ///     Factory method.  Any duplicates found in <paramref name="parameters"/> are reported to <paramref name="reporter"/>.
            /// </summary>
            public static IBuildParameters PopulateFromDictionary(IEnumerable <KeyValuePair <string, string> > parameters, OnDuplicateParameter reporter)
            {
                Contract.Requires(parameters != null);
                Contract.Ensures(Contract.Result <IBuildParameters>() != null);

                return(Deduplicate(parameters, reporter));
            }
Esempio n. 5
0
 internal Factory(OnDuplicateParameter reporter)
 {
     m_reporter = reporter;
 }
Esempio n. 6
0
        // ==================================================================================
        // == Public Factory Methods
        // ==================================================================================

        /// <summary>
        ///     Returns a preconfigured factory for handling <see cref="IBuildParameters"/>.
        ///     If <paramref name="callback"/> is specified, it is called every time upon
        ///     creation of a new <see cref="IBuildParameters"/> instance to report any
        ///     encountered duplicates.
        /// </summary>
        public static Factory GetFactory(OnDuplicateParameter callback = null)
        {
            return(new Factory(callback));
        }
Esempio n. 7
0
            /// <summary>
            ///     Factory method.  Any duplicates found in <paramref name="parameters"/> are reported to <paramref name="reporter"/>.
            /// </summary>
            public static IBuildParameters PopulateFromDictionary(IEnumerable <KeyValuePair <string, string> > parameters, OnDuplicateParameter reporter)
            {
                Contract.RequiresNotNull(parameters);

                return(Deduplicate(parameters, reporter));
            }