Skip to content

Commit a96b784

Browse files
committed
Use CPDRenderer instead of Renderer
1 parent ce0523d commit a96b784

File tree

5 files changed

+58
-31
lines changed

5 files changed

+58
-31
lines changed

ReleaseNotes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ This is a minor release.
2828
* `net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences.getMaxViolationsPerFilePerRule()`
2929
* `net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences.setMaxViolationsPerFilePerRule(int)`
3030
* `net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences.MAX_VIOLATIONS_PFPR_DEFAULT`
31+
* `net.sourceforge.pmd.eclipse.runtime.cmd.DetectCutAndPasteCmd.setRenderer(Renderer)` is deprecated.
3132

3233

3334
### External Contributions

net.sourceforge.pmd.eclipse.plugin.test/src/main/java/net/sourceforge/pmd/eclipse/runtime/cmd/DetectCutAndPasteCmdTest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public void tearDown() throws Exception {
7070
public void testDetectCutAndPasteCmdBasic1() throws CoreException {
7171
final DetectCutAndPasteCmd cmd = new DetectCutAndPasteCmd();
7272
cmd.setProject(this.testProject);
73-
cmd.setRenderer(new SimpleRenderer());
73+
cmd.setCPDRenderer(new SimpleRenderer());
7474
cmd.setReportName(PMDRuntimeConstants.SIMPLE_CPDREPORT_NAME);
7575
cmd.setCreateReport(true);
7676
cmd.setLanguage("java");
@@ -121,7 +121,7 @@ public void testDetectCutAndPasteCmdBasic2() throws CoreException {
121121
public void testDetectCutAndPasteCmdNullArg1() {
122122
final DetectCutAndPasteCmd cmd = new DetectCutAndPasteCmd();
123123
cmd.setProject(null);
124-
cmd.setRenderer(new SimpleRenderer());
124+
cmd.setCPDRenderer(new SimpleRenderer());
125125
cmd.setReportName(PMDRuntimeConstants.SIMPLE_CPDREPORT_NAME);
126126
cmd.performExecute();
127127
}
@@ -133,7 +133,7 @@ public void testDetectCutAndPasteCmdNullArg1() {
133133
public void testDetectCutAndPasteCmdNullArg2() {
134134
final DetectCutAndPasteCmd cmd = new DetectCutAndPasteCmd();
135135
cmd.setProject(this.testProject);
136-
cmd.setRenderer(null);
136+
cmd.setCPDRenderer(null);
137137
cmd.setReportName(PMDRuntimeConstants.SIMPLE_CPDREPORT_NAME);
138138
cmd.performExecute();
139139
}
@@ -145,7 +145,7 @@ public void testDetectCutAndPasteCmdNullArg2() {
145145
public void testDetectCutAndPasteCmdNullArg3() {
146146
final DetectCutAndPasteCmd cmd = new DetectCutAndPasteCmd();
147147
cmd.setProject(this.testProject);
148-
cmd.setRenderer(new SimpleRenderer());
148+
cmd.setCPDRenderer(new SimpleRenderer());
149149
cmd.setReportName(null);
150150
cmd.performExecute();
151151
}
@@ -157,7 +157,7 @@ public void testDetectCutAndPasteCmdNullArg3() {
157157
public void testDetectCutAndPasteCmdNullArg4() {
158158
final DetectCutAndPasteCmd cmd = new DetectCutAndPasteCmd();
159159
cmd.setProject(null);
160-
cmd.setRenderer(null);
160+
cmd.setCPDRenderer(null);
161161
cmd.setReportName(PMDRuntimeConstants.SIMPLE_CPDREPORT_NAME);
162162
cmd.performExecute();
163163
}
@@ -169,7 +169,7 @@ public void testDetectCutAndPasteCmdNullArg4() {
169169
public void testDetectCutAndPasteCmdNullArg5() {
170170
final DetectCutAndPasteCmd cmd = new DetectCutAndPasteCmd();
171171
cmd.setProject(null);
172-
cmd.setRenderer(new SimpleRenderer());
172+
cmd.setCPDRenderer(new SimpleRenderer());
173173
cmd.setReportName(null);
174174
cmd.performExecute();
175175
}
@@ -181,7 +181,7 @@ public void testDetectCutAndPasteCmdNullArg5() {
181181
public void testDetectCutAndPasteCmdNullArg6() {
182182
final DetectCutAndPasteCmd cmd = new DetectCutAndPasteCmd();
183183
cmd.setProject(this.testProject);
184-
cmd.setRenderer(null);
184+
cmd.setCPDRenderer(null);
185185
cmd.setReportName(null);
186186
cmd.performExecute();
187187
}
@@ -193,7 +193,7 @@ public void testDetectCutAndPasteCmdNullArg6() {
193193
public void testDetectCutAndPasteCmdNullArg7() {
194194
final DetectCutAndPasteCmd cmd = new DetectCutAndPasteCmd();
195195
cmd.setProject(null);
196-
cmd.setRenderer(null);
196+
cmd.setCPDRenderer(null);
197197
cmd.setReportName(null);
198198
cmd.performExecute();
199199
}

net.sourceforge.pmd.eclipse.plugin/META-INF/MANIFEST.MF

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ Export-Package: name.herlin.command,
8383
net.sourceforge.pmd.lang.rule.properties,
8484
net.sourceforge.pmd.lang.dfa.report",
8585
net.sourceforge.pmd.cpd,
86+
net.sourceforge.pmd.cpd.renderer,
8687
net.sourceforge.pmd.eclipse.core;uses:="net.sourceforge.pmd",
8788
net.sourceforge.pmd.eclipse.core.impl,
8889
net.sourceforge.pmd.eclipse.plugin;

net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/runtime/cmd/DetectCutAndPasteCmd.java

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
package net.sourceforge.pmd.eclipse.runtime.cmd;
66

77
import java.io.ByteArrayInputStream;
8+
import java.io.ByteArrayOutputStream;
89
import java.io.File;
910
import java.io.IOException;
1011
import java.io.InputStream;
12+
import java.io.OutputStreamWriter;
13+
import java.io.Writer;
1114
import java.util.ArrayList;
1215
import java.util.Iterator;
1316
import java.util.List;
@@ -28,11 +31,11 @@
2831
import net.sourceforge.pmd.cpd.LanguageFactory;
2932
import net.sourceforge.pmd.cpd.Match;
3033
import net.sourceforge.pmd.cpd.Renderer;
34+
import net.sourceforge.pmd.cpd.renderer.CPDRenderer;
3135
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
3236
import net.sourceforge.pmd.eclipse.runtime.PMDRuntimeConstants;
3337
import net.sourceforge.pmd.eclipse.runtime.properties.IProjectProperties;
3438
import net.sourceforge.pmd.eclipse.runtime.properties.PropertiesException;
35-
import net.sourceforge.pmd.eclipse.util.IOUtil;
3639

3740
/**
3841
* This command produces a report of the Cut And Paste detector
@@ -44,7 +47,7 @@ public class DetectCutAndPasteCmd extends AbstractProjectCommand {
4447

4548
private Language language;
4649
private int minTileSize;
47-
private Renderer renderer;
50+
private CPDRenderer renderer;
4851
private String reportName;
4952
private boolean createReport;
5053
private List<IPropertyListener> listeners;
@@ -114,7 +117,7 @@ public void reset() {
114117

115118
setTerminated(false);
116119
setReportName(null);
117-
setRenderer(null);
120+
setCPDRenderer(null);
118121
setLanguage("java");
119122
setMinTileSize(PMDPlugin.getDefault().loadPreferences().getMinTileSize());
120123
setCreateReport(false);
@@ -139,10 +142,22 @@ public void setMinTileSize(final int tilesize) {
139142
}
140143

141144
/**
142-
* @param renderer
143-
* The renderer to set.
145+
* @deprecated Use {@link #setCPDRenderer(CPDRenderer)} instead.
144146
*/
145147
public void setRenderer(final Renderer renderer) {
148+
if (renderer != null) {
149+
this.setCPDRenderer(new CPDRenderer() {
150+
@Override
151+
public void render(Iterator<Match> matches, Writer writer) throws IOException {
152+
writer.write(renderer.render(matches));
153+
}
154+
});
155+
} else {
156+
this.setCPDRenderer(null);
157+
}
158+
}
159+
160+
public void setCPDRenderer(CPDRenderer renderer) {
146161
this.renderer = renderer;
147162
}
148163

@@ -254,38 +269,48 @@ private CPD newCPD() {
254269
* matches of the CPD
255270
*/
256271
private void renderReport(Iterator<Match> matches) {
257-
InputStream contentsStream = null;
258-
259272
try {
260273
LOG.debug("Rendering CPD report");
261274
subTask("Rendering CPD report");
262-
final String reportString = renderer.render(matches);
263275

264276
// Create the report folder if not already existing
265277
LOG.debug("Create the report folder");
266278
final IFolder folder = getProjectFolder(PMDRuntimeConstants.REPORT_FOLDER);
267279
if (!folder.exists()) {
268280
folder.create(true, true, getMonitor());
269281
}
270-
271282
// Create the report file
272283
LOG.debug("Create the report file");
273284
final IFile reportFile = folder.getFile(reportName);
274-
contentsStream = new ByteArrayInputStream(reportString.getBytes());
275-
if (reportFile.exists()) {
276-
LOG.debug(" Overwriting report file");
277-
reportFile.setContents(contentsStream, true, false, getMonitor());
278-
} else {
279-
LOG.debug(" Creating report file");
280-
reportFile.create(contentsStream, true, getMonitor());
285+
286+
byte[] data = new byte[0];
287+
try (ByteArrayOutputStream renderedReport = new ByteArrayOutputStream();
288+
Writer writer = new OutputStreamWriter(renderedReport);) {
289+
renderer.render(matches, writer);
290+
data = renderedReport.toByteArray();
291+
} catch (IOException e) {
292+
LOG.error("Error while renderering CPD Report", e);
293+
throw new RuntimeException(e);
281294
}
295+
296+
try (InputStream contentsStream = new ByteArrayInputStream(data)) {
297+
if (reportFile.exists()) {
298+
LOG.debug(" Overwriting report file");
299+
reportFile.setContents(contentsStream, true, false, getMonitor());
300+
} else {
301+
LOG.debug(" Creating report file");
302+
reportFile.create(contentsStream, true, getMonitor());
303+
}
304+
} catch (IOException e) {
305+
LOG.error("Error while writing CPD Report", e);
306+
throw new RuntimeException(e);
307+
}
308+
282309
reportFile.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
283310

284311
} catch (CoreException e) {
285312
LOG.debug("Core Exception: " + e.getMessage(), e);
286313
throw new RuntimeException(e);
287-
} finally {
288-
IOUtil.closeQuietly(contentsStream);
289314
}
290315
}
291316
}

net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/ui/actions/CPDCheckProjectAction.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222

2323
import net.sourceforge.pmd.cpd.CSVRenderer;
2424
import net.sourceforge.pmd.cpd.LanguageFactory;
25-
import net.sourceforge.pmd.cpd.Renderer;
2625
import net.sourceforge.pmd.cpd.SimpleRenderer;
2726
import net.sourceforge.pmd.cpd.XMLRenderer;
27+
import net.sourceforge.pmd.cpd.renderer.CPDRenderer;
2828
import net.sourceforge.pmd.eclipse.runtime.PMDRuntimeConstants;
2929
import net.sourceforge.pmd.eclipse.runtime.cmd.DetectCutAndPasteCmd;
3030
import net.sourceforge.pmd.eclipse.ui.PMDUiConstants;
@@ -105,7 +105,7 @@ private void detectCutAndPaste(final IProject project, CPDCheckDialog dialog) {
105105
final String selectedLanguage = dialog.getSelectedLanguage();
106106
final int tilesize = dialog.getTileSize();
107107
final boolean createReport = dialog.isCreateReportSelected();
108-
final Renderer selectedRenderer = this.createRenderer(dialog.getSelectedFormat());
108+
final CPDRenderer selectedRenderer = this.createRenderer(dialog.getSelectedFormat());
109109
final String fileName = this.createFileName(dialog.getSelectedFormat());
110110
final CPDView2 view = showView();
111111

@@ -115,7 +115,7 @@ private void detectCutAndPaste(final IProject project, CPDCheckDialog dialog) {
115115
detectCmd.setCreateReport(createReport);
116116
detectCmd.setLanguage(selectedLanguage);
117117
detectCmd.setMinTileSize(tilesize);
118-
detectCmd.setRenderer(selectedRenderer);
118+
detectCmd.setCPDRenderer(selectedRenderer);
119119
detectCmd.setReportName(fileName);
120120
detectCmd.setUserInitiated(true);
121121
detectCmd.addPropertyListener(view);
@@ -145,8 +145,8 @@ private CPDView2 showView() {
145145
* @param rendererKey xml, simple or cvs key
146146
* @return Renderer
147147
*/
148-
private Renderer createRenderer(final String rendererKey) {
149-
Renderer renderer = null;
148+
private CPDRenderer createRenderer(final String rendererKey) {
149+
CPDRenderer renderer = null;
150150
if (XML_KEY.equals(rendererKey)) {
151151
renderer = new XMLRenderer();
152152
} else if (SIMPLE_KEY.equals(rendererKey)) {

0 commit comments

Comments
 (0)