private CodeExpression SerializeInstanceDescriptor (IDesignerSerializationManager manager, InstanceDescriptor descriptor) { CodeExpression expression = null; MemberInfo member = descriptor.MemberInfo; CodeExpression target = new CodeTypeReferenceExpression (member.DeclaringType); if (member is PropertyInfo) { expression = new CodePropertyReferenceExpression (target, member.Name); } else if (member is FieldInfo) { expression = new CodeFieldReferenceExpression (target, member.Name); } else if (member is MethodInfo) { CodeMethodInvokeExpression methodInvoke = new CodeMethodInvokeExpression (target, member.Name); manager.Context.Push (new ExpressionContext (methodInvoke, methodInvoke.GetType (), null, null)); if (descriptor.Arguments != null && descriptor.Arguments.Count > 0) methodInvoke.Parameters.AddRange (SerializeParameters (manager, descriptor.Arguments)); manager.Context.Pop (); expression = methodInvoke; } else if (member is ConstructorInfo) { CodeObjectCreateExpression createExpr = new CodeObjectCreateExpression (member.DeclaringType); manager.Context.Push (new ExpressionContext (createExpr, createExpr.GetType (), null, null)); if (descriptor.Arguments != null && descriptor.Arguments.Count > 0) createExpr.Parameters.AddRange (SerializeParameters (manager, descriptor.Arguments)); manager.Context.Pop (); expression = createExpr; } return expression; }