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); } }
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; } }
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; } }
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); }
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); }