Skip to content

Commit 94c19d2

Browse files
committed
[core] Refactor CPDReport to use a List
1 parent 33bfd00 commit 94c19d2

File tree

7 files changed

+20
-14
lines changed

7 files changed

+20
-14
lines changed

pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPD.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ public static StatusCode runCpd(String... args) {
238238
}
239239

240240
public CPDReport toReport() {
241-
return new CPDReport(this.getMatches(), numberOfTokensPerFile);
241+
return new CPDReport(matchAlgorithm.getMatches(), numberOfTokensPerFile);
242242
}
243243

244244
public enum StatusCode {

pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDReport.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,23 @@
55
package net.sourceforge.pmd.cpd;
66

77
import java.util.Collections;
8-
import java.util.Iterator;
8+
import java.util.List;
99
import java.util.Map;
1010
import java.util.TreeMap;
1111

12+
/**
13+
* @since 6.48.0
14+
*/
1215
public class CPDReport {
13-
private final Iterator<Match> matches;
16+
private final List<Match> matches;
1417
private final Map<String, Integer> numberOfTokensPerFile;
1518

16-
CPDReport(final Iterator<Match> matches, final Map<String, Integer> numberOfTokensPerFile) {
17-
this.matches = matches;
19+
CPDReport(final List<Match> matches, final Map<String, Integer> numberOfTokensPerFile) {
20+
this.matches = Collections.unmodifiableList(matches);
1821
this.numberOfTokensPerFile = Collections.unmodifiableMap(new TreeMap<>(numberOfTokensPerFile));
1922
}
2023

21-
public Iterator<Match> getMatches() {
24+
public List<Match> getMatches() {
2225
return matches;
2326
}
2427

pmd-core/src/main/java/net/sourceforge/pmd/cpd/GUI.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ public void actionPerformed(ActionEvent evt) {
276276
}
277277

278278
if (!f.canWrite()) {
279-
final CPDReport report = new CPDReport(matches.iterator(), numberOfTokensPerFile);
279+
final CPDReport report = new CPDReport(matches, numberOfTokensPerFile);
280280
try (PrintWriter pw = new PrintWriter(Files.newOutputStream(f.toPath()))) {
281281
renderer.render(report, pw);
282282
pw.flush();

pmd-core/src/main/java/net/sourceforge/pmd/cpd/MatchAlgorithm.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ public Iterator<Match> matches() {
4747
return matches.iterator();
4848
}
4949

50+
List<Match> getMatches() {
51+
return matches;
52+
}
53+
5054
public TokenEntry tokenAt(int offset, TokenEntry m) {
5155
return code.get(offset + m.getIndex());
5256
}

pmd-core/src/main/java/net/sourceforge/pmd/cpd/XMLRenderer.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import net.sourceforge.pmd.cpd.renderer.CPDRenderer;
2929
import net.sourceforge.pmd.cpd.renderer.CPDReportRenderer;
30+
import net.sourceforge.pmd.util.CollectionUtil;
3031
import net.sourceforge.pmd.util.StringUtil;
3132

3233
/**
@@ -106,15 +107,15 @@ public String render(Iterator<Match> matches) {
106107

107108
@Override
108109
public void render(Iterator<Match> matches, Writer writer) throws IOException {
109-
render(new CPDReport(matches, Collections.<String, Integer>emptyMap()), writer);
110+
render(new CPDReport(CollectionUtil.toList(matches), Collections.<String, Integer>emptyMap()), writer);
110111
}
111112

112113
@Override
113114
public void render(final CPDReport report, final Writer writer) throws IOException {
114115
final Document doc = createDocument();
115116
final Element root = doc.createElement("pmd-cpd");
116117
final Map<String, Integer> numberOfTokensPerFile = report.getNumberOfTokensPerFile();
117-
final Iterator<Match> matches = report.getMatches();
118+
final List<Match> matches = report.getMatches();
118119
doc.appendChild(root);
119120

120121
final List<Map.Entry<String, Integer>> entries = new ArrayList<>(numberOfTokensPerFile.entrySet());
@@ -125,9 +126,7 @@ public void render(final CPDReport report, final Writer writer) throws IOExcepti
125126
root.appendChild(fileElement);
126127
}
127128

128-
Match match;
129-
while (matches.hasNext()) {
130-
match = matches.next();
129+
for (Match match : matches) {
131130
root.appendChild(addCodeSnippet(doc,
132131
addFilesToDuplicationElement(doc, createDuplicationElement(doc, match), match), match));
133132
}

pmd-core/src/main/java/net/sourceforge/pmd/cpd/renderer/CPDRendererAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ public CPDRendererAdapter(final CPDRenderer renderer) {
2727

2828
@Override
2929
public void render(final CPDReport report, final Writer writer) throws IOException {
30-
renderer.render(report.getMatches(), writer);
30+
renderer.render(report.getMatches().iterator(), writer);
3131
}
3232
}

pmd-core/src/test/java/net/sourceforge/pmd/cpd/XMLRendererTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ public void testFilesWithNumberOfTokens() throws IOException, ParserConfiguratio
203203
matches.add(match);
204204
final Map<String, Integer> numberOfTokensPerFile = new HashMap<>();
205205
numberOfTokensPerFile.put(filename, 888);
206-
final CPDReport report = new CPDReport(matches.iterator(), numberOfTokensPerFile);
206+
final CPDReport report = new CPDReport(matches, numberOfTokensPerFile);
207207
final StringWriter writer = new StringWriter();
208208
renderer.render(report, writer);
209209
final String xmlOutput = writer.toString();

0 commit comments

Comments
 (0)