private CaseInsensitiveBuildParameters(IReadOnlyDictionary <string, string> parameters, IReadOnlyList <DuplicateBuildParameter> duplicates, OnDuplicateParameter reporter) { m_reporter = reporter; m_parameters = parameters; ReportDuplicates(duplicates, reporter); }
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); } } }
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)); }
/// <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)); }
internal Factory(OnDuplicateParameter reporter) { m_reporter = reporter; }
// ================================================================================== // == 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)); }
/// <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)); }