public static void SetParameterValues(ParameterLoadingDiagnosticAnalyzer parameteredAnalyzer, AnalyzerOptions options) { if (ProcessedAnalyzers.ContainsKey(parameteredAnalyzer)) { return; } var additionalFile = options.AdditionalFiles .FirstOrDefault(f => ConfigurationFilePathMatchesExpected(f.Path)); if (additionalFile == null) { return; } var filePath = additionalFile.Path; var xml = XDocument.Load(filePath); var parameters = ParseParameters(xml); var propertyParameterPairs = parameteredAnalyzer.GetType() .GetProperties() .Select(p => new { Property = p, Descriptor = p.GetCustomAttributes <RuleParameterAttribute>().SingleOrDefault() }) .Where(p => p.Descriptor != null); foreach (var propertyParameterPair in propertyParameterPairs) { var parameter = parameters .FirstOrDefault(p => p.RuleId == parameteredAnalyzer.SupportedDiagnostics.Single().Id); var parameterValue = parameter?.ParameterValues .FirstOrDefault(pv => pv.ParameterKey == propertyParameterPair.Descriptor.Key); if (parameterValue == null) { return; } var value = parameterValue.ParameterValue; var convertedValue = ChangeParameterType(value, propertyParameterPair.Descriptor.Type); propertyParameterPair.Property.SetValue(parameteredAnalyzer, convertedValue); } ProcessedAnalyzers.AddOrUpdate(parameteredAnalyzer, 0, (a, b) => b); }
public static void SetParameterValues(ParameterLoadingDiagnosticAnalyzer parameteredAnalyzer, AnalyzerOptions options) { if (ProcessedAnalyzers.ContainsKey(parameteredAnalyzer)) { return; } var additionalFile = options.AdditionalFiles .FirstOrDefault(f => ConfigurationFilePathMatchesExpected(f.Path)); if (additionalFile == null) { return; } var filePath = additionalFile.Path; var xml = XDocument.Load(filePath); var parameters = ParseParameters(xml); var propertyParameterPairs = parameteredAnalyzer.GetType() .GetProperties() .Select(p => new { Property = p, Descriptor = p.GetCustomAttributes<RuleParameterAttribute>().SingleOrDefault() }) .Where(p => p.Descriptor != null); foreach (var propertyParameterPair in propertyParameterPairs) { var parameter = parameters .FirstOrDefault(p => p.RuleId == parameteredAnalyzer.SupportedDiagnostics.Single().Id); var parameterValue = parameter?.ParameterValues .FirstOrDefault(pv => pv.ParameterKey == propertyParameterPair.Descriptor.Key); if (parameterValue == null) { return; } var value = parameterValue.ParameterValue; var convertedValue = ChangeParameterType(value, propertyParameterPair.Descriptor.Type); propertyParameterPair.Property.SetValue(parameteredAnalyzer, convertedValue); } ProcessedAnalyzers.AddOrUpdate(parameteredAnalyzer, 0, (a, b) => b); }