public override IClassVisitor Extend(IClassVisitor visitor, IBytecodeBehaviorState state, IList <IBytecodeBehavior> remainingPendingBehaviors, IList <IBytecodeBehavior> cascadePendingBehaviors) { if (state.GetContext <EntityEnhancementHint>() == null && state.GetContext <EmbeddedEnhancementHint>() == null) { // ensure LazyRelationsBehavior was invoked return(visitor); } // DefaultPropertiesBehavior executes in this cascade IEntityMetaData metaData = EntityMetaDataProvider.GetMetaData(EntityUtil.GetEntityType(state.Context)); CascadeBehavior cascadeBehavior = BeanContext.RegisterBean <CascadeBehavior>().PropertyValue("MetaData", metaData).Finish(); cascadePendingBehaviors.Add(cascadeBehavior); // // NotifyPropertyChangedBehavior executes in this cascade // Type currentType = state.getCurrentType(); // if (!IPropertyChanged.class.isAssignableFrom(currentType)) // { // if (!isAnnotationPresent(currentType, PropertyChangeAspect.class) && !isAnnotationPresent(currentType, DataObjectAspect.class)) // { // // behavior not applied // return visitor; // } // // // add IPropertyChanged // visitor = new InterfaceAdder(visitor, Type.getInternalName(IPropertyChanged.class)); // } // // IPropertyInfo[] propertyInfos = propertyInfoProvider.getProperties(currentType); // visitor = new NotifyPropertyChangedMethodVisitor(visitor, propertyInfos, objectCollector); // visitor = new PublicConstructorVisitor(visitor); 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 TriggersContextOptionsBuilder CascadeBehavior(CascadeBehavior cascadeBehavior = Infrastructure.CascadeBehavior.EntityAndType) => WithOption(e => e.WithCascadeBehavior(cascadeBehavior));