protected virtual ObjectMembers VisitObjectMembers(ObjectMembers node) { return(VisitSyntaxNode(node) as ObjectMembers); }
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)) ) ) ) ) )); }
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) })))); }