11using System ;
22using System . Collections . Generic ;
3- using System . ComponentModel ;
43using System . Globalization ;
54using System . Linq ;
65using BenchmarkDotNet . Analysers ;
@@ -118,49 +117,49 @@ public ManualConfig WithWakeLock(WakeLockType wakeLockType)
118117
119118 public ManualConfig AddColumn ( params IColumn [ ] newColumns )
120119 {
121- columnProviders . AddRange ( newColumns . Select ( c => c . ToProvider ( ) ) ) ;
120+ columnProviders . AddRangeDistinct ( newColumns . Select ( c => c . ToProvider ( ) ) ) ;
122121 return this ;
123122 }
124123
125124 public ManualConfig AddColumnProvider ( params IColumnProvider [ ] newColumnProviders )
126125 {
127- columnProviders . AddRange ( newColumnProviders ) ;
126+ columnProviders . AddRangeDistinct ( newColumnProviders ) ;
128127 return this ;
129128 }
130129
131130 public ManualConfig AddExporter ( params IExporter [ ] newExporters )
132131 {
133- exporters . AddRange ( newExporters ) ;
132+ exporters . AddRangeDistinct ( newExporters ) ;
134133 return this ;
135134 }
136135
137136 public ManualConfig AddLogger ( params ILogger [ ] newLoggers )
138137 {
139- loggers . AddRange ( newLoggers ) ;
138+ loggers . AddRangeDistinct ( newLoggers ) ;
140139 return this ;
141140 }
142141
143142 public ManualConfig AddDiagnoser ( params IDiagnoser [ ] newDiagnosers )
144143 {
145- diagnosers . AddRange ( newDiagnosers ) ;
144+ diagnosers . AddRangeDistinct ( newDiagnosers ) ;
146145 return this ;
147146 }
148147
149148 public ManualConfig AddAnalyser ( params IAnalyser [ ] newAnalysers )
150149 {
151- analysers . AddRange ( newAnalysers ) ;
150+ analysers . AddRangeDistinct ( newAnalysers ) ;
152151 return this ;
153152 }
154153
155154 public ManualConfig AddValidator ( params IValidator [ ] newValidators )
156155 {
157- validators . AddRange ( newValidators ) ;
156+ validators . AddRangeDistinct ( newValidators ) ;
158157 return this ;
159158 }
160159
161160 public ManualConfig AddJob ( params Job [ ] newJobs )
162161 {
163- jobs . AddRange ( newJobs . Select ( j => j . Freeze ( ) ) ) ; // DONTTOUCH: please DO NOT remove .Freeze() call.
162+ jobs . AddRangeDistinct ( newJobs . Select ( j => j . Freeze ( ) ) ) ; // DONTTOUCH: please DO NOT remove .Freeze() call.
164163 return this ;
165164 }
166165
@@ -172,68 +171,63 @@ public ManualConfig AddHardwareCounters(params HardwareCounter[] newHardwareCoun
172171
173172 public ManualConfig AddFilter ( params IFilter [ ] newFilters )
174173 {
175- filters . AddRange ( newFilters ) ;
174+ filters . AddRangeDistinct ( newFilters ) ;
176175 return this ;
177176 }
178177
179178 public ManualConfig AddLogicalGroupRules ( params BenchmarkLogicalGroupRule [ ] rules )
180179 {
181- foreach ( var rule in rules )
182- {
183- if ( logicalGroupRules . Contains ( rule ) )
184- logicalGroupRules . Remove ( rule ) ;
185- logicalGroupRules . Add ( rule ) ;
186- }
180+ logicalGroupRules . AddRangeDistinct ( rules ) ;
187181 return this ;
188182 }
189183
190184 public ManualConfig AddEventProcessor ( params EventProcessor [ ] newEventProcessors )
191185 {
192- this . eventProcessors . AddRange ( newEventProcessors ) ;
186+ eventProcessors . AddRangeDistinct ( newEventProcessors ) ;
193187 return this ;
194188 }
195189
196190 [ PublicAPI ]
197191 public ManualConfig HideColumns ( params string [ ] columnNames )
198192 {
199- columnHidingRules . AddRange ( columnNames . Select ( c => new ColumnHidingByNameRule ( c ) ) ) ;
193+ columnHidingRules . AddRangeDistinct ( columnNames . Select ( c => new ColumnHidingByNameRule ( c ) ) ) ;
200194 return this ;
201195 }
202196
203197 [ PublicAPI ]
204198 public ManualConfig HideColumns ( params IColumn [ ] columns )
205199 {
206- columnHidingRules . AddRange ( columns . Select ( c => new ColumnHidingByIdRule ( c ) ) ) ;
200+ columnHidingRules . AddRangeDistinct ( columns . Select ( c => new ColumnHidingByIdRule ( c ) ) ) ;
207201 return this ;
208202 }
209203
210204 [ PublicAPI ]
211205 public ManualConfig HideColumns ( params IColumnHidingRule [ ] rules )
212206 {
213- columnHidingRules . AddRange ( rules ) ;
207+ columnHidingRules . AddRangeDistinct ( rules ) ;
214208 return this ;
215209 }
216210
217211 [ PublicAPI ]
218212 public void Add ( IConfig config )
219213 {
220- columnProviders . AddRange ( config . GetColumnProviders ( ) ) ;
221- exporters . AddRange ( config . GetExporters ( ) ) ;
222- loggers . AddRange ( config . GetLoggers ( ) ) ;
223- diagnosers . AddRange ( config . GetDiagnosers ( ) ) ;
224- analysers . AddRange ( config . GetAnalysers ( ) ) ;
225- jobs . AddRange ( config . GetJobs ( ) ) ;
226- validators . AddRange ( config . GetValidators ( ) ) ;
214+ columnProviders . AddRangeDistinct ( config . GetColumnProviders ( ) ) ;
215+ exporters . AddRangeDistinct ( config . GetExporters ( ) ) ;
216+ loggers . AddRangeDistinct ( config . GetLoggers ( ) ) ;
217+ diagnosers . AddRangeDistinct ( config . GetDiagnosers ( ) ) ;
218+ analysers . AddRangeDistinct ( config . GetAnalysers ( ) ) ;
219+ jobs . AddRangeDistinct ( config . GetJobs ( ) ) ;
220+ validators . AddRangeDistinct ( config . GetValidators ( ) ) ;
227221 hardwareCounters . AddRange ( config . GetHardwareCounters ( ) ) ;
228- filters . AddRange ( config . GetFilters ( ) ) ;
229- eventProcessors . AddRange ( config . GetEventProcessors ( ) ) ;
222+ filters . AddRangeDistinct ( config . GetFilters ( ) ) ;
223+ eventProcessors . AddRangeDistinct ( config . GetEventProcessors ( ) ) ;
230224 Orderer = config . Orderer ?? Orderer ;
231225 CategoryDiscoverer = config . CategoryDiscoverer ?? CategoryDiscoverer ;
232226 ArtifactsPath = config . ArtifactsPath ?? ArtifactsPath ;
233227 CultureInfo = config . CultureInfo ?? CultureInfo ;
234228 SummaryStyle = config . SummaryStyle ?? SummaryStyle ;
235- logicalGroupRules . AddRange ( config . GetLogicalGroupRules ( ) ) ;
236- columnHidingRules . AddRange ( config . GetColumnHidingRules ( ) ) ;
229+ logicalGroupRules . AddRangeDistinct ( config . GetLogicalGroupRules ( ) ) ;
230+ columnHidingRules . AddRangeDistinct ( config . GetColumnHidingRules ( ) ) ;
237231 Options |= config . Options ;
238232 BuildTimeout = GetBuildTimeout ( BuildTimeout , config . BuildTimeout ) ;
239233 WakeLock = GetWakeLock ( WakeLock , config . WakeLock ) ;
0 commit comments