Example #1
0
            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);
        }