예제 #1
0
    public virtual Differences VisitCompilationUnit(CompilationUnit cUnit1, CompilationUnit cUnit2){
      Differences differences = new Differences(cUnit1, cUnit2);
      if (cUnit1 == null || cUnit2 == null){
        if (cUnit1 != cUnit2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++;
        return differences;
      }
      CompilationUnit changes = (CompilationUnit)cUnit2.Clone();
      CompilationUnit deletions = (CompilationUnit)cUnit2.Clone();
      CompilationUnit insertions = (CompilationUnit)cUnit2.Clone();

      NodeList nodeChanges, nodeDeletions, nodeInsertions;
      Differences diff = this.VisitNodeList(cUnit1.Nodes, cUnit2.Nodes, out nodeChanges, out nodeDeletions, out nodeInsertions);
      if (diff == null){Debug.Assert(false); return differences;}
      changes.Nodes = nodeChanges;
      deletions.Nodes = nodeDeletions;
      insertions.Nodes = nodeInsertions;
      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;
    }
예제 #2
0
 public override CompilationUnit VisitCompilationUnit(CompilationUnit cUnit)
 {
     if (cUnit == null) return null;
     this.FindTypesToBeDuplicated(cUnit.Nodes);
     return base.VisitCompilationUnit((CompilationUnit)cUnit.Clone());
 }