示例#1
0
        public override void ImplementMethodBodyPropertyGroup(VisitorImplementationVariationPropertyGroupContext groupContext, VisitorImplementationVariationContext context, VisitorImplementationVariationPropertiesContext visitorPropertiesContext, IInterfaceType visitorInterface, IInterfaceMethodMember interfaceMethod, IIntermediateClassMethodMember concreteVariant, IVisitorImplementationBuilder implementationBuilder)
        {
            switch (groupContext.GroupId)
            {
            case "IntermediateGenericParameter":
            case "IntermediateInterface":
            case "IntermediateInstantiable":
                concreteVariant.Literal(string.Format("#region {0}", groupContext.GroupId));
                base.ImplementMethodBodyPropertyGroup(groupContext, context, visitorPropertiesContext, visitorInterface, interfaceMethod, concreteVariant, implementationBuilder);
                concreteVariant.Literal(string.Format("#endregion //{0}", groupContext.GroupId));
                break;

            default:
                break;
            }
        }
示例#2
0
        public override void ImplementMethodBodyPropertyGroup(
            VisitorImplementationVariationPropertyGroupContext groupContext,
            VisitorImplementationVariationContext context,
            VisitorImplementationVariationPropertiesContext visitorPropertiesContext,
            IInterfaceType visitorInterface,
            IInterfaceMethodMember interfaceMethod,
            IIntermediateClassMethodMember concreteVariant,
            IVisitorImplementationBuilder implementationBuilder)
        {
            switch (groupContext.GroupId)
            {
            case "IntermediateGenericParameter":
                concreteVariant.Literal(string.Format("#region {0}", groupContext.GroupId));
                base.ImplementMethodBodyPropertyGroup(groupContext, context, visitorPropertiesContext, visitorInterface, interfaceMethod, concreteVariant, implementationBuilder);
                concreteVariant.Literal(string.Format("#endregion //{0}", groupContext.GroupId));
                break;

            case "IntermediateInterface":
            case "IntermediateInstantiable":
                concreteVariant.Literal(string.Format("#region {0}", groupContext.GroupId));
                var target    = concreteVariant.If(implementationBuilder.ResultVisitorClass.GetThis().GetField("allowPartials"));
                var initParam = concreteVariant.Parameters.Values[0].GetReference();
                target.CreateNext(initParam.GetProperty("IsRoot"));
                var targetNext = target.Next;
                target = target.If(initParam.GetProperty("HasMembers"));
                var targetEnumerable          = target.Enumerate("member", initParam.GetProperty("Members").GetMethod("ExclusivelyOnParent").Invoke(initParam));
                var targetEnumerableNullCheck = targetEnumerable.If(targetEnumerable.Local.GetReference().GetProperty("Value").GetProperty("Entry").InequalTo(IntermediateGateway.NullValue, implementationBuilder.Context.ExpressionService));
                targetEnumerableNullCheck.Call(targetEnumerable.Local.GetReference().GetProperty("Value").GetProperty("Entry").GetMethod("Accept").Invoke(implementationBuilder.ResultVisitorClass.GetThis()));
                targetEnumerable          = targetNext.Enumerate("member", initParam.GetProperty("Members").GetProperty("Values"));
                targetEnumerableNullCheck = targetEnumerable.If(targetEnumerable.Local.GetReference().GetProperty("Entry").InequalTo(IntermediateGateway.NullValue, implementationBuilder.Context.ExpressionService));
                targetEnumerableNullCheck.Call(targetEnumerable.Local.GetReference().GetProperty("Entry").GetMethod("Accept").Invoke(implementationBuilder.ResultVisitorClass.GetThis()));
                concreteVariant.Literal(string.Format("#endregion //{0}", groupContext.GroupId));
                break;

            default:
                base.ImplementMethodBodyPropertyGroup(groupContext, context, visitorPropertiesContext, visitorInterface, interfaceMethod, concreteVariant, implementationBuilder);
                break;
            }
        }