AbstractAccumulatingRenderer xref
1 /**
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package net.sourceforge.pmd.renderers;
5
6 import java.io.IOException;
7
8 import net.sourceforge.pmd.Report;
9 import net.sourceforge.pmd.util.datasource.DataSource;
10
11 /**
12 * Abstract base class for {@link Renderer} implementations which only produce
13 * output once all source files are processed. Such {@link Renderer}s use
14 * working memory proportional to the number of violations found, which can
15 * be quite large in some scenarios. Consider using
16 * {@link AbstractIncrementingRenderer} which can use significantly less memory.
17 *
18 * Subclasses should implement the {@link #end()} method to output the
19 * {@link #report}.
20 *
21 * @see AbstractIncrementingRenderer
22 */
23 public abstract class AbstractAccumulatingRenderer extends AbstractRenderer {
24
25 /**
26 * The accumulated Report.
27 */
28 protected Report report;
29
30 public AbstractAccumulatingRenderer(String name, String description) {
31 super(name, description);
32 }
33
34 /**
35 * {@inheritDoc}
36 */
37 public void start() throws IOException {
38 report = new Report();
39 }
40
41 /**
42 * {@inheritDoc}
43 */
44 public void startFileAnalysis(DataSource dataSource) {
45 }
46
47 /**
48 * {@inheritDoc}
49 */
50 public void renderFileReport(Report report) throws IOException {
51 this.report.merge(report);
52 }
53
54 /**
55 * Subclasses should output the {@link #report}.
56 *
57 * {@inheritDoc}
58 */
59 public abstract void end() throws IOException;
60 }