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

This page was automatically generated by Maven