View Javadoc
1 package net.sourceforge.pmd.cpd; 2 3 import java.util.ArrayList; 4 import java.util.HashSet; 5 import java.util.List; 6 import java.util.Set; 7 8 public class MatchCollector { 9 10 private List marks; 11 private MarkComparator markComparator; 12 13 public MatchCollector(List marks, MarkComparator mc) { 14 this.marks = marks; 15 this.markComparator = mc; 16 } 17 18 public List collect(int minimumLength) { 19 List matches = new ArrayList(); 20 Set filesUsedSoFar = new HashSet(); 21 for (int i = 1; i < marks.size(); i++) { 22 Mark mark1 = (Mark)marks.get(i); 23 Mark mark2 = (Mark)marks.get(i - 1); 24 if (!filesUsedSoFar.contains(mark1.getTokenSrcID()) && !filesUsedSoFar.contains(mark2.getTokenSrcID())) { 25 int dupes = countDuplicateTokens(mark1, mark2); 26 if (dupes >= minimumLength) { 27 filesUsedSoFar.add(mark1.getTokenSrcID()); 28 filesUsedSoFar.add(mark2.getTokenSrcID()); 29 Match match = new Match(dupes, mark1, mark2); 30 matches.add(match); 31 } 32 } 33 } 34 return matches; 35 } 36 37 private int countDuplicateTokens(Mark mark1, Mark mark2) { 38 int index = 0; 39 while (!matchEnded(markComparator.tokenAt(index, mark1), markComparator.tokenAt(index, mark2))) { 40 index++; 41 } 42 return index; 43 } 44 45 private boolean matchEnded(TokenEntry token1, TokenEntry token2) { 46 return !token1.equals(token2) || token1 == TokenEntry.EOF || token2 == TokenEntry.EOF; 47 } 48 }

This page was automatically generated by Maven