public override IClassVisitor Extend(IClassVisitor visitor, IBytecodeBehaviorState state, IList <IBytecodeBehavior> remainingPendingBehaviors, IList <IBytecodeBehavior> cascadePendingBehaviors) { ListUtil.AddAll(cascadePendingBehaviors, 0, remainingPendingBehaviors); remainingPendingBehaviors.Clear(); // Add this interface only for real entities, not for embedded types if (implementValueHolderContainerInterface) { visitor = new InterfaceAdder(visitor, typeof(IValueHolderContainer)); } visitor = new RelationsGetterVisitor(visitor, metaData, ValueHolderContainerHelper, PropertyInfoProvider); visitor = new SetCacheModificationMethodCreator(visitor); return(visitor); }
/** * {@inheritDoc} */ public override IClassVisitor Extend(IClassVisitor visitor, IBytecodeBehaviorState state, IList <IBytecodeBehavior> remainingPendingBehaviors, IList <IBytecodeBehavior> cascadePendingBehaviors) { Type keyType = state.OriginalType; if (!IsActive(GetContext(state.Context), keyType)) { // behavior not applied return(visitor); } Type[] interfaceTypes = ImplementAbstractObjectFactory.GetInterfaceTypes(keyType); ListUtil.AddAll(cascadePendingBehaviors, 0, remainingPendingBehaviors); remainingPendingBehaviors.Clear(); cascadePendingBehaviors.Add(new InnerBehavior(interfaceTypes, this)); // implements interfaces visitor = new InterfaceAdder(visitor, interfaceTypes); return(visitor); }