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); } }
void Process(List<TypeNode> notifyNodes) { foreach (var node in notifyNodes) { if (node.EventInvoker == null) { continue; } logger.LogMessage("\t" + node.TypeDefinition.FullName); foreach (var propertyData in node.PropertyDatas) { if (AlreadyContainsNotification(propertyData.PropertyDefinition, node.EventInvoker.MethodReference.Name)) { if (propertyData.NotificationAddedDirectly) { throw new WeavingException(string.Format("{0} Already has notification functionality. Please remove the attribute on this property.", propertyData.PropertyDefinition.GetName())); } logger.LogMessage(string.Format("\t{0} Already has notification functionality. Property will be ignored.", propertyData.PropertyDefinition.GetName())); continue; } var methodBody = propertyData.PropertyDefinition.SetMethod.Body; methodBody.SimplifyMacros(); methodBody.MakeLastStatementReturn(); var propertyWeaver = new PropertyWeaver(msCoreReferenceFinder, logger, propertyData, node); propertyWeaver.Execute(); var equalityCheckWeaver = new EqualityCheckWeaver( logger, propertyData, typeEqualityFinder); equalityCheckWeaver.Execute(); methodBody.InitLocals = true; methodBody.OptimizeMacros(); } Process(node.Nodes); } }
void Process(List <TypeNode> notifyNodes) { foreach (var node in notifyNodes) { if (node.EventInvoker == null) { continue; } logger.LogMessage("\t" + node.TypeDefinition.FullName); foreach (var propertyData in node.PropertyDatas) { if (AlreadyContainsNotification(propertyData.PropertyDefinition, node.EventInvoker.MethodReference.Name)) { if (propertyData.NotificationAddedDirectly) { throw new WeavingException(string.Format("{0} Already has notification functionality. Please remove the attribute on this property.", propertyData.PropertyDefinition.GetName())); } logger.LogMessage(string.Format("\t{0} Already has notification functionality. Property will be ignored.", propertyData.PropertyDefinition.GetName())); continue; } var methodBody = propertyData.PropertyDefinition.SetMethod.Body; methodBody.SimplifyMacros(); methodBody.MakeLastStatementReturn(); var propertyWeaver = new PropertyWeaver(msCoreReferenceFinder, logger, propertyData, node); propertyWeaver.Execute(); var equalityCheckWeaver = new EqualityCheckWeaver(logger, propertyData, typeEqualityFinder); equalityCheckWeaver.Execute(); methodBody.InitLocals = true; methodBody.OptimizeMacros(); } Process(node.Nodes); } }
void ProcessTypes(List<TypeNode> notifyNodes) { foreach (var node in notifyNodes) { if (node.EventInvoker == null) { continue; } LogDebug("\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, node.TypeDefinition, this); equalityCheckWeaver.Execute(); } body.InitLocals = true; body.OptimizeMacros(); } ProcessTypes(node.Nodes); } }