public virtual Differences VisitConstruct(Construct cons1, Construct cons2){ Differences differences = new Differences(cons1, cons2); if (cons1 == null || cons2 == null){ if (cons1 != cons2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } Construct changes = (Construct)cons2.Clone(); Construct deletions = (Construct)cons2.Clone(); Construct insertions = (Construct)cons2.Clone(); Differences diff = this.VisitExpression(cons1.Constructor, cons2.Constructor); if (diff == null){Debug.Assert(false); return differences;} changes.Constructor = diff.Changes as Expression; deletions.Constructor = diff.Deletions as Expression; insertions.Constructor = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.Constructor && diff.Deletions == deletions.Constructor && diff.Insertions == insertions.Constructor); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; ExpressionList exprChanges, exprDeletions, exprInsertions; diff = this.VisitExpressionList(cons1.Operands, cons2.Operands, out exprChanges, out exprDeletions, out exprInsertions); if (diff == null){Debug.Assert(false); return differences;} changes.Operands = exprChanges; deletions.Operands = exprDeletions; insertions.Operands = exprInsertions; differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; diff = this.VisitExpression(cons1.Owner, cons2.Owner); if (diff == null) { Debug.Assert(false); return differences; } changes.Owner = diff.Changes as Expression; deletions.Owner = diff.Deletions as Expression; insertions.Owner = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.Owner && diff.Deletions == deletions.Owner && diff.Insertions == insertions.Owner); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; if (differences.NumberOfDifferences == 0) { differences.Changes = null; differences.Deletions = null; differences.Insertions = null; }else{ differences.Changes = changes; differences.Deletions = deletions; differences.Insertions = insertions; } return differences; }
public override Expression VisitConstruct(Construct cons) { if (cons == null) return null; return base.VisitConstruct((Construct)cons.Clone()); }