//if (AlreadyContainsNotification(propertyData.PropertyDefinition, node.EventInvoker.MethodReference.Name)) // { // moduleWeaver.LogInfo(string.Format("\t{0} Already has notification functionality. Property will be ignored.", propertyData.PropertyDefinition.GetName())); // continue; // } void GetPropertyData(PropertyDefinition propertyDefinition, TypeNode node) { var notifyPropertyData = ReadAlsoNotifyForData(propertyDefinition, node.AllProperties); var dependenciesForProperty = node.PropertyDependencies .Where(x => x.WhenPropertyIsSet == propertyDefinition) .Select(x => x.ShouldAlsoNotifyFor); var backingFieldReference = node.Mappings.First(x => x.PropertyDefinition == propertyDefinition).FieldDefinition; if (notifyPropertyData == null) { if (node.EventInvoker == null) { return; } node.PropertyDatas.Add(new PropertyData { BackingFieldReference = backingFieldReference, PropertyDefinition = propertyDefinition, // Compute full dependencies for the current property AlsoNotifyFor = GetFullDependencies(propertyDefinition, dependenciesForProperty, node), AlreadyNotifies = propertyDefinition.GetAlreadyNotifies(node.EventInvoker.MethodReference.Name).ToList() }); return; } if (node.EventInvoker == null) { throw new WeavingException(string.Format( @"Could not find field for PropertyChanged event on type '{0}'. Looked for 'PropertyChanged', 'propertyChanged', '_PropertyChanged' and '_propertyChanged'. The most likely cause is that you have implemented a custom event accessor for the PropertyChanged event and have called the PropertyChangedEventHandler something stupid.", node.TypeDefinition.FullName)); } node.PropertyDatas.Add(new PropertyData { BackingFieldReference = backingFieldReference, PropertyDefinition = propertyDefinition, // Compute full dependencies for the current property AlsoNotifyFor = GetFullDependencies(propertyDefinition, notifyPropertyData.AlsoNotifyFor.Union(dependenciesForProperty), node), AlreadyNotifies = propertyDefinition.GetAlreadyNotifies(node.EventInvoker.MethodReference.Name).ToList() }); }