Example #1
0
 protected virtual ObjectMembers VisitObjectMembers(ObjectMembers node)
 {
     return(VisitSyntaxNode(node) as ObjectMembers);
 }
Example #2
0
        private Expression CompileCheckConflicts(Property property, Expression leftCurrent, Expression rightCurrent, Expression conflicts, Expression ret)
        {
            /* PSEUDO CODE FOR THIS:
             * if (leftCurrent is Unchanged)
             * {
             *     add(rightCurrent)
             * }
             * else if (rightCurrent is Unchanged)
             * {
             *     add(leftCurrent)
             * }
             * else if (leftCurrent is Replace || rightCurrent is Replace)
             * {
             *     if (leftCurrent == rightCurrent)
             *          add(leftCurrent)
             *     else
             *     {
             *          conflict = Conflict(leftCurrent, rightCurrent)
             *          add(conflict)
             *          conflicts.register(conflict)
             *     }
             * }
             * else if (leftCurrent is Changed && rightCurrent is Changed)
             * {
             *     add(algorithm.Merge(leftCurrent.ValueDiff, rightCurrent.ValueDiff, conflicts))
             * }
             * else
             *     throw
             */

            IMergeDiffsAlgorithm algorithm = this.aMergerImplementation.Partial.Algorithms.GetMergeDiffsAlgorithm(property.Type);
            Type itemReplacedType          = typeof(IDiffItemReplaced <>).MakeGenericType(property.Type);

            ParameterExpression conflict = Expression.Parameter(typeof(IDiffItemConflicted), "conflict");

            return(Expression.IfThenElse(
                       Expression.TypeIs(leftCurrent, typeof(IDiffItemUnchanged)),
                       Expression.Call(
                           ret,
                           ListMembers.Add(typeof(IDiffItem)),
                           rightCurrent
                           ),
                       Expression.IfThenElse(
                           Expression.TypeIs(rightCurrent, typeof(IDiffItemUnchanged)),
                           Expression.Call(
                               ret,
                               ListMembers.Add(typeof(IDiffItem)),
                               leftCurrent
                               ),
                           Expression.IfThenElse(
                               Expression.OrElse(
                                   Expression.TypeIs(leftCurrent, itemReplacedType),
                                   Expression.TypeIs(rightCurrent, itemReplacedType)
                                   ),
                               Expression.IfThenElse(
                                   Expression.Call(
                                       null,
                                       ObjectMembers.Equals(),
                                       leftCurrent,
                                       rightCurrent
                                       ),
                                   Expression.Call(
                                       ret,
                                       ListMembers.Add(typeof(IDiffItem)),
                                       leftCurrent
                                       ),
                                   Expression.Block(
                                       new[] { conflict },
                                       Expression.Assign(
                                           conflict,
                                           Expression.New(
                                               DiffItemsMembers.NewConflict(),
                                               leftCurrent,
                                               rightCurrent
                                               )
                                           ),
                                       Expression.Call(
                                           ret,
                                           ListMembers.Add(typeof(IDiffItem)),
                                           conflict
                                           ),
                                       Expression.Call(
                                           conflicts,
                                           ConflictContainerMembers.RegisterConflict(),
                                           conflict
                                           )
                                       )
                                   ),
                               Expression.IfThenElse(
                                   Expression.AndAlso(
                                       Expression.TypeIs(leftCurrent, typeof(IDiffItemChanged)),
                                       Expression.TypeIs(rightCurrent, typeof(IDiffItemChanged))
                                       ),
                                   Expression.Call(
                                       ret,
                                       ListMembers.Add(typeof(IDiffItem)),
                                       Expression.New(
                                           DiffItemsMembers.NewClassChanged(property.Type),
                                           Expression.Constant(property),
                                           Expression.Call(
                                               Expression.Constant(algorithm, typeof(IMergeDiffsAlgorithm <>).MakeGenericType(property.Type)),
                                               MergeDiffsAlgorithmMembers.MergeDiffs(property.Type),
                                               Expression.Property(
                                                   Expression.Convert(leftCurrent, typeof(IDiffItemChanged <>).MakeGenericType(property.Type)),
                                                   DiffItemsMembers.ChangedDiff(property.Type)
                                                   ),
                                               Expression.Property(
                                                   Expression.Convert(rightCurrent, typeof(IDiffItemChanged <>).MakeGenericType(property.Type)),
                                                   DiffItemsMembers.ChangedDiff(property.Type)
                                                   ),
                                               conflicts
                                               )
                                           )
                                       ),

                                   Expression.Throw(
                                       Expression.New(typeof(Exception))
                                       )
                                   )
                               )
                           )
                       ));
        }
Example #3
0
 protected override ObjectMembers VisitObjectMembers(ObjectMembers node)
 {
     visitedObjectMembers = true;
     Assert.IsTrue(node.GetChildren().Count() == 6);
     return(base.VisitObjectMembers(node));
 }
 // GET: Condominiums
 public ActionResult Index()
 {
     return(View(_mapCondominium2CondominiumMV.Run(
                     _condominiumRepo.Read(
                         0,
                         pageNumber: 0,
                         rowsPerPage: 10,
                         orderBy: new KeyValuePair <string, SortOrder>[] { new KeyValuePair <string, SortOrder>(ObjectMembers.GetMemberName((CondominiumViewModel cm) => cm.Name), SortOrder.Ascending) }))));
 }