Exemplo n.º 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":
                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;
            }
        }
Exemplo n.º 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":
            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;
            }
        }
Exemplo n.º 3
0
 public override void ImplementMethodBody(VisitorImplementationVariationContext context, VisitorImplementationVariationPropertiesContext visitorPropertiesContext, IInterfaceType visitorInterface, IInterfaceMethodMember interfaceMethod, IIntermediateClassMethodMember concreteVariant, IVisitorImplementationBuilder implementationBuilder)
 {
     if (visitorPropertiesContext.Values.Sum(k => k.RelevantProperties.Count()) == 0)
     {
         concreteVariant.Return(GetTypeReference(implementationBuilder, typeof(TransformationImpact)).GetTypeExpression().GetField(TransformationImpact.NoImpact.ToString()));
     }
     else
     {
         base.ImplementMethodBody(context, visitorPropertiesContext, visitorInterface, interfaceMethod, concreteVariant, implementationBuilder);
     }
 }