public virtual Differences VisitComprehensionBinding(ComprehensionBinding comprehensionBinding1, ComprehensionBinding comprehensionBinding2){ Differences differences = new Differences(comprehensionBinding1, comprehensionBinding2); if (comprehensionBinding1 == null || comprehensionBinding2 == null){ if (comprehensionBinding1 != comprehensionBinding2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } ComprehensionBinding changes = (ComprehensionBinding)comprehensionBinding2.Clone(); ComprehensionBinding deletions = (ComprehensionBinding)comprehensionBinding2.Clone(); ComprehensionBinding insertions = (ComprehensionBinding)comprehensionBinding2.Clone(); Differences diff = this.VisitTypeNode(comprehensionBinding1.AsTargetVariableType, comprehensionBinding2.AsTargetVariableType); if (diff == null){Debug.Assert(false); return differences;} changes.AsTargetVariableType = diff.Changes as TypeNode; deletions.AsTargetVariableType = diff.Deletions as TypeNode; insertions.AsTargetVariableType = diff.Insertions as TypeNode; //Debug.Assert(diff.Changes == changes.AsTargetVariableType && diff.Deletions == deletions.AsTargetVariableType && diff.Insertions == insertions.AsTargetVariableType); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; if (comprehensionBinding1.Mode == comprehensionBinding2.Mode) differences.NumberOfSimilarities++; else differences.NumberOfDifferences++; diff = this.VisitExpression(comprehensionBinding1.SourceEnumerable, comprehensionBinding2.SourceEnumerable); if (diff == null){Debug.Assert(false); return differences;} changes.SourceEnumerable = diff.Changes as Expression; deletions.SourceEnumerable = diff.Deletions as Expression; insertions.SourceEnumerable = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.SourceEnumerable && diff.Deletions == deletions.SourceEnumerable && diff.Insertions == insertions.SourceEnumerable); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; diff = this.VisitExpression(comprehensionBinding1.TargetVariable, comprehensionBinding2.TargetVariable); if (diff == null){Debug.Assert(false); return differences;} changes.TargetVariable = diff.Changes as Expression; deletions.TargetVariable = diff.Deletions as Expression; insertions.TargetVariable = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.TargetVariable && diff.Deletions == deletions.TargetVariable && diff.Insertions == insertions.TargetVariable); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; diff = this.VisitTypeNode(comprehensionBinding1.TargetVariableType, comprehensionBinding2.TargetVariableType); if (diff == null){Debug.Assert(false); return differences;} changes.TargetVariableType = diff.Changes as TypeNode; deletions.TargetVariableType = diff.Deletions as TypeNode; insertions.TargetVariableType = diff.Insertions as TypeNode; //Debug.Assert(diff.Changes == changes.TargetVariableType && diff.Deletions == deletions.TargetVariableType && diff.Insertions == insertions.TargetVariableType); 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 ComprehensionBinding VisitComprehensionBinding(ComprehensionBinding comprehensionBinding) { if (comprehensionBinding == null) return null; return base.VisitComprehensionBinding((ComprehensionBinding)comprehensionBinding.Clone()); }