static AbstractPropertyValueAssignmentAnalyzer()
{
_propertyValueRules = new Dictionary<string, PropertyValueRule>(StringComparer.Ordinal);
var assembly = typeof(AbstractPropertyValueAssignmentAnalyzer).GetTypeInfo().Assembly;
foreach (var name in assembly.GetManifestResourceNames())
{
if (!name.EndsWith(".PropertyValueRules.xml"))
continue;
string content;
using (var stream = assembly.GetManifestResourceStream(name))
using (var reader = new StreamReader(stream))
{
content = reader.ReadToEnd();
}
XDocument doc = XDocument.Parse(content);
foreach(var element in doc.Descendants("property-value-rule"))
{
var rule = new PropertyValueRule()
{
PropertyName = element.Element("property").Value,
Min = element.Element("min") != null ? long.Parse(element.Element("min").Value) : (long?)null,
Max = element.Element("max") != null ? long.Parse(element.Element("max").Value) : (long?)null,
Pattern = element.Element("pattern") != null ? element.Element("pattern").Value : null
};
if (!string.IsNullOrEmpty(rule.Pattern))
{
try
{
rule.CompiledExpression = new Regex(element.Element("pattern").Value);
}
catch { }
}
_propertyValueRules[rule.PropertyName] = rule;
}
}
}