Formatter.java

Index Score
net.sourceforge.pmd.ant
PMD

View: Reasons, Metrics, Source Code

These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.

MetricDescription
/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.ant; import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.Report; import net.sourceforge.pmd.renderers.EmacsRenderer; import net.sourceforge.pmd.renderers.HTMLRenderer; import net.sourceforge.pmd.renderers.PapariTextRenderer; import net.sourceforge.pmd.renderers.Renderer; import net.sourceforge.pmd.renderers.SummaryHTMLRenderer; import net.sourceforge.pmd.renderers.TextRenderer; import net.sourceforge.pmd.renderers.VBHTMLRenderer; import net.sourceforge.pmd.renderers.XMLRenderer; import net.sourceforge.pmd.renderers.XSLTRenderer; import net.sourceforge.pmd.renderers.YAHTMLRenderer; import net.sourceforge.pmd.renderers.CSVRenderer; import org.apache.tools.ant.BuildException; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; public class Formatter { private interface RendererBuilder { Renderer build(Object[] optionalArg); } // factory template private File toFile; private String linkPrefix; private String linePrefix; private String type; private boolean toConsole; private boolean showSuppressed; private static final Map<String, RendererBuilder> RENDERERS_BY_CODE = new HashMap<String, RendererBuilder>(8); static { RENDERERS_BY_CODE.put("xml", new RendererBuilder() { public Renderer build(Object[] arg) { return new XMLRenderer(); } }); RENDERERS_BY_CODE.put("betterhtml", new RendererBuilder() { public Renderer build(Object[] arg) { return new XSLTRenderer(); } }); RENDERERS_BY_CODE.put("html", new RendererBuilder() { public Renderer build(Object[] arg) { return new HTMLRenderer((String) arg[0], (String) arg[1]); } }); RENDERERS_BY_CODE.put("summaryhtml", new RendererBuilder() { public Renderer build(Object[] arg) { return new SummaryHTMLRenderer((String) arg[0], (String) arg[1]); } }); RENDERERS_BY_CODE.put("papari", new RendererBuilder() { public Renderer build(Object[] arg) { return new PapariTextRenderer(); } }); RENDERERS_BY_CODE.put("csv", new RendererBuilder() { public Renderer build(Object[] arg) { return new CSVRenderer(); } }); RENDERERS_BY_CODE.put("emacs", new RendererBuilder() { public Renderer build(Object[] arg) { return new EmacsRenderer(); } }); RENDERERS_BY_CODE.put("vbhtml", new RendererBuilder() { public Renderer build(Object[] arg) { return new VBHTMLRenderer(); } }); RENDERERS_BY_CODE.put("yahtml", new RendererBuilder() { public Renderer build(Object[] arg) { return new YAHTMLRenderer(); } }); RENDERERS_BY_CODE.put("text", new RendererBuilder() { public Renderer build(Object[] arg) { return new TextRenderer(); } }); // add additional codes & factories here } public void setShowSuppressed(boolean value) { this.showSuppressed = value; } public void setType(String type) { this.type = type; } public void setLinkPrefix(String linkPrefix) { this.linkPrefix = linkPrefix; } public void setToFile(File toFile) { this.toFile = toFile; } public void setToConsole(boolean toConsole) { this.toConsole = toConsole; } public void setLinePrefix(String linePrefix) { this.linePrefix = linePrefix; } private Writer writer; private Renderer renderer; public Renderer getRenderer() { return renderer; } public void start(String baseDir) { try { if (toConsole) { writer = new BufferedWriter(new OutputStreamWriter(System.out)); } if (toFile != null) { writer = getToFileWriter(baseDir); } renderer = getRenderer(toConsole); renderer.setWriter(writer); renderer.start(); } catch (IOException ioe) { throw new BuildException(ioe.getMessage()); } } public void end(Report errorReport) { try { renderer.renderFileReport(errorReport); renderer.end(); writer.write(PMD.EOL); if (toConsole) { writer.flush(); } else { writer.close(); } } catch (IOException ioe) { throw new BuildException(ioe.getMessage()); } } public boolean isNoOutputSupplied() { return toFile == null && !toConsole; } public String toString() { return "file = " + toFile + "; renderer = " + type; } private static String[] validRendererCodes() { return RENDERERS_BY_CODE.keySet().toArray(new String[RENDERERS_BY_CODE.size()]); } private static String unknownRendererMessage(String userSpecifiedType) { StringBuffer sb = new StringBuffer(100); sb.append("Formatter type must be one of: '"); String[] typeCodes = validRendererCodes(); sb.append(typeCodes[0]); for (int i = 1; i < typeCodes.length; i++) { sb.append("', '").append(typeCodes[i]); } sb.append("', or a class name; you specified: "); sb.append(userSpecifiedType); return sb.toString(); } private Renderer fromClassname(String rendererClassname) { try { return (Renderer) Class.forName(rendererClassname).newInstance(); } catch (Exception e) { throw new BuildException(unknownRendererMessage(rendererClassname)); } } // FIXME - hm, what about this consoleRenderer thing... need a test for this private Renderer getRenderer(boolean consoleRenderer) { if ("".equals(type)) { throw new BuildException(unknownRendererMessage("<unspecified>")); } RendererBuilder builder = RENDERERS_BY_CODE.get(type); Renderer renderer = builder == null ? fromClassname(type) : builder.build(new String[]{linkPrefix, linePrefix}); renderer.showSuppressedViolations(showSuppressed); return renderer; } private Writer getToFileWriter(String baseDir) throws IOException { if (!toFile.isAbsolute()) { return new BufferedWriter(new FileWriter(new File(baseDir + System.getProperty("file.separator") + toFile.getPath()))); } return new BufferedWriter(new FileWriter(toFile)); } }

The table below shows all metrics for Formatter.java.

MetricValueDescription