protected void ProduceNestedProperties(string instanceName, object instance, GenerationContext context) { foreach (var propertyInfo in Meta.NestedProperties) { if (!Meta.IsDefault(propertyInfo, instance)) { var generator = _tgr.GetGeneratorFor(propertyInfo.PropertyType); var value = Meta.Value(propertyInfo, instance); generator.New(value, context); var varName = context.GetDefined(value); var ae = SafeAssignment(instanceName, propertyInfo.Name, IdentifierName(varName)); context.LateBound.Enqueue(ExpressionStatement(ae)); context.AddUsing(propertyInfo.PropertyType.Namespace); } } }
private void ProduceDictionaryProperties(string instanceName, object instance, GenerationContext context) { foreach (var propertyInfo in Meta.DictionaryProperties) { if (!Meta.IsDefault(propertyInfo, instance)) { var value = Meta.Value(propertyInfo, instance); var collCreation = ProceedDictionary(_tgr, propertyInfo.PropertyType, value as IDictionary, context); var ae = SafeAssignment(instanceName, propertyInfo.Name, collCreation); context.LateBound.Enqueue(ExpressionStatement(ae)); context.AddUsing(propertyInfo.PropertyType.Namespace); } } }
private void ProduceCollectionProperties(string instanceName, object instance, GenerationContext context) { List <ExpressionSyntax> initNodes = new List <ExpressionSyntax>(); foreach (var propertyInfo in Meta.CollectionProperties) { if (!Meta.IsDefault(propertyInfo, instance)) { var value = Meta.Value(propertyInfo, instance); var collCreation = propertyInfo.PropertyType.IsTuple() ? ProceedTuple(_tgr, value.GetTupleValues(), context) : ProceedCollection(_tgr, propertyInfo.PropertyType, value as IEnumerable, context); var ae = SafeAssignment(instanceName, propertyInfo.Name, collCreation); context.LateBound.Enqueue(ExpressionStatement(ae)); context.AddUsing(propertyInfo.PropertyType.Namespace); } } }
private List <StatementSyntax> ProduceInlineableProperties(string instanceName, object instance, GenerationContext context) { List <StatementSyntax> initNodes = new List <StatementSyntax>(); foreach (var propertyInfo in Meta.InlineProperties) { if (!Meta.IsDefault(propertyInfo, instance)) { var pName = propertyInfo.Name; // "value" var propValue = TypeInitConstructor.Construct(propertyInfo.PropertyType, Meta.Value(propertyInfo, instance)); var invocation = SafeAssignment(instanceName, pName, propValue); initNodes.Add(ExpressionStatement(invocation)); var u = ExtractEnumUsing(propertyInfo.PropertyType); context.AddUsing(u); } } return(initNodes); }