You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2016/08/04 17:06:34 UTC

[2/3] mina-sshd git commit: [SSHD-674] Converted some more code to Java 8

[SSHD-674] Converted some more code to Java 8


Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/25bc715a
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/25bc715a
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/25bc715a

Branch: refs/heads/master
Commit: 25bc715a5680499375b5de12c6e14c3017380053
Parents: 5a13329
Author: Lyor Goldstein <ly...@gmail.com>
Authored: Thu Aug 4 20:06:53 2016 +0300
Committer: Lyor Goldstein <ly...@gmail.com>
Committed: Thu Aug 4 20:06:53 2016 +0300

----------------------------------------------------------------------
 .../apache/sshd/agent/SshAgentConstants.java    |   4 +-
 .../java/org/apache/sshd/client/SshClient.java  |   2 +-
 .../auth/password/PasswordIdentityProvider.java |   2 +-
 .../channel/PtyCapableChannelSession.java       |   2 +-
 .../keys/BuiltinClientIdentitiesWatcher.java    |   2 +-
 .../config/keys/ClientIdentitiesWatcher.java    |   2 +-
 .../config/keys/ClientIdentityFileWatcher.java  |   2 +-
 .../keys/DefaultClientIdentitiesWatcher.java    |   2 +-
 .../sshd/client/future/DefaultAuthFuture.java   |  10 +-
 .../client/future/DefaultConnectFuture.java     |  15 +--
 .../sshd/client/future/DefaultOpenFuture.java   |  14 +--
 .../keyverifier/ModifiedServerKeyAcceptor.java  |   1 +
 .../client/keyverifier/ServerKeyVerifier.java   |   1 +
 .../sshd/client/scp/AbstractScpClient.java      | 107 +------------------
 .../sshd/client/scp/DefaultScpClient.java       |  10 +-
 .../org/apache/sshd/client/scp/ScpClient.java   |  96 ++++++++++++++---
 .../sshd/client/scp/ScpClientCreator.java       |  12 ++-
 .../client/session/AbstractClientSession.java   |  26 +----
 .../client/session/ClientSessionHolder.java     |   1 +
 .../subsystem/sftp/AbstractSftpClient.java      | 107 +------------------
 .../subsystem/sftp/DefaultSftpClient.java       |  14 ++-
 .../sshd/client/subsystem/sftp/SftpClient.java  |  88 +++++++++++----
 .../subsystem/sftp/SftpClientCreator.java       |   8 +-
 .../extensions/BuiltinSftpClientExtensions.java |   6 --
 .../extensions/SftpClientExtensionFactory.java  |   7 +-
 .../helpers/AbstractMD5HashExtension.java       |   2 +-
 .../helpers/AbstractSftpClientExtension.java    |   8 +-
 .../helpers/CopyDataExtensionImpl.java          |   6 +-
 .../helpers/CopyFileExtensionImpl.java          |   4 +-
 .../helpers/OpenSSHFsyncExtensionImpl.java      |   2 +-
 .../java/org/apache/sshd/common/Factory.java    |   1 +
 .../sshd/common/FactoryManagerHolder.java       |   1 +
 .../org/apache/sshd/common/NamedResource.java   |   1 +
 .../org/apache/sshd/common/OptionalFeature.java |   3 +-
 .../org/apache/sshd/common/SshConstants.java    |   6 +-
 .../sshd/common/channel/AbstractChannel.java    |   4 +-
 .../common/channel/ChannelAsyncInputStream.java |   6 +-
 .../sshd/common/channel/ChannelHolder.java      |   1 +
 .../sshd/common/channel/RequestHandler.java     |   2 +-
 .../org/apache/sshd/common/channel/Window.java  |   8 +-
 .../apache/sshd/common/cipher/BaseCipher.java   |   6 --
 .../sshd/common/cipher/BuiltinCiphers.java      |   1 -
 .../org/apache/sshd/common/cipher/Cipher.java   |   5 +-
 .../apache/sshd/common/cipher/CipherNone.java   |   8 --
 .../common/compression/BuiltinCompressions.java |   1 -
 .../sshd/common/compression/Compression.java    |   1 -
 .../sshd/common/file/FileSystemAware.java       |   1 +
 .../sshd/common/file/FileSystemFactory.java     |   2 +-
 .../common/forward/TcpipForwarderFactory.java   |   1 +
 .../sshd/common/future/AbstractSshFuture.java   |  26 +----
 .../sshd/common/future/DefaultCloseFuture.java  |   4 +-
 .../common/future/DefaultKeyExchangeFuture.java |   4 +-
 .../future/DefaultVerifiableSshFuture.java      |  13 ---
 .../sshd/common/future/SshFutureListener.java   |   1 +
 .../sshd/common/future/VerifiableFuture.java    |  10 +-
 .../sshd/common/future/WaitableFuture.java      |  16 ++-
 .../sshd/common/io/AbstractIoWriteFuture.java   |   7 +-
 .../sshd/common/kex/BuiltinDHFactories.java     |   3 +-
 .../common/keyprovider/KeyIdentityProvider.java |   2 +-
 .../org/apache/sshd/common/mac/BaseMac.java     |  19 ----
 .../org/apache/sshd/common/mac/BuiltinMacs.java |   1 -
 .../java/org/apache/sshd/common/mac/Mac.java    |  17 ++-
 .../sshd/common/random/AbstractRandom.java      |   5 -
 .../org/apache/sshd/common/random/Random.java   |   4 +-
 .../sshd/common/session/SessionHolder.java      |   1 +
 .../common/signature/AbstractSignature.java     |  12 +--
 .../common/signature/BuiltinSignatures.java     |   1 -
 .../common/subsystem/sftp/SftpConstants.java    |   4 +-
 .../sftp/extensions/AbstractParser.java         |  11 --
 .../sftp/extensions/ExtensionParser.java        |  10 +-
 .../apache/sshd/common/util/GenericUtils.java   |  28 ++---
 .../sshd/common/util/Int2IntFunction.java       |   1 +
 .../apache/sshd/common/util/NumberUtils.java    |   9 +-
 .../apache/sshd/common/util/ObjectBuilder.java  |   3 +-
 .../org/apache/sshd/common/util/Predicate.java  |  29 -----
 .../sshd/common/util/ReflectionUtils.java       |   1 +
 .../apache/sshd/common/util/SecurityUtils.java  |   5 +-
 .../org/apache/sshd/common/util/Supplier.java   |  29 -----
 .../apache/sshd/common/util/Transformer.java    |  14 ++-
 .../apache/sshd/common/util/buffer/Buffer.java  |  52 ++++-----
 .../sshd/common/util/buffer/BufferUtils.java    |  22 ++--
 .../common/util/buffer/ByteArrayBuffer.java     |   6 +-
 .../apache/sshd/common/util/io/DERParser.java   |   3 +-
 .../apache/sshd/common/util/io/DERWriter.java   |   3 +-
 .../sshd/common/util/logging/LoggingUtils.java  |  18 ++--
 .../apache/sshd/server/ChannelSessionAware.java |   1 +
 .../org/apache/sshd/server/SessionAware.java    |   1 +
 .../auth/hostbased/HostBasedAuthenticator.java  |   1 +
 .../auth/password/PasswordAuthenticator.java    |   1 +
 .../auth/pubkey/PublickeyAuthenticator.java     |   1 +
 .../global/CancelTcpipForwardHandler.java       |   2 +-
 .../sshd/server/global/TcpipForwardHandler.java |   2 +-
 .../server/session/ServerProxyAcceptor.java     |   1 +
 .../server/session/ServerSessionHolder.java     |   1 +
 .../apache/sshd/server/shell/ProcessShell.java  |  11 +-
 .../server/subsystem/sftp/SftpSubsystem.java    |   6 +-
 96 files changed, 397 insertions(+), 647 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentConstants.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentConstants.java b/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentConstants.java
index e533cb0..aecf89d 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentConstants.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentConstants.java
@@ -20,9 +20,9 @@ package org.apache.sshd.agent;
 
 import java.lang.reflect.Field;
 import java.util.Map;
+import java.util.function.Predicate;
 
 import org.apache.sshd.common.util.GenericUtils;
-import org.apache.sshd.common.util.Predicate;
 import org.apache.sshd.common.util.logging.LoggingUtils;
 
 /**
@@ -78,7 +78,7 @@ public final class SshAgentConstants {
         private static final Map<Integer, String> MESSAGES_MAP =
                 LoggingUtils.generateMnemonicMap(SshAgentConstants.class, new Predicate<Field>() {
                     @Override
-                    public boolean evaluate(Field f) {
+                    public boolean test(Field f) {
                         String name = f.getName();
                         if (name.startsWith("SSH_AGENT_CONSTRAIN")) {
                             return false;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java b/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java
index 1299518..244f285 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java
@@ -50,6 +50,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.function.Supplier;
 import java.util.logging.ConsoleHandler;
 import java.util.logging.Formatter;
 import java.util.logging.Handler;
@@ -118,7 +119,6 @@ import org.apache.sshd.common.session.helpers.AbstractSession;
 import org.apache.sshd.common.util.GenericUtils;
 import org.apache.sshd.common.util.OsUtils;
 import org.apache.sshd.common.util.SecurityUtils;
-import org.apache.sshd.common.util.Supplier;
 import org.apache.sshd.common.util.ValidateUtils;
 import org.apache.sshd.common.util.io.IoUtils;
 import org.apache.sshd.common.util.io.NoCloseInputStream;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/auth/password/PasswordIdentityProvider.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/auth/password/PasswordIdentityProvider.java b/sshd-core/src/main/java/org/apache/sshd/client/auth/password/PasswordIdentityProvider.java
index 44f3b17..8250462 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/auth/password/PasswordIdentityProvider.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/password/PasswordIdentityProvider.java
@@ -24,10 +24,10 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.function.Supplier;
 
 import org.apache.sshd.client.session.ClientSession;
 import org.apache.sshd.common.util.GenericUtils;
-import org.apache.sshd.common.util.Supplier;
 import org.apache.sshd.common.util.Transformer;
 
 /**

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java b/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
index 61d0e91..bba9947 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
@@ -252,7 +252,7 @@ public class PtyCapableChannelSession extends ChannelSession {
             buffer.putInt(ptyHeight);
             buffer.putInt(ptyWidth);
 
-            Buffer modes = new ByteArrayBuffer(GenericUtils.size(ptyModes) * (1 + (Integer.SIZE / Byte.SIZE)) + Long.SIZE, false);
+            Buffer modes = new ByteArrayBuffer(GenericUtils.size(ptyModes) * (1 + Integer.BYTES) + Long.SIZE, false);
             for (Map.Entry<PtyMode, ? extends Number> modeEntry : ptyModes.entrySet()) {
                 PtyMode mode = modeEntry.getKey();
                 Number value = modeEntry.getValue();

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcher.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcher.java b/sshd-core/src/main/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcher.java
index fb104b4..fb9abce 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcher.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/config/keys/BuiltinClientIdentitiesWatcher.java
@@ -26,13 +26,13 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.function.Supplier;
 
 import org.apache.sshd.common.NamedResource;
 import org.apache.sshd.common.config.keys.BuiltinIdentities;
 import org.apache.sshd.common.config.keys.FilePasswordProvider;
 import org.apache.sshd.common.config.keys.KeyUtils;
 import org.apache.sshd.common.util.GenericUtils;
-import org.apache.sshd.common.util.Supplier;
 import org.apache.sshd.common.util.ValidateUtils;
 
 /**

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java b/sshd-core/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java
index 4abd4f7..c3dfe01 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/config/keys/ClientIdentitiesWatcher.java
@@ -25,12 +25,12 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Supplier;
 
 import org.apache.sshd.common.config.keys.FilePasswordProvider;
 import org.apache.sshd.common.keyprovider.AbstractKeyPairProvider;
 import org.apache.sshd.common.keyprovider.KeyPairProvider;
 import org.apache.sshd.common.util.GenericUtils;
-import org.apache.sshd.common.util.Supplier;
 import org.apache.sshd.common.util.ValidateUtils;
 
 /**

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java b/sshd-core/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java
index a982324..3974930 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/config/keys/ClientIdentityFileWatcher.java
@@ -25,12 +25,12 @@ import java.security.GeneralSecurityException;
 import java.security.KeyPair;
 import java.security.PublicKey;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Supplier;
 
 import org.apache.sshd.common.config.keys.FilePasswordProvider;
 import org.apache.sshd.common.config.keys.KeyUtils;
 import org.apache.sshd.common.util.GenericUtils;
 import org.apache.sshd.common.util.Pair;
-import org.apache.sshd.common.util.Supplier;
 import org.apache.sshd.common.util.ValidateUtils;
 import org.apache.sshd.common.util.io.IoUtils;
 import org.apache.sshd.common.util.io.ModifiableFileWatcher;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/DefaultClientIdentitiesWatcher.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/DefaultClientIdentitiesWatcher.java b/sshd-core/src/main/java/org/apache/sshd/client/config/keys/DefaultClientIdentitiesWatcher.java
index ba1719f..b91fa7b 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/config/keys/DefaultClientIdentitiesWatcher.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/config/keys/DefaultClientIdentitiesWatcher.java
@@ -21,11 +21,11 @@ package org.apache.sshd.client.config.keys;
 
 import java.nio.file.Path;
 import java.util.List;
+import java.util.function.Supplier;
 
 import org.apache.sshd.common.config.keys.FilePasswordProvider;
 import org.apache.sshd.common.config.keys.PublicKeyEntry;
 import org.apache.sshd.common.util.GenericUtils;
-import org.apache.sshd.common.util.Supplier;
 import org.apache.sshd.common.util.ValidateUtils;
 
 /**

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultAuthFuture.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultAuthFuture.java b/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultAuthFuture.java
index f42b94c..c41bed1 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultAuthFuture.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultAuthFuture.java
@@ -45,7 +45,7 @@ public class DefaultAuthFuture extends DefaultVerifiableSshFuture<AuthFuture> im
         return this;
     }
 
-    @Override   // TODO for JDK-8 make this a default method
+    @Override
     public Throwable getException() {
         Object v = getValue();
         if (v instanceof Throwable) {
@@ -55,13 +55,13 @@ public class DefaultAuthFuture extends DefaultVerifiableSshFuture<AuthFuture> im
         }
     }
 
-    @Override   // TODO for JDK-8 make this a default method
+    @Override
     public boolean isSuccess() {
         Object v = getValue();
         return (v instanceof Boolean) && ((Boolean) v).booleanValue();
     }
 
-    @Override   // TODO for JDK-8 make this a default method
+    @Override
     public boolean isFailure() {
         Object v = getValue();
         if (v instanceof Boolean) {
@@ -71,12 +71,12 @@ public class DefaultAuthFuture extends DefaultVerifiableSshFuture<AuthFuture> im
         }
     }
 
-    @Override   // TODO for JDK-8 make this a default method
+    @Override
     public void setAuthed(boolean authed) {
         setValue(authed);
     }
 
-    @Override   // TODO for JDK-8 make this a default method
+    @Override
     public void setException(Throwable exception) {
         ValidateUtils.checkNotNull(exception, "No exception provided");
         setValue(exception);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultConnectFuture.java
----------------------------------------------------------------------
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 fd896ad..eb207ac 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
@@ -19,6 +19,7 @@
 package org.apache.sshd.client.future;
 
 import java.io.IOException;
+import java.util.Objects;
 
 import org.apache.sshd.client.session.ClientSession;
 import org.apache.sshd.common.RuntimeSshException;
@@ -36,7 +37,7 @@ public class DefaultConnectFuture extends DefaultVerifiableSshFuture<ConnectFutu
         super(lock);
     }
 
-    @Override   // TODO in JDK-8 make this a default method
+    @Override
     public ConnectFuture verify(long timeout) throws IOException {
         long startTime = System.nanoTime();
         ClientSession session = verifyResult(ClientSession.class, timeout);
@@ -48,7 +49,7 @@ public class DefaultConnectFuture extends DefaultVerifiableSshFuture<ConnectFutu
         return this;
     }
 
-    @Override   // TODO in JDK-8 make this a default method
+    @Override
     public ClientSession getSession() {
         Object v = getValue();
         if (v instanceof RuntimeException) {
@@ -64,7 +65,7 @@ public class DefaultConnectFuture extends DefaultVerifiableSshFuture<ConnectFutu
         }
     }
 
-    @Override   // TODO in JDK-8 make this a default method
+    @Override
     public Throwable getException() {
         Object v = getValue();
         if (v instanceof Throwable) {
@@ -74,18 +75,18 @@ public class DefaultConnectFuture extends DefaultVerifiableSshFuture<ConnectFutu
         }
     }
 
-    @Override   // TODO in JDK-8 make this a default method
+    @Override
     public boolean isConnected() {
         return getValue() instanceof ClientSession;
     }
 
-    @Override   // TODO in JDK-8 make this a default method
+    @Override
     public void setSession(ClientSession session) {
-        ValidateUtils.checkNotNull(session, "No client session provided");
+        Objects.requireNonNull(session, "No client session provided");
         setValue(session);
     }
 
-    @Override   // TODO in JDK-8 make this a default method
+    @Override
     public void setException(Throwable exception) {
         ValidateUtils.checkNotNull(exception, "No exception provided");
         setValue(exception);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultOpenFuture.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultOpenFuture.java b/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultOpenFuture.java
index 0f3bc2e..4034003 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultOpenFuture.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/future/DefaultOpenFuture.java
@@ -19,10 +19,10 @@
 package org.apache.sshd.client.future;
 
 import java.io.IOException;
+import java.util.Objects;
 
 import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.future.DefaultVerifiableSshFuture;
-import org.apache.sshd.common.util.ValidateUtils;
 
 /**
  * A default implementation of {@link OpenFuture}.
@@ -34,7 +34,7 @@ public class DefaultOpenFuture extends DefaultVerifiableSshFuture<OpenFuture> im
         super(lock);
     }
 
-    @Override   // TODO for JDK-8 make this a default method
+    @Override
     public OpenFuture verify(long timeoutMillis) throws IOException {
         Boolean result = verifyResult(Boolean.class, timeoutMillis);
         if (!result.booleanValue()) {
@@ -44,7 +44,7 @@ public class DefaultOpenFuture extends DefaultVerifiableSshFuture<OpenFuture> im
         return this;
     }
 
-    @Override   // TODO for JDK-8 make this a default method
+    @Override
     public Throwable getException() {
         Object v = getValue();
         if (v instanceof Throwable) {
@@ -54,20 +54,20 @@ public class DefaultOpenFuture extends DefaultVerifiableSshFuture<OpenFuture> im
         }
     }
 
-    @Override   // TODO for JDK-8 make this a default method
+    @Override
     public boolean isOpened() {
         Object value = getValue();
         return (value instanceof Boolean) && ((Boolean) value).booleanValue();
     }
 
-    @Override   // TODO for JDK-8 make this a default method
+    @Override
     public void setOpened() {
         setValue(Boolean.TRUE);
     }
 
-    @Override   // TODO for JDK-8 make this a default method
+    @Override
     public void setException(Throwable exception) {
-        ValidateUtils.checkNotNull(exception, "No exception provided");
+        Objects.requireNonNull(exception, "No exception provided");
         setValue(exception);
     }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/ModifiedServerKeyAcceptor.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/ModifiedServerKeyAcceptor.java b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/ModifiedServerKeyAcceptor.java
index 784576e..6472e04 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/ModifiedServerKeyAcceptor.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/ModifiedServerKeyAcceptor.java
@@ -28,6 +28,7 @@ import org.apache.sshd.client.session.ClientSession;
 /**
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
+@FunctionalInterface
 public interface ModifiedServerKeyAcceptor {
     /**
      * Invoked when a matching known host key was found but it does not match

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/ServerKeyVerifier.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/ServerKeyVerifier.java b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/ServerKeyVerifier.java
index 5305dab..6122cee 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/ServerKeyVerifier.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/ServerKeyVerifier.java
@@ -29,6 +29,7 @@ import org.apache.sshd.client.session.ClientSession;
  *
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
+@FunctionalInterface
 public interface ServerKeyVerifier {
     /**
      * Verify that the server key provided is really the one of the host.

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java b/sshd-core/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java
index 3c1b5af..fa979c6 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java
@@ -19,15 +19,11 @@
 
 package org.apache.sshd.client.scp;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.nio.file.FileSystem;
 import java.nio.file.Files;
 import java.nio.file.LinkOption;
 import java.nio.file.Path;
-import java.nio.file.attribute.PosixFilePermission;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -45,7 +41,6 @@ import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.file.FileSystemFactory;
 import org.apache.sshd.common.scp.ScpException;
 import org.apache.sshd.common.scp.ScpHelper;
-import org.apache.sshd.common.scp.ScpTimestamp;
 import org.apache.sshd.common.util.GenericUtils;
 import org.apache.sshd.common.util.ValidateUtils;
 import org.apache.sshd.common.util.io.IoUtils;
@@ -68,16 +63,6 @@ public abstract class AbstractScpClient extends AbstractLoggingBean implements S
     }
 
     @Override
-    public void download(String remote, String local, Option... options) throws IOException {
-        download(remote, local, GenericUtils.isEmpty(options) ? Collections.<Option>emptySet() : GenericUtils.of(options));
-    }
-
-    @Override
-    public void download(String[] remote, String local, Option... options) throws IOException {
-        download(remote, local, GenericUtils.isEmpty(options) ? Collections.<Option>emptySet() : GenericUtils.of(options));
-    }
-
-    @Override
     public void download(String[] remote, String local, Collection<Option> options) throws IOException {
         local = ValidateUtils.checkNotNullAndNotEmpty(local, "Invalid argument local: %s", local);
         remote = ValidateUtils.checkNotNullAndNotEmpty(remote, "Invalid argument remote: %s", (Object) remote);
@@ -92,11 +77,6 @@ public abstract class AbstractScpClient extends AbstractLoggingBean implements S
     }
 
     @Override
-    public void download(String[] remote, Path local, Option... options) throws IOException {
-        download(remote, local, GenericUtils.isEmpty(options) ? Collections.<Option>emptySet() : GenericUtils.of(options));
-    }
-
-    @Override
     public void download(String[] remote, Path local, Collection<Option> options) throws IOException {
         remote = ValidateUtils.checkNotNullAndNotEmpty(remote, "Invalid argument remote: %s", (Object) remote);
 
@@ -110,11 +90,6 @@ public abstract class AbstractScpClient extends AbstractLoggingBean implements S
     }
 
     @Override
-    public void download(String remote, Path local, Option... options) throws IOException {
-        download(remote, local, GenericUtils.of(options));
-    }
-
-    @Override
     public void download(String remote, Path local, Collection<Option> options) throws IOException {
         local = ValidateUtils.checkNotNull(local, "Invalid argument local: %s", local);
         remote = ValidateUtils.checkNotNullAndNotEmpty(remote, "Invalid argument remote: %s", remote);
@@ -167,57 +142,6 @@ public abstract class AbstractScpClient extends AbstractLoggingBean implements S
     protected abstract void download(String remote, FileSystem fs, Path local, Collection<Option> options) throws IOException;
 
     @Override
-    public byte[] downloadBytes(String remote) throws IOException {
-        try (ByteArrayOutputStream local = new ByteArrayOutputStream()) {
-            download(remote, local);
-            return local.toByteArray();
-        }
-    }
-
-    @Override
-    public void upload(String local, String remote, Option... options) throws IOException {
-        upload(local, remote, GenericUtils.of(options));
-    }
-
-    @Override
-    public void upload(String local, String remote, Collection<Option> options) throws IOException {
-        upload(new String[]{ValidateUtils.checkNotNullAndNotEmpty(local, "Invalid argument local: %s", local)}, remote, options);
-    }
-
-    @Override
-    public void upload(String[] local, String remote, Option... options) throws IOException {
-        upload(local, remote, GenericUtils.isEmpty(options) ? Collections.<Option>emptySet() : GenericUtils.of(options));
-    }
-
-    @Override
-    public void upload(Path local, String remote, Option... options) throws IOException {
-        upload(local, remote, GenericUtils.isEmpty(options) ? Collections.<Option>emptySet() : GenericUtils.of(options));
-    }
-
-    @Override
-    public void upload(Path local, String remote, Collection<Option> options) throws IOException {
-        upload(new Path[]{ValidateUtils.checkNotNull(local, "Invalid local argument: %s", local)},
-                remote, GenericUtils.isEmpty(options) ? Collections.<Option>emptySet() : GenericUtils.of(options));
-    }
-
-    @Override
-    public void upload(Path[] local, String remote, Option... options) throws IOException {
-        upload(local, remote, GenericUtils.isEmpty(options) ? Collections.<Option>emptySet() : GenericUtils.of(options));
-    }
-
-    @Override
-    public void upload(byte[] data, String remote, Collection<PosixFilePermission> perms, ScpTimestamp time) throws IOException {
-        upload(data, 0, data.length, remote, perms, time);
-    }
-
-    @Override
-    public void upload(byte[] data, int offset, int len, String remote, Collection<PosixFilePermission> perms, ScpTimestamp time) throws IOException {
-        try (InputStream local = new ByteArrayInputStream(data, offset, len)) {
-            upload(local, remote, len, perms, time);
-        }
-    }
-
-    @Override
     public void upload(String[] local, String remote, Collection<Option> options) throws IOException {
         final Collection<String> paths = Arrays.asList(ValidateUtils.checkNotNullAndNotEmpty(local, "Invalid argument local: %s", (Object) local));
         runUpload(remote, options, paths, new ScpOperationExecutor<String>() {
@@ -350,36 +274,7 @@ public abstract class AbstractScpClient extends AbstractLoggingBean implements S
         }
     }
 
-    public static String createSendCommand(String remote, Collection<Option> options) {
-        StringBuilder sb = new StringBuilder(remote.length() + Long.SIZE).append(ScpHelper.SCP_COMMAND_PREFIX);
-        if (options.contains(Option.Recursive)) {
-            sb.append(" -r");
-        }
-        if (options.contains(Option.TargetIsDirectory)) {
-            sb.append(" -d");
-        }
-        if (options.contains(Option.PreserveAttributes)) {
-            sb.append(" -p");
-        }
-
-        sb.append(" -t").append(" --").append(" ").append(remote);
-        return sb.toString();
-    }
-
-    public static String createReceiveCommand(String remote, Collection<Option> options) {
-        ValidateUtils.checkNotNullAndNotEmpty(remote, "No remote location specified");
-        StringBuilder sb = new StringBuilder(remote.length() + Long.SIZE).append(ScpHelper.SCP_COMMAND_PREFIX);
-        if (options.contains(Option.Recursive)) {
-            sb.append(" -r");
-        }
-        if (options.contains(Option.PreserveAttributes)) {
-            sb.append(" -p");
-        }
-
-        sb.append(" -f").append(" --").append(' ').append(remote);
-        return sb.toString();
-    }
-
+    @FunctionalInterface
     public interface ScpOperationExecutor<T> {
         void execute(ScpHelper helper, Collection<T> local, Collection<Option> options) throws IOException;
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/scp/DefaultScpClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/scp/DefaultScpClient.java b/sshd-core/src/main/java/org/apache/sshd/client/scp/DefaultScpClient.java
index 7b950a7..d750e5c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/scp/DefaultScpClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/scp/DefaultScpClient.java
@@ -78,7 +78,7 @@ public class DefaultScpClient extends AbstractScpClient {
 
     @Override
     public void download(String remote, OutputStream local) throws IOException {
-        String cmd = createReceiveCommand(remote, Collections.<Option>emptyList());
+        String cmd = ScpClient.createReceiveCommand(remote, Collections.<Option>emptyList());
         ClientSession session = getClientSession();
         ChannelExec channel = openCommandChannel(session, cmd);
         try (InputStream invOut = channel.getInvertedOut();
@@ -94,7 +94,7 @@ public class DefaultScpClient extends AbstractScpClient {
 
     @Override
     protected void download(String remote, FileSystem fs, Path local, Collection<Option> options) throws IOException {
-        String cmd = createReceiveCommand(remote, options);
+        String cmd = ScpClient.createReceiveCommand(remote, options);
         ClientSession session = getClientSession();
         ChannelExec channel = openCommandChannel(session, cmd);
         try (InputStream invOut = channel.getInvertedOut();
@@ -117,7 +117,7 @@ public class DefaultScpClient extends AbstractScpClient {
         final String name = (namePos < 0)
                 ? remote
                 : ValidateUtils.checkNotNullAndNotEmpty(remote.substring(namePos + 1), "No name value in remote=%s", remote);
-        final String cmd = createSendCommand(remote, (time != null) ? EnumSet.of(Option.PreserveAttributes) : Collections.<Option>emptySet());
+        final String cmd = ScpClient.createSendCommand(remote, (time != null) ? EnumSet.of(Option.PreserveAttributes) : Collections.<Option>emptySet());
         ClientSession session = getClientSession();
         ChannelExec channel = openCommandChannel(session, cmd);
         try (InputStream invOut = channel.getInvertedOut();
@@ -141,7 +141,7 @@ public class DefaultScpClient extends AbstractScpClient {
             options = addTargetIsDirectory(options);
         }
 
-        String cmd = createSendCommand(remote, options);
+        String cmd = ScpClient.createSendCommand(remote, options);
         ClientSession session = getClientSession();
         ChannelExec channel = openCommandChannel(session, cmd);
         try {
@@ -182,7 +182,7 @@ public class DefaultScpClient extends AbstractScpClient {
             return args;
         }
 
-        List<String> effective = new ArrayList<String>(numArgs);
+        List<String> effective = new ArrayList<>(numArgs);
         boolean error = false;
         for (int index = 0; (index < numArgs) && (!error); index++) {
             String argName = args[index];

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/scp/ScpClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/scp/ScpClient.java b/sshd-core/src/main/java/org/apache/sshd/client/scp/ScpClient.java
index a51f9c3..b2a6091 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/scp/ScpClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/scp/ScpClient.java
@@ -18,6 +18,8 @@
  */
 package org.apache.sshd.client.scp;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -28,13 +30,16 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.sshd.client.session.ClientSession;
 import org.apache.sshd.client.session.ClientSessionHolder;
+import org.apache.sshd.common.scp.ScpHelper;
 import org.apache.sshd.common.scp.ScpTimestamp;
 import org.apache.sshd.common.session.SessionHolder;
+import org.apache.sshd.common.util.GenericUtils;
+import org.apache.sshd.common.util.ValidateUtils;
 
 /**
+ * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
 public interface ScpClient extends SessionHolder<ClientSession>, ClientSessionHolder {
-
     enum Option {
         Recursive,
         PreserveAttributes,
@@ -61,48 +66,109 @@ public interface ScpClient extends SessionHolder<ClientSession>, ClientSessionHo
     String SCP_EXEC_CHANNEL_EXIT_STATUS_TIMEOUT = "scp-exec-channel-exit-status-timeout";
     long DEFAULT_EXEC_CHANNEL_EXIT_STATUS_TIMEOUT = TimeUnit.SECONDS.toMillis(5L);
 
-    void download(String remote, String local, Option... options) throws IOException;
+    default void download(String remote, String local, Option... options) throws IOException {
+        download(remote, local, GenericUtils.of(options));
+    }
 
     void download(String remote, String local, Collection<Option> options) throws IOException;
 
-    void download(String remote, Path local, Option... options) throws IOException;
+    default void download(String remote, Path local, Option... options) throws IOException {
+        download(remote, local, GenericUtils.of(options));
+    }
 
     void download(String remote, Path local, Collection<Option> options) throws IOException;
 
     // NOTE: the remote location MUST be a file or an exception is generated
     void download(String remote, OutputStream local) throws IOException;
 
-    byte[] downloadBytes(String remote) throws IOException;
+    default byte[] downloadBytes(String remote) throws IOException {
+        try (ByteArrayOutputStream local = new ByteArrayOutputStream()) {
+            download(remote, local);
+            return local.toByteArray();
+        }
+    }
+
+    default void download(String[] remote, String local, Option... options) throws IOException {
+        download(remote, local, GenericUtils.of(options));
+    }
 
-    void download(String[] remote, String local, Option... options) throws IOException;
+    default void download(String[] remote, Path local, Option... options) throws IOException {
+        download(remote, local, GenericUtils.of(options));
+    }
 
     void download(String[] remote, String local, Collection<Option> options) throws IOException;
 
-    void download(String[] remote, Path local, Option... options) throws IOException;
-
     void download(String[] remote, Path local, Collection<Option> options) throws IOException;
 
-    void upload(String local, String remote, Option... options) throws IOException;
+    default void upload(String local, String remote, Option... options) throws IOException {
+        upload(local, remote, GenericUtils.of(options));
+    }
 
-    void upload(String local, String remote, Collection<Option> options) throws IOException;
+    default void upload(String local, String remote, Collection<Option> options) throws IOException {
+        upload(new String[]{ValidateUtils.checkNotNullAndNotEmpty(local, "Invalid argument local: %s", local)}, remote, options);
+    }
 
-    void upload(Path local, String remote, Option... options) throws IOException;
+    default void upload(Path local, String remote, Option... options) throws IOException {
+        upload(local, remote, GenericUtils.of(options));
+    }
 
-    void upload(Path local, String remote, Collection<Option> options) throws IOException;
+    default void upload(Path local, String remote, Collection<Option> options) throws IOException {
+        upload(new Path[]{ValidateUtils.checkNotNull(local, "Invalid local argument: %s", local)}, remote, GenericUtils.of(options));
+    }
 
-    void upload(String[] local, String remote, Option... options) throws IOException;
+    default void upload(String[] local, String remote, Option... options) throws IOException {
+        upload(local, remote, GenericUtils.of(options));
+    }
 
     void upload(String[] local, String remote, Collection<Option> options) throws IOException;
 
-    void upload(Path[] local, String remote, Option... options) throws IOException;
+    default void upload(Path[] local, String remote, Option... options) throws IOException {
+        upload(local, remote, GenericUtils.of(options));
+    }
 
     void upload(Path[] local, String remote, Collection<Option> options) throws IOException;
 
     // NOTE: due to SCP command limitations, the amount of data to be uploaded must be known a-priori
     // To upload a dynamic amount of data use SFTP
-    void upload(byte[] data, String remote, Collection<PosixFilePermission> perms, ScpTimestamp time) throws IOException;
+    default void upload(byte[] data, String remote, Collection<PosixFilePermission> perms, ScpTimestamp time) throws IOException {
+        upload(data, 0, data.length, remote, perms, time);
+    }
 
-    void upload(byte[] data, int offset, int len, String remote, Collection<PosixFilePermission> perms, ScpTimestamp time) throws IOException;
+    default void upload(byte[] data, int offset, int len, String remote, Collection<PosixFilePermission> perms, ScpTimestamp time) throws IOException {
+        try (InputStream local = new ByteArrayInputStream(data, offset, len)) {
+            upload(local, remote, len, perms, time);
+        }
+    }
 
     void upload(InputStream local, String remote, long size, Collection<PosixFilePermission> perms, ScpTimestamp time) throws IOException;
+
+    static String createSendCommand(String remote, Collection<Option> options) {
+        StringBuilder sb = new StringBuilder(remote.length() + Long.SIZE).append(ScpHelper.SCP_COMMAND_PREFIX);
+        if (options.contains(Option.Recursive)) {
+            sb.append(" -r");
+        }
+        if (options.contains(Option.TargetIsDirectory)) {
+            sb.append(" -d");
+        }
+        if (options.contains(Option.PreserveAttributes)) {
+            sb.append(" -p");
+        }
+
+        sb.append(" -t").append(" --").append(" ").append(remote);
+        return sb.toString();
+    }
+
+    static String createReceiveCommand(String remote, Collection<Option> options) {
+        ValidateUtils.checkNotNullAndNotEmpty(remote, "No remote location specified");
+        StringBuilder sb = new StringBuilder(remote.length() + Long.SIZE).append(ScpHelper.SCP_COMMAND_PREFIX);
+        if (options.contains(Option.Recursive)) {
+            sb.append(" -r");
+        }
+        if (options.contains(Option.PreserveAttributes)) {
+            sb.append(" -p");
+        }
+
+        sb.append(" -f").append(" --").append(' ').append(remote);
+        return sb.toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/scp/ScpClientCreator.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/scp/ScpClientCreator.java b/sshd-core/src/main/java/org/apache/sshd/client/scp/ScpClientCreator.java
index 37fea18..b3199b2 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/scp/ScpClientCreator.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/scp/ScpClientCreator.java
@@ -35,7 +35,9 @@ public interface ScpClientCreator extends ScpFileOpenerHolder {
      * @see #setScpFileOpener(ScpFileOpener)
      * @see #setScpTransferEventListener(ScpTransferEventListener)
      */
-    ScpClient createScpClient();
+    default ScpClient createScpClient() {
+        return createScpClient(getScpFileOpener(), getScpTransferEventListener());
+    }
 
     /**
      * Create an SCP client from this session.
@@ -46,7 +48,9 @@ public interface ScpClientCreator extends ScpFileOpenerHolder {
      *                 is used <U>instead</U> of any listener set via {@link #setScpTransferEventListener(ScpTransferEventListener)}
      * @return An {@link ScpClient} instance
      */
-    ScpClient createScpClient(ScpTransferEventListener listener);
+    default ScpClient createScpClient(ScpTransferEventListener listener) {
+        return createScpClient(getScpFileOpener(), listener);
+    }
 
     /**
      * Create an SCP client from this session.
@@ -57,7 +61,9 @@ public interface ScpClientCreator extends ScpFileOpenerHolder {
      *               set via {@link #setScpFileOpener(ScpFileOpener)}
      * @return An {@link ScpClient} instance
      */
-    ScpClient createScpClient(ScpFileOpener opener);
+    default ScpClient createScpClient(ScpFileOpener opener) {
+        return createScpClient(opener, getScpTransferEventListener());
+    }
 
     /**
      * Create an SCP client from this session.

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/session/AbstractClientSession.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/session/AbstractClientSession.java b/sshd-core/src/main/java/org/apache/sshd/client/session/AbstractClientSession.java
index 9079b02..b7453f8 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/session/AbstractClientSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/session/AbstractClientSession.java
@@ -322,34 +322,10 @@ public abstract class AbstractClientSession extends AbstractSession implements C
         scpListener = listener;
     }
 
-    @Override   // TODO make this a default method in JDK-8
-    public ScpClient createScpClient() {
-        return createScpClient(getScpFileOpener(), getScpTransferEventListener());
-    }
-
-    @Override   // TODO make this a default method in JDK-8
-    public ScpClient createScpClient(ScpTransferEventListener listener) {
-        return createScpClient(getScpFileOpener(), listener);
-    }
-
-    @Override   // TODO make this a default method in JDK-8
-    public ScpClient createScpClient(ScpFileOpener opener) {
-        return createScpClient(opener, getScpTransferEventListener());
-    }
-
     @Override
     public ScpClient createScpClient(ScpFileOpener opener, ScpTransferEventListener listener) {
         return new DefaultScpClient(this, opener, listener);
     }
-    @Override   // TODO make this a default method in JDK-8
-    public SftpClient createSftpClient() throws IOException {
-        return createSftpClient(SftpVersionSelector.CURRENT);
-    }
-
-    @Override   // TODO make this a default method in JDK-8
-    public SftpClient createSftpClient(final int version) throws IOException {
-        return createSftpClient(SftpVersionSelector.Utils.fixedVersionSelector(version));
-    }
 
     @Override
     public SftpClient createSftpClient(SftpVersionSelector selector) throws IOException {
@@ -589,7 +565,7 @@ public abstract class AbstractClientSession extends AbstractSession implements C
             } else {
                 log.info("switchToNoneCipher({}) switching", this);
 
-                Map<KexProposalOption, String> proposal = new EnumMap<KexProposalOption, String>(KexProposalOption.class);
+                Map<KexProposalOption, String> proposal = new EnumMap<>(KexProposalOption.class);
                 synchronized (clientProposal) {
                     proposal.putAll(clientProposal);
                 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionHolder.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionHolder.java b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionHolder.java
index f4a3349..41072cf 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionHolder.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionHolder.java
@@ -22,6 +22,7 @@ package org.apache.sshd.client.session;
 /**
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
+@FunctionalInterface
 public interface ClientSessionHolder {
     /**
      * @return The underlying {@link ClientSession} used

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/AbstractSftpClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/AbstractSftpClient.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/AbstractSftpClient.java
index 6c20da3..4284dc2 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/AbstractSftpClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/AbstractSftpClient.java
@@ -65,91 +65,6 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
     }
 
     @Override
-    public String getName() {
-        return SftpConstants.SFTP_SUBSYSTEM_NAME;
-    }
-
-    @Override
-    public CloseableHandle open(String path) throws IOException {
-        return open(path, Collections.<OpenMode>emptySet());
-    }
-
-    @Override
-    public CloseableHandle open(String path, OpenMode... options) throws IOException {
-        return open(path, GenericUtils.of(options));
-    }
-
-    @Override
-    public void rename(String oldPath, String newPath) throws IOException {
-        rename(oldPath, newPath, Collections.<CopyMode>emptySet());
-    }
-
-    @Override
-    public void rename(String oldPath, String newPath, CopyMode... options) throws IOException {
-        rename(oldPath, newPath, GenericUtils.of(options));
-    }
-
-    @Override
-    public InputStream read(String path) throws IOException {
-        return read(path, DEFAULT_READ_BUFFER_SIZE);
-    }
-
-    @Override
-    public InputStream read(String path, int bufferSize) throws IOException {
-        return read(path, bufferSize, EnumSet.of(OpenMode.Read));
-    }
-
-    @Override
-    public InputStream read(String path, OpenMode... mode) throws IOException {
-        return read(path, DEFAULT_READ_BUFFER_SIZE, mode);
-    }
-
-    @Override
-    public InputStream read(String path, int bufferSize, OpenMode... mode) throws IOException {
-        return read(path, bufferSize, GenericUtils.of(mode));
-    }
-
-    @Override
-    public InputStream read(String path, Collection<OpenMode> mode) throws IOException {
-        return read(path, DEFAULT_READ_BUFFER_SIZE, mode);
-    }
-
-    @Override
-    public OutputStream write(String path) throws IOException {
-        return write(path, DEFAULT_WRITE_BUFFER_SIZE);
-    }
-
-    @Override
-    public OutputStream write(String path, int bufferSize) throws IOException {
-        return write(path, bufferSize, EnumSet.of(OpenMode.Write, OpenMode.Create, OpenMode.Truncate));
-    }
-
-    @Override
-    public OutputStream write(String path, OpenMode... mode) throws IOException {
-        return write(path, DEFAULT_WRITE_BUFFER_SIZE, mode);
-    }
-
-    @Override
-    public OutputStream write(String path, Collection<OpenMode> mode) throws IOException {
-        return write(path, DEFAULT_WRITE_BUFFER_SIZE, mode);
-    }
-
-    @Override
-    public OutputStream write(String path, int bufferSize, OpenMode... mode) throws IOException {
-        return write(path, bufferSize, GenericUtils.of(mode));
-    }
-
-    @Override
-    public void write(Handle handle, long fileOffset, byte[] src) throws IOException {
-        write(handle, fileOffset, src, 0, src.length);
-    }
-
-    @Override
-    public void symLink(String linkPath, String targetPath) throws IOException {
-        link(linkPath, targetPath, true);
-    }
-
-    @Override
     public <E extends SftpClientExtension> E getExtension(Class<? extends E> extensionType) {
         Object instance = getExtension(BuiltinSftpClientExtensions.fromType(extensionType));
         if (instance == null) {
@@ -780,21 +695,6 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         checkCommandStatus(SftpConstants.SSH_FXP_RENAME, buffer);
     }
 
-    @Override   // TODO make this a default method in Java 8
-    public int read(Handle handle, long fileOffset, byte[] dst) throws IOException {
-        return read(handle, fileOffset, dst, null);
-    }
-
-    @Override   // TODO make this a default method in Java 8
-    public int read(Handle handle, long fileOffset, byte[] dst, AtomicReference<Boolean> eofSignalled) throws IOException {
-        return read(handle, fileOffset, dst, 0, dst.length, eofSignalled);
-    }
-
-    @Override   // TODO make this a default method in Java 8
-    public int read(Handle handle, long fileOffset, byte[] dst, int dstOffset, int len) throws IOException {
-        return read(handle, fileOffset, dst, dstOffset, len, null);
-    }
-
     @Override
     public int read(Handle handle, long fileOffset, byte[] dst, int dstOffset, int len, AtomicReference<Boolean> eofSignalled) throws IOException {
         if (eofSignalled != null) {
@@ -959,11 +859,6 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
         return handle;
     }
 
-    @Override   // TODO in JDK-8 make this a default method
-    public List<DirEntry> readDir(Handle handle) throws IOException {
-        return readDir(handle, null);
-    }
-
     @Override
     public List<DirEntry> readDir(Handle handle, AtomicReference<Boolean> eolIndicator) throws IOException {
         if (eolIndicator != null) {
@@ -998,7 +893,7 @@ public abstract class AbstractSftpClient extends AbstractSubsystemClient impleme
                 log.debug("checkDirResponse({}}[id={}] reading {} entries", channel, id, len);
             }
 
-            List<DirEntry> entries = new ArrayList<DirEntry>(len);
+            List<DirEntry> entries = new ArrayList<>(len);
             for (int i = 0; i < len; i++) {
                 String name = buffer.getString();
                 String longName = (version == SftpConstants.SFTP_V3) ? buffer.getString() : null;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/DefaultSftpClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/DefaultSftpClient.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/DefaultSftpClient.java
index f60aca3..103773f 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/DefaultSftpClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/DefaultSftpClient.java
@@ -61,7 +61,7 @@ public class DefaultSftpClient extends AbstractSftpClient {
     private final Map<Integer, Buffer> messages = new HashMap<>();
     private final AtomicInteger cmdId = new AtomicInteger(100);
     private final Buffer receiveBuffer = new ByteArrayBuffer();
-    private final byte[] workBuf = new byte[Integer.SIZE / Byte.SIZE];  // TODO in JDK-8 use Integer.BYTES
+    private final byte[] workBuf = new byte[Integer.BYTES];
     private final AtomicInteger versionHolder = new AtomicInteger(0);
     private final AtomicBoolean closing = new AtomicBoolean(false);
     private final Map<String, byte[]> extensions = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
@@ -253,7 +253,7 @@ public class DefaultSftpClient extends AbstractSftpClient {
         }
 
         OutputStream dos = channel.getInvertedIn();
-        BufferUtils.writeInt(dos, 1 /* cmd */ + (Integer.SIZE / Byte.SIZE) /* id */ + len, workBuf);
+        BufferUtils.writeInt(dos, 1 /* cmd */ + Integer.BYTES /* id */ + len, workBuf);
         dos.write(cmd & 0xFF);
         BufferUtils.writeInt(dos, id, workBuf);
         dos.write(buffer.array(), buffer.rpos(), len);
@@ -288,13 +288,11 @@ public class DefaultSftpClient extends AbstractSftpClient {
         InputStream dis = channel.getInvertedOut();
         int length = BufferUtils.readInt(dis, workBuf);
         // must have at least command + length
-        // TODO in jdk-8 use Integer.BYTES
-        if (length < (1 + (Integer.SIZE / Byte.SIZE))) {
+        if (length < (1 + Integer.BYTES)) {
             throw new IllegalArgumentException("Bad length: " + length);
         }
 
-        // TODO in jdk-8 use Integer.BYTES
-        Buffer buffer = new ByteArrayBuffer(length + (Integer.SIZE / Byte.SIZE), false);
+        Buffer buffer = new ByteArrayBuffer(length + Integer.BYTES, false);
         buffer.putInt(length);
         int nb = length;
         while (nb > 0) {
@@ -441,8 +439,8 @@ public class DefaultSftpClient extends AbstractSftpClient {
         }
 
         String verVal = String.valueOf(selected);
-        Buffer buffer = new ByteArrayBuffer((Integer.SIZE / Byte.SIZE) + SftpConstants.EXT_VERSION_SELECT.length()     // extension name
-                + (Integer.SIZE / Byte.SIZE) + verVal.length() + Byte.SIZE, false);
+        Buffer buffer = new ByteArrayBuffer(Integer.BYTES + SftpConstants.EXT_VERSION_SELECT.length()     // extension name
+                + Integer.BYTES + verVal.length() + Byte.SIZE, false);
         buffer.putString(SftpConstants.EXT_VERSION_SELECT);
         buffer.putString(verVal);
         checkCommandStatus(SftpConstants.SSH_FXP_EXTENDED, buffer);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpClient.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpClient.java
index 3669882..1673ebb 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpClient.java
@@ -48,7 +48,6 @@ import org.bouncycastle.util.Arrays;
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
 public interface SftpClient extends SubsystemClient {
-
     enum OpenMode {
         Read,
         Write,
@@ -437,6 +436,10 @@ public interface SftpClient extends SubsystemClient {
      */
     int getVersion();
 
+    @Override
+    default String getName() {
+        return SftpConstants.SFTP_SUBSYSTEM_NAME;
+    }
     /**
      * @return An (unmodifiable) {@link Map} of the reported server extensions.
      */
@@ -454,8 +457,11 @@ public interface SftpClient extends SubsystemClient {
      * @param path The remote path
      * @return The file's {@link CloseableHandle}
      * @throws IOException If failed to open the remote file
+     * @see #open(String, Collection)
      */
-    CloseableHandle open(String path) throws IOException;
+    default CloseableHandle open(String path) throws IOException {
+        return open(path, Collections.<OpenMode>emptySet());
+    }
 
     /**
      * Opens a remote file with the specified mode(s)
@@ -465,8 +471,11 @@ public interface SftpClient extends SubsystemClient {
      *                then {@link OpenMode#Read} is assumed
      * @return The file's {@link CloseableHandle}
      * @throws IOException If failed to open the remote file
+     * @see #open(String, Collection)
      */
-    CloseableHandle open(String path, OpenMode... options) throws IOException;
+    default CloseableHandle open(String path, OpenMode... options) throws IOException {
+        return open(path, GenericUtils.of(options));
+    }
 
     /**
      * Opens a remote file with the specified mode(s)
@@ -493,9 +502,13 @@ public interface SftpClient extends SubsystemClient {
      */
     void remove(String path) throws IOException;
 
-    void rename(String oldPath, String newPath) throws IOException;
+    default void rename(String oldPath, String newPath) throws IOException {
+        rename(oldPath, newPath, Collections.<CopyMode>emptySet());
+    }
 
-    void rename(String oldPath, String newPath, CopyMode... options) throws IOException;
+    default void rename(String oldPath, String newPath, CopyMode... options) throws IOException {
+        rename(oldPath, newPath, GenericUtils.of(options));
+    }
 
     void rename(String oldPath, String newPath, Collection<CopyMode> options) throws IOException;
 
@@ -509,7 +522,9 @@ public interface SftpClient extends SubsystemClient {
      * @throws IOException If failed to read the data
      * @see #read(Handle, long, byte[], int, int)
      */
-    int read(Handle handle, long fileOffset, byte[] dst) throws IOException;
+    default int read(Handle handle, long fileOffset, byte[] dst) throws IOException  {
+        return read(handle, fileOffset, dst, null);
+    }
 
     /**
      * Reads data from the open (file) handle
@@ -525,9 +540,13 @@ public interface SftpClient extends SubsystemClient {
      * @see #read(Handle, long, byte[], int, int, AtomicReference)
      * @see <A HREF="https://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.3">SFTP v6 - section 9.3</A>
      */
-    int read(Handle handle, long fileOffset, byte[] dst, AtomicReference<Boolean> eofSignalled) throws IOException;
+    default int read(Handle handle, long fileOffset, byte[] dst, AtomicReference<Boolean> eofSignalled) throws IOException {
+        return read(handle, fileOffset, dst, 0, dst.length, eofSignalled);
+    }
 
-    int read(Handle handle, long fileOffset, byte[] dst, int dstOffset, int len) throws IOException;
+    default int read(Handle handle, long fileOffset, byte[] dst, int dstOffset, int len) throws IOException {
+        return read(handle, fileOffset, dst, dstOffset, len, null);
+    }
 
     /**
      * Reads data from the open (file) handle
@@ -546,7 +565,9 @@ public interface SftpClient extends SubsystemClient {
      */
     int read(Handle handle, long fileOffset, byte[] dst, int dstOffset, int len, AtomicReference<Boolean> eofSignalled) throws IOException;
 
-    void write(Handle handle, long fileOffset, byte[] src) throws IOException;
+    default void write(Handle handle, long fileOffset, byte[] src) throws IOException {
+        write(handle, fileOffset, src, 0, src.length);
+    }
 
     /**
      * Write data to (open) file handle
@@ -595,7 +616,9 @@ public interface SftpClient extends SubsystemClient {
      * {@link #readDir(String)}
      * @throws IOException If failed to access the remote site
      */
-    List<DirEntry> readDir(Handle handle) throws IOException;
+    default List<DirEntry> readDir(Handle handle) throws IOException {
+        return readDir(handle, null);
+    }
 
     /**
      * @param handle Directory {@link Handle} to read from
@@ -681,8 +704,11 @@ public interface SftpClient extends SubsystemClient {
      * @param linkPath   The link location
      * @param targetPath The referenced target by the link
      * @throws IOException If failed to execute
+     * @see #link(String, String, boolean)
      */
-    void symLink(String linkPath, String targetPath) throws IOException;
+    default void symLink(String linkPath, String targetPath) throws IOException {
+        link(linkPath, targetPath, true);
+    }
 
     /**
      * Create a link
@@ -711,15 +737,25 @@ public interface SftpClient extends SubsystemClient {
      */
     Iterable<DirEntry> readDir(String path) throws IOException;
 
-    InputStream read(String path) throws IOException;
+    default InputStream read(String path) throws IOException {
+        return read(path, DEFAULT_READ_BUFFER_SIZE);
+    }
 
-    InputStream read(String path, int bufferSize) throws IOException;
+    default InputStream read(String path, int bufferSize) throws IOException {
+        return read(path, bufferSize, EnumSet.of(OpenMode.Read));
+    }
 
-    InputStream read(String path, OpenMode... mode) throws IOException;
+    default InputStream read(String path, OpenMode... mode) throws IOException {
+        return read(path, DEFAULT_READ_BUFFER_SIZE, mode);
+    }
 
-    InputStream read(String path, int bufferSize, OpenMode... mode) throws IOException;
+    default InputStream read(String path, int bufferSize, OpenMode... mode) throws IOException {
+        return read(path, bufferSize, GenericUtils.of(mode));
+    }
 
-    InputStream read(String path, Collection<OpenMode> mode) throws IOException;
+    default InputStream read(String path, Collection<OpenMode> mode) throws IOException {
+        return read(path, DEFAULT_READ_BUFFER_SIZE, mode);
+    }
 
     /**
      * Read a remote file's data via an input stream
@@ -732,15 +768,25 @@ public interface SftpClient extends SubsystemClient {
      */
     InputStream read(String path, int bufferSize, Collection<OpenMode> mode) throws IOException;
 
-    OutputStream write(String path) throws IOException;
+    default OutputStream write(String path) throws IOException {
+        return write(path, DEFAULT_WRITE_BUFFER_SIZE);
+    }
 
-    OutputStream write(String path, int bufferSize) throws IOException;
+    default OutputStream write(String path, int bufferSize) throws IOException {
+        return write(path, bufferSize, EnumSet.of(OpenMode.Write, OpenMode.Create, OpenMode.Truncate));
+    }
 
-    OutputStream write(String path, OpenMode... mode) throws IOException;
+    default OutputStream write(String path, OpenMode... mode) throws IOException {
+        return write(path, DEFAULT_WRITE_BUFFER_SIZE, mode);
+    }
 
-    OutputStream write(String path, int bufferSize, OpenMode... mode) throws IOException;
+    default OutputStream write(String path, int bufferSize, OpenMode... mode) throws IOException {
+        return write(path, bufferSize, GenericUtils.of(mode));
+    }
 
-    OutputStream write(String path, Collection<OpenMode> mode) throws IOException;
+    default OutputStream write(String path, Collection<OpenMode> mode) throws IOException {
+        return write(path, DEFAULT_WRITE_BUFFER_SIZE, mode);
+    }
 
     /**
      * Write to a remote file via an output stream

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpClientCreator.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpClientCreator.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpClientCreator.java
index 09b0843..2f93c90 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpClientCreator.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpClientCreator.java
@@ -32,7 +32,9 @@ public interface SftpClientCreator {
      * @return The created {@link SftpClient}
      * @throws IOException if failed to create the client
      */
-    SftpClient createSftpClient() throws IOException;
+    default SftpClient createSftpClient() throws IOException {
+        return createSftpClient(SftpVersionSelector.CURRENT);
+    }
 
     /**
      * Creates an SFTP client using the specified version
@@ -43,7 +45,9 @@ public interface SftpClientCreator {
      * @return The created {@link SftpClient}
      * @throws IOException If failed to create the client or use the specified version
      */
-    SftpClient createSftpClient(int version) throws IOException;
+    default SftpClient createSftpClient(int version) throws IOException {
+        return createSftpClient(SftpVersionSelector.Utils.fixedVersionSelector(version));
+    }
 
     /**
      * Creates an SFTP client while allowing the selection of a specific version

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/BuiltinSftpClientExtensions.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/BuiltinSftpClientExtensions.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/BuiltinSftpClientExtensions.java
index c95d8fd..dda5e00 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/BuiltinSftpClientExtensions.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/BuiltinSftpClientExtensions.java
@@ -132,12 +132,6 @@ public enum BuiltinSftpClientExtensions implements SftpClientExtensionFactory {
         return type;
     }
 
-    @Override
-    public SftpClientExtension create(SftpClient client, RawSftpClient raw) {
-        Map<String, byte[]> extensions = client.getServerExtensions();
-        return create(client, raw, extensions, ParserUtils.parse(extensions));
-    }
-
     public static BuiltinSftpClientExtensions fromName(String n) {
         return NamedResource.Utils.findByName(n, String.CASE_INSENSITIVE_ORDER, VALUES);
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtensionFactory.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtensionFactory.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtensionFactory.java
index f9257e6..0692a04 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtensionFactory.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtensionFactory.java
@@ -24,13 +24,16 @@ import java.util.Map;
 import org.apache.sshd.client.subsystem.sftp.RawSftpClient;
 import org.apache.sshd.client.subsystem.sftp.SftpClient;
 import org.apache.sshd.common.NamedResource;
+import org.apache.sshd.common.subsystem.sftp.extensions.ParserUtils;
 
 /**
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
 public interface SftpClientExtensionFactory extends NamedResource {
-    // TODO make this a default method for JDK-8
-    SftpClientExtension create(SftpClient client, RawSftpClient raw);
+    default SftpClientExtension create(SftpClient client, RawSftpClient raw) {
+        Map<String, byte[]> extensions = client.getServerExtensions();
+        return create(client, raw, extensions, ParserUtils.parse(extensions));
+    }
 
     SftpClientExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed);
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractMD5HashExtension.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractMD5HashExtension.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractMD5HashExtension.java
index 62654dd..ee163e2 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractMD5HashExtension.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractMD5HashExtension.java
@@ -39,7 +39,7 @@ public abstract class AbstractMD5HashExtension extends AbstractSftpClientExtensi
     }
 
     protected byte[] doGetHash(Object target, long offset, long length, byte[] quickHash) throws IOException {
-        Buffer buffer = getCommandBuffer(target, Long.SIZE + 2 * (Long.SIZE / Byte.SIZE) + (Integer.SIZE / Byte.SIZE) + NumberUtils.length(quickHash));
+        Buffer buffer = getCommandBuffer(target, Long.SIZE + 2 * Long.BYTES + Integer.BYTES + NumberUtils.length(quickHash));
         String opcode = getName();
         putTarget(buffer, target);
         buffer.putLong(offset);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractSftpClientExtension.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractSftpClientExtension.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractSftpClientExtension.java
index 95697e7..46a1235 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractSftpClientExtension.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractSftpClientExtension.java
@@ -145,11 +145,11 @@ public abstract class AbstractSftpClientExtension extends AbstractLoggingBean im
      */
     protected Buffer getCommandBuffer(Object target, int extraSize) {
         if (target instanceof CharSequence) {
-            return getCommandBuffer((Integer.SIZE / Byte.SIZE) + ((CharSequence) target).length() + extraSize);
+            return getCommandBuffer(Integer.BYTES + ((CharSequence) target).length() + extraSize);
         } else if (target instanceof byte[]) {
-            return getCommandBuffer((Integer.SIZE / Byte.SIZE) + ((byte[]) target).length + extraSize);
+            return getCommandBuffer(Integer.BYTES + ((byte[]) target).length + extraSize);
         } else if (target instanceof Handle) {
-            return getCommandBuffer((Integer.SIZE / Byte.SIZE) + ((Handle) target).length() + extraSize);
+            return getCommandBuffer(Integer.BYTES + ((Handle) target).length() + extraSize);
         } else {
             return getCommandBuffer(extraSize);
         }
@@ -161,7 +161,7 @@ public abstract class AbstractSftpClientExtension extends AbstractLoggingBean im
      */
     protected Buffer getCommandBuffer(int extraSize) {
         String opcode = getName();
-        Buffer buffer = new ByteArrayBuffer((Integer.SIZE / Byte.SIZE) + GenericUtils.length(opcode) + extraSize + Byte.SIZE, false);
+        Buffer buffer = new ByteArrayBuffer(Integer.BYTES + GenericUtils.length(opcode) + extraSize + Byte.SIZE, false);
         buffer.putString(opcode);
         return buffer;
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyDataExtensionImpl.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyDataExtensionImpl.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyDataExtensionImpl.java
index ac75a09..c56129f 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyDataExtensionImpl.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyDataExtensionImpl.java
@@ -42,9 +42,9 @@ public class CopyDataExtensionImpl extends AbstractSftpClientExtension implement
     public void copyData(Handle readHandle, long readOffset, long readLength, Handle writeHandle, long writeOffset) throws IOException {
         byte[] srcId = readHandle.getIdentifier();
         byte[] dstId = writeHandle.getIdentifier();
-        Buffer buffer = getCommandBuffer((Integer.SIZE / Byte.SIZE) + NumberUtils.length(srcId)
-                + (Integer.SIZE / Byte.SIZE) + NumberUtils.length(dstId)
-                + (3 * (Long.SIZE + (Integer.SIZE / Byte.SIZE))));
+        Buffer buffer = getCommandBuffer(Integer.BYTES + NumberUtils.length(srcId)
+                + Integer.BYTES + NumberUtils.length(dstId)
+                + (3 * (Long.SIZE + Integer.BYTES)));
         buffer.putBytes(srcId);
         buffer.putLong(readOffset);
         buffer.putLong(readLength);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyFileExtensionImpl.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyFileExtensionImpl.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyFileExtensionImpl.java
index bb32bb7..5ce5f9a 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyFileExtensionImpl.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/CopyFileExtensionImpl.java
@@ -39,8 +39,8 @@ public class CopyFileExtensionImpl extends AbstractSftpClientExtension implement
 
     @Override
     public void copyFile(String src, String dst, boolean overwriteDestination) throws IOException {
-        Buffer buffer = getCommandBuffer((Integer.SIZE / Byte.SIZE) + GenericUtils.length(src)
-                + (Integer.SIZE / Byte.SIZE) + GenericUtils.length(dst)
+        Buffer buffer = getCommandBuffer(Integer.BYTES + GenericUtils.length(src)
+                + Integer.BYTES + GenericUtils.length(dst)
                 + 1 /* override destination */);
         buffer.putString(src);
         buffer.putString(dst);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/openssh/helpers/OpenSSHFsyncExtensionImpl.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/openssh/helpers/OpenSSHFsyncExtensionImpl.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/openssh/helpers/OpenSSHFsyncExtensionImpl.java
index cafb600..e83ea11 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/openssh/helpers/OpenSSHFsyncExtensionImpl.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/openssh/helpers/OpenSSHFsyncExtensionImpl.java
@@ -42,7 +42,7 @@ public class OpenSSHFsyncExtensionImpl extends AbstractSftpClientExtension imple
     @Override
     public void fsync(Handle fileHandle) throws IOException {
         byte[] handle = fileHandle.getIdentifier();
-        Buffer buffer = getCommandBuffer((Integer.SIZE / Byte.SIZE) + NumberUtils.length(handle));
+        Buffer buffer = getCommandBuffer(Integer.BYTES + NumberUtils.length(handle));
         buffer.putBytes(handle);
         sendAndCheckExtendedCommandStatus(buffer);
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/common/Factory.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/Factory.java b/sshd-core/src/main/java/org/apache/sshd/common/Factory.java
index 37d1a96..406eb5e 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/Factory.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/Factory.java
@@ -25,6 +25,7 @@ package org.apache.sshd.common;
  * @param <T> type of objets this factory will create
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
+@FunctionalInterface
 public interface Factory<T> {
 
     /**

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/common/FactoryManagerHolder.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/FactoryManagerHolder.java b/sshd-core/src/main/java/org/apache/sshd/common/FactoryManagerHolder.java
index 810ac09..9b2f938 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/FactoryManagerHolder.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/FactoryManagerHolder.java
@@ -22,6 +22,7 @@ package org.apache.sshd.common;
 /**
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
+@FunctionalInterface
 public interface FactoryManagerHolder {
     /**
      * @return The currently associated {@link FactoryManager}

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/common/NamedResource.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/NamedResource.java b/sshd-core/src/main/java/org/apache/sshd/common/NamedResource.java
index 9427201..87b1e63 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/NamedResource.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/NamedResource.java
@@ -31,6 +31,7 @@ import org.apache.sshd.common.util.Transformer;
 /**
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
+@FunctionalInterface
 public interface NamedResource {
 
     /**

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/common/OptionalFeature.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/OptionalFeature.java b/sshd-core/src/main/java/org/apache/sshd/common/OptionalFeature.java
index 43497eb..54ec1b4 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/OptionalFeature.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/OptionalFeature.java
@@ -26,7 +26,8 @@ import org.apache.sshd.common.util.GenericUtils;
 /**
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
-public interface OptionalFeature {  // TODO define this as a @FunctionalInterface in Java 8
+@FunctionalInterface
+public interface OptionalFeature {
     OptionalFeature TRUE = new OptionalFeature() {
         @Override
         public boolean isSupported() {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/common/SshConstants.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/SshConstants.java b/sshd-core/src/main/java/org/apache/sshd/common/SshConstants.java
index af46ab7..919ba40 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/SshConstants.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/SshConstants.java
@@ -23,9 +23,9 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import org.apache.sshd.common.util.GenericUtils;
-import org.apache.sshd.common.util.Predicate;
 import org.apache.sshd.common.util.logging.LoggingUtils;
 
 /**
@@ -130,7 +130,7 @@ public final class SshConstants {
     private static class LazyAmbiguousOpcodesHolder {
         private static final Set<Integer> AMBIGUOUS_OPCODES =
             Collections.unmodifiableSet(
-                new HashSet<Integer>(
+                new HashSet<>(
                         LoggingUtils.getAmbiguousMenmonics(SshConstants.class, "SSH_MSG_").values()));
     }
 
@@ -155,7 +155,7 @@ public final class SshConstants {
         private static final Map<Integer, String> MESSAGES_MAP =
                 LoggingUtils.generateMnemonicMap(SshConstants.class, new Predicate<Field>() {
                     @Override
-                    public boolean evaluate(Field f) {
+                    public boolean test(Field f) {
                         String name = f.getName();
                         if (!name.startsWith("SSH_MSG_")) {
                             return false;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
----------------------------------------------------------------------
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 f6f5ddf..c99f6f3 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
@@ -332,7 +332,7 @@ public abstract class AbstractChannel
                  ? SshConstants.SSH_MSG_CHANNEL_SUCCESS
                  : SshConstants.SSH_MSG_CHANNEL_FAILURE;
         Session session = getSession();
-        Buffer rsp = session.createBuffer(cmd, Integer.SIZE / Byte.SIZE);
+        Buffer rsp = session.createBuffer(cmd, Integer.BYTES);
         rsp.putInt(recipient);
         return session.writePacket(rsp);
     }
@@ -664,7 +664,7 @@ public abstract class AbstractChannel
                 log.debug("handleExtendedData({}) SSH_MSG_CHANNEL_FAILURE - non STDERR type: {}", this, ex);
             }
             Session s = getSession();
-            Buffer rsp = s.createBuffer(SshConstants.SSH_MSG_CHANNEL_FAILURE, Integer.SIZE / Byte.SIZE);
+            Buffer rsp = s.createBuffer(SshConstants.SSH_MSG_CHANNEL_FAILURE, Integer.BYTES);
             rsp.putInt(getRecipient());
             writePacket(rsp);
             return;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java
----------------------------------------------------------------------
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 75ca78d..1e2a751 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
@@ -146,7 +146,7 @@ public class ChannelAsyncInputStream extends AbstractCloseable implements IoInpu
             return buffer;
         }
 
-        @Override   // TODO for JDK-8 make this a default method
+        @Override
         public IoReadFuture verify(long timeoutMillis) throws IOException {
             long startTime = System.nanoTime();
             Number result = verifyResult(Number.class, timeoutMillis);
@@ -158,7 +158,7 @@ public class ChannelAsyncInputStream extends AbstractCloseable implements IoInpu
             return this;
         }
 
-        @Override   // TODO for JDK-8 make this a default method
+        @Override
         public int getRead() {
             Object v = getValue();
             if (v instanceof RuntimeException) {
@@ -174,7 +174,7 @@ public class ChannelAsyncInputStream extends AbstractCloseable implements IoInpu
             }
         }
 
-        @Override   // TODO for JDK-8 make this a default method
+        @Override
         public Throwable getException() {
             Object v = getValue();
             if (v instanceof Throwable) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelHolder.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelHolder.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelHolder.java
index 869dc9c..0016503 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelHolder.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelHolder.java
@@ -22,6 +22,7 @@ package org.apache.sshd.common.channel;
 /**
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
+@FunctionalInterface
 public interface ChannelHolder {
     /**
      * @return The associated {@link Channel} instance

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/25bc715a/sshd-core/src/main/java/org/apache/sshd/common/channel/RequestHandler.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/RequestHandler.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/RequestHandler.java
index 7883e7b..d7e796f 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/RequestHandler.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/RequestHandler.java
@@ -31,6 +31,7 @@ import org.apache.sshd.common.util.buffer.Buffer;
  * @param <T> Request type
  * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
  */
+@FunctionalInterface
 public interface RequestHandler<T> {
 
     enum Result {
@@ -75,5 +76,4 @@ public interface RequestHandler<T> {
      * value should be returned
      */
     Result process(T t, String request, boolean wantReply, Buffer buffer) throws Exception;
-
 }