diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 34f16eb60f..191d9f5e87 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -185,6 +185,7 @@ are deprecated as internal API. * [#2727](https://github.com/pmd/pmd/pull/2727): Cleanup: replace indexOf() < 0 with contains - [XenoAmess](https://github.com/XenoAmess) * [#2728](https://github.com/pmd/pmd/pull/2728): Cleanup: javadoc issues - [XenoAmess](https://github.com/XenoAmess) * [#2729](https://github.com/pmd/pmd/pull/2729): Cleanup: use print instead of printf if no format exists - [XenoAmess](https://github.com/XenoAmess) +* [#2730](https://github.com/pmd/pmd/pull/2730): Cleanup: StringBuilder issues - [XenoAmess](https://github.com/XenoAmess) * [#2731](https://github.com/pmd/pmd/pull/2731): Cleanup: avoid compiling Patterns repeatedly - [XenoAmess](https://github.com/XenoAmess) * [#2732](https://github.com/pmd/pmd/pull/2732): Cleanup: use StandardCharsets instead of Charset.forName - [XenoAmess](https://github.com/XenoAmess) * [#2734](https://github.com/pmd/pmd/pull/2734): Cleanup: use try with resources - [XenoAmess](https://github.com/XenoAmess) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java b/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java index 58af4c1bd2..8642562b11 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java @@ -60,10 +60,10 @@ public final class PMDCommandLineInterface { public static String buildUsageText(JCommander jcommander) { StringBuilder usage = new StringBuilder(); - String allCommandsDescription = null; + StringBuilder allCommandsDescription = null; if (jcommander != null && jcommander.getCommands() != null) { for (String command : jcommander.getCommands().keySet()) { - allCommandsDescription += jcommander.getCommandDescription(command) + PMD.EOL; + allCommandsDescription.append(jcommander.getCommandDescription(command)).append(PMD.EOL); } } @@ -143,7 +143,7 @@ public final class PMDCommandLineInterface { Renderer renderer = RendererFactory.createRenderer(reportName, new Properties()); buf.append(" ").append(reportName).append(": "); if (!reportName.equals(renderer.getName())) { - buf.append(" Deprecated alias for '" + renderer.getName()).append(PMD.EOL); + buf.append(" Deprecated alias for '").append(renderer.getName()).append(PMD.EOL); continue; } buf.append(renderer.getDescription()).append(PMD.EOL); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/VSRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/VSRenderer.java index f34622e2f0..cc3af3f2d2 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/VSRenderer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/VSRenderer.java @@ -33,9 +33,8 @@ public class VSRenderer implements Renderer, CPDRenderer { for (Iterator iterator = match.iterator(); iterator.hasNext();) { mark = iterator.next(); writer.append(mark.getFilename()) - .append('(').append(String.valueOf(mark.getBeginLine())).append("):") - .append(" Between lines " + mark.getBeginLine() + " and " - + (mark.getBeginLine() + match.getLineCount()) + PMD.EOL); + .append('(').append(String.valueOf(mark.getBeginLine())).append("):") + .append(" Between lines ").append(String.valueOf(mark.getBeginLine())).append(" and ").append(String.valueOf(mark.getBeginLine() + match.getLineCount())).append(PMD.EOL); } } writer.flush(); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/report/ReportHTMLPrintVisitor.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/report/ReportHTMLPrintVisitor.java index 682dbbc587..af06618833 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/report/ReportHTMLPrintVisitor.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/report/ReportHTMLPrintVisitor.java @@ -131,8 +131,7 @@ public class ReportHTMLPrintVisitor extends ReportVisitor { vnode.getParent().addNumberOfViolation(1); RuleViolation vio = vnode.getRuleViolation(); - classBuf.append("" + " " + vio.getMethodName() + "" + " " + this.displayRuleViolation(vio) - + "" + ""); + classBuf.append("" + " ").append(vio.getMethodName()).append("").append(" ").append(this.displayRuleViolation(vio)).append("").append(""); } private void renderPackage(PackageNode pnode) { diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/CodeClimateRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/CodeClimateRenderer.java index 67a27d783a..c738fac851 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/CodeClimateRenderer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/CodeClimateRenderer.java @@ -145,27 +145,38 @@ public class CodeClimateRenderer extends AbstractIncrementingRenderer { } private String getBody() { - String result = "## " + rule.getName() + "\\n\\n" + "Since: PMD " + rule.getSince() + "\\n\\n" + "Priority: " - + rule.getPriority() + "\\n\\n" - + "[Categories](https://github.com/codeclimate/platform/blob/master/spec/analyzers/SPEC.md#categories): " - + Arrays.toString(getCategories()).replaceAll("[\\[\\]]", "") + "\\n\\n" - + "[Remediation Points](https://github.com/codeclimate/platform/blob/master/spec/analyzers/SPEC.md#remediation-points): " - + getRemediationPoints() + "\\n\\n" + cleaned(rule.getDescription()); + StringBuilder result = new StringBuilder(); + result.append("## ") + .append(rule.getName()) + .append("\\n\\n") + .append("Since: PMD ") + .append(rule.getSince()) + .append("\\n\\n") + .append("Priority: ") + .append(rule.getPriority()) + .append("\\n\\n") + .append("[Categories](https://github.com/codeclimate/platform/blob/master/spec/analyzers/SPEC.md#categories): ") + .append(Arrays.toString(getCategories()).replaceAll("[\\[\\]]", "")) + .append("\\n\\n") + .append("[Remediation Points](https://github.com/codeclimate/platform/blob/master/spec/analyzers/SPEC.md#remediation-points): ") + .append(getRemediationPoints()) + .append("\\n\\n") + .append(cleaned(rule.getDescription())); if (!rule.getExamples().isEmpty()) { - result += "\\n\\n### Example:\\n\\n"; + result.append("\\n\\n### Example:\\n\\n"); for (String snippet : rule.getExamples()) { String exampleSnippet = snippet.replaceAll("\\n", "\\\\n"); exampleSnippet = exampleSnippet.replaceAll("\\t", "\\\\t"); - result += "```java\\n" + exampleSnippet + "\\n``` "; + result.append("```java\\n").append(exampleSnippet).append("\\n``` "); } } if (!rule.getPropertyDescriptors().isEmpty()) { - result += "\\n\\n### [PMD properties](" + PMD_PROPERTIES_URL + ")\\n\\n"; - result += "Name | Value | Description\\n"; - result += "--- | --- | ---\\n"; + result.append("\\n\\n### [PMD properties](").append(PMD_PROPERTIES_URL).append(")\\n\\n"); + result.append("Name | Value | Description\\n"); + result.append("--- | --- | ---\\n"); for (PropertyDescriptor property : rule.getPropertyDescriptors()) { String propertyName = property.name().replaceAll("\\_", "\\\\_"); @@ -182,10 +193,10 @@ public class CodeClimateRenderer extends AbstractIncrementingRenderer { } propertyValue = propertyValue.replaceAll("(\n|\r\n|\r)", "\\\\n"); - result += propertyName + " | " + propertyValue + " | " + property.description() + "\\n"; + result.append(propertyName).append(" | ").append(propertyValue).append(" | ").append(property.description()).append("\\n"); } } - return cleaned(result); + return cleaned(result.toString()); } private String cleaned(String original) { diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/HTMLRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/HTMLRenderer.java index 4dae8b745d..5f37db9be2 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/HTMLRenderer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/HTMLRenderer.java @@ -128,12 +128,13 @@ public class HTMLRenderer extends AbstractIncrementingRenderer { buf.append(" bgcolor=\"lightgrey\""); } colorize = !colorize; - buf.append("> " + PMD.EOL); - buf.append("" + violationCount + "" + PMD.EOL); - buf.append("" - + renderFileName(rv.getFilename(), rv.getBeginLine()) - + "" + PMD.EOL); - buf.append("" + Integer.toString(rv.getBeginLine()) + "" + PMD.EOL); + buf.append("> ").append(PMD.EOL); + buf.append("").append(violationCount).append("").append(PMD.EOL); + buf.append("") + .append(renderFileName(rv.getFilename(), rv.getBeginLine())) + .append("") + .append(PMD.EOL); + buf.append("").append(rv.getBeginLine()).append("").append(PMD.EOL); String d = StringEscapeUtils.escapeHtml4(rv.getDescription()); @@ -141,8 +142,8 @@ public class HTMLRenderer extends AbstractIncrementingRenderer { if (StringUtils.isNotBlank(infoUrl)) { d = "" + d + ""; } - buf.append("" + d + "" + PMD.EOL); - buf.append("" + PMD.EOL); + buf.append("").append(d).append("").append(PMD.EOL); + buf.append("").append(PMD.EOL); writer.write(buf.toString()); violationCount++; } @@ -182,10 +183,10 @@ public class HTMLRenderer extends AbstractIncrementingRenderer { buf.append(" bgcolor=\"lightgrey\""); } colorize = !colorize; - buf.append("> " + PMD.EOL); - buf.append("" + renderFileName(pe.getFile(), -1) + "" + PMD.EOL); - buf.append("
" + pe.getDetail() + "
" + PMD.EOL); - buf.append("" + PMD.EOL); + buf.append("> ").append(PMD.EOL); + buf.append("").append(renderFileName(pe.getFile(), -1)).append("").append(PMD.EOL); + buf.append("
").append(pe.getDetail()).append("
").append(PMD.EOL); + buf.append("").append(PMD.EOL); writer.write(buf.toString()); } writer.write(""); @@ -210,15 +211,14 @@ public class HTMLRenderer extends AbstractIncrementingRenderer { buf.append(" bgcolor=\"lightgrey\""); } colorize = !colorize; - buf.append("> " + PMD.EOL); + buf.append("> ").append(PMD.EOL); RuleViolation rv = sv.getRuleViolation(); - buf.append("" + renderFileName(rv.getFilename(), rv.getBeginLine()) + "" + PMD.EOL); - buf.append("" + rv.getBeginLine() + "" + PMD.EOL); - buf.append("" + renderRuleName(rv.getRule()) + "" + PMD.EOL); - buf.append("" + (sv.suppressedByNOPMD() ? "NOPMD" : "Annotation") + "" + PMD.EOL); - buf.append("" + (sv.getUserMessage() == null ? "" : sv.getUserMessage()) + "" - + PMD.EOL); - buf.append("" + PMD.EOL); + buf.append("").append(renderFileName(rv.getFilename(), rv.getBeginLine())).append("").append(PMD.EOL); + buf.append("").append(rv.getBeginLine()).append("").append(PMD.EOL); + buf.append("").append(renderRuleName(rv.getRule())).append("").append(PMD.EOL); + buf.append("").append(sv.suppressedByNOPMD() ? "NOPMD" : "Annotation").append("").append(PMD.EOL); + buf.append("").append(sv.getUserMessage() == null ? "" : sv.getUserMessage()).append("").append(PMD.EOL); + buf.append("").append(PMD.EOL); writer.write(buf.toString()); } writer.write(""); @@ -243,10 +243,10 @@ public class HTMLRenderer extends AbstractIncrementingRenderer { buf.append(" bgcolor=\"lightgrey\""); } colorize = !colorize; - buf.append("> " + PMD.EOL); - buf.append("" + renderRuleName(ce.rule()) + "" + PMD.EOL); - buf.append("" + ce.issue() + "" + PMD.EOL); - buf.append("" + PMD.EOL); + buf.append("> ").append(PMD.EOL); + buf.append("").append(renderRuleName(ce.rule())).append("").append(PMD.EOL); + buf.append("").append(ce.issue()).append("").append(PMD.EOL); + buf.append("").append(PMD.EOL); writer.write(buf.toString()); } writer.write(""); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/IDEAJRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/IDEAJRenderer.java index 4147ef0404..0cc16dc8d9 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/IDEAJRenderer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/IDEAJRenderer.java @@ -66,7 +66,7 @@ public class IDEAJRenderer extends AbstractIncrementingRenderer { while (violations.hasNext()) { buf.setLength(0); RuleViolation rv = violations.next(); - buf.append(rv.getDescription() + PMD.EOL); + buf.append(rv.getDescription()).append(PMD.EOL); buf.append(" at ").append(getFullyQualifiedClassName(rv.getFilename(), sourcePath)).append(".method("); buf.append(getSimpleFileName(rv.getFilename())).append(':').append(rv.getBeginLine()).append(')') .append(PMD.EOL); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextColorRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextColorRenderer.java index bc2c95c706..c4a960c464 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextColorRenderer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextColorRenderer.java @@ -125,17 +125,41 @@ public class TextColorRenderer extends AbstractAccumulatingRenderer { String nextFile = determineFileName(rv.getFilename()); if (!nextFile.equals(lastFile)) { lastFile = nextFile; - buf.append(this.yellowBold + "*" + this.colorReset + " file: " + this.whiteBold - + this.getRelativePath(lastFile) + this.colorReset + PMD.EOL); + buf.append(this.yellowBold) + .append("*") + .append(this.colorReset) + .append(" file: ") + .append(this.whiteBold) + .append(this.getRelativePath(lastFile)) + .append(this.colorReset) + .append(PMD.EOL); } - buf.append( - this.green + " src: " + this.cyan + lastFile.substring(lastFile.lastIndexOf(File.separator) + 1) - + this.colorReset + ":" + this.cyan + rv.getBeginLine() - + (rv.getEndLine() == -1 ? "" : ":" + rv.getEndLine()) + this.colorReset + PMD.EOL); - buf.append(this.green + " rule: " + this.colorReset + rv.getRule().getName() + PMD.EOL); - buf.append(this.green + " msg: " + this.colorReset + rv.getDescription() + PMD.EOL); - buf.append(this.green + " code: " + this.colorReset + this.getLine(lastFile, rv.getBeginLine()) + PMD.EOL - + PMD.EOL); + buf.append(this.green) + .append(" src: ") + .append(this.cyan) + .append(lastFile.substring(lastFile.lastIndexOf(File.separator) + 1)) + .append(this.colorReset).append(":") + .append(this.cyan) + .append(rv.getBeginLine()) + .append(rv.getEndLine() == -1 ? "" : ":" + rv.getEndLine()) + .append(this.colorReset) + .append(PMD.EOL); + buf.append(this.green) + .append(" rule: ") + .append(this.colorReset) + .append(rv.getRule().getName()) + .append(PMD.EOL); + buf.append(this.green) + .append(" msg: ") + .append(this.colorReset) + .append(rv.getDescription()) + .append(PMD.EOL); + buf.append(this.green) + .append(" code: ") + .append(this.colorReset) + .append(this.getLine(lastFile, rv.getBeginLine())) + .append(PMD.EOL) + .append(PMD.EOL); writer.write(buf.toString()); } writer.write(PMD.EOL + PMD.EOL); @@ -155,11 +179,26 @@ public class TextColorRenderer extends AbstractAccumulatingRenderer { String nextFile = determineFileName(error.getFile()); if (!nextFile.equals(lastFile)) { lastFile = nextFile; - buf.append(this.redBold + "*" + this.colorReset + " file: " + this.whiteBold - + this.getRelativePath(lastFile) + this.colorReset + PMD.EOL); + buf.append(this.redBold) + .append("*") + .append(this.colorReset) + .append(" file: ") + .append(this.whiteBold) + .append(this.getRelativePath(lastFile)) + .append(this.colorReset) + .append(PMD.EOL); } - buf.append(this.green + " err: " + this.cyan + error.getMsg() + this.colorReset + PMD.EOL) - .append(this.red).append(error.getDetail()).append(colorReset).append(PMD.EOL).append(PMD.EOL); + buf.append(this.green) + .append(" err: ") + .append(this.cyan) + .append(error.getMsg()) + .append(this.colorReset) + .append(PMD.EOL) + .append(this.red) + .append(error.getDetail()) + .append(colorReset) + .append(PMD.EOL) + .append(PMD.EOL); writer.write(buf.toString()); } @@ -167,9 +206,21 @@ public class TextColorRenderer extends AbstractAccumulatingRenderer { buf.setLength(0); numberOfErrors++; Report.ConfigurationError error = i.next(); - buf.append(this.redBold + "*" + this.colorReset + " rule: " + this.whiteBold - + error.rule().getName() + this.colorReset + PMD.EOL); - buf.append(this.green + " err: " + this.cyan + error.issue() + this.colorReset + PMD.EOL + PMD.EOL); + buf.append(this.redBold) + .append("*") + .append(this.colorReset) + .append(" rule: ") + .append(this.whiteBold) + .append(error.rule().getName()) + .append(this.colorReset) + .append(PMD.EOL); + buf.append(this.green) + .append(" err: ") + .append(this.cyan) + .append(error.issue()) + .append(this.colorReset) + .append(PMD.EOL) + .append(PMD.EOL); writer.write(buf.toString()); } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextPadRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextPadRenderer.java index d58226fbcd..dcf599aa18 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextPadRenderer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextPadRenderer.java @@ -55,7 +55,7 @@ public class TextPadRenderer extends AbstractIncrementingRenderer { RuleViolation rv = violations.next(); buf.setLength(0); // Filename - buf.append(determineFileName(rv.getFilename()) + "("); + buf.append(determineFileName(rv.getFilename())).append("("); // Line number buf.append(Integer.toString(rv.getBeginLine())).append(", "); // Name of violated rule diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/VBHTMLRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/VBHTMLRenderer.java index 9b050cbdc7..1af81231dc 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/VBHTMLRenderer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/VBHTMLRenderer.java @@ -68,9 +68,8 @@ public class VBHTMLRenderer extends AbstractIncrementingRenderer { } colorize = !colorize; - sb.append("" + rv.getBeginLine() - + "   "); - sb.append("" + rv.getDescription() + ""); + sb.append("").append(rv.getBeginLine()).append("   "); + sb.append("").append(rv.getDescription()).append(""); sb.append(""); sb.append(lineSep); writer.write(sb.toString()); @@ -130,7 +129,7 @@ public class VBHTMLRenderer extends AbstractIncrementingRenderer { private String header() { StringBuilder sb = new StringBuilder(600).append("PMD") - .append("