Repository: mina-sshd Updated Branches: refs/heads/master 6256245da -> b85bcd524
[SSHD-748] Activate Maven PMD plugin in the project Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/b85bcd52 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/b85bcd52 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/b85bcd52 Branch: refs/heads/master Commit: b85bcd524ebcc77eeb7af309d353225ebeb3a830 Parents: 6256245 Author: Lyor Goldstein <lyor.goldst...@gmail.com> Authored: Wed May 17 20:00:42 2017 +0300 Committer: Lyor Goldstein <lyor.goldst...@gmail.com> Committed: Wed May 17 20:33:34 2017 +0300 ---------------------------------------------------------------------- .gitignore | 1 + pom.xml | 59 ++++++++++++++++++++ .../java/org/apache/sshd/client/SshClient.java | 2 +- .../client/config/hosts/HostPatternsHolder.java | 4 +- .../apache/sshd/common/util/SelectorUtils.java | 4 +- .../java/org/apache/sshd/client/ClientTest.java | 3 - .../common/forward/PortForwardingLoadTest.java | 2 +- .../java/org/apache/sshd/server/ServerTest.java | 4 +- .../sshd/util/test/CommandExecutionHelper.java | 6 +- .../JUnit4ClassRunnerWithParametersFactory.java | 4 +- .../apache/sshd/git/pack/GitPackCommand.java | 16 ++++-- .../org/apache/sshd/git/pgm/GitPgmCommand.java | 6 +- .../sshd/server/auth/BaseAuthenticatorTest.java | 1 - sshd-pmd-ruleset.xml | 23 ++++++++ 14 files changed, 113 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/.gitignore ---------------------------------------------------------------------- diff --git a/.gitignore b/.gitignore index aec7cda..52da317 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ RemoteSystemsTempFiles/ .classpath .project .checkstyle +.eclipse-pmd *.iml *.ipr *.iws http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index ab6d31c..f5e9a29 100644 --- a/pom.xml +++ b/pom.xml @@ -114,6 +114,8 @@ <jgit.version>4.6.0.201612231935-r</jgit.version> <junit.version>4.12</junit.version> <surefire.plugin.version>2.19.1</surefire.plugin.version> + <!-- See https://pmd.github.io/ for available latest version --> + <pmd.version>5.6.1</pmd.version> <httpcomps.version>4.4.1</httpcomps.version> </properties> @@ -482,6 +484,7 @@ <excludes> <exclude>**/*.iml</exclude> <exclude>README.md</exclude> + <exclude>*pmd*</exclude> <exclude>src/docs/**</exclude> <exclude>src/test/resources/**</exclude> <exclude>**/stty-output-*.txt</exclude> @@ -666,6 +669,31 @@ </dependency> </dependencies> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-pmd-plugin</artifactId> + <version>3.8</version> + <configuration> + <targetJdk>${javac.target}</targetJdk> + <printFailingErrors>true</printFailingErrors> + <skipPmdError>false</skipPmdError> + <excludeRoots> + <excludeRoot>target/generated-sources/java</excludeRoot> + </excludeRoots> + </configuration> + <dependencies> + <dependency> + <groupId>net.sourceforge.pmd</groupId> + <artifactId>pmd-core</artifactId> + <version>${pmd.version}</version> + </dependency> + <dependency> + <groupId>net.sourceforge.pmd</groupId> + <artifactId>pmd-java</artifactId> + <version>${pmd.version}</version> + </dependency> + </dependencies> + </plugin> </plugins> </pluginManagement> @@ -723,6 +751,27 @@ </execution> </executions> </plugin> + <plugin> + <!-- to disable - mvn [commands...] -Dpmd.skip --> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-pmd-plugin</artifactId> + <configuration> + <rulesets> + <ruleset>${workspace.root.dir}${file.separator}sshd-pmd-ruleset.xml</ruleset> + </rulesets> + <includeTests>true</includeTests> + </configuration> + <executions> + <execution> + <id>pmd-checker</id> + <!-- Note: phase must be AFTER detection of workspace root dir --> + <phase>verify</phase> + <goals> + <goal>check</goal> + </goals> + </execution> + </executions> + </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>animal-sniffer-maven-plugin</artifactId> @@ -936,6 +985,16 @@ </repository> </distributionManagement> + <reporting> + <plugins> + <plugin> <!-- used by PMD to create a source XREF --> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jxr-plugin</artifactId> + <version>2.5</version> + </plugin> + </plugins> + </reporting> + <modules> <module>sshd-core</module> <module>sshd-ldap</module> http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java b/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java index c2a8025..c8cc1db 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java @@ -1290,7 +1290,7 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa StringWriter sw = new StringWriter(); try (PrintWriter pw = new PrintWriter(sw)) { pw.println(); - t.printStackTrace(pw); + t.printStackTrace(pw); // NOPMD } throwable = sw.toString(); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostPatternsHolder.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostPatternsHolder.java b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostPatternsHolder.java index eff34d9..fdef86e 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostPatternsHolder.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/config/hosts/HostPatternsHolder.java @@ -120,7 +120,7 @@ public abstract class HostPatternsHolder { * @param host The host name / address - ignored if {@code null}/empty * @param entries The {@link HostConfigEntry}-ies to scan - ignored if {@code null}/empty * @return A {@link List} of all the matching entries - * @see #isHostMatch(String) + * @see #isHostMatch(String, int) */ public static List<HostConfigEntry> findMatchingEntries(String host, HostConfigEntry... entries) { // TODO in Java-8 use Stream(s) + predicate @@ -137,7 +137,7 @@ public abstract class HostPatternsHolder { * @param host The host name / address - ignored if {@code null}/empty * @param entries The {@link HostConfigEntry}-ies to scan - ignored if {@code null}/empty * @return A {@link List} of all the matching entries - * @see #isHostMatch(String) + * @see #isHostMatch(String, int) */ public static List<HostConfigEntry> findMatchingEntries(String host, Collection<? extends HostConfigEntry> entries) { // TODO in Java-8 use Stream(s) + predicate http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-core/src/main/java/org/apache/sshd/common/util/SelectorUtils.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/util/SelectorUtils.java b/sshd-core/src/main/java/org/apache/sshd/common/util/SelectorUtils.java index 8ea1a76..839eb7e 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/util/SelectorUtils.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/util/SelectorUtils.java @@ -149,7 +149,9 @@ public final class SelectorUtils { if (strIdxStart > strIdxEnd) { // String is exhausted return true; - } else return patIdxStart <= patIdxEnd; + } else { + return patIdxStart <= patIdxEnd; + } // CHECKSTYLE:ON } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java b/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java index a8e5aa7..7b30c7f 100644 --- a/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java @@ -524,7 +524,6 @@ public class ClientTest extends BaseTestSupport { } } catch (IOException e) { if (!channel.isClosing()) { - e.printStackTrace(); channel.close(true); } } @@ -543,7 +542,6 @@ public class ClientTest extends BaseTestSupport { channel.getAsyncOut().read(buffer).addListener(this); } catch (IOException e) { if (!channel.isClosing()) { - e.printStackTrace(); channel.close(true); } } @@ -562,7 +560,6 @@ public class ClientTest extends BaseTestSupport { channel.getAsyncErr().read(buffer).addListener(this); } catch (IOException e) { if (!channel.isClosing()) { - e.printStackTrace(); channel.close(true); } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-core/src/test/java/org/apache/sshd/common/forward/PortForwardingLoadTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/forward/PortForwardingLoadTest.java b/sshd-core/src/test/java/org/apache/sshd/common/forward/PortForwardingLoadTest.java index 0287f75..0184422 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/forward/PortForwardingLoadTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/forward/PortForwardingLoadTest.java @@ -469,7 +469,7 @@ public class PortForwardingLoadTest extends BaseTestSupport { } latch.await(); for (Throwable t : errors) { - t.printStackTrace(); + log.warn("{}: {}", t.getClass().getSimpleName(), t.getMessage()); } assertEquals(0, errors.size()); } finally { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-core/src/test/java/org/apache/sshd/server/ServerTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/server/ServerTest.java b/sshd-core/src/test/java/org/apache/sshd/server/ServerTest.java index 04d36e5..84aee1f 100644 --- a/sshd-core/src/test/java/org/apache/sshd/server/ServerTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/server/ServerTest.java @@ -967,7 +967,7 @@ public class ServerTest extends BaseTestSupport { try { name.wait(); } catch (InterruptedException e) { - e.printStackTrace(); + e.printStackTrace(); // NOPMD } } } @@ -987,7 +987,7 @@ public class ServerTest extends BaseTestSupport { } catch (WindowClosedException e) { // ok, do nothing } catch (Throwable e) { - e.printStackTrace(); + e.printStackTrace(); // NOPMD } finally { if (latch != null) { latch.countDown(); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-core/src/test/java/org/apache/sshd/util/test/CommandExecutionHelper.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/util/test/CommandExecutionHelper.java b/sshd-core/src/test/java/org/apache/sshd/util/test/CommandExecutionHelper.java index f036288..ce47a65 100644 --- a/sshd-core/src/test/java/org/apache/sshd/util/test/CommandExecutionHelper.java +++ b/sshd-core/src/test/java/org/apache/sshd/util/test/CommandExecutionHelper.java @@ -27,6 +27,7 @@ import java.io.InterruptedIOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; +import org.apache.sshd.common.util.logging.AbstractLoggingBean; import org.apache.sshd.server.Command; import org.apache.sshd.server.Environment; import org.apache.sshd.server.ExitCallback; @@ -34,7 +35,7 @@ import org.apache.sshd.server.ExitCallback; /** * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ -public abstract class CommandExecutionHelper implements Command, Runnable, ExitCallback { +public abstract class CommandExecutionHelper extends AbstractLoggingBean implements Command, Runnable, ExitCallback { private InputStream in; private OutputStream out; private OutputStream err; @@ -133,7 +134,8 @@ public abstract class CommandExecutionHelper implements Command, Runnable, ExitC OutputStream stderr = getErr(); stderr.write(message.getBytes(StandardCharsets.US_ASCII)); } catch (IOException ioe) { - ioe.printStackTrace(); + log.warn("Failed ({}) to write error message={}: {}", + e.getClass().getSimpleName(), message, ioe.getMessage()); } finally { onExit(-1, message); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-core/src/test/java/org/apache/sshd/util/test/JUnit4ClassRunnerWithParametersFactory.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/util/test/JUnit4ClassRunnerWithParametersFactory.java b/sshd-core/src/test/java/org/apache/sshd/util/test/JUnit4ClassRunnerWithParametersFactory.java index 9dc2308..12ab252 100644 --- a/sshd-core/src/test/java/org/apache/sshd/util/test/JUnit4ClassRunnerWithParametersFactory.java +++ b/sshd-core/src/test/java/org/apache/sshd/util/test/JUnit4ClassRunnerWithParametersFactory.java @@ -27,7 +27,7 @@ import org.junit.runners.parameterized.TestWithParameters; /** * Avoids re-creating a test class instance for each parameterized test method. Usage: * - * <PRE>{@code + * <PRE><code> * @FixMethodOrder(MethodSorters.NAME_ASCENDING) * @RunWith(Parameterized.class) * @UseParametersRunnerFactory(JUnit4ClassRunnerWithParametersFactory.class) @@ -41,7 +41,7 @@ import org.junit.runners.parameterized.TestWithParameters; * ... * } * } - * }</PRE> + * </code></PRE> * * @see JUnit4ClassRunnerWithParameters * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java ---------------------------------------------------------------------- diff --git a/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java b/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java index 3bd202b..500e020 100644 --- a/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java +++ b/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.sshd.common.channel.ChannelOutputStream; +import org.apache.sshd.common.util.logging.AbstractLoggingBean; import org.apache.sshd.server.Command; import org.apache.sshd.server.Environment; import org.apache.sshd.server.ExitCallback; @@ -40,7 +41,7 @@ import org.eclipse.jgit.util.FS; * * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ -public class GitPackCommand implements Command, Runnable { +public class GitPackCommand extends AbstractLoggingBean implements Command, Runnable { private static final int CHAR = 1; private static final int DELIMITER = 2; @@ -119,11 +120,16 @@ public class GitPackCommand implements Command, Runnable { } else { throw new IllegalArgumentException("Unknown git command: " + command); } + + if (callback != null) { + callback.onExit(0); + } } catch (Throwable t) { - t.printStackTrace(); - } - if (callback != null) { - callback.onExit(0); + log.warn("Failed {} to execute command={}: {}", + t.getClass().getSimpleName(), command, t.getMessage()); + if (callback != null) { + callback.onExit(-1, t.getClass().getSimpleName()); + } } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java ---------------------------------------------------------------------- diff --git a/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java b/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java index ae6ff7c..2e6434f 100644 --- a/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java +++ b/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.sshd.common.channel.ChannelOutputStream; +import org.apache.sshd.common.util.logging.AbstractLoggingBean; import org.apache.sshd.server.Command; import org.apache.sshd.server.Environment; import org.apache.sshd.server.ExitCallback; @@ -35,7 +36,7 @@ import org.apache.sshd.server.ExitCallback; * * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ -public class GitPgmCommand implements Command, Runnable { +public class GitPgmCommand extends AbstractLoggingBean implements Command, Runnable { private static final int CHAR = 1; private static final int DELIMITER = 2; @@ -110,7 +111,8 @@ public class GitPgmCommand implements Command, Runnable { err.write((t.getMessage() + "\n").getBytes(StandardCharsets.UTF_8)); err.flush(); } catch (IOException e) { - e.printStackTrace(); + log.warn("Failed {} to flush command={} failure: {}", + e.getClass().getSimpleName(), command, e.getMessage()); } if (callback != null) { callback.onExit(-1); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-ldap/src/test/java/org/apache/sshd/server/auth/BaseAuthenticatorTest.java ---------------------------------------------------------------------- diff --git a/sshd-ldap/src/test/java/org/apache/sshd/server/auth/BaseAuthenticatorTest.java b/sshd-ldap/src/test/java/org/apache/sshd/server/auth/BaseAuthenticatorTest.java index d7ed83c..8244ffe 100644 --- a/sshd-ldap/src/test/java/org/apache/sshd/server/auth/BaseAuthenticatorTest.java +++ b/sshd-ldap/src/test/java/org/apache/sshd/server/auth/BaseAuthenticatorTest.java @@ -167,7 +167,6 @@ public abstract class BaseAuthenticatorTest extends BaseTestSupport { log.info("LDAP server started"); } catch (Exception e) { log.error("Failed (" + e.getClass().getSimpleName() + ") to start LDAP server: " + e.getMessage(), e); - e.printStackTrace(System.err); stopApacheDs(directoryService); throw e; } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b85bcd52/sshd-pmd-ruleset.xml ---------------------------------------------------------------------- diff --git a/sshd-pmd-ruleset.xml b/sshd-pmd-ruleset.xml new file mode 100644 index 0000000..39f6bfd --- /dev/null +++ b/sshd-pmd-ruleset.xml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<ruleset name="MINA SSHD PMD ruleset" + xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> + + <description> + This ruleset defines the PMD rules for MINA SSHD project + </description> + + <!-- See https://pmd.github.io/pmd-5.6.1/pmd-java/rules/index.html --> + <rule ref="rulesets/java/basic.xml/BooleanInstantiation" /> + <rule ref="rulesets/java/basic.xml/ExtendsObject" /> + + <rule ref="rulesets/java/braces.xml" /> + + <rule ref="rulesets/java/clone.xml/ProperCloneImplementation" /> + <rule ref="rulesets/java/clone.xml/CloneMethodMustImplementCloneable" /> + + <rule ref="rulesets/java/javabeans.xml/MissingSerialVersionUID" /> + + <rule ref="rulesets/java/logging-java.xml/AvoidPrintStackTrace" /> +</ruleset> \ No newline at end of file