/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.renderers;
import java.io.IOException;
import net.sourceforge.pmd.Report;
import net.sourceforge.pmd.util.datasource.DataSource;
/**
* Abstract base class for {@link Renderer} implementations which only produce
* output once all source files are processed. Such {@link Renderer}s use
* working memory proportional to the number of violations found, which can be
* quite large in some scenarios. Consider using
* {@link AbstractIncrementingRenderer} which can use significantly less memory.
*
* Subclasses should implement the {@link #end()} method to output the
* {@link #report}.
*
* @see AbstractIncrementingRenderer
*/
public abstract class AbstractAccumulatingRenderer extends AbstractRenderer {
/**
* The accumulated Report.
*/
protected Report report;
public AbstractAccumulatingRenderer(String name, String description) {
super(name, description);
}
/**
* {@inheritDoc}
*/
@Override
public void start() throws IOException {
report = new Report();
}
/**
* {@inheritDoc}
*/
@Override
public void startFileAnalysis(DataSource dataSource) {
}
/**
* {@inheritDoc}
*/
@Override
public void renderFileReport(Report report) throws IOException {
this.report.merge(report);
}
/**
* Subclasses should output the {@link #report}.
*
* {@inheritDoc}
*/
@Override
public abstract void end() throws IOException;
}