void ProcessTypes(List <TypeNode> notifyNodes)
{
foreach (var node in notifyNodes)
{
if (node.EventInvoker == null)
{
continue;
}
LogInfo("\t" + node.TypeDefinition.FullName);
foreach (var propertyData in node.PropertyDatas)
{
var body = propertyData.PropertyDefinition.SetMethod.Body;
var alreadyHasEquality = HasEqualityChecker.AlreadyHasEquality(propertyData.PropertyDefinition, propertyData.BackingFieldReference);
body.SimplifyMacros();
body.MakeLastStatementReturn();
var propertyWeaver = new PropertyWeaver(this, propertyData, node, ModuleDefinition.TypeSystem);
propertyWeaver.Execute();
if (!alreadyHasEquality)
{
var equalityCheckWeaver = new EqualityCheckWeaver(propertyData, this);
equalityCheckWeaver.Execute();
}
body.InitLocals = true;
body.OptimizeMacros();
}
ProcessTypes(node.Nodes);
}
}