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 net.sourceforge.pmd.PMD;
7   
8   import java.util.Iterator;
9   import java.util.Set;
10  import java.util.TreeSet;
11  
12  public class Match implements Comparable {
13  
14      private int tokenCount;
15      private int lineCount;
16      private Set markSet = new TreeSet();
17      private TokenEntry[] marks = new TokenEntry[2];
18      private String code;
19      private MatchCode mc;
20  
21      public static class MatchCode {
22  
23          private int first;
24          private int second;
25  
26          public MatchCode() {
27          }
28  
29          public MatchCode(TokenEntry m1, TokenEntry m2) {
30              first = m1.getIndex();
31              second = m2.getIndex();
32          }
33  
34          public int hashCode() {
35              return first + 37 * second;
36          }
37  
38          public boolean equals(Object other) {
39              MatchCode mc = (MatchCode) other;
40              return mc.first == first && mc.second == second;
41          }
42  
43          public void setFirst(int first) {
44              this.first = first;
45          }
46  
47          public void setSecond(int second) {
48              this.second = second;
49          }
50  
51      }
52  
53      public Match(int tokenCount, TokenEntry first, TokenEntry second) {
54          markSet.add(first);
55          markSet.add(second);
56          marks[0] = first;
57          marks[1] = second;
58          this.tokenCount = tokenCount;
59      }
60  
61      public int getMarkCount() {
62          return markSet.size();
63      }
64  
65      public void setLineCount(int lineCount) {
66          this.lineCount = lineCount;
67      }
68  
69      public int getLineCount() {
70          return this.lineCount;
71      }
72  
73      public int getTokenCount() {
74          return this.tokenCount;
75      }
76  
77      public String getSourceCodeSlice() {
78          return this.code;
79      }
80  
81      public void setSourceCodeSlice(String code) {
82          this.code = code;
83      }
84  
85      public Iterator iterator() {
86          return markSet.iterator();
87      }
88  
89      public int compareTo(Object o) {
90          Match other = (Match) o;
91          int diff = other.getTokenCount() - getTokenCount();
92          if (diff != 0) {
93              return diff;
94          }
95          return other.getFirstMark().getIndex() - getFirstMark().getIndex();
96      }
97  
98      public TokenEntry getFirstMark() {
99          return marks[0];
100     }
101 
102     public TokenEntry getSecondMark() {
103         return marks[1];
104     }
105 
106     public String toString() {
107         return "Match: " + PMD.EOL + "tokenCount = " + tokenCount + PMD.EOL + "marks = " + markSet.size();
108     }
109 
110     public Set getMarkSet() {
111         return markSet;
112     }
113 
114     public MatchCode getMatchCode() {
115         if (mc == null) {
116             mc = new MatchCode(marks[0], marks[1]);
117         }
118         return mc;
119     }
120 
121     public int getEndIndex() {
122         return marks[1].getIndex() + getTokenCount() - 1;
123     }
124 
125     public void setMarkSet(Set markSet) {
126         this.markSet = markSet;
127     }
128 
129 }