public override IClassVisitor Extend(IClassVisitor visitor, IBytecodeBehaviorState state, IList <IBytecodeBehavior> remainingPendingBehaviors, IList <IBytecodeBehavior> cascadePendingBehaviors) { // NotifyPropertyChangedBehavior executes in this cascade // add IPropertyChanged visitor = new InterfaceAdder(visitor, typeof(INotifyPropertyChanged), typeof(INotifyPropertyChangedSource), typeof(IPropertyChangedEventHandler), typeof(INotifyCollectionChangedListener), typeof(IPropertyChangeConfigurable)); visitor = BeanContext.RegisterWithLifecycle(new NotifyPropertyChangedClassVisitor(visitor, MetaData, null)).Finish(); return(visitor); }
public override IClassVisitor Extend(IClassVisitor visitor, IBytecodeBehaviorState state, IList <IBytecodeBehavior> remainingPendingBehaviors, IList <IBytecodeBehavior> cascadePendingBehaviors) { visitor = new InterfaceAdder(visitor, typeof(IDataObject), typeof(INotifyCollectionChangedListener)); visitor = new DataObjectVisitor(visitor, metaData, PropertyInfoProvider); visitor = new SetCacheModificationMethodCreator(visitor); // ToBeUpdated & ToBeDeleted have to fire PropertyChange-Events by themselves String[] properties = { DataObjectVisitor.template_p_toBeUpdated.Name, DataObjectVisitor.template_p_toBeDeleted.Name }; CascadeBehavior2 cascadeBehavior2 = BeanContext.RegisterWithLifecycle(new CascadeBehavior2(metaData, properties)).Finish(); cascadePendingBehaviors.Add(cascadeBehavior2); return(visitor); }
public override IClassVisitor Extend(IClassVisitor visitor, IBytecodeBehaviorState state, IList <IBytecodeBehavior> remainingPendingBehaviors, IList <IBytecodeBehavior> cascadePendingBehaviors) { if (state.GetContext <EntityEnhancementHint>() == null) { return(visitor); } bool lastBehaviorStanding = remainingPendingBehaviors.Remove(this); Type currentType = state.CurrentType; if (!typeof(INotifyPropertyChanged).IsAssignableFrom(currentType)) { if (remainingPendingBehaviors.Count == 0 && lastBehaviorStanding) { // The type is not being PropertyChange enhanced. return(visitor); } if (remainingPendingBehaviors.Count == 0 && cascadePendingBehaviors.Count == 0) { // Mark "last behavior standing" to avoid infinite loop cascadePendingBehaviors.Add(this); } cascadePendingBehaviors.Add(this); return(visitor); } IEntityMetaData metaData = EntityMetaDataProvider.GetMetaData(state.OriginalType); visitor = new GetIdMethodCreator(visitor, metaData); visitor = new SetBeanContextMethodCreator(visitor); CascadeBehavior cascadeBehavior = BeanContext.RegisterWithLifecycle(new CascadeBehavior(metaData)).Finish(); cascadePendingBehaviors.Add(cascadeBehavior); return(visitor); }
public override IClassVisitor Extend(IClassVisitor visitor, IBytecodeBehaviorState state, IList <IBytecodeBehavior> remainingPendingBehaviors, IList <IBytecodeBehavior> cascadePendingBehaviors) { visitor = BeanContext.RegisterWithLifecycle(new NotifyPropertyChangedClassVisitor(visitor, metaData, properties)).Finish(); return(visitor); }