Exemplo n.º 1
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);
     }
 }
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":
                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.º 3
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.º 4
0
        public override IIntermediateClassMethodMember CreateVariationBuilderMethod(string methodName, IGeneralGenericSignatureMemberUniqueIdentifier methodSignature, IInterfaceMethodMember interfaceMethodMember, VisitorImplementationVariationContext variation, VisitorBuilder visitorBuilder, IInterfaceType relevantBuilderInterface, IVisitorImplementationBuilder implementationBuilder)
        {
            var result = base.CreateVariationBuilderMethod(methodName, methodSignature, interfaceMethodMember, variation, visitorBuilder, relevantBuilderInterface, implementationBuilder);

            if (!result.IsAbstract)
            {
                result.IsVirtual = true;
                result.Return(result.Parameters.Values[0].GetReference());
            }
            return(result);
        }
Exemplo n.º 5
0
        public override VisitorImplementationPropertyRelevance GetPropertyTypeRelevance(IPropertySignatureMember property, IType visitingType, VisitorImplementationVariationContext context, IVisitorImplementationBuilder builder)
        {
            var result      = base.GetPropertyTypeRelevance(property, visitingType, context, builder);
            var itp         = GetTypeReference(builder, typeof(IIntermediateTypeParent));
            var eStatements = builder.Context.CommonTypeContext.IEnumerableOfT.MakeGenericClosure(this.GetTypeReference(builder, typeof(IStatement)));

            if ((property.Name == "Parent" || property.Name == "Assembly") && result.Relevance != VisitorImplementationTypeRelevance.NotRelevant)
            {
                return(new VisitorImplementationPropertyRelevance(new VisitorImplementationAdjustedTypeRelevance(result.AdjustedPropertyType, VisitorImplementationTypeRelevance.NotRelevant), result.PropertyMember));
            }
            return(result);
        }