private static Expression CreateIndexerAccessExpression(Expression instance, IndexerToken indexerToken)
        {
            var binder = Binder.GetIndex(CSharpBinderFlags.None,
                                         typeof (DynamicPropertyAccessExpressionBuilder),
                                         new[]
                                             {
                                                 CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null),
                                                 CSharpArgumentInfo.Create(
                                                     CSharpArgumentInfoFlags.Constant |
                                                     CSharpArgumentInfoFlags.UseCompileTimeType, null)
                                             });

            return Expression.Dynamic(binder,
                                      typeof (object),
                                      new[]
                                          {
                                              instance,
                                              indexerToken.Arguments
                                                  .Select(Expression.Constant)
                                                  .First()
                                          });
        }
 private static MemberInfo GetFromIndexerToken(IndexerToken token, Type type)
 {
     var indexerPropertyInfo = type.GetIndexerPropertyInfo(token.Arguments.Select(a => a.GetType()).ToArray());
     return indexerPropertyInfo != null ? indexerPropertyInfo.GetGetMethod() : null;
 }