diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/filter/WildcardFileFilter.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/filter/WildcardFileFilter.java
index f7a5543..b672efa 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/filter/WildcardFileFilter.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/filter/WildcardFileFilter.java
@@ -177,12 +177,12 @@
 
         final char[] array = text.toCharArray();
         final ArrayList<String> list = new ArrayList<>();
-        final StringBuilder buffer = new StringBuilder();
+        final StringBuilder builder = new StringBuilder();
         for (int i = 0; i < array.length; i++) {
             if (array[i] == '?' || array[i] == '*') {
-                if (buffer.length() != 0) {
-                    list.add(buffer.toString());
-                    buffer.setLength(0);
+                if (builder.length() != 0) {
+                    list.add(builder.toString());
+                    builder.setLength(0);
                 }
                 if (array[i] == '?') {
                     list.add("?");
@@ -190,11 +190,11 @@
                     list.add("*");
                 }
             } else {
-                buffer.append(array[i]);
+                builder.append(array[i]);
             }
         }
-        if (buffer.length() != 0) {
-            list.add(buffer.toString());
+        if (builder.length() != 0) {
+            list.add(builder.toString());
         }
 
         return list.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileSystem.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileSystem.java
index 92f365a..0f309ae 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileSystem.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileSystem.java
@@ -95,13 +95,10 @@
             return null;
         }
         final Collection<RamFileData> children = data.getChildren();
-        final String[] names;
 
         synchronized (children) {
-            names = children.stream().map(childData -> childData.getName().getBaseName()).toArray(String[]::new);
+            return children.stream().map(childData -> childData.getName().getBaseName()).toArray(String[]::new);
         }
-
-        return names;
     }
 
     /**
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.java
index 7997963..c5486bc 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.java
@@ -223,7 +223,6 @@
 
     private static Proxy createStreamProxy(final String proxyHost, final int proxyPort,
             final FileSystemOptions fileSystemOptions, final SftpFileSystemConfigBuilder builder) {
-        final Proxy proxy;
         // Use a stream proxy, i.e. it will use a remote host as a proxy
         // and run a command (e.g. netcat) that forwards input/output
         // to the target host.
@@ -237,8 +236,7 @@
         final String proxyCommand = builder.getProxyCommand(fileSystemOptions);
 
         // Create the stream proxy
-        proxy = new SftpStreamProxy(proxyCommand, proxyUser, proxyHost, proxyPort, proxyPassword, proxyOptions);
-        return proxy;
+        return new SftpStreamProxy(proxyCommand, proxyUser, proxyHost, proxyPort, proxyPassword, proxyOptions);
     }
 
     private static ProxySOCKS5 createProxySOCKS5(final String proxyHost, final int proxyPort) {
