From 395e3453cb4e1e21bf4be9d68695c810669b9f22 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Wed, 31 Jul 2019 20:18:42 +0200 Subject: [PATCH] dogfood: Upgrade to PMD 6.17.0 and fix CloseResource issues --- .../main/java/net/sourceforge/pmd/PMD.java | 1 + .../pmd/cache/AbstractAnalysisCache.java | 2 + .../java/net/sourceforge/pmd/cpd/CPDTask.java | 2 + .../pmd/processor/AbstractPMDProcessor.java | 10 +++++ .../pmd/renderers/CodeClimateRenderer.java | 2 - .../pmd/renderers/EmacsRenderer.java | 2 - .../pmd/renderers/HTMLRenderer.java | 3 -- .../pmd/renderers/IDEAJRenderer.java | 1 - .../pmd/renderers/TextPadRenderer.java | 2 - .../pmd/renderers/TextRenderer.java | 3 -- .../pmd/renderers/VBHTMLRenderer.java | 3 -- .../pmd/renderers/XMLRenderer.java | 4 -- .../pmd/renderers/XSLTRenderer.java | 9 ++-- .../net/sourceforge/pmd/util/FileUtil.java | 3 ++ .../pmd/util/datasource/ZipDataSource.java | 11 ++++- .../pmd/util/designer/Designer.java | 3 +- .../net/sourceforge/pmd/cpd/CPPTokenizer.java | 31 ++++++------- .../pmd/AbstractLanguageVersionTest.java | 6 +-- .../pmd/AbstractRuleSetFactoryTest.java | 43 ++++++++++--------- .../net/sourceforge/pmd/cli/BaseCLITest.java | 4 ++ .../pmd/lang/vm/ast/AbstractVmNode.java | 1 + pom.xml | 6 +-- 22 files changed, 83 insertions(+), 69 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/PMD.java b/pmd-core/src/main/java/net/sourceforge/pmd/PMD.java index 21349abc1c..adcdbd1b01 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/PMD.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/PMD.java @@ -503,6 +503,7 @@ public class PMD { final TimingReportRenderer renderer = new TextTimingReportRenderer(); try { // Don't close this writer, we don't want to close stderr + @SuppressWarnings("PMD.CloseResource") final Writer writer = new OutputStreamWriter(System.err); renderer.render(timingReport, writer); } catch (final IOException e) { diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cache/AbstractAnalysisCache.java b/pmd-core/src/main/java/net/sourceforge/pmd/cache/AbstractAnalysisCache.java index 718ac77109..e01ea42f20 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cache/AbstractAnalysisCache.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cache/AbstractAnalysisCache.java @@ -124,6 +124,8 @@ public abstract class AbstractAnalysisCache implements AnalysisCache { final long currentAuxClassPathChecksum; if (auxclassPathClassLoader instanceof URLClassLoader) { + // we don't want to close our aux classpath loader - we still need it... + @SuppressWarnings("PMD.CloseResource") final URLClassLoader urlClassLoader = (URLClassLoader) auxclassPathClassLoader; currentAuxClassPathChecksum = computeClassPathHash(urlClassLoader.getURLs()); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDTask.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDTask.java index 953cfd1e25..294e263ad7 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDTask.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDTask.java @@ -133,6 +133,8 @@ public class CPDTask extends Task { CPDRenderer renderer = createRenderer(); try { + @SuppressWarnings("PMD.CloseResource") + // will be closed via BufferedWriter/OutputStreamWriter chain down below final OutputStream os; if (outputFile == null) { os = System.out; diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/processor/AbstractPMDProcessor.java b/pmd-core/src/main/java/net/sourceforge/pmd/processor/AbstractPMDProcessor.java index 2f0ad38b11..be822fd4dd 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/processor/AbstractPMDProcessor.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/processor/AbstractPMDProcessor.java @@ -11,6 +11,8 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; +import org.apache.commons.io.IOUtils; + import net.sourceforge.pmd.PMDConfiguration; import net.sourceforge.pmd.Report; import net.sourceforge.pmd.Rule; @@ -24,6 +26,7 @@ import net.sourceforge.pmd.benchmark.TimedOperation; import net.sourceforge.pmd.benchmark.TimedOperationCategory; import net.sourceforge.pmd.renderers.Renderer; import net.sourceforge.pmd.util.datasource.DataSource; +import net.sourceforge.pmd.util.datasource.ZipDataSource; /** * @author Romain Pelisse <belaran@gmail.com> @@ -116,6 +119,13 @@ public abstract class AbstractPMDProcessor { runAnalysis(new PmdRunnable(dataSource, realFileName, renderers, ctx, rs, processor)); } + // in case we analyzed files within Zip Files/Jars, we need to close them now... + for (DataSource dataSource : files) { + if (dataSource instanceof ZipDataSource) { + IOUtils.closeQuietly((ZipDataSource) dataSource); + } + } + // render base report first - general errors renderReports(renderers, ctx.getReport()); 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 3513a1f48b..4cc5645b92 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 @@ -9,7 +9,6 @@ import static net.sourceforge.pmd.renderers.CodeClimateRule.CODECLIMATE_CATEGORI import static net.sourceforge.pmd.renderers.CodeClimateRule.CODECLIMATE_REMEDIATION_MULTIPLIER; import java.io.IOException; -import java.io.Writer; import java.util.Arrays; import java.util.Iterator; import java.util.List; @@ -54,7 +53,6 @@ public class CodeClimateRenderer extends AbstractIncrementingRenderer { @Override public void renderFileViolations(Iterator violations) throws IOException { - Writer writer = getWriter(); Gson gson = new GsonBuilder().disableHtmlEscaping().create(); while (violations.hasNext()) { diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/EmacsRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/EmacsRenderer.java index 710840deba..7af6f21dd2 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/EmacsRenderer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/EmacsRenderer.java @@ -5,7 +5,6 @@ package net.sourceforge.pmd.renderers; import java.io.IOException; -import java.io.Writer; import java.util.Iterator; import net.sourceforge.pmd.RuleViolation; @@ -30,7 +29,6 @@ public class EmacsRenderer extends AbstractIncrementingRenderer { @Override public void renderFileViolations(Iterator violations) throws IOException { - Writer writer = getWriter(); StringBuilder buf = new StringBuilder(); while (violations.hasNext()) { RuleViolation rv = violations.next(); 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 db5ebafcd1..49e7551fb1 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 @@ -78,7 +78,6 @@ public class HTMLRenderer extends AbstractIncrementingRenderer { @Override public void start() throws IOException { - Writer writer = getWriter(); writer.write("PMD" + PMD.EOL); writer.write("

PMD report

"); writer.write("

Problems found

"); @@ -88,13 +87,11 @@ public class HTMLRenderer extends AbstractIncrementingRenderer { @Override public void renderFileViolations(Iterator violations) throws IOException { - Writer writer = getWriter(); glomRuleViolations(writer, violations); } @Override public void end() throws IOException { - Writer writer = getWriter(); writer.write(""); glomProcessingErrors(writer, errors); if (showSuppressedViolations) { 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 5f67921a15..4147ef0404 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 @@ -51,7 +51,6 @@ public class IDEAJRenderer extends AbstractIncrementingRenderer { classAndMethodName = getProperty(CLASS_AND_METHOD_NAME); fileName = getProperty(FILE_NAME); - Writer writer = getWriter(); if (".method".equals(classAndMethodName)) { // working on a directory tree renderDirectoy(writer, violations); 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 ef8b7b539c..f4aeb0dbac 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 @@ -5,7 +5,6 @@ package net.sourceforge.pmd.renderers; import java.io.IOException; -import java.io.Writer; import java.util.Iterator; import net.sourceforge.pmd.PMD; @@ -51,7 +50,6 @@ public class TextPadRenderer extends AbstractIncrementingRenderer { @Override public void renderFileViolations(Iterator violations) throws IOException { - Writer writer = getWriter(); StringBuffer buf = new StringBuffer(); while (violations.hasNext()) { RuleViolation rv = violations.next(); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextRenderer.java index 7d2a871e53..f3d3a70eae 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextRenderer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/TextRenderer.java @@ -5,7 +5,6 @@ package net.sourceforge.pmd.renderers; import java.io.IOException; -import java.io.Writer; import java.util.Iterator; import net.sourceforge.pmd.PMD; @@ -30,7 +29,6 @@ public class TextRenderer extends AbstractIncrementingRenderer { @Override public void renderFileViolations(Iterator violations) throws IOException { - Writer writer = getWriter(); StringBuilder buf = new StringBuilder(); while (violations.hasNext()) { @@ -45,7 +43,6 @@ public class TextRenderer extends AbstractIncrementingRenderer { @Override public void end() throws IOException { - Writer writer = getWriter(); StringBuilder buf = new StringBuilder(500); for (Report.ProcessingError error : errors) { 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 e81b3595af..c2db75be17 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 @@ -5,7 +5,6 @@ package net.sourceforge.pmd.renderers; import java.io.IOException; -import java.io.Writer; import java.util.Iterator; import net.sourceforge.pmd.PMD; @@ -41,7 +40,6 @@ public class VBHTMLRenderer extends AbstractIncrementingRenderer { return; } - Writer writer = getWriter(); StringBuilder sb = new StringBuilder(500); String filename = null; String lineSep = PMD.EOL; @@ -84,7 +82,6 @@ public class VBHTMLRenderer extends AbstractIncrementingRenderer { @Override public void end() throws IOException { - Writer writer = getWriter(); StringBuilder sb = new StringBuilder(); writer.write("
"); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/XMLRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/XMLRenderer.java index 077fddbc8c..80e70f9a23 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/XMLRenderer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/XMLRenderer.java @@ -5,7 +5,6 @@ package net.sourceforge.pmd.renderers; import java.io.IOException; -import java.io.Writer; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; @@ -51,7 +50,6 @@ public class XMLRenderer extends AbstractIncrementingRenderer { useUTF8 = true; } - Writer writer = getWriter(); StringBuilder buf = new StringBuilder(500); buf.append("").append(PMD.EOL); createVersionAttr(buf); @@ -64,7 +62,6 @@ public class XMLRenderer extends AbstractIncrementingRenderer { @Override public void renderFileViolations(Iterator violations) throws IOException { - Writer writer = getWriter(); StringBuilder buf = new StringBuilder(500); String filename = null; @@ -117,7 +114,6 @@ public class XMLRenderer extends AbstractIncrementingRenderer { @Override public void end() throws IOException { - Writer writer = getWriter(); StringBuilder buf = new StringBuilder(500); // errors for (Report.ProcessingError pe : errors) { diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/XSLTRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/XSLTRenderer.java index 62b90da9ec..28a3bd2132 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/XSLTRenderer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/XSLTRenderer.java @@ -85,7 +85,10 @@ public class XSLTRenderer extends XMLRenderer { if (xslt == null) { throw new FileNotFoundException("Can't find XSLT file: " + this.xsltFilename); } - this.prepareTransformer(xslt); + + try (InputStream stream = xslt) { + this.prepareTransformer(stream); + } // Now we build the XML file super.start(); } @@ -115,11 +118,9 @@ public class XSLTRenderer extends XMLRenderer { // First we finish the XML report super.end(); // Now we transform it using XSLT - Writer writer = super.getWriter(); if (writer instanceof StringWriter) { StringWriter w = (StringWriter) writer; - StringBuffer buffer = w.getBuffer(); - Document doc = this.getDocument(buffer.toString()); + Document doc = this.getDocument(w.toString()); this.transform(doc); } else { // Should not happen ! diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/util/FileUtil.java b/pmd-core/src/main/java/net/sourceforge/pmd/util/FileUtil.java index 55bfbed7b4..cda50cd40f 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/util/FileUtil.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/util/FileUtil.java @@ -100,6 +100,9 @@ public final class FileUtil { } if (!file.isDirectory()) { if (fileLocation.endsWith(".zip") || fileLocation.endsWith(".jar")) { + @SuppressWarnings("PMD.CloseResource") + // the zip file can't be closed here, it needs to be closed at the end of the PMD run + // see net.sourceforge.pmd.processor.AbstractPMDProcessor#processFiles(...) ZipFile zipFile; try { zipFile = new ZipFile(fileLocation); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/util/datasource/ZipDataSource.java b/pmd-core/src/main/java/net/sourceforge/pmd/util/datasource/ZipDataSource.java index f24ea8b051..6fa453cdf0 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/util/datasource/ZipDataSource.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/util/datasource/ZipDataSource.java @@ -4,6 +4,7 @@ package net.sourceforge.pmd.util.datasource; +import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; @@ -12,7 +13,7 @@ import java.util.zip.ZipFile; /** * DataSource implementation to read data from an entry in a zip or jar file. */ -public class ZipDataSource implements DataSource { +public class ZipDataSource implements DataSource, Closeable { private final ZipFile zipFile; private final ZipEntry zipEntry; @@ -69,6 +70,7 @@ public class ZipDataSource implements DataSource { if (getClass() != obj.getClass()) { return false; } + @SuppressWarnings("PMD.CloseResource") ZipDataSource other = (ZipDataSource) obj; if (zipEntry == null) { if (other.zipEntry != null) { @@ -86,4 +88,11 @@ public class ZipDataSource implements DataSource { } return true; } + + @Override + public void close() throws IOException { + if (zipFile != null) { + zipFile.close(); + } + } } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/util/designer/Designer.java b/pmd-core/src/main/java/net/sourceforge/pmd/util/designer/Designer.java index d7eac863ee..35338087a3 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/util/designer/Designer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/util/designer/Designer.java @@ -567,11 +567,10 @@ public class Designer implements ClipboardOwner { final RuleSet rs = new RuleSetFactory().createSingleRuleRuleSet(dfaGraphRule); RuleContext ctx = new RuleContext(); ctx.setSourceCodeFile(new File("[no filename]." + languageVersion.getLanguage().getExtensions().get(0))); - StringReader reader = new StringReader(codeEditorPane.getText()); PMDConfiguration config = new PMDConfiguration(); config.setDefaultLanguageVersion(languageVersion); - try { + try (StringReader reader = new StringReader(codeEditorPane.getText())) { new SourceCodeProcessor(config).processSourceCode(reader, new RuleSets(rs), ctx); // } catch (PMDException pmde) { // loadTreeData(new ExceptionNode(pmde)); diff --git a/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java b/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java index 5573c736df..cc7cc07351 100644 --- a/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java +++ b/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java @@ -51,23 +51,24 @@ public class CPPTokenizer extends JavaCCTokenizer { return test; } - BufferedReader reader = new BufferedReader(new StringReader(test)); - StringBuilder filtered = new StringBuilder(test.length()); - String line; - boolean skip = false; - while ((line = reader.readLine()) != null) { - if (skipBlocksStart.equalsIgnoreCase(line.trim())) { - skip = true; - } else if (skip && skipBlocksEnd.equalsIgnoreCase(line.trim())) { - skip = false; + try (BufferedReader reader = new BufferedReader(new StringReader(test))) { + StringBuilder filtered = new StringBuilder(test.length()); + String line; + boolean skip = false; + while ((line = reader.readLine()) != null) { + if (skipBlocksStart.equalsIgnoreCase(line.trim())) { + skip = true; + } else if (skip && skipBlocksEnd.equalsIgnoreCase(line.trim())) { + skip = false; + } + if (!skip) { + filtered.append(line); + } + // always add a new line to keep the line-numbering + filtered.append(PMD.EOL); } - if (!skip) { - filtered.append(line); - } - // always add a new line to keep the line-numbering - filtered.append(PMD.EOL); + return filtered.toString(); } - return filtered.toString(); } @Override diff --git a/pmd-test/src/main/java/net/sourceforge/pmd/AbstractLanguageVersionTest.java b/pmd-test/src/main/java/net/sourceforge/pmd/AbstractLanguageVersionTest.java index f5682553e2..93f3c317c6 100644 --- a/pmd-test/src/main/java/net/sourceforge/pmd/AbstractLanguageVersionTest.java +++ b/pmd-test/src/main/java/net/sourceforge/pmd/AbstractLanguageVersionTest.java @@ -164,9 +164,9 @@ public class AbstractLanguageVersionTest { String[] rulesets = rulesetFilenames.split(","); for (String r : rulesets) { - InputStream stream = rl.loadClassPathResourceAsStream(r); - assertNotNull(stream); - stream.close(); + try (InputStream stream = rl.loadClassPathResourceAsStream(r)) { + assertNotNull(stream); + } RuleSet ruleset = factory.createRuleSet(r); assertNotNull(ruleset); } diff --git a/pmd-test/src/main/java/net/sourceforge/pmd/AbstractRuleSetFactoryTest.java b/pmd-test/src/main/java/net/sourceforge/pmd/AbstractRuleSetFactoryTest.java index 677e4290a7..16f9f85c25 100644 --- a/pmd-test/src/main/java/net/sourceforge/pmd/AbstractRuleSetFactoryTest.java +++ b/pmd-test/src/main/java/net/sourceforge/pmd/AbstractRuleSetFactoryTest.java @@ -267,12 +267,13 @@ public abstract class AbstractRuleSetFactoryTest { private boolean validateAgainstSchema(String fileName) throws IOException, RuleSetNotFoundException, ParserConfigurationException, SAXException { - InputStream inputStream = loadResourceAsStream(fileName); - boolean valid = validateAgainstSchema(inputStream); - if (!valid) { - System.err.println("Validation against XML Schema failed for: " + fileName); + try (InputStream inputStream = loadResourceAsStream(fileName)) { + boolean valid = validateAgainstSchema(inputStream); + if (!valid) { + System.err.println("Validation against XML Schema failed for: " + fileName); + } + return valid; } - return valid; } private boolean validateAgainstSchema(InputStream inputStream) @@ -285,12 +286,13 @@ public abstract class AbstractRuleSetFactoryTest { private boolean validateAgainstDtd(String fileName) throws IOException, RuleSetNotFoundException, ParserConfigurationException, SAXException { - InputStream inputStream = loadResourceAsStream(fileName); - boolean valid = validateAgainstDtd(inputStream); - if (!valid) { - System.err.println("Validation against DTD failed for: " + fileName); + try (InputStream inputStream = loadResourceAsStream(fileName)) { + boolean valid = validateAgainstDtd(inputStream); + if (!valid) { + System.err.println("Validation against DTD failed for: " + fileName); + } + return valid; } - return valid; } private boolean validateAgainstDtd(InputStream inputStream) @@ -316,23 +318,22 @@ public abstract class AbstractRuleSetFactoryTest { file = "" + PMD.EOL + "" + PMD.EOL + file; } - InputStream modifiedStream = new ByteArrayInputStream(file.getBytes()); - - saxParser.parse(modifiedStream, validateDefaultHandler.resetValid()); - modifiedStream.close(); + try (InputStream modifiedStream = new ByteArrayInputStream(file.getBytes())) { + saxParser.parse(modifiedStream, validateDefaultHandler.resetValid()); + } return validateDefaultHandler.isValid(); } private String readFullyToString(InputStream inputStream) throws IOException { StringBuilder buf = new StringBuilder(64 * 1024); - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - String line; - while ((line = reader.readLine()) != null) { - buf.append(line); - buf.append(PMD.EOL); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = reader.readLine()) != null) { + buf.append(line); + buf.append(PMD.EOL); + } + return buf.toString(); } - reader.close(); - return buf.toString(); } private static InputStream loadResourceAsStream(String resource) throws RuleSetNotFoundException { diff --git a/pmd-test/src/main/java/net/sourceforge/pmd/cli/BaseCLITest.java b/pmd-test/src/main/java/net/sourceforge/pmd/cli/BaseCLITest.java index bda1efb911..1c8645fc78 100644 --- a/pmd-test/src/main/java/net/sourceforge/pmd/cli/BaseCLITest.java +++ b/pmd-test/src/main/java/net/sourceforge/pmd/cli/BaseCLITest.java @@ -12,6 +12,7 @@ import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; +import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; @@ -54,12 +55,15 @@ public abstract class BaseCLITest { @After public void tearDown() { + IOUtils.closeQuietly(System.out); + System.setOut(originalOut); System.setErr(originalErr); } protected void createTestOutputFile(String filename) { try { + @SuppressWarnings("PMD.CloseResource") PrintStream out = new PrintStream(Files.newOutputStream(new File(filename).toPath())); System.setOut(out); System.setErr(out); diff --git a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java index 9e552aac82..b8fd04842d 100644 --- a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java +++ b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java @@ -155,6 +155,7 @@ public class AbstractVmNode extends AbstractNode implements VmNode { */ @Deprecated public void dump(final String prefix, final boolean recurse, final Writer writer) { + @SuppressWarnings("PMD.CloseResource") final PrintWriter printWriter = writer instanceof PrintWriter ? (PrintWriter) writer : new PrintWriter(writer); printWriter.println(toString(prefix)); if (children != null && recurse) { diff --git a/pom.xml b/pom.xml index 26b07186da..0c1f9871ac 100644 --- a/pom.xml +++ b/pom.xml @@ -104,7 +104,7 @@ Objective-C, Perl, PHP, PLSQL, Python, Ruby, Salesforce.com Apex, Scala, Swift a -Xmx512m -Dfile.encoding=${project.build.sourceEncoding} - 3 + 4-SNAPSHOT 6.17.0 @@ -361,12 +361,12 @@ Objective-C, Perl, PHP, PLSQL, Python, Ruby, Salesforce.com Apex, Scala, Swift a net.sourceforge.pmd pmd-core - 6.15.0 + 6.17.0 net.sourceforge.pmd pmd-java - 6.15.0 + 6.17.0