[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mina-commits
Subject:    [mina-sshd] 02/02: Fix some SonarLint findings
From:       twolf () apache ! org
Date:       2022-10-30 20:58:14
Message-ID: 20221030205812.73A93440185 () gitbox2-he-fi ! apache ! org
[Download RAW message or body]

This is an automated email from the ASF dual-hosted git repository.

twolf pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-sshd.git

commit b19a3ed0bfe9b933463307278db5632ab2602b70
Author: Thomas Wolf <twolf@apache.org>
AuthorDate: Sun Oct 30 18:57:08 2022 +0100

    Fix some SonarLint findings
    
    Simple ones:
    
    - Logging statements: use placeholders, not string concatenation
    - Abstract classes: use protected, not public, constructors
    - Some simplified lambdas
    - Some simplified exception catching
    - Use StringBuilder instead of StringBuffer
    - Use BigInteger.valueOf() instead of new BigInteger()
    - Use "byte[] buf" instead of "byte buf[]"
    
    There are still a lot of more findings some of them worrying, such as
    throwing exceptions in finally blocks, or catching Error or Throwable
    in several places, or others.
---
 .../sshd/cli/client/SshClientCliSupport.java       |  10 +-
 .../sshd/cli/server/SshServerCliSupport.java       |   3 +-
 .../server/helper/ServerEventListenerHelper.java   |   2 +-
 .../helper/ServerPortForwardingEventListener.java  |   6 +-
 .../auth/hostbased/HostKeyIdentityProvider.java    |   2 +-
 .../client/config/hosts/KnownHostHashValue.java    |   5 +-
 .../config/keys/ClientIdentitiesWatcher.java       |   2 +-
 .../config/keys/ClientIdentityFileWatcher.java     |   4 +-
 .../client/config/keys/ClientIdentityProvider.java |   6 +-
 .../config/keys/LazyClientIdentityIterator.java    |  23 ++-
 .../org/apache/sshd/common/channel/PtyMode.java    |  13 +-
 .../sshd/common/config/VersionProperties.java      |   4 +-
 .../apache/sshd/common/config/keys/KeyUtils.java   |   2 +-
 .../keys/impl/AbstractPublicKeyEntryDecoder.java   |   2 +-
 .../openssh/OpenSSHDSSPrivateKeyEntryDecoder.java  |  11 +-
 .../OpenSSHECDSAPrivateKeyEntryDecoder.java        |   7 +-
 .../openssh/OpenSSHRSAPrivateKeyDecoder.java       |  14 +-
 .../sshd/common/file/util/BaseFileSystem.java      |   2 +-
 .../org/apache/sshd/common/file/util/BasePath.java |   2 +-
 .../sshd/common/io/AbstractIoWriteFuture.java      |   8 +
 .../AbstractResourceKeyPairProvider.java           |   8 +-
 .../common/keyprovider/KeyIdentityProvider.java    |   2 +-
 .../common/keyprovider/MappedKeyPairProvider.java  |   4 +-
 .../java/org/apache/sshd/common/mac/BaseMac.java   |   2 +-
 .../sshd/common/signature/AbstractSignature.java   |   2 +-
 .../apache/sshd/common/signature/SignatureDSA.java |   2 +-
 .../apache/sshd/common/util/ExceptionUtils.java    |   5 +-
 .../org/apache/sshd/common/util/GenericUtils.java  |   6 +-
 .../org/apache/sshd/common/util/SelectorUtils.java |  14 --
 .../org/apache/sshd/common/util/ValidateUtils.java |  20 +--
 .../common/util/closeable/FuturesCloseable.java    |   4 +-
 .../common/util/closeable/ParallelCloseable.java   |   4 +-
 .../sshd/common/util/io/PathScanningMatcher.java   |   2 +-
 .../sshd/common/util/security/SecurityUtils.java   |   4 +-
 .../security/bouncycastle/BouncyCastleRandom.java  |   2 +-
 .../security/eddsa/EdDSASecurityProviderUtils.java |   8 +-
 .../util/security/eddsa/SignatureEd25519.java      |   2 +-
 .../sshd/common/util/threads/ThreadUtils.java      |   2 +-
 .../AbstractGeneratorHostKeyProvider.java          |   8 +-
 .../keys/BuiltinClientIdentitiesWatcherTest.java   |   2 +-
 .../openssh/OpenSSHKeyPairResourceWriterTest.java  |   4 -
 .../sshd/util/test/CommonTestSupportUtils.java     |   4 +-
 .../throttle/ThrottlingChannelStreamWriter.java    |   2 +-
 .../contrib/common/signature/LegacyDSASigner.java  |   2 +-
 .../sshd/agent/common/AbstractAgentProxy.java      |   2 +-
 .../apache/sshd/agent/local/AgentServerProxy.java  |   6 +-
 .../org/apache/sshd/agent/unix/AgentServer.java    |   2 +-
 .../apache/sshd/agent/unix/AgentServerProxy.java   |   2 +-
 .../org/apache/sshd/agent/unix/AprLibrary.java     |   8 +-
 .../sshd/agent/unix/ChannelAgentForwarding.java    |   2 +-
 .../sshd/client/future/DefaultConnectFuture.java   |   2 +-
 .../sshd/common/channel/AbstractChannel.java       |  22 +--
 .../common/channel/BufferedIoOutputStream.java     |  16 +-
 .../common/channel/ChannelAsyncInputStream.java    |   4 +-
 .../sshd/common/forward/DefaultForwarder.java      | 173 +++++++--------------
 .../io/BuiltinIoServiceFactoryFactories.java       |   8 +-
 .../common/io/DefaultIoServiceFactoryFactory.java  |   3 +-
 .../apache/sshd/common/io/nio2/Nio2Service.java    |   6 +-
 .../sshd/common/kex/dh/AbstractDHKeyExchange.java  |   4 +-
 .../session/helpers/AbstractConnectionService.java |   6 +-
 .../common/session/helpers/AbstractSession.java    |  12 +-
 .../session/helpers/AbstractSessionIoHandler.java  |   6 +-
 .../session/helpers/KeyExchangeMessageHandler.java |   6 +-
 .../java/org/apache/sshd/server/SshServer.java     |   4 +-
 .../sshd/server/auth/AsyncAuthException.java       |   2 +-
 .../apache/sshd/server/auth/gss/UserAuthGSS.java   |   2 +-
 ...AuthorizedKeyEntriesPublickeyAuthenticator.java |   6 +-
 .../auth/pubkey/KeySetPublickeyAuthenticator.java  |   4 +-
 .../sshd/server/channel/PuttyRequestHandler.java   |   6 +-
 .../server/command/AbstractCommandSupport.java     |   6 +-
 .../server/command/AbstractFileSystemCommand.java  |   2 +-
 .../sshd/server/forward/DirectTcpipFactory.java    |   2 +-
 .../sshd/server/forward/ForwardedTcpipFactory.java |   2 +-
 .../forward/StaticDecisionForwardingFilter.java    |   2 +-
 .../sshd/server/forward/TcpipServerChannel.java    |  15 +-
 .../sshd/server/session/ServerUserAuthService.java |   6 +-
 .../channel/ChannelPipedInputStreamTest.java       |   2 +-
 .../org/apache/sshd/git/AbstractGitCommand.java    |   2 -
 .../org/apache/sshd/git/pack/GitPackCommand.java   |   4 +-
 .../org/apache/sshd/git/pgm/GitPgmCommand.java     |   1 -
 .../sshd/openpgp/PGPAuthorizedEntriesTracker.java  |   2 +-
 .../sshd/openpgp/PGPKeyPairResourceParser.java     |   3 -
 .../sshd/scp/client/AbstractScpClientCreator.java  |   2 +-
 .../java/org/apache/sshd/scp/common/ScpHelper.java |   4 +-
 .../helpers/LocalFileScpTargetStreamResolver.java  |  10 +-
 .../apache/sshd/scp/common/helpers/ScpIoUtils.java |  12 +-
 .../apache/sshd/scp/server/InputStreamReader.java  |  22 +--
 .../helpers/AbstractSftpClientExtension.java       |   2 +-
 .../sftp/client/fs/SftpClientDirectoryScanner.java |   2 +-
 .../sftp/client/fs/SftpFileSystemProvider.java     |   4 +-
 .../sftp/client/fs/SftpPathDirectoryScanner.java   |   2 +-
 .../sshd/sftp/client/impl/DefaultSftpClient.java   |   2 +-
 .../sftp/client/impl/SftpDirEntryIterator.java     |   2 +-
 .../sftp/client/impl/SftpInputStreamAsync.java     |   4 +-
 .../sftp/client/impl/SftpOutputStreamAsync.java    |   2 +-
 .../org/apache/sshd/sftp/common/SftpHelper.java    |   8 +-
 .../server/AbstractSftpEventListenerAdapter.java   |  76 ++++-----
 .../sftp/server/AbstractSftpSubsystemHelper.java   |  50 +++---
 .../org/apache/sshd/sftp/server/SftpSubsystem.java |  11 +-
 .../common/SftpUniversalOwnerAndGroupTest.java     |   2 +-
 .../integration/ApacheSshdSftpSessionFactory.java  |  37 ++---
 101 files changed, 334 insertions(+), 526 deletions(-)

diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshClientCliSupport.java \
b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshClientCliSupport.java index \
                82f87d8c4..204e70743 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshClientCliSupport.java
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshClientCliSupport.java
@@ -695,10 +695,10 @@ public abstract class SshClientCliSupport extends CliSupport {
         fh.setLevel(Level.FINEST);
         fh.setFormatter(new Formatter() {
             @Override
-            public String format(LogRecord record) {
-                String message = formatMessage(record);
+            public String format(LogRecord logRecord) {
+                String message = formatMessage(logRecord);
                 String throwable = "";
-                Throwable t = record.getThrown();
+                Throwable t = logRecord.getThrown();
                 if (t != null) {
                     StringWriter sw = new StringWriter();
                     try (PrintWriter pw = new PrintWriter(sw)) {
@@ -708,8 +708,8 @@ public abstract class SshClientCliSupport extends CliSupport {
                     throwable = sw.toString();
                 }
                 return String.format("%1$tY-%1$tm-%1$td: %2$-7.7s: %3$-32.32s: \
                %4$s%5$s%n",
-                        new Date(record.getMillis()), record.getLevel().getName(),
-                        record.getLoggerName(), message, throwable);
+                        new Date(logRecord.getMillis()), \
logRecord.getLevel().getName(), +                        logRecord.getLoggerName(), \
message, throwable);  }
         });
 
diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerCliSupport.java \
b/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerCliSupport.java index \
                d5ec09c33..cbd01e013 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerCliSupport.java
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerCliSupport.java
@@ -225,8 +225,7 @@ public abstract class SshServerCliSupport extends CliSupport {
                 continue;
             }
 
-            factory = registerSubsystemFactoryListeners(
-                    server, level, stdout, stderr, options, factory);
+            registerSubsystemFactoryListeners(server, level, stdout, stderr, \
options, factory);  subsystems.add(factory);
         }
 
diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/server/helper/ServerEventListenerHelper.java \
b/sshd-cli/src/main/java/org/apache/sshd/cli/server/helper/ServerEventListenerHelper.java
 index b79bccdff..264bb2b9b 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/server/helper/ServerEventListenerHelper.java
                
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/server/helper/ServerEventListenerHelper.java
 @@ -26,7 +26,7 @@ import org.slf4j.Logger;
 public abstract class ServerEventListenerHelper extends AbstractLoggingBean \
implements NamedResource {  private final String name;
 
-    public ServerEventListenerHelper(String name, Logger logger) {
+    protected ServerEventListenerHelper(String name, Logger logger) {
         super(logger);
 
         this.name = name;
diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/server/helper/ServerPortForwardingEventListener.java \
b/sshd-cli/src/main/java/org/apache/sshd/cli/server/helper/ServerPortForwardingEventListener.java
 index cdcd97617..78f5045b3 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/server/helper/ServerPortForwardingEventListener.java
                
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/server/helper/ServerPortForwardingEventListener.java
 @@ -72,10 +72,10 @@ public class ServerPortForwardingEventListener extends \
ServerEventListenerHelper  throws IOException {
         if (reason == null) {
             if (log.isInfoEnabled()) {
-                log.info("Estalibshed dynamic tunnel for session={}: local={},  \
bound={}", session, local, boundAddress); +                log.info("Estalibshed \
dynamic tunnel for session={}: local={} bound={}", session, local, boundAddress);  }
         } else {
-            log.error("Failed ({}) to establish dynamic tunnel for session={}, \
bound={}: {}", +            log.error("Failed ({}) to establish dynamic tunnel for \
                session={}: local={} bound={}: {}",
                     reason.getClass().getSimpleName(), session, local, boundAddress, \
reason.getMessage());  }
     }
@@ -86,7 +86,7 @@ public class ServerPortForwardingEventListener extends \
ServerEventListenerHelper  throws IOException {
         if (reason == null) {
             if (log.isInfoEnabled()) {
-                log.info("Torn down dynamic tunnel for session={}: address={}", \
session); +                log.info("Torn down dynamic tunnel for session={}: \
address={}", session, address);  }
         } else {
             log.error("Failed ({}) to tear down dynamic tunnel for session={}, \
                address={}: {}",
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/auth/hostbased/HostKeyIdentityProvider.java \
b/sshd-common/src/main/java/org/apache/sshd/client/auth/hostbased/HostKeyIdentityProvider.java
 index f08a7b7eb..02b1c3fec 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/auth/hostbased/HostKeyIdentityProvider.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/client/auth/hostbased/HostKeyIdentityProvider.java
 @@ -58,7 +58,7 @@ public interface HostKeyIdentityProvider {
         return wrap(GenericUtils.asList(pairs));
     }
 
-    static HostKeyIdentityProvider wrap(Iterable<? extends KeyPair> pairs) {
+    static HostKeyIdentityProvider wrap(Iterable<KeyPair> pairs) {
         return session -> GenericUtils.wrapIterable(pairs,
                 kp -> new SimpleImmutableEntry<>(kp, Collections.<X509Certificate> \
emptyList()));  }
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/KnownHostHashValue.java \
b/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/KnownHostHashValue.java
 index 4831541f2..2e6bb7436 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/KnownHostHashValue.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/hosts/KnownHostHashValue.java
 @@ -96,10 +96,9 @@ public class KnownHostHashValue {
             byte[] expected = getDigestValue();
             byte[] actual = calculateHashValue(host, port, getDigester(), \
getSaltValue());  return Arrays.equals(expected, actual);
+        } catch (RuntimeException e) {
+            throw e;
         } catch (Throwable t) {
-            if (t instanceof RuntimeException) {
-                throw (RuntimeException) t;
-            }
             throw new RuntimeSshException(
                     "Failed (" + t.getClass().getSimpleName() + ")" + " to calculate \
hash value: " + t.getMessage(), t);  }
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java \
b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java
 index ea21386ca..75c587a16 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java
 @@ -74,7 +74,7 @@ public class ClientIdentitiesWatcher extends \
AbstractKeyPairProvider implements  return loadKeys(session, null);
     }
 
-    protected Iterable<KeyPair> loadKeys(SessionContext session, Predicate<? super \
KeyPair> filter) { +    protected Iterable<KeyPair> loadKeys(SessionContext session, \
                Predicate<KeyPair> filter) {
         return ClientIdentityProvider.lazyKeysLoader(providers, p -> \
doGetKeyPairs(session, p), filter);  }
 
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java \
b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java
 index 7324362eb..784ce2bd3 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java
 @@ -94,13 +94,13 @@ public class ClientIdentityFileWatcher
             return identitiesHolder.get();
         }
 
-        Iterable<KeyPair> kp = identitiesHolder.getAndSet(null); // start fresh
+        identitiesHolder.set(null); // start fresh
         Path path = getPath();
         if (!exists()) {
             return identitiesHolder.get();
         }
 
-        kp = reloadClientIdentities(session, path);
+        Iterable<KeyPair> kp = reloadClientIdentities(session, path);
         updateReloadAttributes();
         identitiesHolder.set(kp);
         return kp;
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityProvider.java \
b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityProvider.java
 index 1a8fe6128..51a5ce207 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityProvider.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityProvider.java
 @@ -79,8 +79,7 @@ public interface ClientIdentityProvider {
      */
     static Iterable<KeyPair> lazyKeysLoader(
             Iterable<? extends ClientIdentityProvider> providers,
-            Function<? super ClientIdentityProvider, ? extends Iterable<? extends \
                KeyPair>> kpExtractor,
-            Predicate<? super KeyPair> filter) {
+            Function<? super ClientIdentityProvider, ? extends Iterable<KeyPair>> \
                kpExtractor, Predicate<KeyPair> filter) {
         Objects.requireNonNull(kpExtractor, "No key pair extractor provided");
         if (providers == null) {
             return Collections.emptyList();
@@ -114,8 +113,7 @@ public interface ClientIdentityProvider {
      */
     static Iterator<KeyPair> lazyKeysIterator(
             Iterator<? extends ClientIdentityProvider> providers,
-            Function<? super ClientIdentityProvider, ? extends Iterable<? extends \
                KeyPair>> kpExtractor,
-            Predicate<? super KeyPair> filter) {
+            Function<? super ClientIdentityProvider, ? extends Iterable<KeyPair>> \
                kpExtractor, Predicate<KeyPair> filter) {
         Objects.requireNonNull(kpExtractor, "No key pair extractor provided");
         return (providers == null)
                 ? Collections.emptyIterator()
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/LazyClientIdentityIterator.java \
b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/LazyClientIdentityIterator.java
 index aaa19e2e3..df0e8fe90 100644
--- a/sshd-common/src/main/java/org/apache/sshd/client/config/keys/LazyClientIdentityIterator.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/client/config/keys/LazyClientIdentityIterator.java
 @@ -37,12 +37,12 @@ import org.apache.sshd.common.keyprovider.KeyIdentityProvider;
  */
 public class LazyClientIdentityIterator implements Iterator<KeyPair> {
     protected boolean finished;
-    protected Iterator<? extends KeyPair> currentIdentities;
+    protected Iterator<KeyPair> currentIdentities;
     protected KeyPair currentPair;
 
     private final Iterator<? extends ClientIdentityProvider> providers;
-    private final Function<? super ClientIdentityProvider, ? extends Iterable<? \
                extends KeyPair>> kpExtractor;
-    private final Predicate<? super KeyPair> filter;
+    private final Function<? super ClientIdentityProvider, ? extends \
Iterable<KeyPair>> kpExtractor; +    private final Predicate<KeyPair> filter;
 
     /**
      * @param providers   The providers - ignored if {@code null}
@@ -52,10 +52,9 @@ public class LazyClientIdentityIterator implements \
                Iterator<KeyPair> {
      * @param filter      Any further filter to apply on (non-{@code null}) key \
                pairs before returning it as the
      *                    {@link Iterator#next()} result.
      */
-    public LazyClientIdentityIterator(
-                                      Iterator<? extends ClientIdentityProvider> \
                providers,
-                                      Function<? super ClientIdentityProvider, ? \
                extends Iterable<? extends KeyPair>> kpExtractor,
-                                      Predicate<? super KeyPair> filter) {
+    public LazyClientIdentityIterator(Iterator<? extends ClientIdentityProvider> \
providers, +                                      Function<? super \
ClientIdentityProvider, ? extends Iterable<KeyPair>> kpExtractor, +                   \
Predicate<KeyPair> filter) {  this.providers = providers;
         this.kpExtractor = Objects.requireNonNull(kpExtractor, "No key pair \
extractor provided");  this.filter = filter;
@@ -65,11 +64,11 @@ public class LazyClientIdentityIterator implements \
Iterator<KeyPair> {  return providers;
     }
 
-    public Function<? super ClientIdentityProvider, ? extends Iterable<? extends \
KeyPair>> getIdentitiesExtractor() { +    public Function<? super \
ClientIdentityProvider, ? extends Iterable<KeyPair>> getIdentitiesExtractor() {  \
return kpExtractor;  }
 
-    public Predicate<? super KeyPair> getFilter() {
+    public Predicate<KeyPair> getFilter() {
         return filter;
     }
 
@@ -90,15 +89,15 @@ public class LazyClientIdentityIterator implements \
Iterator<KeyPair> {  return true;
         }
 
-        Function<? super ClientIdentityProvider, ? extends Iterable<? extends \
                KeyPair>> x = getIdentitiesExtractor();
-        Predicate<? super KeyPair> f = getFilter();
+        Function<? super ClientIdentityProvider, ? extends Iterable<KeyPair>> x = \
getIdentitiesExtractor(); +        Predicate<KeyPair> f = getFilter();
         while (provs.hasNext()) {
             ClientIdentityProvider p = provs.next();
             if (p == null) {
                 continue;
             }
 
-            Iterable<? extends KeyPair> ids = x.apply(p);
+            Iterable<KeyPair> ids = x.apply(p);
             currentIdentities = (ids == null) ? null : ids.iterator();
             currentPair = \
KeyIdentityProvider.exhaustCurrentIdentities(currentIdentities);  if (currentPair == \
                null) {
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/channel/PtyMode.java \
b/sshd-common/src/main/java/org/apache/sshd/common/channel/PtyMode.java index \
                0f0a1a244..17335834d 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/channel/PtyMode.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/channel/PtyMode.java
@@ -301,20 +301,17 @@ public enum PtyMode {
      * A {@code null}-safe {@link ToIntFunction} that returns the {@link \
                PtyMode#toInt()} value and (-1) for
      * {@code null}
      */
-    public static final ToIntFunction<PtyMode> OPCODE_EXTRACTOR = v -> (v == null) ? \
-1 : v.toInt(); +    public static final ToIntFunction<PtyMode> OPCODE_EXTRACTOR = op \
-> (op == null) ? -1 : op.toInt();  
     /**
      * A {@code null}-safe {@link Comparator} of {@link PtyMode} values according to \
                their {@link PtyMode#toInt()} value
      *
      * @see #OPCODE_EXTRACTOR
      */
-    public static final Comparator<PtyMode> BY_OPCODE = new Comparator<PtyMode>() {
-        @Override
-        public int compare(PtyMode o1, PtyMode o2) {
-            int v1 = OPCODE_EXTRACTOR.applyAsInt(o1);
-            int v2 = OPCODE_EXTRACTOR.applyAsInt(o2);
-            return Integer.compare(v1, v2);
-        }
+    public static final Comparator<PtyMode> BY_OPCODE = (o1, o2) -> {
+        int v1 = OPCODE_EXTRACTOR.applyAsInt(o1);
+        int v2 = OPCODE_EXTRACTOR.applyAsInt(o2);
+        return Integer.compare(v1, v2);
     };
 
     private final int v;
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/config/VersionProperties.java \
b/sshd-common/src/main/java/org/apache/sshd/common/config/VersionProperties.java \
                index 916057f83..296e70d74 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/config/VersionProperties.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/config/VersionProperties.java
@@ -69,7 +69,7 @@ public final class VersionProperties {
                     log.warn("Failed ({}) to load version properties from {}: {}",
                             e.getClass().getSimpleName(), cl, e.getMessage());
                     if (log.isDebugEnabled()) {
-                        log.debug("Version property failure details for loader=" + \
cl, e); +                        log.debug("Version property failure details for \
loader={}", cl, e);  }
                     continue;
                 }
@@ -85,7 +85,7 @@ public final class VersionProperties {
                     String prev = result.put(key, value);
                     if (prev != null) {
                         Logger log = LoggerFactory.getLogger(anchor);
-                        log.warn("Multiple values for key=" + key + ": current=" + \
value + ", previous=" + prev); +                        log.warn("Multiple values for \
key={}: current={}, previous={}", key, value, prev);  }
                 }
 
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/KeyUtils.java \
b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/KeyUtils.java index \
                e9ad39e41..ac8bf3f1f 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/KeyUtils.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/KeyUtils.java
@@ -103,7 +103,7 @@ public final class KeyUtils {
     /**
      * The most commonly used RSA public key exponent
      */
-    public static final BigInteger DEFAULT_RSA_PUBLIC_EXPONENT = new \
BigInteger("65537"); +    public static final BigInteger DEFAULT_RSA_PUBLIC_EXPONENT \
= BigInteger.valueOf(65537);  
     /**
      * Name of algorithm for DSS keys to be used when calling security provider
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/impl/AbstractPublicKeyEntryDecoder.java \
b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/impl/AbstractPublicKeyEntryDecoder.java
 index f0ebec6dd..71bbe8b3e 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/impl/AbstractPublicKeyEntryDecoder.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/impl/AbstractPublicKeyEntryDecoder.java
 @@ -51,7 +51,7 @@ public abstract class AbstractPublicKeyEntryDecoder<PUB extends \
PublicKey, PRV e  try {
             boolVal = PropertyResolverUtils.parseBoolean(stringVal);
         } catch (IllegalArgumentException e) {
-            log.warn("Ignoring non-boolean property value for \"" + propertyKey + \
"\": " + stringVal); +            log.warn("Ignoring non-boolean property value for \
\"{}\": {}", propertyKey, stringVal);  boolVal = null;
         }
         if (boolVal == null) {
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHDSSPrivateKeyEntryDecoder.java \
b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHDSSPrivateKeyEntryDecoder.java
 index 074a52236..32d4c3d58 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHDSSPrivateKeyEntryDecoder.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHDSSPrivateKeyEntryDecoder.java
 @@ -70,16 +70,7 @@ public class OpenSSHDSSPrivateKeyEntryDecoder extends \
                AbstractPrivateKeyEntryDec
         Objects.requireNonNull(y, "No public key data"); // TODO run some validation \
on it  BigInteger x = KeyEntryResolver.decodeBigInt(keyData);
 
-        try {
-            return generatePrivateKey(new DSAPrivateKeySpec(x, p, q, g));
-        } finally {
-            // get rid of sensitive data a.s.a.p
-            p = null;
-            q = null;
-            g = null;
-            y = null;
-            x = null;
-        }
+        return generatePrivateKey(new DSAPrivateKeySpec(x, p, q, g));
     }
 
     @Override
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHECDSAPrivateKeyEntryDecoder.java \
b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHECDSAPrivateKeyEntryDecoder.java
 index 3535fe76f..0a5669695 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHECDSAPrivateKeyEntryDecoder.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHECDSAPrivateKeyEntryDecoder.java
 @@ -81,12 +81,7 @@ public class OpenSSHECDSAPrivateKeyEntryDecoder extends \
                AbstractPrivateKeyEntryD
         Objects.requireNonNull(pubKey, "No public point"); // TODO validate it is a \
valid ECPoint  BigInteger s = KeyEntryResolver.decodeBigInt(keyData);
         ECParameterSpec params = curve.getParameters();
-        try {
-            return generatePrivateKey(new ECPrivateKeySpec(s, params));
-        } finally {
-            // get rid of sensitive data a.s.a.p
-            s = null;
-        }
+        return generatePrivateKey(new ECPrivateKeySpec(s, params));
     }
 
     @Override
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHRSAPrivateKeyDecoder.java \
b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHRSAPrivateKeyDecoder.java
 index 1df1d52fb..34ff03e71 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHRSAPrivateKeyDecoder.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/config/keys/loader/openssh/OpenSSHRSAPrivateKeyDecoder.java
 @@ -48,7 +48,7 @@ import org.apache.sshd.common.util.security.SecurityUtils;
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
 public class OpenSSHRSAPrivateKeyDecoder extends \
                AbstractPrivateKeyEntryDecoder<RSAPublicKey, RSAPrivateKey> {
-    public static final BigInteger DEFAULT_PUBLIC_EXPONENT = new \
BigInteger("65537"); +    public static final BigInteger DEFAULT_PUBLIC_EXPONENT = \
                KeyUtils.DEFAULT_RSA_PUBLIC_EXPONENT;
     public static final OpenSSHRSAPrivateKeyDecoder INSTANCE = new \
OpenSSHRSAPrivateKeyDecoder();  
     public OpenSSHRSAPrivateKeyDecoder() {
@@ -79,16 +79,8 @@ public class OpenSSHRSAPrivateKeyDecoder extends \
AbstractPrivateKeyEntryDecoder<  if (!Objects.equals(n, modulus)) {
             log.warn("decodePrivateKey({}) mismatched modulus values: encoded={}, \
calculated={}", keyType, n, modulus);  }
-        try {
-            return generatePrivateKey(new RSAPrivateCrtKeySpec(
-                    n, e, d, p, q, d.mod(p.subtract(BigInteger.ONE)), \
                d.mod(q.subtract(BigInteger.ONE)), inverseQmodP));
-        } finally {
-            // get rid of sensitive data a.s.a.p
-            d = null;
-            inverseQmodP = null;
-            p = null;
-            q = null;
-        }
+        return generatePrivateKey(new RSAPrivateCrtKeySpec(n, e, d, p, q, \
d.mod(p.subtract(BigInteger.ONE)), +                \
d.mod(q.subtract(BigInteger.ONE)), inverseQmodP));  }
 
     @Override
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/file/util/BaseFileSystem.java \
b/sshd-common/src/main/java/org/apache/sshd/common/file/util/BaseFileSystem.java \
                index 08e2332c3..a5d099e8c 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/file/util/BaseFileSystem.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/file/util/BaseFileSystem.java
@@ -41,7 +41,7 @@ public abstract class BaseFileSystem<T extends Path> extends \
FileSystem {  protected final Logger log;
     private final FileSystemProvider fileSystemProvider;
 
-    public BaseFileSystem(FileSystemProvider fileSystemProvider) {
+    protected BaseFileSystem(FileSystemProvider fileSystemProvider) {
         this.log = LoggerFactory.getLogger(getClass());
         this.fileSystemProvider = Objects.requireNonNull(fileSystemProvider, "No \
file system provider");  }
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/file/util/BasePath.java \
b/sshd-common/src/main/java/org/apache/sshd/common/file/util/BasePath.java index \
                021ffcd45..9fe527172 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/file/util/BasePath.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/file/util/BasePath.java
@@ -47,7 +47,7 @@ public abstract class BasePath<T extends BasePath<T, FS>, FS \
extends BaseFileSys  private String strValue;
     private int hashValue;
 
-    public BasePath(FS fileSystem, String root, List<String> names) {
+    protected BasePath(FS fileSystem, String root, List<String> names) {
         this.fileSystem = Objects.requireNonNull(fileSystem, "No file system \
provided");  this.root = root;
         this.names = names;
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/io/AbstractIoWriteFuture.java \
b/sshd-common/src/main/java/org/apache/sshd/common/io/AbstractIoWriteFuture.java \
                index efd090348..764cfa704 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/io/AbstractIoWriteFuture.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/io/AbstractIoWriteFuture.java
@@ -20,6 +20,7 @@
 package org.apache.sshd.common.io;
 
 import java.io.IOException;
+import java.util.Objects;
 
 import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.future.DefaultVerifiableSshFuture;
@@ -62,4 +63,11 @@ public abstract class AbstractIoWriteFuture
             return null;
         }
     }
+
+    public static IoWriteFuture fulfilled(Object id, Object value) {
+        AbstractIoWriteFuture result = new AbstractIoWriteFuture(id, null) {
+        };
+        result.setValue(Objects.requireNonNull(value));
+        return result;
+    }
 }
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/AbstractResourceKeyPairProvider.java \
b/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/AbstractResourceKeyPairProvider.java
 index 22f17bc6b..09c863b89 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/AbstractResourceKeyPairProvider.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/AbstractResourceKeyPairProvider.java
 @@ -105,7 +105,7 @@ public abstract class AbstractResourceKeyPairProvider<R> extends \
AbstractKeyPair  }
 
         if (log.isDebugEnabled()) {
-            log.debug("resetCacheMap(" + resources + ") removed previous cached keys \
for " + toDelete); +            log.debug("resetCacheMap({}) removed previous cached \
keys for {}", resources, toDelete);  }
     }
 
@@ -208,10 +208,8 @@ public abstract class AbstractResourceKeyPairProvider<R> extends \
AbstractKeyPair  
         @Override
         public KeyPair next() {
-            if (!nextKeyPairSet) {
-                if (!setNextObject()) {
-                    throw new NoSuchElementException("Out of files to try");
-                }
+            if (!nextKeyPairSet && !setNextObject()) {
+                throw new NoSuchElementException("Out of files to try");
             }
             nextKeyPairSet = false;
             return nextKeyPair;
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/KeyIdentityProvider.java \
b/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/KeyIdentityProvider.java
 index 4e94416ce..4fa3cefa4 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/KeyIdentityProvider.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/KeyIdentityProvider.java
 @@ -192,7 +192,7 @@ public interface KeyIdentityProvider {
      * @return     The first non-{@code null} key pair found in the iterator - \
                {@code null} if all elements exhausted
      *             without such an entry
      */
-    static KeyPair exhaustCurrentIdentities(Iterator<? extends KeyPair> ids) {
+    static KeyPair exhaustCurrentIdentities(Iterator<KeyPair> ids) {
         while ((ids != null) && ids.hasNext()) {
             KeyPair kp = ids.next();
             if (kp != null) {
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/MappedKeyPairProvider.java \
b/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/MappedKeyPairProvider.java
 index 8b58c2157..578576bbd 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/MappedKeyPairProvider.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/keyprovider/MappedKeyPairProvider.java
 @@ -51,7 +51,7 @@ public class MappedKeyPairProvider implements KeyPairProvider {
         this(GenericUtils.isEmpty(pairs) ? Collections.emptyList() : \
Arrays.asList(pairs));  }
 
-    public MappedKeyPairProvider(Collection<? extends KeyPair> pairs) {
+    public MappedKeyPairProvider(Collection<KeyPair> pairs) {
         this(mapUniquePairs(pairs));
     }
 
@@ -79,7 +79,7 @@ public class MappedKeyPairProvider implements KeyPairProvider {
         return String.valueOf(pairsMap.keySet());
     }
 
-    public static Map<String, KeyPair> mapUniquePairs(Collection<? extends KeyPair> \
pairs) { +    public static Map<String, KeyPair> mapUniquePairs(Collection<KeyPair> \
pairs) {  if (GenericUtils.isEmpty(pairs)) {
             return Collections.emptyMap();
         }
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/mac/BaseMac.java \
b/sshd-common/src/main/java/org/apache/sshd/common/mac/BaseMac.java index \
                036d46f17..409d7b500 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/mac/BaseMac.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/mac/BaseMac.java
@@ -88,7 +88,7 @@ public class BaseMac implements Mac {
     }
 
     @Override
-    public void update(byte buf[], int offset, int len) {
+    public void update(byte[] buf, int offset, int len) {
         mac.update(buf, offset, len);
     }
 
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/signature/AbstractSignature.java \
b/sshd-common/src/main/java/org/apache/sshd/common/signature/AbstractSignature.java \
                index d1677881c..c687dd723 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/signature/AbstractSignature.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/signature/AbstractSignature.java
 @@ -119,7 +119,7 @@ public abstract class AbstractSignature implements Signature {
      *                       data - {@code null} if not encoded
      */
     protected Map.Entry<String, byte[]> extractEncodedSignature(byte[] sig, \
                Collection<String> expectedTypes) {
-        return GenericUtils.isEmpty(expectedTypes) ? null : \
extractEncodedSignature(sig, k -> expectedTypes.contains(k)); +        return \
GenericUtils.isEmpty(expectedTypes) ? null : extractEncodedSignature(sig, \
expectedTypes::contains);  }
 
     protected Map.Entry<String, byte[]> extractEncodedSignature(byte[] sig, \
                Predicate<? super String> typeSelector) {
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/signature/SignatureDSA.java \
b/sshd-common/src/main/java/org/apache/sshd/common/signature/SignatureDSA.java index \
                cc48088a4..b5620be43 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/signature/SignatureDSA.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/signature/SignatureDSA.java
@@ -101,7 +101,7 @@ public class SignatureDSA extends AbstractSignature {
 
         if (sigLen != DSA_SIGNATURE_LENGTH) {
             // probably some encoded data
-            Map.Entry<String, byte[]> encoding = extractEncodedSignature(sig, k -> \
KeyPairProvider.SSH_DSS.equalsIgnoreCase(k)); +            Map.Entry<String, byte[]> \
encoding = extractEncodedSignature(sig, KeyPairProvider.SSH_DSS::equalsIgnoreCase);  \
if (encoding != null) {  String keyType = encoding.getKey();
                 ValidateUtils.checkTrue(
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/ExceptionUtils.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/ExceptionUtils.java index \
                64aae6821..7a1158dcf 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/ExceptionUtils.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/ExceptionUtils.java
@@ -123,10 +123,7 @@ public final class ExceptionUtils {
                 return peelException(target);
             }
         } else if (t instanceof ExecutionException) {
-            Throwable wrapped = resolveExceptionCause(t);
-            if (wrapped != null) {
-                return peelException(wrapped);
-            }
+            return peelException(resolveExceptionCause(t));
         } else if (t instanceof MBeanException) {
             Throwable target = ((MBeanException) t).getTargetException();
             if (target != null) {
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/GenericUtils.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/GenericUtils.java index \
                445bcbe17..8ca104790 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/GenericUtils.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/GenericUtils.java
@@ -780,13 +780,13 @@ public final class GenericUtils {
             return null;
         } else if (it instanceof Deque<?>) { // check before (!) instanceof List \
since LinkedList implements List  Deque<? extends T> l = (Deque<? extends T>) it;
-            return (l.size() > 0) ? l.getFirst() : null;
+            return !l.isEmpty() ? l.getFirst() : null;
         } else if (it instanceof List<?>) {
             List<? extends T> l = (List<? extends T>) it;
-            return (l.size() > 0) ? l.get(0) : null;
+            return !l.isEmpty() ? l.get(0) : null;
         } else if (it instanceof SortedSet<?>) {
             SortedSet<? extends T> s = (SortedSet<? extends T>) it;
-            return (s.size() > 0) ? s.first() : null;
+            return !s.isEmpty() ? s.first() : null;
         } else {
             Iterator<? extends T> iter = it.iterator();
             return ((iter == null) || (!iter.hasNext())) ? null : iter.next();
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/SelectorUtils.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/SelectorUtils.java index \
                3bf04fdcd..b400b7b40 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/SelectorUtils.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/SelectorUtils.java
@@ -235,8 +235,6 @@ public final class SelectorUtils {
 
             String subDir = strDirs.get(strIdxStart);
             if (!match(patDir, subDir, isCaseSensitive)) {
-                patDirs = null;
-                strDirs = null;
                 return false;
             }
 
@@ -249,8 +247,6 @@ public final class SelectorUtils {
             for (int i = patIdxStart; i <= patIdxEnd; i++) {
                 String subPat = patDirs.get(i);
                 if (!subPat.equals("**")) {
-                    patDirs = null;
-                    strDirs = null;
                     return false;
                 }
             }
@@ -258,8 +254,6 @@ public final class SelectorUtils {
         } else {
             if (patIdxStart > patIdxEnd) {
                 // String not exhausted, but pattern is. Failure.
-                patDirs = null;
-                strDirs = null;
                 return false;
             }
         }
@@ -273,8 +267,6 @@ public final class SelectorUtils {
 
             String subDir = strDirs.get(strIdxEnd);
             if (!match(patDir, subDir, isCaseSensitive)) {
-                patDirs = null;
-                strDirs = null;
                 return false;
             }
 
@@ -287,8 +279,6 @@ public final class SelectorUtils {
             for (int i = patIdxStart; i <= patIdxEnd; i++) {
                 String subPat = patDirs.get(i);
                 if (!subPat.equals("**")) {
-                    patDirs = null;
-                    strDirs = null;
                     return false;
                 }
             }
@@ -328,8 +318,6 @@ public final class SelectorUtils {
             }
 
             if (foundIdx == -1) {
-                patDirs = null;
-                strDirs = null;
                 return false;
             }
 
@@ -340,8 +328,6 @@ public final class SelectorUtils {
         for (int i = patIdxStart; i <= patIdxEnd; i++) {
             String subPat = patDirs.get(i);
             if (!subPat.equals("**")) {
-                patDirs = null;
-                strDirs = null;
                 return false;
             }
         }
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/ValidateUtils.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/ValidateUtils.java index \
                5b3cb3899..7fcde1cc4 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/ValidateUtils.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/ValidateUtils.java
@@ -70,61 +70,61 @@ public final class ValidateUtils {
     }
 
     public static <K, V, M extends Map<K, V>> M checkNotNullAndNotEmpty(M t, String \
                message, Object... args) {
-        t = checkNotNull(t, message, args);
+        checkNotNull(t, message, args);
         checkTrue(MapEntryUtils.size(t) > 0, message, args);
         return t;
     }
 
     public static <T, C extends Collection<T>> C checkNotNullAndNotEmpty(C t, String \
                message, Object... args) {
-        t = checkNotNull(t, message, args);
+        checkNotNull(t, message, args);
         checkTrue(GenericUtils.size(t) > 0, message, args);
         return t;
     }
 
     public static <T, C extends Iterable<T>> C checkNotNullAndNotEmpty(C t, String \
                message, Object... args) {
-        t = checkNotNull(t, message, args);
+        checkNotNull(t, message, args);
         checkTrue(GenericUtils.isNotEmpty(t), message, args);
         return t;
     }
 
     public static byte[] checkNotNullAndNotEmpty(byte[] a, String message) {
-        a = checkNotNull(a, message);
+        checkNotNull(a, message);
         checkTrue(NumberUtils.length(a) > 0, message);
         return a;
     }
 
     public static byte[] checkNotNullAndNotEmpty(byte[] a, String message, Object... \
                args) {
-        a = checkNotNull(a, message, args);
+        checkNotNull(a, message, args);
         checkTrue(NumberUtils.length(a) > 0, message, args);
         return a;
     }
 
     public static char[] checkNotNullAndNotEmpty(char[] a, String message) {
-        a = checkNotNull(a, message);
+        checkNotNull(a, message);
         checkTrue(GenericUtils.length(a) > 0, message);
         return a;
     }
 
     public static char[] checkNotNullAndNotEmpty(char[] a, String message, Object... \
                args) {
-        a = checkNotNull(a, message, args);
+        checkNotNull(a, message, args);
         checkTrue(GenericUtils.length(a) > 0, message, args);
         return a;
     }
 
     public static int[] checkNotNullAndNotEmpty(int[] a, String message) {
-        a = checkNotNull(a, message);
+        checkNotNull(a, message);
         checkTrue(NumberUtils.length(a) > 0, message);
         return a;
     }
 
     public static int[] checkNotNullAndNotEmpty(int[] a, String message, Object... \
                args) {
-        a = checkNotNull(a, message, args);
+        checkNotNull(a, message, args);
         checkTrue(NumberUtils.length(a) > 0, message, args);
         return a;
     }
 
     public static <T> T[] checkNotNullAndNotEmpty(T[] t, String message, Object... \
                args) {
-        t = checkNotNull(t, message, args);
+        checkNotNull(t, message, args);
         checkTrue(GenericUtils.length(t) > 0, message, args);
         return t;
     }
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/closeable/FuturesCloseable.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/closeable/FuturesCloseable.java
 index 202db611f..dd09e7e69 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/closeable/FuturesCloseable.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/closeable/FuturesCloseable.java
 @@ -54,7 +54,7 @@ public class FuturesCloseable<T extends SshFuture> extends \
SimpleCloseable {  SshFutureListener<T> listener = f -> {
                 int pendingCount = count.decrementAndGet();
                 if (traceEnabled) {
-                    log.trace("doClose(" + immediately + ") complete pending: " + \
pendingCount); +                    log.trace("doClose({}) complete pending: {}", \
immediately, pendingCount);  }
                 if (pendingCount == 0) {
                     future.setClosed();
@@ -65,7 +65,7 @@ public class FuturesCloseable<T extends SshFuture> extends \
SimpleCloseable {  if (f != null) {
                     int pendingCount = count.incrementAndGet();
                     if (traceEnabled) {
-                        log.trace("doClose(" + immediately + ") future pending: " + \
pendingCount); +                        log.trace("doClose({}) future pending: {}", \
immediately, pendingCount);  }
                     f.addListener(listener);
                 }
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/closeable/ParallelCloseable.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/closeable/ParallelCloseable.java
 index 127ea662a..67a142c9e 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/closeable/ParallelCloseable.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/closeable/ParallelCloseable.java
 @@ -46,7 +46,7 @@ public class ParallelCloseable extends SimpleCloseable {
         SshFutureListener<CloseFuture> listener = f -> {
             int pendingCount = count.decrementAndGet();
             if (traceEnabled) {
-                log.trace("doClose(" + immediately + ") completed pending: " + \
pendingCount); +                log.trace("doClose({}) completed pending: {}", \
immediately, pendingCount);  }
             if (pendingCount == 0) {
                 future.setClosed();
@@ -60,7 +60,7 @@ public class ParallelCloseable extends SimpleCloseable {
 
             int pendingCount = count.incrementAndGet();
             if (traceEnabled) {
-                log.trace("doClose(" + immediately + ") pending closeables: " + \
pendingCount); +                log.trace("doClose({}) pending closeables: {}", \
immediately, pendingCount);  }
             c.close(immediately).addListener(listener);
         }
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/io/PathScanningMatcher.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/io/PathScanningMatcher.java \
                index 9dcaba473..e828daed6 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/io/PathScanningMatcher.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/io/PathScanningMatcher.java
 @@ -84,7 +84,7 @@ public abstract class PathScanningMatcher {
                 ? Collections.emptyList()
                 : Collections.unmodifiableList(
                         includes.stream()
-                                .map(v -> normalizePattern(v))
+                                .map(PathScanningMatcher::normalizePattern)
                                 .collect(Collectors.toCollection(() -> new \
ArrayList<>(includes.size()))));  }
 
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/security/SecurityUtils.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/security/SecurityUtils.java \
                index 7acb34fb7..22fdada54 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/security/SecurityUtils.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/security/SecurityUtils.java
 @@ -243,7 +243,7 @@ public final class SecurityUtils {
                 }
             } else {
                 Logger logger = LoggerFactory.getLogger(SecurityUtils.class);
-                logger.info("Override ECC support value: " + propValue);
+                logger.info("Override ECC support value: {}", propValue);
                 hasEcc = Boolean.valueOf(propValue);
             }
         }
@@ -349,7 +349,7 @@ public final class SecurityUtils {
         ValidateUtils.checkTrue(maxKeySize > Byte.SIZE, "Invalid max. key size: %d", \
maxKeySize);  
         try {
-            BigInteger r = new BigInteger("0").setBit(maxKeySize - 1);
+            BigInteger r = BigInteger.ZERO.setBit(maxKeySize - 1);
             DHParameterSpec dhSkipParamSpec = new DHParameterSpec(r, r);
             KeyPairGenerator kpg = getKeyPairGenerator("DH");
             kpg.initialize(dhSkipParamSpec);
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/security/bouncycastle/BouncyCastleRandom.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/security/bouncycastle/BouncyCastleRandom.java
 index 3e44243ec..12c981156 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/security/bouncycastle/BouncyCastleRandom.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/security/bouncycastle/BouncyCastleRandom.java
 @@ -74,7 +74,7 @@ public final class BouncyCastleRandom extends AbstractRandom {
 
     private int next(int numBits) {
         int bytes = (numBits + 7) / 8;
-        byte next[] = new byte[bytes];
+        byte[] next = new byte[bytes];
         int ret = 0;
         random.nextBytes(next);
         for (int i = 0; i < bytes; i++) {
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/security/eddsa/EdDSASecurityProviderUtils.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/security/eddsa/EdDSASecurityProviderUtils.java
 index a142196e4..058472cfd 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/security/eddsa/EdDSASecurityProviderUtils.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/security/eddsa/EdDSASecurityProviderUtils.java
 @@ -76,10 +76,8 @@ public final class EdDSASecurityProviderUtils {
         }
 
         if ((k1 instanceof EdDSAPublicKey) && (k2 instanceof EdDSAPublicKey)) {
-            if (Objects.equals(k1, k2)) {
+            if (k1.equals(k2)) {
                 return true;
-            } else if (k1 == null || k2 == null) {
-                return false; // both null is covered by Objects#equals
             }
 
             EdDSAPublicKey ed1 = (EdDSAPublicKey) k1;
@@ -136,10 +134,8 @@ public final class EdDSASecurityProviderUtils {
         }
 
         if ((k1 instanceof EdDSAPrivateKey) && (k2 instanceof EdDSAPrivateKey)) {
-            if (Objects.equals(k1, k2)) {
+            if (k1.equals(k2)) {
                 return true;
-            } else if (k1 == null || k2 == null) {
-                return false; // both null is covered by Objects#equals
             }
 
             EdDSAPrivateKey ed1 = (EdDSAPrivateKey) k1;
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/security/eddsa/SignatureEd25519.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/security/eddsa/SignatureEd25519.java
 index f5dcba522..bba78751d 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/security/eddsa/SignatureEd25519.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/security/eddsa/SignatureEd25519.java
 @@ -38,7 +38,7 @@ public class SignatureEd25519 extends AbstractSignature {
     public boolean verify(SessionContext session, byte[] sig) throws Exception {
         byte[] data = sig;
         Map.Entry<String, byte[]> encoding
-                = extractEncodedSignature(data, k -> \
KeyPairProvider.SSH_ED25519.equalsIgnoreCase(k)); +                = \
extractEncodedSignature(data, KeyPairProvider.SSH_ED25519::equalsIgnoreCase);  if \
(encoding != null) {  String keyType = encoding.getKey();
             ValidateUtils.checkTrue(
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/threads/ThreadUtils.java \
b/sshd-common/src/main/java/org/apache/sshd/common/util/threads/ThreadUtils.java \
                index b93e81ed5..9f2b3be73 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/threads/ThreadUtils.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/threads/ThreadUtils.java
@@ -241,7 +241,7 @@ public final class ThreadUtils {
                         Thread thread = Thread.currentThread();
                         return thread.getContextClassLoader();
                     },
-                    () -> effectiveAnchor.getClassLoader(),
+                    effectiveAnchor::getClassLoader,
                     ClassLoader::getSystemClassLoader
             };
 
diff --git a/sshd-common/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java \
b/sshd-common/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java
 index 67a2565a9..f8cb53334 100644
--- a/sshd-common/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java
                
+++ b/sshd-common/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java
 @@ -123,7 +123,7 @@ public abstract class AbstractGeneratorHostKeyProvider
             ids = keyPairHolder.getAndSet(null);
         }
 
-        if ((ids != null) & log.isDebugEnabled()) {
+        if ((ids != null) && log.isDebugEnabled()) {
             log.debug("clearLoadedKeys({}) removed keys", getPath());
         }
     }
@@ -287,7 +287,7 @@ public abstract class AbstractGeneratorHostKeyProvider
         KeyPairGenerator generator = SecurityUtils.getKeyPairGenerator(algorithm);
         if (keySpec != null) {
             generator.initialize(keySpec);
-            log.info("generateKeyPair(" + algorithm + ") generating host key - \
spec=" + keySpec.getClass().getSimpleName()); +            \
log.info("generateKeyPair({}) generating host key - spec={}", algorithm, \
keySpec.getClass().getSimpleName());  } else if \
(KeyUtils.EC_ALGORITHM.equals(algorithm)) {  ECCurves curve;
             // If left to our own devices choose the biggest key size possible
@@ -301,10 +301,10 @@ public abstract class AbstractGeneratorHostKeyProvider
                 }
             }
             generator.initialize(curve.getParameters());
-            log.info("generateKeyPair(" + algorithm + ") generating host key=" + \
curve); +            log.info("generateKeyPair({}) generating host key={}", \
algorithm, curve);  } else if (keySize != 0) {
             generator.initialize(keySize);
-            log.info("generateKeyPair(" + algorithm + ") generating host key - \
size=" + keySize); +            log.info("generateKeyPair({}) generating host key - \
size={}", algorithm, keySize);  }
 
         return generator.generateKeyPair();
diff --git a/sshd-common/src/test/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcherTest.java \
b/sshd-common/src/test/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcherTest.java
 index ec8d53dce..2a3944c0a 100644
--- a/sshd-common/src/test/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcherTest.java
                
+++ b/sshd-common/src/test/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcherTest.java
 @@ -153,7 +153,7 @@ public class BuiltinClientIdentitiesWatcherTest extends \
JUnitTestSupport {  }
 
     private static void testMultipleFilesWatch(
-            String phase, KeyIdentityProvider watcher, Collection<? extends KeyPair> \
expected) +            String phase, KeyIdentityProvider watcher, Collection<KeyPair> \
expected)  throws IOException, GeneralSecurityException {
         Iterable<KeyPair> keys = watcher.loadKeys(null);
         Collection<KeyPair> actual = new ArrayList<>();
diff --git a/sshd-common/src/test/java/org/apache/sshd/common/config/keys/writer/openssh/OpenSSHKeyPairResourceWriterTest.java \
b/sshd-common/src/test/java/org/apache/sshd/common/config/keys/writer/openssh/OpenSSHKeyPairResourceWriterTest.java
 index f042f8d23..e25567d1a 100644
--- a/sshd-common/src/test/java/org/apache/sshd/common/config/keys/writer/openssh/OpenSSHKeyPairResourceWriterTest.java
                
+++ b/sshd-common/src/test/java/org/apache/sshd/common/config/keys/writer/openssh/OpenSSHKeyPairResourceWriterTest.java
 @@ -53,10 +53,8 @@ import org.apache.sshd.util.test.JUnitTestSupport;
 import org.apache.sshd.util.test.NoIoTestCase;
 import org.junit.Before;
 import org.junit.FixMethodOrder;
-import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.junit.runners.MethodSorters;
 import org.junit.runners.Parameterized;
@@ -68,8 +66,6 @@ import org.junit.runners.Parameterized.UseParametersRunnerFactory;
 @UseParametersRunnerFactory(JUnit4ClassRunnerWithParametersFactory.class)
 @Category({ NoIoTestCase.class })
 public class OpenSSHKeyPairResourceWriterTest extends JUnitTestSupport {
-    @Rule
-    public TemporaryFolder folder = new TemporaryFolder();
 
     private final TestData data;
     private KeyPair testKey;
diff --git a/sshd-common/src/test/java/org/apache/sshd/util/test/CommonTestSupportUtils.java \
b/sshd-common/src/test/java/org/apache/sshd/util/test/CommonTestSupportUtils.java \
                index 6d4758c4a..829f25bcd 100644
--- a/sshd-common/src/test/java/org/apache/sshd/util/test/CommonTestSupportUtils.java
+++ b/sshd-common/src/test/java/org/apache/sshd/util/test/CommonTestSupportUtils.java
@@ -462,7 +462,7 @@ public final class CommonTestSupportUtils {
 
     public static KeyPair getFirstKeyPair(KeyIdentityProvider provider) {
         Objects.requireNonNull(provider, "No key pair provider");
-        Iterable<? extends KeyPair> pairs;
+        Iterable<KeyPair> pairs;
         try {
             pairs = Objects.requireNonNull(provider.loadKeys(null), "No loaded \
keys");  } catch (IOException | GeneralSecurityException e) {
@@ -471,7 +471,7 @@ public final class CommonTestSupportUtils {
                     e);
         }
 
-        Iterator<? extends KeyPair> iter = Objects.requireNonNull(pairs.iterator(), \
"No keys iterator"); +        Iterator<KeyPair> iter = \
                Objects.requireNonNull(pairs.iterator(), "No keys iterator");
         ValidateUtils.checkTrue(iter.hasNext(), "Empty loaded kyes iterator");
         return Objects.requireNonNull(iter.next(), "No key pair in iterator");
     }
diff --git a/sshd-contrib/src/main/java/org/apache/sshd/contrib/common/channel/throttle/ThrottlingChannelStreamWriter.java \
b/sshd-contrib/src/main/java/org/apache/sshd/contrib/common/channel/throttle/ThrottlingChannelStreamWriter.java
 index addf08860..bf8a654dc 100644
--- a/sshd-contrib/src/main/java/org/apache/sshd/contrib/common/channel/throttle/ThrottlingChannelStreamWriter.java
                
+++ b/sshd-contrib/src/main/java/org/apache/sshd/contrib/common/channel/throttle/ThrottlingChannelStreamWriter.java
 @@ -197,7 +197,7 @@ public class ThrottlingChannelStreamWriter extends \
AbstractLoggingBean  public void close() throws IOException {
         if (open.getAndSet(false)) {
             if (log.isDebugEnabled()) {
-                log.debug("close({}) closing");
+                log.debug("close({}) closing", this);
             }
         }
 
diff --git a/sshd-contrib/src/main/java/org/apache/sshd/contrib/common/signature/LegacyDSASigner.java \
b/sshd-contrib/src/main/java/org/apache/sshd/contrib/common/signature/LegacyDSASigner.java
 index 63afc604d..8bb963ecb 100644
--- a/sshd-contrib/src/main/java/org/apache/sshd/contrib/common/signature/LegacyDSASigner.java
                
+++ b/sshd-contrib/src/main/java/org/apache/sshd/contrib/common/signature/LegacyDSASigner.java
 @@ -244,7 +244,7 @@ public class LegacyDSASigner extends java.security.Signature {
             }
 
             BigInteger q = params.getQ();
-            if ((r.compareTo(q) != -1) || (s.compareTo(q) != -1)) {
+            if ((r.compareTo(q) >= 0) || (s.compareTo(q) >= 0)) {
                 throw new IndexOutOfBoundsException("Out of range values in \
signature");  }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java \
b/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java index \
                a0fa391a9..8548cb69a 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java
@@ -242,7 +242,7 @@ public abstract class AbstractAgentProxy extends \
AbstractLoggingBean implements  if ((service != null) && (!service.isShutdown())) {
             Collection<?> runners = service.shutdownNow();
             if (log.isDebugEnabled()) {
-                log.debug("close() - shutdown runners count=" + \
GenericUtils.size(runners)); +                log.debug("close() - shutdown runners \
count={}", GenericUtils.size(runners));  }
         }
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentServerProxy.java \
b/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentServerProxy.java index \
                66cff0fa8..7cd0b53f0 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentServerProxy.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentServerProxy.java
@@ -54,9 +54,7 @@ public class AgentServerProxy extends AbstractLoggingBean \
implements SshAgentSer  return channel.getAgent();
         } catch (Throwable t) {
             if (log.isDebugEnabled()) {
-                log.warn("createClient(" + service.getSession() + ")[" + getId() + \
                ")"
-                         + " failed (" + t.getClass().getSimpleName() + ")"
-                         + " to create client: " + t.getMessage());
+                log.warn("createClient({})[{}] failed to create client: {}", \
service.getSession(), getId(), t.toString());  }
 
             if (t instanceof IOException) {
@@ -81,7 +79,7 @@ public class AgentServerProxy extends AbstractLoggingBean \
implements SshAgentSer  public void close() throws IOException {
         if (open.getAndSet(false)) {
             if (log.isDebugEnabled()) {
-                log.debug("closed(" + service.getSession() + ")[" + getId() + "]");
+                log.debug("closed({})[{}]", service.getSession(), getId());
             }
         }
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServer.java \
b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServer.java index \
                59f47ede3..9dac098a6 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServer.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServer.java
@@ -125,7 +125,7 @@ public class AgentServer extends AbstractLoggingBean implements \
Closeable, Execu  if ((executor != null) && (!executor.isShutdown())) {
             Collection<?> runners = executor.shutdownNow();
             if (log.isDebugEnabled()) {
-                log.debug("Shut down runners count=" + GenericUtils.size(runners));
+                log.debug("Shut down runners count={}", GenericUtils.size(runners));
             }
         }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServerProxy.java \
b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServerProxy.java index \
                d88532937..cb49b5d8a 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServerProxy.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServerProxy.java
@@ -179,7 +179,7 @@ public class AgentServerProxy extends AbstractLoggingBean \
implements SshAgentSer  if ((executor != null) && (!executor.isShutdown())) {
             Collection<?> runners = executor.shutdownNow();
             if (debugEnabled) {
-                log.debug("Shut down runners count=" + GenericUtils.size(runners));
+                log.debug("Shut down runners count={}", GenericUtils.size(runners));
             }
         }
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AprLibrary.java \
b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AprLibrary.java index \
                43921f4db..505b99298 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AprLibrary.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AprLibrary.java
@@ -56,12 +56,10 @@ public final class AprLibrary {
     private AprLibrary() {
         try {
             Library.initialize(null);
+        } catch (RuntimeException e) {
+            throw e;
         } catch (Throwable e) {
-            if (e instanceof RuntimeException) {
-                throw (RuntimeException) e;
-            } else {
-                throw new RuntimeException("Error loading Apache Portable Runtime \
                (APR).", e);
-            }
+            throw new RuntimeException("Error loading Apache Portable Runtime \
(APR).", e);  }
         pool = Pool.create(0);
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwarding.java \
b/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwarding.java \
                index 11091d979..e24274b68 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwarding.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwarding.java
@@ -132,7 +132,7 @@ public class ChannelAgentForwarding extends AbstractServerChannel \
{  if (forwardService != null) {
                 Collection<?> runners = forwardService.shutdownNow();
                 if (log.isDebugEnabled()) {
-                    log.debug("Shut down runners count=" + \
GenericUtils.size(runners)); +                    log.debug("Shut down runners \
count={}", GenericUtils.size(runners));  }
             }
         } finally {
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultConnectFuture.java \
b/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultConnectFuture.java \
                index e74695415..2df1f8619 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultConnectFuture.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultConnectFuture.java
@@ -43,7 +43,7 @@ public class DefaultConnectFuture extends \
DefaultVerifiableSshFuture<ConnectFutu  long endTime = System.nanoTime();
         if (log.isDebugEnabled()) {
             IoSession ioSession = session.getIoSession();
-            log.debug("Connected to " + ioSession.getRemoteAddress() + " after " + \
(endTime - startTime) + " nanos"); +            log.debug("Connected to {} after {} \
nanos", ioSession.getRemoteAddress(), endTime - startTime);  }
         return this;
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java \
b/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java index \
                014cc46c0..202ef8fd2 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
@@ -346,11 +346,7 @@ public abstract class AbstractChannel extends \
AbstractInnerCloseable implements  }
 
         if (RequestHandler.Result.Replied.equals(result) || (!wantReply)) {
-            return new AbstractIoWriteFuture(req, null) {
-                {
-                    setValue(Boolean.TRUE);
-                }
-            };
+            return AbstractIoWriteFuture.fulfilled(req, Boolean.TRUE);
         }
 
         byte cmd = RequestHandler.Result.ReplySuccess.equals(result)
@@ -412,14 +408,10 @@ public abstract class AbstractChannel extends \
AbstractInnerCloseable implements  signalChannelOpenSuccess(l);
                 return null;
             });
+        } catch (Error | RuntimeException err) {
+            throw err;
         } catch (Throwable err) {
-            if (err instanceof RuntimeException) {
-                throw (RuntimeException) err;
-            } else if (err instanceof Error) {
-                throw (Error) err;
-            } else {
-                throw new RuntimeException(err);
-            }
+            throw new RuntimeException(err);
         }
     }
 
@@ -782,11 +774,7 @@ public abstract class AbstractChannel extends \
AbstractInnerCloseable implements  if (log.isDebugEnabled()) {
             log.debug("writePacket({}) Discarding output packet because channel \
state={}", this, state);  }
-        return new AbstractIoWriteFuture(toString(), null) {
-            {
-                setValue(new EOFException("Channel is being closed"));
-            }
-        };
+        return AbstractIoWriteFuture.fulfilled(toString(), new EOFException("Channel \
is being closed"));  }
 
     protected boolean mayWrite() {
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/BufferedIoOutputStream.java \
b/sshd-core/src/main/java/org/apache/sshd/common/channel/BufferedIoOutputStream.java \
                index f50f03019..1e3a23c35 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/BufferedIoOutputStream.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/BufferedIoOutputStream.java
 @@ -31,7 +31,6 @@ import java.util.concurrent.atomic.AtomicReference;
 import org.apache.sshd.common.Closeable;
 import org.apache.sshd.common.PropertyResolver;
 import org.apache.sshd.common.channel.exception.SshChannelBufferedOutputException;
-import org.apache.sshd.common.future.SshFutureListener;
 import org.apache.sshd.common.io.IoOutputStream;
 import org.apache.sshd.common.io.IoWriteFuture;
 import org.apache.sshd.common.util.ValidateUtils;
@@ -187,16 +186,13 @@ public class BufferedIoOutputStream extends \
AbstractInnerCloseable implements Io  
         Buffer buffer = future.getBuffer();
         int bufferSize = buffer.available();
-        out.writeBuffer(buffer).addListener(new SshFutureListener<IoWriteFuture>() {
-            @Override
-            public void operationComplete(IoWriteFuture f) {
-                if (f.isWritten()) {
-                    future.setValue(Boolean.TRUE);
-                } else {
-                    future.setValue(f.getException());
-                }
-                finishWrite(future, bufferSize);
+        out.writeBuffer(buffer).addListener(f -> {
+            if (f.isWritten()) {
+                future.setValue(Boolean.TRUE);
+            } else {
+                future.setValue(f.getException());
             }
+            finishWrite(future, bufferSize);
         });
     }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java \
b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java \
                index 7d8c66bb8..54617109c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java
 @@ -172,7 +172,7 @@ public class ChannelAsyncInputStream extends AbstractCloseable \
implements IoInpu  Number result = verifyResult(Number.class, timeoutMillis);
             long endTime = System.nanoTime();
             if (log.isDebugEnabled()) {
-                log.debug("Read " + result + " bytes after " + (endTime - startTime) \
+ " nanos"); +                log.debug("Read {} bytes after {} nanos", result, \
endTime - startTime);  }
 
             return this;
@@ -197,7 +197,7 @@ public class ChannelAsyncInputStream extends AbstractCloseable \
implements IoInpu  throw formatExceptionMessage(
                         IllegalStateException::new,
                         "Unknown read value type: %s",
-                        (v == null) ? "null" : v.getClass().getName());
+                        v.getClass().getName());
             }
         }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwarder.java \
b/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwarder.java index \
                2b7176538..eb4aa3875 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwarder.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwarder.java
@@ -223,7 +223,7 @@ public class DefaultForwarder
 
         try {
             if (log.isDebugEnabled()) {
-                log.debug("startLocalPortForwarding(" + local + " -> " + remote + \
"): " + result); +                log.debug("startLocalPortForwarding({} -> {}): {}", \
local, remote, result);  }
             signalEstablishedExplicitTunnel(local, remote, true, result, null);
             return result;
@@ -325,7 +325,7 @@ public class DefaultForwarder
         try {
             SshdSocketAddress bound = new SshdSocketAddress(remoteHost, port);
             if (log.isDebugEnabled()) {
-                log.debug("startRemotePortForwarding(" + remote + " -> " + local + \
"): " + bound); +                log.debug("startRemotePortForwarding({} -> {}): {}", \
remote, local, bound);  }
 
             signalEstablishedExplicitTunnel(local, remote, false, bound, null);
@@ -346,7 +346,7 @@ public class DefaultForwarder
 
         if (bound != null) {
             if (log.isDebugEnabled()) {
-                log.debug("stopRemotePortForwarding(" + remote + ") cancel \
forwarding to " + bound); +                log.debug("stopRemotePortForwarding({}) \
cancel forwarding to {}", remote, bound);  }
 
             String remoteHost = remote.getHostName();
@@ -368,7 +368,7 @@ public class DefaultForwarder
             signalTornDownExplicitTunnel(bound, false, remote, null);
         } else {
             if (log.isDebugEnabled()) {
-                log.debug("stopRemotePortForwarding(" + remote + ") no binding \
found"); +                log.debug("stopRemotePortForwarding({}) no binding found", \
remote);  }
         }
     }
@@ -381,19 +381,13 @@ public class DefaultForwarder
                 signalTearingDownExplicitTunnel(l, boundAddress, localForwarding, \
remote);  return null;
             });
+        } catch (Error | RuntimeException | IOException e) {
+            throw e;
         } catch (Throwable t) {
-            if (t instanceof RuntimeException) {
-                throw (RuntimeException) t;
-            } else if (t instanceof Error) {
-                throw (Error) t;
-            } else if (t instanceof IOException) {
-                throw (IOException) t;
-            } else {
-                throw new IOException("Failed (" + t.getClass().getSimpleName() + \
                ")"
-                                      + " to signal tearing down explicit tunnel for \
                local=" + localForwarding
-                                      + " on bound=" + boundAddress,
-                        t);
-            }
+            throw new IOException(
+                    "Failed (" + t.getClass().getSimpleName() + ")" + " to signal \
tearing down explicit tunnel for local=" +                                  + \
localForwarding + " on bound=" + boundAddress, +                    t);
         }
     }
 
@@ -416,19 +410,13 @@ public class DefaultForwarder
                 signalTornDownExplicitTunnel(l, boundAddress, localForwarding, \
remoteAddress, reason);  return null;
             });
+        } catch (Error | RuntimeException | IOException e) {
+            throw e;
         } catch (Throwable t) {
-            if (t instanceof RuntimeException) {
-                throw (RuntimeException) t;
-            } else if (t instanceof Error) {
-                throw (Error) t;
-            } else if (t instanceof IOException) {
-                throw (IOException) t;
-            } else {
-                throw new IOException("Failed (" + t.getClass().getSimpleName() + \
                ")"
-                                      + " to signal torn down explicit tunnel \
                local=" + localForwarding
-                                      + " on bound=" + boundAddress,
-                        t);
-            }
+            throw new IOException(
+                    "Failed (" + t.getClass().getSimpleName() + ")" + " to signal \
torn down explicit tunnel local=" +                                  + \
localForwarding + " on bound=" + boundAddress, +                    t);
         }
     }
 
@@ -489,7 +477,7 @@ public class DefaultForwarder
         try {
             SshdSocketAddress result = new SshdSocketAddress(bound.getHostString(), \
port);  if (log.isDebugEnabled()) {
-                log.debug("startDynamicPortForwarding(" + local + "): " + result);
+                log.debug("startDynamicPortForwarding({}): {}", local, result);
             }
 
             signalEstablishedDynamicTunnel(local, result, null);
@@ -508,19 +496,12 @@ public class DefaultForwarder
                 signalEstablishedDynamicTunnel(l, local, boundAddress, reason);
                 return null;
             });
+        } catch (Error | RuntimeException | IOException e) {
+            throw e;
         } catch (Throwable t) {
-            if (t instanceof RuntimeException) {
-                throw (RuntimeException) t;
-            } else if (t instanceof Error) {
-                throw (Error) t;
-            } else if (t instanceof IOException) {
-                throw (IOException) t;
-            } else {
-                throw new IOException("Failed (" + t.getClass().getSimpleName() + \
                ")"
-                                      + " to signal establishing dynamic tunnel for \
                local=" + local
-                                      + " on bound=" + boundAddress,
-                        t);
-            }
+            throw new IOException("Failed (" + t.getClass().getSimpleName() + ")"
+                                  + " to signal establishing dynamic tunnel for \
local=" + local + " on bound=" + boundAddress, +                    t);
         }
     }
 
@@ -541,18 +522,12 @@ public class DefaultForwarder
                 signalEstablishingDynamicTunnel(l, local);
                 return null;
             });
+        } catch (Error | RuntimeException | IOException e) {
+            throw e;
         } catch (Throwable t) {
-            if (t instanceof RuntimeException) {
-                throw (RuntimeException) t;
-            } else if (t instanceof Error) {
-                throw (Error) t;
-            } else if (t instanceof IOException) {
-                throw (IOException) t;
-            } else {
-                throw new IOException("Failed (" + t.getClass().getSimpleName() + \
                ")"
-                                      + " to signal establishing dynamic tunnel for \
                local=" + local,
-                        t);
-            }
+            throw new IOException("Failed (" + t.getClass().getSimpleName() + ")"
+                                  + " to signal establishing dynamic tunnel for \
local=" + local, +                    t);
         }
     }
 
@@ -629,18 +604,12 @@ public class DefaultForwarder
                 signalTearingDownDynamicTunnel(l, address);
                 return null;
             });
+        } catch (Error | RuntimeException | IOException e) {
+            throw e;
         } catch (Throwable t) {
-            if (t instanceof RuntimeException) {
-                throw (RuntimeException) t;
-            } else if (t instanceof Error) {
-                throw (Error) t;
-            } else if (t instanceof IOException) {
-                throw (IOException) t;
-            } else {
-                throw new IOException("Failed (" + t.getClass().getSimpleName() + \
                ")"
-                                      + " to signal tearing down dynamic tunnel for \
                address=" + address,
-                        t);
-            }
+            throw new IOException("Failed (" + t.getClass().getSimpleName() + ")"
+                                  + " to signal tearing down dynamic tunnel for \
address=" + address, +                    t);
         }
     }
 
@@ -659,18 +628,12 @@ public class DefaultForwarder
                 signalTornDownDynamicTunnel(l, address, reason);
                 return null;
             });
+        } catch (Error | RuntimeException | IOException e) {
+            throw e;
         } catch (Throwable t) {
-            if (t instanceof RuntimeException) {
-                throw (RuntimeException) t;
-            } else if (t instanceof Error) {
-                throw (Error) t;
-            } else if (t instanceof IOException) {
-                throw (IOException) t;
-            } else {
-                throw new IOException("Failed (" + t.getClass().getSimpleName() + \
                ")"
-                                      + " to signal torn down dynamic tunnel for \
                address=" + address,
-                        t);
-            }
+            throw new IOException("Failed (" + t.getClass().getSimpleName() + ")"
+                                  + " to signal torn down dynamic tunnel for \
address=" + address, +                    t);
         }
     }
 
@@ -702,8 +665,7 @@ public class DefaultForwarder
         try {
             if ((filter == null) || (!filter.canListen(local, session))) {
                 if (log.isDebugEnabled()) {
-                    log.debug("localPortForwardingRequested(" + session + ")[" + \
                local + "][haveFilter=" + (filter != null)
-                              + "] rejected");
+                    log.debug("localPortForwardingRequested({})[{}][haveFilter={}] \
rejected", session, local, filter != null);  }
                 return null;
             }
@@ -720,7 +682,7 @@ public class DefaultForwarder
             InetSocketAddress bound = doBind(local, getLocalIoAcceptor());
             result = new SshdSocketAddress(bound);
             if (log.isDebugEnabled()) {
-                log.debug("localPortForwardingRequested(" + local + "): " + result);
+                log.debug("localPortForwardingRequested({}): {}", local, result);
             }
 
             boolean added;
@@ -742,12 +704,8 @@ public class DefaultForwarder
             throw e;
         }
 
-        try {
-            signalEstablishedExplicitTunnel(local, null, true, result, null);
-            return result;
-        } catch (IOException | RuntimeException e) {
-            throw e;
-        }
+        signalEstablishedExplicitTunnel(local, null, true, result, null);
+        return result;
     }
 
     @Override
@@ -763,7 +721,7 @@ public class DefaultForwarder
 
         if ((entry != null) && (localAcceptor != null)) {
             if (log.isDebugEnabled()) {
-                log.debug("localPortForwardingCancelled(" + local + ") unbind " + \
entry); +                log.debug("localPortForwardingCancelled({}) unbind {}", \
local, entry);  }
 
             SshdSocketAddress reportedBoundAddress = \
entry.getCombinedBoundAddress(); @@ -780,7 +738,7 @@ public class DefaultForwarder
             signalTornDownExplicitTunnel(reportedBoundAddress, true, null, null);
         } else {
             if (log.isDebugEnabled()) {
-                log.debug("localPortForwardingCancelled(" + local + ") no \
match/acceptor: " + entry); +                \
log.debug("localPortForwardingCancelled({}) no match/acceptor: {}", local, entry);  }
         }
     }
@@ -793,19 +751,13 @@ public class DefaultForwarder
                 signalEstablishingExplicitTunnel(l, local, remote, localForwarding);
                 return null;
             });
+        } catch (Error | RuntimeException | IOException e) {
+            throw e;
         } catch (Throwable t) {
-            if (t instanceof RuntimeException) {
-                throw (RuntimeException) t;
-            } else if (t instanceof Error) {
-                throw (Error) t;
-            } else if (t instanceof IOException) {
-                throw (IOException) t;
-            } else {
-                throw new IOException("Failed (" + t.getClass().getSimpleName() + \
                ")"
-                                      + " to signal establishing explicit tunnel for \
                local=" + local
-                                      + ", remote=" + remote + ", localForwarding=" \
                + localForwarding,
-                        t);
-            }
+            throw new IOException(
+                    "Failed (" + t.getClass().getSimpleName() + ")" + " to signal \
establishing explicit tunnel for local=" +                                  + local + \
", remote=" + remote + ", localForwarding=" + localForwarding, +                    \
t);  }
     }
 
@@ -828,20 +780,13 @@ public class DefaultForwarder
                 signalEstablishedExplicitTunnel(l, local, remote, localForwarding, \
boundAddress, reason);  return null;
             });
+        } catch (Error | RuntimeException | IOException e) {
+            throw e;
         } catch (Throwable t) {
-            if (t instanceof RuntimeException) {
-                throw (RuntimeException) t;
-            } else if (t instanceof Error) {
-                throw (Error) t;
-            } else if (t instanceof IOException) {
-                throw (IOException) t;
-            } else {
-                throw new IOException("Failed (" + t.getClass().getSimpleName() + \
                ")"
-                                      + " to signal established explicit tunnel for \
                local=" + local
-                                      + ", remote=" + remote + ", localForwarding=" \
                + localForwarding
-                                      + ", bound=" + boundAddress,
-                        t);
-            }
+            throw new IOException("Failed (" + t.getClass().getSimpleName() + ")"
+                                  + " to signal established explicit tunnel for \
local=" + local + ", remote=" + remote +                                  + ", \
localForwarding=" + localForwarding + ", bound=" + boundAddress, +                    \
t);  }
     }
 
@@ -1155,13 +1100,7 @@ public class DefaultForwarder
     @Override
     public boolean isLocalPortForwardingStartedForPort(int port) {
         synchronized (localLock) {
-            return localToRemote.isEmpty()
-                    ? false
-                    : localToRemote.keySet()
-                            .stream()
-                            .filter(e -> e.getPort() == port)
-                            .findAny()
-                            .isPresent();
+            return localToRemote.keySet().stream().anyMatch(e -> e.getPort() == \
port);  }
     }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/BuiltinIoServiceFactoryFactories.java \
b/sshd-core/src/main/java/org/apache/sshd/common/io/BuiltinIoServiceFactoryFactories.java
 index e64baf2c9..58abd27c5 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/BuiltinIoServiceFactoryFactories.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/BuiltinIoServiceFactoryFactories.java
 @@ -88,12 +88,10 @@ public enum BuiltinIoServiceFactoryFactories implements \
                NamedFactory<IoServiceFa
         Class<? extends IoServiceFactoryFactory> clazz = getFactoryClass();
         try {
             return ReflectionUtils.newInstance(clazz, \
IoServiceFactoryFactory.class); +        } catch (RuntimeException | Error e) {
+            throw e;
         } catch (Throwable e) {
-            if (e instanceof RuntimeException) {
-                throw (RuntimeException) e;
-            } else {
-                throw new RuntimeException(e);
-            }
+            throw new RuntimeException(e);
         }
     }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactory.java \
b/sshd-core/src/main/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactory.java
 index 4b29d4255..e84b24d6c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactory.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactory.java
 @@ -65,8 +65,7 @@ public class DefaultIoServiceFactoryFactory extends \
AbstractIoServiceFactoryFact  factory = newInstance(IoServiceFactoryFactory.class);
             if (factory == null) {
                 factory = BuiltinIoServiceFactoryFactories.NIO2.create();
-                log.info("No detected/configured " + \
                IoServiceFactoryFactory.class.getSimpleName()
-                         + " using " + factory.getClass().getSimpleName());
+                log.info("No detected/configured IoServiceFactoryFactory; using {}", \
factory.getClass().getSimpleName());  } else {
                 log.info("Using {}", factory.getClass().getSimpleName());
             }
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java \
b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java index \
                d64dc1e94..82f869fe3 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
@@ -202,10 +202,8 @@ public abstract class Nio2Service extends AbstractInnerCloseable \
implements IoSe  }
             return true;
         } catch (IOException | RuntimeException e) {
-            log.warn("Unable (" + e.getClass().getSimpleName() + ")"
-                     + " to set socket option " + option
-                     + " using property " + property + "=" + val
-                     + ": " + e.getMessage());
+            log.warn("setOption({}): unable to set socket option {} via {}={}: {}", \
socket, option, property, val, +                    e.toString());
             return false;
         }
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/kex/dh/AbstractDHKeyExchange.java \
b/sshd-core/src/main/java/org/apache/sshd/common/kex/dh/AbstractDHKeyExchange.java \
                index 3843dc974..746484b67 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/kex/dh/AbstractDHKeyExchange.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/common/kex/dh/AbstractDHKeyExchange.java
 @@ -112,7 +112,7 @@ public abstract class AbstractDHKeyExchange extends \
AbstractLoggingBean implemen  }
     }
 
-    protected void validateEValue(BigInteger pValue) throws Exception {
+    protected void validateEValue(BigInteger pValue) throws SshException {
         BigInteger value = Objects.requireNonNull(getEValue(), "No DH 'e' value \
set");  if (!KeyExchange.isValidDHValue(value, pValue)) {
             throw new SshException(SshConstants.SSH2_DISCONNECT_KEY_EXCHANGE_FAILED,
@@ -149,7 +149,7 @@ public abstract class AbstractDHKeyExchange extends \
AbstractLoggingBean implemen  }
     }
 
-    protected void validateFValue(BigInteger pValue) throws Exception {
+    protected void validateFValue(BigInteger pValue) throws SshException {
         BigInteger value = Objects.requireNonNull(getFValue(), "No DH 'f' value \
set");  if (!KeyExchange.isValidDHValue(value, pValue)) {
             throw new SshException(SshConstants.SSH2_DISCONNECT_KEY_EXCHANGE_FAILED,
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java \
b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java
 index d585a6ced..70e9f1279 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java
 @@ -900,11 +900,7 @@ public abstract class AbstractConnectionService
         }
 
         if (RequestHandler.Result.Replied.equals(result) || (!wantReply)) {
-            return new AbstractIoWriteFuture(req, null) {
-                {
-                    setValue(Boolean.TRUE);
-                }
-            };
+            return AbstractIoWriteFuture.fulfilled(req, Boolean.TRUE);
         }
 
         byte cmd = RequestHandler.Result.ReplySuccess.equals(result)
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java \
b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java \
                index 22e68c656..8b51d8eba 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java
 @@ -273,7 +273,7 @@ public abstract class AbstractSession extends SessionHelper {
      * @see {@link #doInvokeUnimplementedMessageHandler(int, Buffer)}
      * @see {@link #preClose()}
      */
-    private final Deque<GlobalRequestFuture> pendingGlobalRequests = new \
ConcurrentLinkedDeque<GlobalRequestFuture>(); +    private final \
Deque<GlobalRequestFuture> pendingGlobalRequests = new ConcurrentLinkedDeque<>();  
     private final Map<Buffer, LongConsumer> globalSequenceNumbers = new \
ConcurrentHashMap<>();  
@@ -314,12 +314,10 @@ public abstract class AbstractSession extends SessionHelper {
 
         try {
             signalSessionEstablished(ioSession);
+        } catch (RuntimeException e) {
+            throw e;
         } catch (Exception e) {
-            if (e instanceof RuntimeException) {
-                throw (RuntimeException) e;
-            } else {
-                throw new RuntimeSshException(e);
-            }
+            throw new RuntimeSshException(e);
         }
     }
 
@@ -1723,7 +1721,7 @@ public abstract class AbstractSession extends SessionHelper {
         IoWriteFuture future = (handler == null) ? null : \
handler.sendKexInitRequest(this, proposal, buffer);  byte[] data = \
buffer.getCompactData();  if (future == null) {
-            future = writePacket(buffer);
+            writePacket(buffer);
         } else {
             if (debugEnabled) {
                 log.debug("sendKexInit({}) KEX handled by reserved messages \
                handler", this);
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSessionIoHandler.java \
b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSessionIoHandler.java
 index d176a258b..136eb2cf5 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSessionIoHandler.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSessionIoHandler.java
 @@ -63,8 +63,10 @@ public abstract class AbstractSessionIoHandler extends \
AbstractLoggingBean imple  try {
             session.messageReceived(message);
         } catch (Error e) {
-            log.debug("messageReceived({}) failed {} to handle message: {}",
-                    ioSession, e.getClass().getSimpleName(), e.getMessage(), e);
+            if (log.isDebugEnabled()) {
+                log.debug("messageReceived({}) failed {} to handle message: {}", \
ioSession, e.getClass().getSimpleName(), +                        e.getMessage(), e);
+            }
             throw new RuntimeSshException(e);
         }
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/KeyExchangeMessageHandler.java \
b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/KeyExchangeMessageHandler.java
 index 59018d6b8..294935a0a 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/KeyExchangeMessageHandler.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/KeyExchangeMessageHandler.java
 @@ -184,7 +184,7 @@ public class KeyExchangeMessageHandler {
             if (numPending == 0) {
                 kexFlushed = true;
             }
-            return new SimpleImmutableEntry<Integer, \
DefaultKeyExchangeFuture>(Integer.valueOf(numPending), kexFlushedFuture); +           \
return new SimpleImmutableEntry<>(Integer.valueOf(numPending), kexFlushedFuture);  \
});  }
 
@@ -518,9 +518,7 @@ public class KeyExchangeMessageHandler {
                 }
                 // Connect all futures of packets that we wrote. We do this at the \
                end instead of one-by-one inside the
                 // loop to minimize the risk that woken up threads waiting on these \
                futures queue up additional packets.
-                pendingFutures.forEach(e -> {
-                    e.getValue().addListener(e.getKey());
-                });
+                pendingFutures.forEach(e -> e.getValue().addListener(e.getKey()));
             }
         });
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/SshServer.java \
b/sshd-core/src/main/java/org/apache/sshd/server/SshServer.java index \
                1bb2ffa86..8900d2dd0 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/SshServer.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/SshServer.java
@@ -332,7 +332,7 @@ public class SshServer extends AbstractFactoryManager implements \
ServerFactoryMa  if (port == 0) {
                         SocketAddress selectedAddress = \
                GenericUtils.head(acceptor.getBoundAddresses());
                         port = ((InetSocketAddress) selectedAddress).getPort();
-                        log.info("start() listen on auto-allocated port=" + port);
+                        log.info("start() listen on auto-allocated port={}", port);
                     }
                 }
             }
@@ -341,7 +341,7 @@ public class SshServer extends AbstractFactoryManager implements \
ServerFactoryMa  if (port == 0) {
                 SocketAddress selectedAddress = \
GenericUtils.head(acceptor.getBoundAddresses());  port = ((InetSocketAddress) \
                selectedAddress).getPort();
-                log.info("start() listen on auto-allocated port=" + port);
+                log.info("start() listen on auto-allocated port={}", port);
             }
         }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/AsyncAuthException.java \
b/sshd-core/src/main/java/org/apache/sshd/server/auth/AsyncAuthException.java index \
                ade64d8af..105463bb1 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/AsyncAuthException.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/AsyncAuthException.java
@@ -31,7 +31,7 @@ public class AsyncAuthException extends RuntimeSshException {
 
     private static final long serialVersionUID = 6741236101797649869L;
 
-    protected Object listener;
+    protected transient Object listener;
     protected Boolean authed;
 
     public AsyncAuthException() {
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java \
b/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java index \
                72fa92cc1..0c8db6863 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java
@@ -120,7 +120,7 @@ public class UserAuthGSS extends AbstractUserAuth {
         } else {
             int msg = buffer.getUByte();
             if (!((msg == SshConstants.SSH_MSG_USERAUTH_INFO_RESPONSE)
-                    || ((msg == SshConstants.SSH_MSG_USERAUTH_GSSAPI_MIC)) && \
context.isEstablished())) { +                    || ((msg == \
                SshConstants.SSH_MSG_USERAUTH_GSSAPI_MIC) && \
                context.isEstablished()))) {
                 throw new SshException(SshConstants.SSH2_DISCONNECT_PROTOCOL_ERROR,
                         "Packet not supported by user authentication method: " + \
SshConstants.getCommandMessageName(msg));  }
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/AuthorizedKeyEntriesPublickeyAuthenticator.java \
b/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/AuthorizedKeyEntriesPublickeyAuthenticator.java
 index cb8dc478a..8650aa8f9 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/AuthorizedKeyEntriesPublickeyAuthenticator.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/AuthorizedKeyEntriesPublickeyAuthenticator.java
 @@ -79,7 +79,7 @@ public class AuthorizedKeyEntriesPublickeyAuthenticator extends \
                AbstractLoggingB
     public boolean authenticate(String username, PublicKey key, ServerSession \
session) {  if (MapEntryUtils.isEmpty(resolvedKeys)) {
             if (log.isDebugEnabled()) {
-                log.debug("authenticate(" + username + ")[" + session + "] no \
entries"); +                log.debug("authenticate({})[{}] no entries", username, \
session);  }
 
             return false;
@@ -88,7 +88,7 @@ public class AuthorizedKeyEntriesPublickeyAuthenticator extends \
                AbstractLoggingB
         for (Map.Entry<AuthorizedKeyEntry, PublicKey> e : resolvedKeys.entrySet()) {
             if (KeyUtils.compareKeys(key, e.getValue())) {
                 if (log.isDebugEnabled()) {
-                    log.debug("authenticate(" + username + ")[" + session + "] match \
found"); +                    log.debug("authenticate({})[{}] match found", username, \
session);  }
                 if (session != null) {
                     session.setAttribute(AUTHORIZED_KEY, e.getKey());
@@ -98,7 +98,7 @@ public class AuthorizedKeyEntriesPublickeyAuthenticator extends \
AbstractLoggingB  }
 
         if (log.isDebugEnabled()) {
-            log.debug("authenticate(" + username + ")[" + session + "] match not \
found"); +            log.debug("authenticate({})[{}] match not found", username, \
session);  }
         return false;
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/KeySetPublickeyAuthenticator.java \
b/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/KeySetPublickeyAuthenticator.java
 index a48f5a3bf..3eb87d50c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/KeySetPublickeyAuthenticator.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/KeySetPublickeyAuthenticator.java
 @@ -59,7 +59,7 @@ public class KeySetPublickeyAuthenticator extends \
                AbstractLoggingBean implements
     public boolean authenticate(String username, PublicKey key, ServerSession \
session, Collection<? extends PublicKey> keys) {  if (GenericUtils.isEmpty(keys)) {
             if (log.isDebugEnabled()) {
-                log.debug("authenticate(" + username + ")[" + session + "] no \
keys"); +                log.debug("authenticate({})[{}] no keys", username, \
session);  }
 
             return false;
@@ -68,7 +68,7 @@ public class KeySetPublickeyAuthenticator extends \
AbstractLoggingBean implements  PublicKey matchKey = KeyUtils.findMatchingKey(key, \
keys);  boolean matchFound = matchKey != null;
         if (log.isDebugEnabled()) {
-            log.debug("authenticate(" + username + ")[" + session + "] match found=" \
+ matchFound); +            log.debug("authenticate({})[{}] match found={}", \
username, session, matchFound);  }
         return matchFound;
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java \
b/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java \
                index 310a8e47c..ff04db301 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java
@@ -73,10 +73,8 @@ public class PuttyRequestHandler extends \
AbstractChannelRequestHandler {  }
 
         if (log.isDebugEnabled()) {
-            log.debug("processPuttyOpcode(" + opcode + ")"
-                      + "[buffer size=" + buffer.available() + "]"
-                      + "[reply=" + wantReply + "]"
-                      + " Unknown request: " + request);
+            log.debug("processPuttyOpcode({})[buffer size={}] [reply={}] Unknown \
request: {}", opcode, buffer.available(), +                    wantReply, request);
         }
 
         return Result.ReplyFailure;
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractCommandSupport.java \
b/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractCommandSupport.java \
                index 55dc4a7f3..9618d7352 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractCommandSupport.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractCommandSupport.java
 @@ -159,11 +159,7 @@ public abstract class AbstractCommandSupport
                 this.run();
             });
         } catch (RuntimeException e) { // e.g., RejectedExecutionException
-            log.error("start(" + channel + ")"
-                      + " Failed (" + e.getClass().getSimpleName() + ")"
-                      + " to start command=" + cmd + ": " + e.getMessage(),
-                    e);
-            throw new IOException(e);
+            throw new IOException("start(" + channel + ") failed to start command " \
+ cmd, e);  }
     }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractFileSystemCommand.java \
b/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractFileSystemCommand.java
 index 970e39d3c..8be966b4e 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractFileSystemCommand.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractFileSystemCommand.java
 @@ -35,7 +35,7 @@ public abstract class AbstractFileSystemCommand extends \
AbstractCommandSupport i  
     protected FileSystem fileSystem;
 
-    public AbstractFileSystemCommand(String command, CloseableExecutorService \
executorService) { +    protected AbstractFileSystemCommand(String command, \
CloseableExecutorService executorService) {  super(command, executorService);
     }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/forward/DirectTcpipFactory.java \
b/sshd-core/src/main/java/org/apache/sshd/server/forward/DirectTcpipFactory.java \
                index 4bcd713d2..c66978d2c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/forward/DirectTcpipFactory.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/forward/DirectTcpipFactory.java
@@ -28,6 +28,6 @@ public class DirectTcpipFactory extends TcpipFactory {
     public static final DirectTcpipFactory INSTANCE = new DirectTcpipFactory();
 
     public DirectTcpipFactory() {
-        super(ForwardingFilter.Type.Direct);
+        super(TcpForwardingFilter.Type.Direct);
     }
 }
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/forward/ForwardedTcpipFactory.java \
b/sshd-core/src/main/java/org/apache/sshd/server/forward/ForwardedTcpipFactory.java \
                index 15ef75b49..4975e16dd 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/forward/ForwardedTcpipFactory.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/server/forward/ForwardedTcpipFactory.java
 @@ -28,6 +28,6 @@ public class ForwardedTcpipFactory extends TcpipFactory {
     public static final ForwardedTcpipFactory INSTANCE = new \
ForwardedTcpipFactory();  
     public ForwardedTcpipFactory() {
-        super(ForwardingFilter.Type.Forwarded);
+        super(TcpForwardingFilter.Type.Forwarded);
     }
 }
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/forward/StaticDecisionForwardingFilter.java \
b/sshd-core/src/main/java/org/apache/sshd/server/forward/StaticDecisionForwardingFilter.java
 index fb8a1cef8..29e7d6542 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/forward/StaticDecisionForwardingFilter.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/server/forward/StaticDecisionForwardingFilter.java
 @@ -68,7 +68,7 @@ public class StaticDecisionForwardingFilter extends \
                AbstractLoggingBean implemen
     protected boolean checkAcceptance(String request, Session session, \
SshdSocketAddress target) {  boolean accepted = isAccepted();
         if (log.isDebugEnabled()) {
-            log.debug("checkAcceptance(" + request + ")[" + session + "] acceptance \
for target=" + target + " is " + accepted); +            \
log.debug("checkAcceptance({})[{}] acceptance for target={} is {}", request, session, \
target, accepted);  }
         return accepted;
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java \
b/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java \
                index f4faf24a0..f71dba90e 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java
@@ -65,13 +65,13 @@ public class TcpipServerChannel extends AbstractServerChannel \
implements Forward  
     public abstract static class TcpipFactory implements ChannelFactory, \
ExecutorServiceCarrier {  
-        private final ForwardingFilter.Type type;
+        private final TcpForwardingFilter.Type type;
 
-        protected TcpipFactory(ForwardingFilter.Type type) {
+        protected TcpipFactory(TcpForwardingFilter.Type type) {
             this.type = type;
         }
 
-        public final ForwardingFilter.Type getType() {
+        public final TcpForwardingFilter.Type getType() {
             return type;
         }
 
@@ -91,7 +91,7 @@ public class TcpipServerChannel extends AbstractServerChannel \
implements Forward  }
     }
 
-    private final ForwardingFilter.Type type;
+    private final TcpForwardingFilter.Type type;
     private IoConnector connector;
     private ChannelToPortHandler port;
     private ChannelAsyncOutputStream out;
@@ -100,12 +100,12 @@ public class TcpipServerChannel extends AbstractServerChannel \
implements Forward  private SshdSocketAddress originatorAddress;
     private SocketAddress localAddress;
 
-    public TcpipServerChannel(ForwardingFilter.Type type, CloseableExecutorService \
executor) { +    public TcpipServerChannel(TcpForwardingFilter.Type type, \
CloseableExecutorService executor) {  super("", Collections.emptyList(), executor);
         this.type = Objects.requireNonNull(type, "No channel type specified");
     }
 
-    public ForwardingFilter.Type getTcpipChannelType() {
+    public TcpForwardingFilter.Type getTcpipChannelType() {
         return type;
     }
 
@@ -178,8 +178,7 @@ public class TcpipServerChannel extends AbstractServerChannel \
implements Forward  try {
             if ((address == null) || (filter == null) || \
(!filter.canConnect(channelType, address, session))) {  if (debugEnabled) {
-                    log.debug(
-                            "doInit(" + this + ")[" + type + "][haveFilter=" + \
(filter != null) + "] filtered out " + address); +                    \
log.debug("doInit({})[{}][haveFilter={}] filtered out {}", this, type, filter != \
null, address);  }
                 try {
                     f.setException(new SshChannelOpenException(getChannelId(),
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java \
b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java \
                index d56e231e9..06b44d593 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java
                
+++ b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java
 @@ -533,11 +533,9 @@ public class ServerUserAuthService extends AbstractCloseable \
                implements Service,
             if (CoreModuleProperties.AUTO_WELCOME_BANNER_VALUE.equalsIgnoreCase(message)) \
{  try {
                     return KeyRandomArt.combine(session, ' ', \
session.getKeyPairProvider()); +                } catch (IOException e) {
+                    throw e;
                 } catch (Exception e) {
-                    if (e instanceof IOException) {
-                        throw (IOException) e;
-                    }
-
                     throw new IOException(e);
                 }
             }
diff --git a/sshd-core/src/test/java/org/apache/sshd/common/channel/ChannelPipedInputStreamTest.java \
b/sshd-core/src/test/java/org/apache/sshd/common/channel/ChannelPipedInputStreamTest.java
 index 59abec810..1fdd47092 100644
--- a/sshd-core/src/test/java/org/apache/sshd/common/channel/ChannelPipedInputStreamTest.java
                
+++ b/sshd-core/src/test/java/org/apache/sshd/common/channel/ChannelPipedInputStreamTest.java
 @@ -83,7 +83,7 @@ public class ChannelPipedInputStreamTest extends BaseTestSupport {
         } else {
             assertArrayEquals("Mismatched stream content", expected, \
Arrays.copyOf(read, expected.length));  for (int i = expected.length; i < \
                read.length; i++) {
-                assertTrue("Non-zero value at position " + i, read[i] == 0);
+                assertEquals("Non-zero value at position " + i, 0, read[i]);
             }
         }
     }
diff --git a/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommand.java \
b/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommand.java index \
                3e96e3f9e..7aa60b43f 100644
--- a/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommand.java
+++ b/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommand.java
@@ -20,7 +20,6 @@
 package org.apache.sshd.git;
 
 import java.io.OutputStream;
-import java.nio.file.FileSystem;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -43,7 +42,6 @@ public abstract class AbstractGitCommand
     public static final int ENDQUOTE = 0x008;
 
     protected final GitLocationResolver rootDirResolver;
-    protected FileSystem fileSystem;
 
     protected AbstractGitCommand(GitLocationResolver rootDirResolver, String \
                command,
                                  CloseableExecutorService executorService) {
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 \
                e9f2de8eb..bd102014b 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
@@ -65,7 +65,6 @@ public class GitPackCommand extends AbstractGitCommand {
                 }
                 if (argVal.startsWith("\"") && argVal.endsWith("\"")) {
                     args[i] = argVal.substring(1, argVal.length() - 1);
-                    argVal = args[i];
                 }
             }
 
@@ -100,8 +99,7 @@ public class GitPackCommand extends AbstractGitCommand {
         int len = GenericUtils.length(pathArg);
         // Strip any leading path separator since we use relative to root
         if ((len > 0) && (pathArg.charAt(0) == '/')) {
-            pathArg = (len > 1) ? pathArg.substring(1) : "";
-            len--;
+            pathArg = pathArg.substring(1);
         }
 
         ValidateUtils.checkNotNullAndNotEmpty(pathArg, "No %s command sub-path \
                specified", args[0]);
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 \
                73349e583..7d13da89a 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
@@ -62,7 +62,6 @@ public class GitPgmCommand extends AbstractGitCommand {
 
                 if (argVal.startsWith("\"") && argVal.endsWith("\"")) {
                     args[i] = argVal.substring(1, argVal.length() - 1);
-                    argVal = args[i];
                 }
             }
 
diff --git a/sshd-openpgp/src/main/java/org/apache/sshd/openpgp/PGPAuthorizedEntriesTracker.java \
b/sshd-openpgp/src/main/java/org/apache/sshd/openpgp/PGPAuthorizedEntriesTracker.java \
                index 8788b1876..df4c7fec8 100644
--- a/sshd-openpgp/src/main/java/org/apache/sshd/openpgp/PGPAuthorizedEntriesTracker.java
                
+++ b/sshd-openpgp/src/main/java/org/apache/sshd/openpgp/PGPAuthorizedEntriesTracker.java
 @@ -78,7 +78,7 @@ public class PGPAuthorizedEntriesTracker
         this.keyFiles = GenericUtils.isEmpty(keys)
                 ? new ArrayList<>()
                 : keys.stream()
-                        .map(k -> new PGPPublicKeyFileWatcher(k))
+                        .map(PGPPublicKeyFileWatcher::new)
                         .collect(Collectors.toCollection(() -> new \
ArrayList<>(keys.size())));  }
 
diff --git a/sshd-openpgp/src/main/java/org/apache/sshd/openpgp/PGPKeyPairResourceParser.java \
b/sshd-openpgp/src/main/java/org/apache/sshd/openpgp/PGPKeyPairResourceParser.java \
                index f0d853e21..e8d2eeda7 100644
--- a/sshd-openpgp/src/main/java/org/apache/sshd/openpgp/PGPKeyPairResourceParser.java
                
+++ b/sshd-openpgp/src/main/java/org/apache/sshd/openpgp/PGPKeyPairResourceParser.java
 @@ -117,12 +117,10 @@ public class PGPKeyPairResourceParser
 
                 Key key = PGPKeyLoader.loadPGPKey(stream, password);
                 keys = extractKeyPairs(resourceKey, key.getSubkeys());
-                key = null; // get rid of sensitive data a.s.a.p.
             } catch (IOException | GeneralSecurityException | PGPException | \
RuntimeException e) {  ResourceDecodeResult result = (passwordProvider != null)
                         ? passwordProvider.handleDecodeAttemptResult(session, \
resourceKey, retryCount, password, e)  : ResourceDecodeResult.TERMINATE;
-                password = null; // get rid of sensitive data a.s.a.p.
                 if (result == null) {
                     result = ResourceDecodeResult.TERMINATE;
                 }
@@ -150,7 +148,6 @@ public class PGPKeyPairResourceParser
 
             if (passwordProvider != null) {
                 passwordProvider.handleDecodeAttemptResult(session, resourceKey, \
                retryCount, password, null);
-                password = null; // get rid of sensitive data a.s.a.p.
             }
 
             return keys;
diff --git a/sshd-scp/src/main/java/org/apache/sshd/scp/client/AbstractScpClientCreator.java \
b/sshd-scp/src/main/java/org/apache/sshd/scp/client/AbstractScpClientCreator.java \
                index fa68bbe53..2f0f21a9f 100644
--- a/sshd-scp/src/main/java/org/apache/sshd/scp/client/AbstractScpClientCreator.java
+++ b/sshd-scp/src/main/java/org/apache/sshd/scp/client/AbstractScpClientCreator.java
@@ -37,7 +37,7 @@ public abstract class AbstractScpClientCreator extends \
AbstractLoggingBean imple  this("");
     }
 
-    public AbstractScpClientCreator(String discriminator) {
+    protected AbstractScpClientCreator(String discriminator) {
         super(discriminator);
     }
 
diff --git a/sshd-scp/src/main/java/org/apache/sshd/scp/common/ScpHelper.java \
b/sshd-scp/src/main/java/org/apache/sshd/scp/common/ScpHelper.java index \
                bcefee69f..0973df780 100644
--- a/sshd-scp/src/main/java/org/apache/sshd/scp/common/ScpHelper.java
+++ b/sshd-scp/src/main/java/org/apache/sshd/scp/common/ScpHelper.java
@@ -668,9 +668,7 @@ public class ScpHelper extends AbstractLoggingBean implements \
SessionHolder<Sess  
             ScpAckInfo ackInfo = sendAcknowledgedCommand(cmd);
             if (debugEnabled) {
-                if (debugEnabled) {
-                    log.debug("sendDir({})[{}] command='{}' ACK={}", this, path, \
                cmd, ackInfo);
-                }
+                log.debug("sendDir({})[{}] command='{}' ACK={}", this, path, cmd, \
ackInfo);  }
             validateAckReplyCode(cmd, path, ackInfo);
         }
diff --git a/sshd-scp/src/main/java/org/apache/sshd/scp/common/helpers/LocalFileScpTargetStreamResolver.java \
b/sshd-scp/src/main/java/org/apache/sshd/scp/common/helpers/LocalFileScpTargetStreamResolver.java
 index c04aa0492..a501a68f9 100644
--- a/sshd-scp/src/main/java/org/apache/sshd/scp/common/helpers/LocalFileScpTargetStreamResolver.java
                
+++ b/sshd-scp/src/main/java/org/apache/sshd/scp/common/helpers/LocalFileScpTargetStreamResolver.java
 @@ -108,7 +108,7 @@ public class LocalFileScpTargetStreamResolver extends \
AbstractLoggingBean implem  }
 
         if (log.isTraceEnabled()) {
-            log.trace("resolveTargetStream(" + name + "): " + file);
+            log.trace("resolveTargetStream({}): {}", name, file);
         }
 
         return opener.openWrite(session, file, length, perms, options);
@@ -119,7 +119,7 @@ public class LocalFileScpTargetStreamResolver extends \
                AbstractLoggingBean implem
             Session session, String name, long length, Set<PosixFilePermission> \
perms, OutputStream stream)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("closeTargetStream(" + name + "): " + file);
+            log.trace("closeTargetStream({}): {}", name, file);
         }
 
         opener.closeWrite(session, file, length, perms, stream);
@@ -153,7 +153,7 @@ public class LocalFileScpTargetStreamResolver extends \
AbstractLoggingBean implem  throws IOException {
         boolean traceEnabled = log.isTraceEnabled();
         if (traceEnabled) {
-            log.trace("updateFileProperties(" + name + ")[" + path + "] permissions: \
" + perms); +            log.trace("updateFileProperties({})[{}] permissions: {}", \
name, path, perms);  }
         IoUtils.setPermissions(path, perms);
 
@@ -162,8 +162,8 @@ public class LocalFileScpTargetStreamResolver extends \
                AbstractLoggingBean implem
             FileTime lastModified = FileTime.from(time.getLastModifiedTime(), \
                TimeUnit.MILLISECONDS);
             FileTime lastAccess = FileTime.from(time.getLastAccessTime(), \
TimeUnit.MILLISECONDS);  if (traceEnabled) {
-                log.trace("updateFileProperties(" + name + ")[" + path + "] \
                last-modified=" + lastModified + ", last-access="
-                          + lastAccess);
+                log.trace("updateFileProperties({})[{}] last-modified={}, \
last-access={}", name, path, lastModified, +                        lastAccess);
             }
 
             view.setTimes(lastModified, lastAccess, null);
diff --git a/sshd-scp/src/main/java/org/apache/sshd/scp/common/helpers/ScpIoUtils.java \
b/sshd-scp/src/main/java/org/apache/sshd/scp/common/helpers/ScpIoUtils.java index \
                38552befa..daa48ab9f 100644
--- a/sshd-scp/src/main/java/org/apache/sshd/scp/common/helpers/ScpIoUtils.java
+++ b/sshd-scp/src/main/java/org/apache/sshd/scp/common/helpers/ScpIoUtils.java
@@ -122,9 +122,8 @@ public final class ScpIoUtils {
             long endTime = System.nanoTime();
             long nanosWait = endTime - startTime;
             if ((log != null) && log.isTraceEnabled()) {
-                log.trace("openCommandChannel(" + session + ")[" + cmd + "]"
-                          + " completed after " + nanosWait
-                          + " nanos out of " + waitTimeout.toNanos());
+                log.trace("openCommandChannel({})[{}] completed after {} nanos out \
of {}", session, cmd, nanosWait, +                        waitTimeout.toNanos());
             }
 
             return channel;
@@ -132,11 +131,8 @@ public final class ScpIoUtils {
             long endTime = System.nanoTime();
             long nanosWait = endTime - startTime;
             if ((log != null) && log.isTraceEnabled()) {
-                log.trace("openCommandChannel(" + session + ")[" + cmd + "]"
-                          + " failed (" + e.getClass().getSimpleName() + ")"
-                          + " to complete after " + nanosWait
-                          + " nanos out of " + waitTimeout.toNanos()
-                          + ": " + e.getMessage());
+                log.trace("openCommandChannel({})[{}] failed after {} nanos out of \
{}: {}", session, cmd, nanosWait, +                        waitTimeout.toNanos(), \
e.toString());  }
 
             channel.close(false);
diff --git a/sshd-scp/src/main/java/org/apache/sshd/scp/server/InputStreamReader.java \
b/sshd-scp/src/main/java/org/apache/sshd/scp/server/InputStreamReader.java index \
                c15801806..d50ca7ef3 100644
--- a/sshd-scp/src/main/java/org/apache/sshd/scp/server/InputStreamReader.java
+++ b/sshd-scp/src/main/java/org/apache/sshd/scp/server/InputStreamReader.java
@@ -53,7 +53,7 @@ import java.nio.charset.UnmappableCharacterException;
  * characters by either a default or a provided character converter. The default \
                encoding is taken from the
  * "file.encoding" system property. {@code InputStreamReader} contains a buffer of \
                bytes read from the source stream and
  * converts these into characters as needed. The buffer size is 8K.
- * 
+ *
  * @see OutputStreamWriter
  */
 public class InputStreamReader extends Reader {
@@ -74,7 +74,7 @@ public class InputStreamReader extends Reader {
      * Constructs a new {@code InputStreamReader} on the {@link InputStream} {@code \
                in}. This constructor sets the
      * character converter to the encoding specified in the "file.encoding" property \
                and falls back to ISO 8859_1
      * (ISO-Latin-1) if the property doesn't exist.
-     * 
+     *
      * @param in the input stream from which to read characters.
      */
     public InputStreamReader(InputStream in) {
@@ -90,7 +90,7 @@ public class InputStreamReader extends Reader {
      * Constructs a new InputStreamReader on the InputStream {@code in}. The \
                character converter that is used to decode
      * bytes into characters is identified by name by {@code enc}. If the encoding \
                cannot be found, an
      * UnsupportedEncodingException error is thrown.
-     * 
+     *
      * @param  in                           the InputStream from which to read \
                characters.
      * @param  enc                          identifies the character converter to \
                use.
      * @throws NullPointerException         if {@code enc} is {@code null}.
@@ -115,7 +115,7 @@ public class InputStreamReader extends Reader {
 
     /**
      * Constructs a new InputStreamReader on the InputStream {@code in} and \
                CharsetDecoder {@code dec}.
-     * 
+     *
      * @param in  the source InputStream from which to read characters.
      * @param dec the CharsetDecoder used by the character conversion.
      */
@@ -129,7 +129,7 @@ public class InputStreamReader extends Reader {
 
     /**
      * Constructs a new InputStreamReader on the InputStream {@code in} and Charset \
                {@code charset}.
-     * 
+     *
      * @param in      the source InputStream from which to read characters.
      * @param charset the Charset that defines the character converter
      */
@@ -144,7 +144,7 @@ public class InputStreamReader extends Reader {
 
     /**
      * Closes this reader. This implementation closes the source InputStream and \
                releases all local storage.
-     * 
+     *
      * @throws IOException if an error occurs attempting to close this reader.
      */
     @Override
@@ -161,7 +161,7 @@ public class InputStreamReader extends Reader {
     /**
      * Returns the name of the encoding used to convert bytes into characters. The \
                value {@code null} is returned if
      * this reader has been closed.
-     * 
+     *
      * @return the name of the character converter or {@code null} if this reader is \
                closed.
      */
     public String getEncoding() {
@@ -175,7 +175,7 @@ public class InputStreamReader extends Reader {
      * Reads a single character from this reader and returns it as an integer with \
                the two higher-order bytes set to 0.
      * Returns -1 if the end of the reader has been reached. The byte value is \
                either obtained from converting bytes in
      * this reader's buffer or by first filling the buffer from the source \
                InputStream and then reading from the buffer.
-     * 
+     *
      * @return             the character read or -1 if the end of the reader has \
                been reached.
      * @throws IOException if this reader is closed or some other I/O error occurs.
      */
@@ -191,7 +191,7 @@ public class InputStreamReader extends Reader {
                 pending = (char) -1;
                 return c;
             }
-            char buf[] = new char[2];
+            char[] buf = new char[2];
             int nb = read(buf, 0, 2);
             if (nb == 2) {
                 pending = buf[1];
@@ -209,7 +209,7 @@ public class InputStreamReader extends Reader {
      * character array {@code buf}. Returns the number of characters actually read \
                or -1 if the end of the reader has
      * been reached. The bytes are either obtained from converting bytes in this \
                reader's buffer or by first filling the
      * buffer from the source InputStream and then reading from the buffer.
-     * 
+     *
      * @param  buf                       the array to store the characters read.
      * @param  offset                    the initial position in {@code buf} to \
                store the characters read from this
      *                                   reader.
@@ -308,7 +308,7 @@ public class InputStreamReader extends Reader {
      * {@code read()} will not block. If the result is {@code false} then this \
                reader may or may not block when
      * {@code read()} is called. This implementation returns {@code true} if there \
                are bytes available in the buffer or
      * the source stream has bytes available.
-     * 
+     *
      * @return             {@code true} if the receiver will not block when {@code \
                read()} is called, {@code false} if
      *                     unknown or blocking will occur.
      * @throws IOException if this reader is closed or some other I/O error occurs.
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/helpers/AbstractSftpClientExtension.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/helpers/AbstractSftpClientExtension.java
 index 5a487ed55..4bff81d54 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/helpers/AbstractSftpClientExtension.java
                
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/helpers/AbstractSftpClientExtension.java
 @@ -77,7 +77,7 @@ public abstract class AbstractSftpClientExtension extends \
                AbstractLoggingBean im
     protected void sendAndCheckExtendedCommandStatus(Buffer buffer) throws \
IOException {  int reqId = sendExtendedCommand(buffer);
         if (log.isDebugEnabled()) {
-            log.debug("sendAndCheckExtendedCommandStatus(" + getName() + ") id=" + \
reqId); +            log.debug("sendAndCheckExtendedCommandStatus({}) id={}", \
getName(), reqId);  }
         checkStatus(receive(reqId));
     }
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpClientDirectoryScanner.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpClientDirectoryScanner.java
 index cb5287e82..b0fbbf166 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpClientDirectoryScanner.java
                
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpClientDirectoryScanner.java
 @@ -97,7 +97,7 @@ public class SftpClientDirectoryScanner extends \
PathScanningMatcher {  ? Collections.emptyList()
                 : Collections.unmodifiableList(
                         includes.stream()
-                                .map(v -> SftpPathDirectoryScanner.adjustPattern(v))
+                                .map(SftpPathDirectoryScanner::adjustPattern)
                                 .collect(Collectors.toCollection(() -> new \
ArrayList<>(includes.size()))));  }
 
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpFileSystemProvider.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpFileSystemProvider.java \
                index 199664cc2..4ea058e69 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpFileSystemProvider.java
                
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpFileSystemProvider.java
 @@ -794,7 +794,7 @@ public class SftpFileSystemProvider extends FileSystemProvider {
         try (SftpClient client = fsLink.getClient()) {
             String linkPath = client.readLink(l.toString());
             if (log.isDebugEnabled()) {
-                log.debug("readSymbolicLink({})[{}] {} => {}", fsLink, link, \
linkPath); +                log.debug("readSymbolicLink({}) {} => {}", fsLink, link, \
linkPath);  }
 
             return fsLink.getPath(linkPath);
@@ -1196,7 +1196,7 @@ public class SftpFileSystemProvider extends FileSystemProvider \
{  break;
                 default:
                     if (traceEnabled) {
-                        log.trace("attributesToPermissions(" + path + ") ignored " + \
p); +                        log.trace("attributesToPermissions({}) ignored {}", \
path, p);  }
             }
         }
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpPathDirectoryScanner.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpPathDirectoryScanner.java
 index 6bc13dee0..ed2a79010 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpPathDirectoryScanner.java
                
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/fs/SftpPathDirectoryScanner.java
 @@ -79,7 +79,7 @@ public class SftpPathDirectoryScanner extends DirectoryScanner {
                 ? Collections.emptyList()
                 : Collections.unmodifiableList(
                         includes.stream()
-                                .map(v -> adjustPattern(v))
+                                .map(SftpPathDirectoryScanner::adjustPattern)
                                 .collect(Collectors.toCollection(() -> new \
ArrayList<>(includes.size()))));  }
 
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/DefaultSftpClient.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/DefaultSftpClient.java \
                index 15a42c9a8..f0c1243db 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/DefaultSftpClient.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/DefaultSftpClient.java
@@ -493,7 +493,7 @@ public class DefaultSftpClient extends AbstractSftpClient {
 
         Map<String, ?> parsed = getParsedServerExtensions();
         Collection<String> extensions = ParserUtils.supportedExtensions(parsed);
-        List<Integer> availableVersions = Collections.emptyList();
+        List<Integer> availableVersions;
         if ((GenericUtils.size(extensions) > 0)
                 && extensions.contains(SftpConstants.EXT_VERSION_SELECT)) {
             Versions vers = MapEntryUtils.isEmpty(parsed)
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpDirEntryIterator.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpDirEntryIterator.java \
                index a8d2c644b..fea1a4289 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpDirEntryIterator.java
                
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpDirEntryIterator.java
 @@ -141,7 +141,7 @@ public class SftpDirEntryIterator extends AbstractLoggingBean \
implements SftpCli  Handle handle = getHandle();
             if ((handle instanceof Closeable) && isCloseOnFinished()) {
                 if (log.isDebugEnabled()) {
-                    log.debug("close(" + getPath() + ") handle=" + handle);
+                    log.debug("close({}) handle={}", getPath(), handle);
                 }
                 ((Closeable) handle).close();
             }
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpInputStreamAsync.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpInputStreamAsync.java \
                index d52b005dd..8be006ff8 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpInputStreamAsync.java
                
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpInputStreamAsync.java
 @@ -162,9 +162,7 @@ public class SftpInputStreamAsync extends InputStreamWithChannel \
                implements Sftp
             throw new IOException("transferTo(" + getPath() + ") stream closed");
         }
 
-        long numXfered = doRead(Long.MAX_VALUE, buf -> {
-            out.write(buf.array(), buf.rpos(), buf.available());
-        });
+        long numXfered = doRead(Long.MAX_VALUE, buf -> out.write(buf.array(), \
buf.rpos(), buf.available()));  if (log.isDebugEnabled()) {
             log.debug("transferTo({}) transferred {} bytes", this, numXfered);
         }
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpOutputStreamAsync.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpOutputStreamAsync.java \
                index a9da91724..623f4a3f8 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpOutputStreamAsync.java
                
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpOutputStreamAsync.java
 @@ -176,7 +176,7 @@ public class SftpOutputStreamAsync extends \
                OutputStreamWithChannel implements Sf
                 log.debug("flush({}) processing ack #{}: {}", this, ackIndex, ack);
             }
 
-            ack = pendingWrites.removeFirst();
+            pendingWrites.removeFirst();
             client.checkResponseStatus(SftpConstants.SSH_FXP_WRITE, response);
         }
 
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/SftpHelper.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/SftpHelper.java index \
                a39415008..e14b9a55a 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/SftpHelper.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/SftpHelper.java
@@ -1003,15 +1003,15 @@ public final class SftpHelper {
         return mask;
     }
 
-    public static <B extends Buffer> B writeACLs(B buffer, int version, Collection<? \
extends AclEntry> acl) { +    public static <B extends Buffer> B writeACLs(B buffer, \
int version, Collection<AclEntry> acl) {  int lenPos = buffer.wpos();
         buffer.putUInt(0L); // length placeholder
-        buffer = encodeACLs(buffer, version, acl);
+        encodeACLs(buffer, version, acl);
         BufferUtils.updateLengthPlaceholder(buffer, lenPos);
         return buffer;
     }
 
-    public static <B extends Buffer> B encodeACLs(B buffer, int version, \
Collection<? extends AclEntry> acl) { +    public static <B extends Buffer> B \
encodeACLs(B buffer, int version, Collection<AclEntry> acl) {  \
Objects.requireNonNull(acl, "No ACL");  if (version >= SftpConstants.SFTP_V6) {
             buffer.putUInt(0L); // TODO handle ACL flags
@@ -1021,7 +1021,7 @@ public final class SftpHelper {
         buffer.putInt(numEntries);
         if (numEntries > 0) {
             for (AclEntry e : acl) {
-                buffer = writeAclEntry(buffer, e);
+                writeAclEntry(buffer, e);
             }
         }
 
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpEventListenerAdapter.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpEventListenerAdapter.java
 index 43f2e0657..565807c5c 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpEventListenerAdapter.java
                
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpEventListenerAdapter.java
 @@ -51,14 +51,14 @@ public abstract class AbstractSftpEventListenerAdapter extends \
AbstractLoggingBe  @Override
     public void initialized(ServerSession session, int version) throws IOException {
         if (log.isDebugEnabled()) {
-            log.debug("initialized(" + session + ") version=" + version);
+            log.debug("initialized({}) version={}", session, version);
         }
     }
 
     @Override
     public void destroying(ServerSession session) throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("destroying(" + session + ")");
+            log.trace("destroying({})", session);
         }
     }
 
@@ -66,8 +66,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void opening(ServerSession session, String remoteHandle, Handle \
localHandle) throws IOException {  if (log.isTraceEnabled()) {
             Path path = localHandle.getFile();
-            log.trace("opening(" + session + ")[" + remoteHandle + "] " + \
                (Files.isDirectory(path) ? "directory" : "file") + " "
-                      + path);
+            log.trace("opening({})[{}] {} {}", session, remoteHandle, \
Files.isDirectory(path) ? "directory" : "file", path);  }
     }
 
@@ -85,8 +84,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void open(ServerSession session, String remoteHandle, Handle localHandle) \
throws IOException {  if (log.isTraceEnabled()) {
             Path path = localHandle.getFile();
-            log.trace("open(" + session + ")[" + remoteHandle + "] " + \
                (Files.isDirectory(path) ? "directory" : "file") + " "
-                      + path);
+            log.trace("open({})[{}] {} {}", session, remoteHandle, \
Files.isDirectory(path) ? "directory" : "file", path);  }
     }
 
@@ -103,12 +101,12 @@ public abstract class AbstractSftpEventListenerAdapter extends \
AbstractLoggingBe  throws IOException {
         int numEntries = MapEntryUtils.size(entries);
         if (log.isDebugEnabled()) {
-            log.debug("read(" + session + ")[" + localHandle.getFile() + "] " + \
numEntries + " entries"); +            log.debug("read({})[{}] {} entries", session, \
localHandle.getFile(), numEntries);  }
 
         if ((numEntries > 0) && log.isTraceEnabled()) {
             entries.forEach(
-                    (key, value) -> log.trace("read(" + session + ")[" + \
localHandle.getFile() + "] " + key + " - " + value)); +                    (key, \
value) -> log.trace("read({})[{}] {} - {}", session, localHandle.getFile(), key, \
value));  }
     }
 
@@ -118,7 +116,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
AbstractLoggingBe  long offset, byte[] data, int dataOffset, int dataLen)
             throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("reading(" + session + ")[" + localHandle.getFile() + "] \
offset=" + offset + ", requested=" + dataLen); +            \
log.trace("reading({})[{}] offset={}, requested={}", session, localHandle.getFile(), \
offset, dataLen);  }
     }
 
@@ -129,9 +127,8 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
             long offset, byte[] data, int dataOffset, int dataLen, int readLen, \
Throwable thrown)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("read(" + session + ")[" + localHandle.getFile() + "] offset=" \
                + offset
-                      + ", requested=" + dataLen + ", read=" + readLen
-                      + ((thrown == null) ? "" : (": " + \
thrown.getClass().getSimpleName() + ": " + thrown.getMessage()))); +            \
log.trace("read({})[{}] offset={}, requested={}, read={}{}", session, \
localHandle.getFile(), offset, dataLen, +                    readLen, (thrown == \
null) ? "" : ": " + thrown);  }
     }
 
@@ -141,7 +138,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
AbstractLoggingBe  long offset, byte[] data, int dataOffset, int dataLen)
             throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("write(" + session + ")[" + localHandle.getFile() + "] \
offset=" + offset + ", requested=" + dataLen); +            \
log.trace("writing({})[{}] offset={}, requested={}", session, localHandle.getFile(), \
offset, dataLen);  }
     }
 
@@ -151,8 +148,8 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
             long offset, byte[] data, int dataOffset, int dataLen, Throwable thrown)
             throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("written(" + session + ")[" + localHandle.getFile() + "] \
                offset=" + offset + ", requested=" + dataLen
-                      + ((thrown == null) ? "" : (": " + \
thrown.getClass().getSimpleName() + ": " + thrown.getMessage()))); +            \
log.trace("written({})[{}] offset={}, requested={}{}", session, \
localHandle.getFile(), offset, dataLen, +                    (thrown == null) ? "" : \
": " + thrown);  }
     }
 
@@ -160,8 +157,8 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void blocking(ServerSession session, String remoteHandle, FileHandle \
localHandle, long offset, long length, int mask)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("blocking(" + session + ")[" + localHandle.getFile() + "]"
-                      + " offset=" + offset + ", length=" + length + ", mask=0x" + \
Integer.toHexString(mask)); +            log.trace("blocking({})[{}] offset={}, \
length={}, mask=0x{}", session, localHandle.getFile(), offset, length, +              \
Integer.toHexString(mask));  }
     }
 
@@ -171,9 +168,8 @@ public abstract class AbstractSftpEventListenerAdapter extends \
AbstractLoggingBe  Throwable thrown)
             throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("blocked(" + session + ")[" + localHandle.getFile() + "]"
-                      + " offset=" + offset + ", length=" + length + ", mask=0x" + \
                Integer.toHexString(mask)
-                      + ((thrown == null) ? "" : (": " + \
thrown.getClass().getSimpleName() + ": " + thrown.getMessage()))); +            \
log.trace("blocked({})[{}] offset={}, length={}, mask=0x{}{}", session, \
localHandle.getFile(), offset, length, +                    \
Integer.toHexString(mask), (thrown == null) ? "" : ": " + thrown);  }
     }
 
@@ -181,7 +177,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void unblocking(ServerSession session, String remoteHandle, FileHandle \
localHandle, long offset, long length)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("unblocking(" + session + ")[" + localHandle.getFile() + "] \
offset=" + offset + ", length=" + length); +            log.trace("unblocking({})[{}] \
offset={}, length={}", session, localHandle.getFile(), offset, length);  }
     }
 
@@ -190,9 +186,8 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
             ServerSession session, String remoteHandle, FileHandle localHandle, long \
offset, long length, Throwable thrown)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("unblocked(" + session + ")[" + localHandle.getFile() + "]"
-                      + " offset=" + offset + ", length=" + length
-                      + ((thrown == null) ? "" : (": " + \
thrown.getClass().getSimpleName() + ": " + thrown.getMessage()))); +            \
log.trace("unblocked({})[{}] offset={}, length={}{}", session, localHandle.getFile(), \
offset, length, +                    (thrown == null) ? "" : ": " + thrown);
         }
     }
 
@@ -200,8 +195,8 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void closing(ServerSession session, String remoteHandle, Handle \
localHandle) throws IOException {  if (log.isTraceEnabled()) {
             Path path = localHandle.getFile();
-            log.trace("close(" + session + ")[" + remoteHandle + "] " + \
                (Files.isDirectory(path) ? "directory" : "file") + " "
-                      + path);
+            log.trace("close({})[{}] {} {}", session, localHandle.getFile(), \
(Files.isDirectory(path) ? "directory" : "file"), +                    path);
         }
     }
 
@@ -209,7 +204,8 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void closed(ServerSession session, String remoteHandle, Handle \
localHandle, Throwable thrown)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("closed({}) handle={}[{}], thrown={}", session, remoteHandle, \
localHandle.getFile(), thrown); +            log.trace("closed({}) handle={}[{}]{}", \
session, remoteHandle, localHandle.getFile(), +                    (thrown == null) ? \
"" : ": " + thrown);  }
     }
 
@@ -217,7 +213,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void creating(ServerSession session, Path path, Map<String, ?> attrs)
             throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("creating(" + session + ") " + (Files.isDirectory(path) ? \
"directory" : "file") + " " + path); +            log.trace("creating({}) {} {}", \
session, (Files.isDirectory(path) ? "directory" : "file"), path);  }
     }
 
@@ -225,8 +221,8 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void created(ServerSession session, Path path, Map<String, ?> attrs, \
Throwable thrown)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("created(" + session + ") " + (Files.isDirectory(path) ? \
                "directory" : "file") + " " + path
-                      + ((thrown == null) ? "" : (": " + \
thrown.getClass().getSimpleName() + ": " + thrown.getMessage()))); +            \
log.trace("created({}) {} {}{}", session, (Files.isDirectory(path) ? "directory" : \
"file"), path, +                    (thrown == null) ? "" : ": " + thrown);
         }
     }
 
@@ -234,7 +230,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void moving(ServerSession session, Path srcPath, Path dstPath, \
Collection<CopyOption> opts)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("moving(" + session + ")[" + opts + "]" + srcPath + " => " + \
dstPath); +            log.trace("moving({})[{}] {} => {}", session, opts, srcPath, \
dstPath);  }
     }
 
@@ -242,8 +238,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void moved(ServerSession session, Path srcPath, Path dstPath, \
Collection<CopyOption> opts, Throwable thrown)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("moved(" + session + ")[" + opts + "]" + srcPath + " => " + \
                dstPath
-                      + ((thrown == null) ? "" : (": " + \
thrown.getClass().getSimpleName() + ": " + thrown.getMessage()))); +            \
log.trace("moved({})[{}] {} => {}{}", session, opts, srcPath, dstPath, (thrown == \
null) ? "" : ": " + thrown);  }
     }
 
@@ -251,7 +246,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void removing(ServerSession session, Path path, boolean isDirectory)
             throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("removing(" + session + ")[dir=" + isDirectory + "] " + path);
+            log.trace("removing({})[dir={}] {}", session, isDirectory, path);
         }
     }
 
@@ -259,8 +254,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void removed(ServerSession session, Path path, boolean isDirectory, \
Throwable thrown)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("removed(" + session + ")[dir=" + isDirectory + "] " + path
-                      + ((thrown == null) ? "" : (": " + \
thrown.getClass().getSimpleName() + ": " + thrown.getMessage()))); +            \
log.trace("removed({})[dir={}] {}{}", session, isDirectory, path, (thrown == null) ? \
"" : ": " + thrown);  }
     }
 
@@ -268,7 +262,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void linking(ServerSession session, Path source, Path target, boolean \
symLink)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("linking(" + session + ")[" + symLink + "]" + source + " => " \
+ target); +            log.trace("linking({})[{}] {} => {}", session, symLink, \
source, target);  }
     }
 
@@ -276,8 +270,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void linked(ServerSession session, Path source, Path target, boolean \
symLink, Throwable thrown)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("linked(" + session + ")[" + symLink + "]" + source + " => " + \
                target
-                      + ((thrown == null) ? "" : (": " + \
thrown.getClass().getSimpleName() + ": " + thrown.getMessage()))); +            \
log.trace("linked({})[{}] {} => {}{}", session, symLink, source, target, (thrown == \
null) ? "" : ": " + thrown);  }
     }
 
@@ -285,7 +278,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void modifyingAttributes(ServerSession session, Path path, Map<String, ?> \
attrs)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("modifyingAttributes(" + session + ") " + path + ": " + \
attrs); +            log.trace("modifyingAttributes({}) {}: {}", session, path, \
attrs);  }
     }
 
@@ -293,8 +286,7 @@ public abstract class AbstractSftpEventListenerAdapter extends \
                AbstractLoggingBe
     public void modifiedAttributes(ServerSession session, Path path, Map<String, ?> \
attrs, Throwable thrown)  throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("modifiedAttributes(" + session + ") " + path
-                      + ((thrown == null) ? "" : (": " + \
thrown.getClass().getSimpleName() + ": " + thrown.getMessage()))); +            \
log.trace("modifiedAttributes({}) {}{}", session, path, (thrown == null) ? "" : ": " \
+ thrown);  }
     }
 
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpSubsystemHelper.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpSubsystemHelper.java
 index 002ec3eac..425234e96 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpSubsystemHelper.java
                
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpSubsystemHelper.java
 @@ -2307,13 +2307,11 @@ public abstract class AbstractSftpSubsystemHelper
             accessor.putRemoteFileName(this, f, buffer, longName, false);
 
             if (log.isTraceEnabled()) {
-                log.trace("writeDirEntry(" + session + ") id=" + id + ")[" + index + \
                "] - "
-                          + shortName + " [" + longName + "]: " + attrs);
+                log.trace("writeDirEntry({} id={})[{}] - {} [{}]: {}", session, id, \
index, shortName, longName, attrs);  }
         } else {
             if (log.isTraceEnabled()) {
-                log.trace("writeDirEntry(" + session + "(id=" + id + ")[" + index + \
                "] - "
-                          + shortName + ": " + attrs);
+                log.trace("writeDirEntry({} id={})[{}] - {}: {}", session, id, \
index, shortName, attrs);  }
         }
 
@@ -2420,20 +2418,18 @@ public abstract class AbstractSftpSubsystemHelper
     protected NavigableMap<String, Object> handleUnknownStatusFileAttributes(
             Path file, int flags, LinkOption... options)
             throws IOException {
-        UnsupportedAttributePolicy unsupportedAttributePolicy = \
                getUnsupportedAttributePolicy();
-        switch (unsupportedAttributePolicy) {
+        UnsupportedAttributePolicy policy = getUnsupportedAttributePolicy();
+        switch (policy) {
             case Ignore:
                 break;
             case ThrowException:
                 throw new AccessDeniedException(file.toString(), file.toString(),
                         "Cannot determine existence for attributes of target");
             case Warn:
-                log.warn("handleUnknownStatusFileAttributes(" + getServerSession() + \
                ")[" + file
-                         + "] cannot determine existence");
+                log.warn("handleUnknownStatusFileAttributes({})[{}] cannot determine \
existence", getServerSession(), file);  break;
             default:
-                log.warn("handleUnknownStatusFileAttributes(" + getServerSession() + \
                ")[" + file + "] unknown policy: "
-                         + unsupportedAttributePolicy);
+                log.warn("handleUnknownStatusFileAttributes({})[{}] unknown policy: \
{}", getServerSession(), file, policy);  }
 
         return getAttributes(file, flags, options);
@@ -2599,20 +2595,18 @@ public abstract class AbstractSftpSubsystemHelper
             log.trace("handleReadFileAttributesException(" + file + ")[" + view + "] \
details", e);  }
 
-        UnsupportedAttributePolicy unsupportedAttributePolicy = \
                getUnsupportedAttributePolicy();
-        switch (unsupportedAttributePolicy) {
+        UnsupportedAttributePolicy policy = getUnsupportedAttributePolicy();
+        switch (policy) {
             case Ignore:
                 break;
             case Warn:
-                log.warn("handleReadFileAttributesException(" + file + ")[" + view + \
                "] " + e.getClass().getSimpleName() + ": "
-                         + e.getMessage());
+                log.warn("handleReadFileAttributesException({})[{}] {}", file, view, \
e.toString());  break;
             case ThrowException:
                 throw e;
             default:
-                log.warn("handleReadFileAttributesException(" + file + ")[" + view + \
                "]"
-                         + " Unknown policy (" + unsupportedAttributePolicy + ")"
-                         + " for " + e.getClass().getSimpleName() + ": " + \
e.getMessage()); +                log.warn("handleReadFileAttributesException({})[{}] \
Unknown policy ({}) for {}", file, view, policy, +                        \
e.toString());  }
 
         return Collections.emptyNavigableMap();
@@ -2867,17 +2861,17 @@ public abstract class AbstractSftpSubsystemHelper
         }
 
         String attrsList = GenericUtils.join(attributes, ',');
-        UnsupportedAttributePolicy unsupportedAttributePolicy = \
                getUnsupportedAttributePolicy();
-        switch (unsupportedAttributePolicy) {
+        UnsupportedAttributePolicy policy = getUnsupportedAttributePolicy();
+        switch (policy) {
             case Ignore:
                 break;
             case Warn:
-                log.warn("Unsupported attributes: " + attrsList);
+                log.warn("Unsupported attributes: {}", attrsList);
                 break;
             case ThrowException:
                 throw new UnsupportedOperationException("Unsupported attributes: " + \
attrsList);  default:
-                log.warn("Unknown policy for attributes=" + attrsList + ": " + \
unsupportedAttributePolicy); +                log.warn("Unknown policy ''{}'' for \
attributes={}", policy, attrsList);  }
     }
 
@@ -2905,8 +2899,7 @@ public abstract class AbstractSftpSubsystemHelper
             Class<? extends Principal> principalType, String name, IOException e)
             throws IOException {
         if (log.isTraceEnabled()) {
-            log.trace("handleUserPrincipalLookupServiceException(" + \
                principalType.getSimpleName() + "[" + name + "]) details",
-                    e);
+            log.trace("handleUserPrincipalLookupServiceException({})[{}] details", \
principalType.getSimpleName(), name, e);  }
 
         /*
@@ -2915,19 +2908,18 @@ public abstract class AbstractSftpSubsystemHelper
          * "Where an implementation does not support any notion of group or user \
                then this method always throws
          * UserPrincipalNotFoundException."
          */
-        UnsupportedAttributePolicy unsupportedAttributePolicy = \
                getUnsupportedAttributePolicy();
-        switch (unsupportedAttributePolicy) {
+        UnsupportedAttributePolicy policy = getUnsupportedAttributePolicy();
+        switch (policy) {
             case Ignore:
                 break;
             case Warn:
-                log.warn("handleUserPrincipalLookupServiceException(" + \
                principalType.getSimpleName() + "[" + name + "])"
-                         + " failed (" + e.getClass().getSimpleName() + "): " + \
e.getMessage()); +                \
log.warn("handleUserPrincipalLookupServiceException({})[{}] failed: {}", \
principalType.getSimpleName(), name, +                        e.toString());
                 break;
             case ThrowException:
                 throw e;
             default:
-                log.warn("Unknown policy for principal=" + \
                principalType.getSimpleName() + "[" + name + "]: "
-                         + unsupportedAttributePolicy);
+                log.warn("Unknown policy ''{}'' for principal={} [{}]", policy, \
principalType.getSimpleName(), name);  }
     }
 
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/SftpSubsystem.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/SftpSubsystem.java index \
                bbfb8f5aa..f4c12ab36 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/SftpSubsystem.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/SftpSubsystem.java
@@ -1030,7 +1030,7 @@ public class SftpSubsystem
             boolean result = pendingFuture.cancel(true);
             // TODO consider waiting some reasonable (?) amount of time for \
cancellation  if (debugEnabled) {
-                log.debug("destroy(" + session + ") - cancel pending future=" + \
result); +                log.debug("destroy({}) - cancel pending future={}", \
session, result);  }
         }
 
@@ -1040,7 +1040,7 @@ public class SftpSubsystem
         if ((executors != null) && (!executors.isShutdown())) {
             Collection<Runnable> runners = executors.shutdownNow();
             if (debugEnabled) {
-                log.debug("destroy(" + session + ") - shutdown executor service - \
runners count=" + runners.size()); +                log.debug("destroy({}) - shutdown \
executor service - runners count={}", session, runners.size());  }
         }
         this.executorService = null;
@@ -1049,14 +1049,11 @@ public class SftpSubsystem
             fileSystem.close();
         } catch (UnsupportedOperationException e) {
             if (debugEnabled) {
-                log.debug("destroy(" + session + ") closing the file system is not \
supported"); +                log.debug("destroy({}) closing the file system is not \
supported", session);  }
         } catch (IOException e) {
             if (debugEnabled) {
-                log.warn("destroy(" + session + ")"
-                         + " failed (" + e.getClass().getSimpleName() + ")"
-                         + " to close file system: " + e.getMessage(),
-                        e);
+                log.warn("destroy({}) failed to close the file system", session, e);
             }
         }
     }
diff --git a/sshd-sftp/src/test/java/org/apache/sshd/sftp/common/SftpUniversalOwnerAndGroupTest.java \
b/sshd-sftp/src/test/java/org/apache/sshd/sftp/common/SftpUniversalOwnerAndGroupTest.java
 index dc662c3f4..83458c827 100644
--- a/sshd-sftp/src/test/java/org/apache/sshd/sftp/common/SftpUniversalOwnerAndGroupTest.java
                
+++ b/sshd-sftp/src/test/java/org/apache/sshd/sftp/common/SftpUniversalOwnerAndGroupTest.java
 @@ -42,7 +42,7 @@ public class SftpUniversalOwnerAndGroupTest extends \
                JUnitTestSupport {
         for (SftpUniversalOwnerAndGroup value : SftpUniversalOwnerAndGroup.VALUES) {
             String name = value.getName();
             assertFalse(value.name() + ": empty name", GenericUtils.isEmpty(name));
-            assertTrue(value.name() + ": bad suffix", name.charAt(name.length() - 1) \
== '@'); +            assertEquals(value.name() + ": bad suffix", '@', \
name.charAt(name.length() - 1));  
             for (int index = 0; index < name.length() - 1; index++) {
                 char ch = name.charAt(index);
diff --git a/sshd-spring-sftp/src/main/java/org/apache/sshd/sftp/spring/integration/ApacheSshdSftpSessionFactory.java \
b/sshd-spring-sftp/src/main/java/org/apache/sshd/sftp/spring/integration/ApacheSshdSftpSessionFactory.java
 index f0e1dc73f..d39b17540 100644
--- a/sshd-spring-sftp/src/main/java/org/apache/sshd/sftp/spring/integration/ApacheSshdSftpSessionFactory.java
                
+++ b/sshd-spring-sftp/src/main/java/org/apache/sshd/sftp/spring/integration/ApacheSshdSftpSessionFactory.java
 @@ -398,27 +398,20 @@ public class ApacheSshdSftpSessionFactory
                 SftpVersionSelector selector = getSftpVersionSelector();
                 SftpClientFactory sftpFactory = SftpClientFactory.instance();
                 SftpClient sftpClient = sftpFactory.createSftpClient(session, \
                selector);
-                try {
-                    ClientSession sessionInstance = session;
-                    Session<DirEntry> result = sharedInstance
-                            ? new SpringSftpSession(sftpClient)
-                            : new SpringSftpSession(sftpClient, () -> {
-                                try {
-                                    sessionInstance.close();
-                                    return null;
-                                } catch (Exception e) {
-                                    return e;
-                                }
-                            });
-                    // avoid auto-close at finally clause
-                    sftpClient = null;
-                    session = null;
-                    return result;
-                } finally {
-                    if (sftpClient != null) {
-                        sftpClient.close();
-                    }
-                }
+                ClientSession sessionInstance = session;
+                Session<DirEntry> result = sharedInstance
+                        ? new SpringSftpSession(sftpClient)
+                        : new SpringSftpSession(sftpClient, () -> {
+                            try {
+                                sessionInstance.close();
+                                return null;
+                            } catch (Exception e) {
+                                return e;
+                            }
+                        });
+                // avoid auto-close at finally clause
+                session = null;
+                return result;
             } finally {
                 if (session != null) {
                     try {
@@ -523,7 +516,7 @@ public class ApacheSshdSftpSessionFactory
         }
 
         if (debugEnabled) {
-            log.debug("authenticateClientSession({}) authenticate - timeout=", \
session, timeout); +            log.debug("authenticateClientSession({}) authenticate \
- timeout={}", session, timeout);  }
         session.auth().verify(timeout);
         return session;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic