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

[logging-log4j2] branch master updated: Use final modifier wherever possible. (#506)

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

vy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/master by this push:
     new 0043e92  Use final modifier wherever possible. (#506)
0043e92 is described below

commit 0043e9238af0efd9dbce462463e0fa1bf14e35b0
Author: Arturo Bernal <ar...@gmail.com>
AuthorDate: Thu Jun 17 13:33:57 2021 +0200

    Use final modifier wherever possible. (#506)
---
 .../java/org/apache/logging/log4j/core/Logger.java |    2 +-
 .../apache/logging/log4j/core/LoggerContext.java   |   28 +-
 .../log4j/core/appender/AbstractFileAppender.java  |    2 +-
 .../appender/AbstractOutputStreamAppender.java     |    4 +-
 .../core/appender/AbstractWriterAppender.java      |    2 +-
 .../core/appender/AppenderLoggingException.java    |    4 +-
 .../appender/AsyncAppenderEventDispatcher.java     |    2 +-
 .../log4j/core/appender/ConsoleAppender.java       |    6 +-
 .../log4j/core/appender/FailoverAppender.java      |    4 +-
 .../logging/log4j/core/appender/FileAppender.java  |    2 +-
 .../logging/log4j/core/appender/FileManager.java   |    6 +-
 .../core/appender/HttpURLConnectionManager.java    |    6 +-
 .../core/appender/MemoryMappedFileAppender.java    |    2 +-
 .../core/appender/MemoryMappedFileManager.java     |    2 +-
 .../log4j/core/appender/OutputStreamAppender.java  |    2 +-
 .../log4j/core/appender/OutputStreamManager.java   |    2 +-
 .../core/appender/RandomAccessFileManager.java     |    2 +-
 .../log4j/core/appender/WriterAppender.java        |    2 +-
 .../core/appender/db/AbstractDatabaseAppender.java |    2 +-
 .../appender/db/DbAppenderLoggingException.java    |    4 +-
 .../log4j/core/appender/nosql/NoSqlAppender.java   |    8 +-
 .../core/appender/rewrite/RewriteAppender.java     |    2 +-
 .../appender/rolling/AbstractRolloverStrategy.java |    4 +-
 .../appender/rolling/DefaultRolloverStrategy.java  |    6 +-
 .../core/appender/rolling/PatternProcessor.java    |    4 +-
 .../core/appender/rolling/RollingFileManager.java  |   30 +-
 .../rolling/RollingRandomAccessFileManager.java    |    6 +-
 .../appender/rolling/action/DeletingVisitor.java   |    2 +-
 .../appender/rolling/action/FileRenameAction.java  |    2 +-
 .../appender/rolling/action/GzCompressAction.java  |    2 +-
 .../appender/rolling/action/SortingVisitor.java    |    2 +-
 .../core/appender/routing/IdlePurgePolicy.java     |    2 +-
 .../core/appender/routing/RoutingAppender.java     |   12 +-
 .../logging/log4j/core/async/AsyncLogger.java      |   16 +-
 .../log4j/core/async/AsyncLoggerConfig.java        |    2 +-
 .../core/async/AsyncQueueFullPolicyFactory.java    |    6 +-
 .../async/BasicAsyncLoggerContextSelector.java     |    8 +-
 .../core/async/DefaultAsyncQueueFullPolicy.java    |    2 +-
 .../logging/log4j/core/async/DisruptorUtil.java    |    2 +-
 .../log4j/core/async/RingBufferLogEvent.java       |    2 +-
 .../core/async/RingBufferLogEventHandler.java      |    2 +-
 .../core/async/ThreadNameCachingStrategy.java      |    6 +-
 .../log4j/core/config/AbstractConfiguration.java   |   34 +-
 .../log4j/core/config/ConfigurationFactory.java    |   26 +-
 .../core/config/ConfigurationFileWatcher.java      |    8 +-
 .../log4j/core/config/ConfigurationSource.java     |   36 +-
 .../logging/log4j/core/config/Configurator.java    |    6 +-
 .../logging/log4j/core/config/HttpWatcher.java     |   26 +-
 .../logging/log4j/core/config/LoggerConfig.java    |   12 +-
 .../log4j/core/config/ReliabilityStrategy.java     |    4 +-
 .../log4j/core/config/arbiters/ScriptArbiter.java  |    4 +-
 .../log4j/core/config/arbiters/SelectArbiter.java  |    6 +-
 .../config/arbiters/SystemPropertyArbiter.java     |    2 +-
 .../builder/impl/DefaultConfigurationBuilder.java  |   16 +-
 .../config/composite/CompositeConfiguration.java   |    2 +-
 .../log4j/core/config/json/JsonConfiguration.java  |    4 +-
 .../core/config/plugins/util/PluginBuilder.java    |    6 +-
 .../plugins/visitors/PluginElementVisitor.java     |    2 +-
 .../properties/PropertiesConfigurationBuilder.java |    2 +-
 .../log4j/core/config/xml/XmlConfiguration.java    |    4 +-
 .../log4j/core/filter/AbstractFilterable.java      |    2 +-
 .../logging/log4j/core/filter/NeutralFilter.java   |   42 +-
 .../logging/log4j/core/filter/TimeFilter.java      |   10 +-
 .../log4j/core/impl/ContextDataFactory.java        |    2 +-
 .../log4j/core/impl/ExtendedStackTraceElement.java |    4 +-
 .../log4j/core/impl/Log4jContextFactory.java       |    6 +-
 .../logging/log4j/core/impl/Log4jLogEvent.java     |    2 +-
 .../logging/log4j/core/impl/LogEventFactory.java   |    4 +-
 .../logging/log4j/core/impl/MementoMessage.java    |    4 +-
 .../logging/log4j/core/impl/MutableLogEvent.java   |    4 +-
 .../log4j/core/impl/ReusableLogEventFactory.java   |    4 +-
 .../log4j/core/impl/ThreadContextDataInjector.java |    8 +-
 .../logging/log4j/core/impl/ThrowableProxy.java    |    2 +-
 .../log4j/core/impl/ThrowableProxyHelper.java      |    4 +-
 .../log4j/core/impl/ThrowableProxyRenderer.java    |   16 +-
 .../logging/log4j/core/layout/GelfLayout.java      |   20 +-
 .../logging/log4j/core/layout/HtmlLayout.java      |    2 +-
 .../log4j/core/layout/LevelPatternSelector.java    |    2 +-
 .../log4j/core/layout/MarkerPatternSelector.java   |    2 +-
 .../logging/log4j/core/layout/PatternLayout.java   |   10 +-
 .../logging/log4j/core/layout/Rfc5424Layout.java   |    4 +-
 .../log4j/core/layout/ScriptPatternSelector.java   |    2 +-
 .../logging/log4j/core/lookup/Base64StrLookup.java |    2 +-
 .../logging/log4j/core/lookup/StrSubstitutor.java  |    6 +-
 .../log4j/core/net/DatagramSocketManager.java      |    2 +-
 .../log4j/core/net/MulticastDnsAdvertiser.java     |    2 +-
 .../logging/log4j/core/net/SslSocketManager.java   |   12 +-
 .../logging/log4j/core/net/TcpSocketManager.java   |   40 +-
 .../log4j/core/net/UrlConnectionFactory.java       |   18 +-
 .../net/ssl/AbstractKeyStoreConfiguration.java     |    2 +-
 .../core/net/ssl/EnvironmentPasswordProvider.java  |    2 +-
 .../log4j/core/net/ssl/FilePasswordProvider.java   |    8 +-
 .../log4j/core/net/ssl/KeyStoreConfiguration.java  |    6 +-
 .../log4j/core/net/ssl/SslConfiguration.java       |    2 +-
 .../core/net/ssl/SslConfigurationFactory.java      |   12 +-
 .../core/net/ssl/StoreConfigurationException.java  |    2 +-
 .../core/net/ssl/TrustStoreConfiguration.java      |    4 +-
 .../log4j/core/osgi/BundleContextSelector.java     |    2 +-
 .../log4j/core/pattern/DatePatternConverter.java   |    4 +-
 .../log4j/core/pattern/HighlightConverter.java     |    4 +-
 .../log4j/core/pattern/JAnsiTextRenderer.java      |    2 +-
 .../log4j/core/pattern/MapPatternConverter.java    |    4 +-
 .../core/pattern/MessagePatternConverter.java      |    2 +-
 .../log4j/core/pattern/NameAbbreviator.java        |    2 +-
 .../logging/log4j/core/pattern/PatternParser.java  |   12 +-
 .../core/pattern/ProcessIdPatternConverter.java    |    2 +-
 .../log4j/core/pattern/RepeatPatternConverter.java |    2 +-
 .../core/pattern/ThrowablePatternConverter.java    |    4 +-
 .../logging/log4j/core/script/ScriptFile.java      |    2 +-
 .../log4j/core/selector/BasicContextSelector.java  |    8 +-
 .../core/selector/ClassLoaderContextSelector.java  |   12 +-
 .../log4j/core/selector/ContextSelector.java       |   12 +-
 .../log4j/core/selector/JndiContextSelector.java   |   10 +-
 .../logging/log4j/core/time/ClockFactory.java      |    8 +-
 .../logging/log4j/core/time/MutableInstant.java    |    4 +-
 .../log4j/core/time/internal/SystemClock.java      |    4 +-
 .../core/time/internal/format/FastDateParser.java  |    2 +-
 .../core/time/internal/format/FormatCache.java     |    2 +-
 .../log4j/core/tools/picocli/CommandLine.java      | 1166 ++++++++++----------
 .../logging/log4j/core/util/AbstractWatcher.java   |    2 +-
 .../core/util/BasicAuthorizationProvider.java      |   12 +-
 .../core/util/DefaultShutdownCallbackRegistry.java |    6 +-
 .../apache/logging/log4j/core/util/FileUtils.java  |    4 +-
 .../org/apache/logging/log4j/core/util/Loader.java |    4 +-
 .../apache/logging/log4j/core/util/NetUtils.java   |    4 +-
 .../logging/log4j/core/util/OptionConverter.java   |   30 +-
 .../logging/log4j/core/util/ProcessIdUtil.java     |   12 +-
 .../org/apache/logging/log4j/core/util/Source.java |    6 +-
 .../apache/logging/log4j/core/util/UuidUtil.java   |    2 +-
 .../logging/log4j/core/util/WatchManager.java      |   18 +-
 .../logging/log4j/core/util/WatcherFactory.java    |   22 +-
 .../log4j/core/util/WrappedFileWatcher.java        |   18 +-
 .../log4j/core/util/datetime/FastDateFormat.java   |    2 +-
 133 files changed, 1051 insertions(+), 1051 deletions(-)

diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java
index 806f4a7..979a7bd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java
@@ -118,7 +118,7 @@ public class Logger extends AbstractLogger implements Supplier<LoggerConfig> {
         if (level == getLevel()) {
             return;
         }
-        Level actualLevel;
+        final Level actualLevel;
         if (level != null) {
             actualLevel = level;
         } else {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
index e9487c9..0141c34 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
@@ -134,7 +134,7 @@ public class LoggerContext extends AbstractLifeCycle
             externalMap.put(EXTERNAL_CONTEXT_KEY, externalContext);
         }
         this.configLocation = configLocn;
-        Thread runner = new Thread(new ThreadContextDataTask(), "Thread Context Data Task");
+        final Thread runner = new Thread(new ThreadContextDataTask(), "Thread Context Data Task");
         runner.setDaemon(true);
         runner.start();
     }
@@ -165,12 +165,12 @@ public class LoggerContext extends AbstractLifeCycle
         } else {
             configLocation = null;
         }
-        Thread runner = new Thread(new ThreadContextDataTask(), "Thread Context Data Task");
+        final Thread runner = new Thread(new ThreadContextDataTask(), "Thread Context Data Task");
         runner.setDaemon(true);
         runner.start();
     }
 
-    public void addShutdownListener(LoggerContextShutdownAware listener) {
+    public void addShutdownListener(final LoggerContextShutdownAware listener) {
         if (listeners == null) {
             synchronized(this) {
                 if (listeners == null) {
@@ -393,10 +393,10 @@ public class LoggerContext extends AbstractLifeCycle
             this.setStopped();
         }
         if (listeners != null) {
-            for (LoggerContextShutdownAware listener : listeners) {
+            for (final LoggerContextShutdownAware listener : listeners) {
                 try {
                     listener.contextShutdown(this);
-                } catch (Exception ex) {
+                } catch (final Exception ex) {
                     // Ignore the exception.
                 }
             }
@@ -434,27 +434,27 @@ public class LoggerContext extends AbstractLifeCycle
     }
 
     @Override
-    public Object getObject(String key) {
+    public Object getObject(final String key) {
         return externalMap.get(key);
     }
 
     @Override
-    public Object putObject(String key, Object value) {
+    public Object putObject(final String key, final Object value) {
         return externalMap.put(key, value);
     }
 
     @Override
-    public Object putObjectIfAbsent(String key, Object value) {
+    public Object putObjectIfAbsent(final String key, final Object value) {
         return externalMap.putIfAbsent(key, value);
     }
 
     @Override
-    public Object removeObject(String key) {
+    public Object removeObject(final String key) {
         return externalMap.remove(key);
     }
 
     @Override
-    public boolean removeObject(String key, Object value) {
+    public boolean removeObject(final String key, final Object value) {
         return externalMap.remove(key, value);
     }
 
@@ -680,7 +680,7 @@ public class LoggerContext extends AbstractLifeCycle
      * Reconfigures the context.
      */
     private void reconfigure(final URI configURI) {
-        Object externalContext = externalMap.get(EXTERNAL_CONTEXT_KEY);
+        final Object externalContext = externalMap.get(EXTERNAL_CONTEXT_KEY);
         final ClassLoader cl = ClassLoader.class.isInstance(externalContext) ? (ClassLoader) externalContext : null;
         LOGGER.debug("Reconfiguration started for context[name={}] at URI {} ({}) with optional ClassLoader: {}",
                 contextName, configURI, this, cl);
@@ -708,11 +708,11 @@ public class LoggerContext extends AbstractLifeCycle
         reconfigure(configLocation);
     }
 
-    public void reconfigure(Configuration configuration) {
+    public void reconfigure(final Configuration configuration) {
         setConfiguration(configuration);
-        ConfigurationSource source = configuration.getConfigurationSource();
+        final ConfigurationSource source = configuration.getConfigurationSource();
         if (source != null) {
-            URI uri = source.getURI();
+            final URI uri = source.getURI();
             if (uri != null) {
                 configLocation = uri;
             }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractFileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractFileAppender.java
index 4b88cc7..2ea6997 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractFileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractFileAppender.java
@@ -160,7 +160,7 @@ public abstract class AbstractFileAppender<M extends OutputStreamManager> extend
 
     private AbstractFileAppender(final String name, final Layout<? extends Serializable> layout, final Filter filter,
             final M manager, final String filename, final boolean ignoreExceptions,
-            final boolean immediateFlush, final Advertiser advertiser, Property[] properties) {
+            final boolean immediateFlush, final Advertiser advertiser, final Property[] properties) {
 
         super(name, layout, filter, ignoreExceptions, immediateFlush, properties, manager);
         if (advertiser != null) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
index b498f95..cee9a82 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
@@ -98,8 +98,8 @@ public abstract class AbstractOutputStreamAppender<M extends OutputStreamManager
      * @param manager The OutputStreamManager.
      */
     protected AbstractOutputStreamAppender(final String name, final Layout<? extends Serializable> layout,
-            final Filter filter, final boolean ignoreExceptions, final boolean immediateFlush, Property[] properties,
-            final M manager) {
+              final Filter filter, final boolean ignoreExceptions, final boolean immediateFlush, final Property[] properties,
+              final M manager) {
         super(name, filter, layout, ignoreExceptions, properties);
         this.manager = manager;
         this.immediateFlush = immediateFlush;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractWriterAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractWriterAppender.java
index 0042a27..0ba5936 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractWriterAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractWriterAppender.java
@@ -59,7 +59,7 @@ public abstract class AbstractWriterAppender<M extends WriterManager> extends Ab
      *            The OutputStreamManager.
      */
     protected AbstractWriterAppender(final String name, final StringLayout layout, final Filter filter,
-            final boolean ignoreExceptions, final boolean immediateFlush, Property[] properties, final M manager) {
+              final boolean ignoreExceptions, final boolean immediateFlush, final Property[] properties, final M manager) {
         super(name, filter, layout, ignoreExceptions, properties);
         this.manager = manager;
         this.immediateFlush = immediateFlush;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AppenderLoggingException.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AppenderLoggingException.java
index 4174e4e..592dbb8 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AppenderLoggingException.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AppenderLoggingException.java
@@ -50,7 +50,7 @@ public class AppenderLoggingException extends LoggingException {
      * @param args The reason arguments for the exception, see {@link String#format(String, Object...)}.
      * @since 2.12.1
      */
-    public AppenderLoggingException(final String format, Object... args) {
+    public AppenderLoggingException(final String format, final Object... args) {
         super(String.format(format, args));
     }
 
@@ -81,7 +81,7 @@ public class AppenderLoggingException extends LoggingException {
      * @param args The reason arguments for the exception, see {@link String#format(String, Object...)}.
      * @since 2.12.1
      */
-    public AppenderLoggingException(final Throwable cause, final String format, Object... args) {
+    public AppenderLoggingException(final Throwable cause, final String format, final Object... args) {
         super(String.format(format, args), cause);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppenderEventDispatcher.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppenderEventDispatcher.java
index d9efc94..6b7728e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppenderEventDispatcher.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppenderEventDispatcher.java
@@ -66,7 +66,7 @@ class AsyncAppenderEventDispatcher extends Log4jThread {
 
     private void dispatchAll() {
         while (!stoppedRef.get()) {
-            LogEvent event;
+            final LogEvent event;
             try {
                 event = queue.take();
             } catch (final InterruptedException ignored) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
index ce73da0..8416283 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
@@ -88,14 +88,14 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
 
         public abstract Charset getDefaultCharset();
 
-        protected Charset getCharset(final String property, Charset defaultCharset) {
+        protected Charset getCharset(final String property, final Charset defaultCharset) {
             return new PropertiesUtil(PropertiesUtil.getSystemProperties()).getCharsetProperty(property, defaultCharset);
         }
 
     }
 
     private ConsoleAppender(final String name, final Layout<? extends Serializable> layout, final Filter filter,
-            final OutputStreamManager manager, final boolean ignoreExceptions, final Target target, Property[] properties) {
+            final OutputStreamManager manager, final boolean ignoreExceptions, final Target target, final Property[] properties) {
         super(name, layout, filter, ignoreExceptions, true, properties, manager);
         this.target = target;
     }
@@ -204,7 +204,7 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
         return outputStream;
     }
 
-    private static String clean(String string) {
+    private static String clean(final String string) {
         return string.replace(Chars.NUL, Chars.SPACE);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
index 965330e..cc1f0b7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
@@ -64,7 +64,7 @@ public final class FailoverAppender extends AbstractAppender {
 
     private FailoverAppender(final String name, final Filter filter, final String primary, final String[] failovers,
             final int intervalMillis, final Configuration config, final boolean ignoreExceptions,
-            Property[] properties) {
+            final Property[] properties) {
         super(name, filter, null, ignoreExceptions, properties);
         this.primaryRef = primary;
         this.failovers = failovers;
@@ -191,7 +191,7 @@ public final class FailoverAppender extends AbstractAppender {
             @PluginElement final Filter filter,
             @PluginAttribute(defaultBoolean = true) final boolean ignoreExceptions) {
 
-        int retryIntervalMillis;
+        final int retryIntervalMillis;
         if (retryIntervalSeconds >= 0) {
             retryIntervalMillis = retryIntervalSeconds * Constants.MILLIS_IN_SECONDS;
         } else {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
index 6f3af1b..7a03673 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
@@ -196,7 +196,7 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
 
     private FileAppender(final String name, final Layout<? extends Serializable> layout, final Filter filter,
             final FileManager manager, final String filename, final boolean ignoreExceptions,
-            final boolean immediateFlush, final Advertiser advertiser, Property[] properties) {
+            final boolean immediateFlush, final Advertiser advertiser, final Property[] properties) {
 
         super(name, layout, filter, ignoreExceptions, immediateFlush, properties, manager);
         if (advertiser != null) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
index 8472bab..a377836 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
@@ -142,9 +142,9 @@ public class FileManager extends OutputStreamManager {
         final FileOutputStream fos = new FileOutputStream(file, isAppend);
         if (file.exists() && file.length() == 0) {
             try {
-                FileTime now = FileTime.fromMillis(System.currentTimeMillis());
+                final FileTime now = FileTime.fromMillis(System.currentTimeMillis());
                 Files.setAttribute(file.toPath(), "creationTime", now);
-            } catch (Exception ex) {
+            } catch (final Exception ex) {
                 LOGGER.warn("Unable to set current file time for {}", filename);
             }
             writeHeader(fos);
@@ -153,7 +153,7 @@ public class FileManager extends OutputStreamManager {
         return fos;
     }
 
-    protected void createParentDir(File file) {
+    protected void createParentDir(final File file) {
     }
 
     protected void defineAttributeView(final Path path) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java
index 9c66db2..cafb17a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java
@@ -105,18 +105,18 @@ public class HttpURLConnectionManager extends HttpManager {
         final byte[] msg = layout.toByteArray(event);
         urlConnection.setFixedLengthStreamingMode(msg.length);
         urlConnection.connect();
-        try (OutputStream os = urlConnection.getOutputStream()) {
+        try (final OutputStream os = urlConnection.getOutputStream()) {
             os.write(msg);
         }
 
         final byte[] buffer = new byte[1024];
-        try (InputStream is = urlConnection.getInputStream()) {
+        try (final InputStream is = urlConnection.getInputStream()) {
             while (IOUtils.EOF != is.read(buffer)) {
                 // empty
             }
         } catch (final IOException e) {
             final StringBuilder errorMessage = new StringBuilder();
-            try (InputStream es = urlConnection.getErrorStream()) {
+            try (final InputStream es = urlConnection.getErrorStream()) {
                 errorMessage.append(urlConnection.getResponseCode());
                 if (urlConnection.getResponseMessage() != null) {
                     errorMessage.append(' ').append(urlConnection.getResponseMessage());
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.java
index 105d4c8..b27c9fa 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.java
@@ -127,7 +127,7 @@ public final class MemoryMappedFileAppender extends AbstractOutputStreamAppender
 
     private MemoryMappedFileAppender(final String name, final Layout<? extends Serializable> layout,
             final Filter filter, final MemoryMappedFileManager manager, final String filename,
-            final boolean ignoreExceptions, final boolean immediateFlush, final Advertiser advertiser, Property[] properties) {
+            final boolean ignoreExceptions, final boolean immediateFlush, final Advertiser advertiser, final Property[] properties) {
         super(name, layout, filter, ignoreExceptions, immediateFlush, properties, manager);
         if (advertiser != null) {
             final Map<String, String> configuration = new HashMap<>(layout.getContentFormat());
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
index 09e2d78..40c3c02 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
@@ -221,7 +221,7 @@ public class MemoryMappedFileManager extends OutputStreamManager {
                 final Field unsafeField = unsafeClass.getDeclaredField("theUnsafe");
                 unsafeField.setAccessible(true);
                 final Object unsafe = unsafeField.get(null);
-                Method invokeCleaner = unsafeClass.getMethod("invokeCleaner", ByteBuffer.class);
+                final Method invokeCleaner = unsafeClass.getMethod("invokeCleaner", ByteBuffer.class);
                 invokeCleaner.invoke(unsafe, mbb);
                 return null;
             }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamAppender.java
index a1763e9..d15c0fb 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamAppender.java
@@ -165,7 +165,7 @@ public final class OutputStreamAppender extends AbstractOutputStreamAppender<Out
     }
 
     private OutputStreamAppender(final String name, final Layout<? extends Serializable> layout, final Filter filter,
-            final OutputStreamManager manager, final boolean ignoreExceptions, Property[] properties) {
+            final OutputStreamManager manager, final boolean ignoreExceptions, final Property[] properties) {
         super(name, layout, filter, ignoreExceptions, true, null, manager);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
index e6aa359..34fdc15 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
@@ -122,7 +122,7 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
         return closeOutputStream();
     }
 
-    protected void writeHeader(OutputStream os) {
+    protected void writeHeader(final OutputStream os) {
         if (layout != null && os != null) {
             final byte[] header = layout.getHeader();
             if (header != null) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java
index f2c17d9..56be44c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java
@@ -193,7 +193,7 @@ public class RandomAccessFileManager extends OutputStreamManager {
 
             final boolean writeHeader = !data.append || !file.exists();
             final OutputStream os = NullOutputStream.getInstance();
-            RandomAccessFile raf;
+            final RandomAccessFile raf;
             try {
                 FileUtils.makeParentDirs(file);
                 raf = new RandomAccessFile(name, "rw");
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/WriterAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/WriterAppender.java
index e2ad979..1f3b30e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/WriterAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/WriterAppender.java
@@ -152,7 +152,7 @@ public final class WriterAppender extends AbstractWriterAppender<WriterManager>
     }
 
     private WriterAppender(final String name, final StringLayout layout, final Filter filter,
-            final WriterManager manager, final boolean ignoreExceptions, Property[] properties) {
+            final WriterManager manager, final boolean ignoreExceptions, final Property[] properties) {
         super(name, layout, filter, ignoreExceptions, true, properties, manager);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.java
index 7323d97..e6d3d13 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.java
@@ -63,7 +63,7 @@ public abstract class AbstractDatabaseAppender<T extends AbstractDatabaseManager
      * @param manager The matching {@link AbstractDatabaseManager} implementation.
      */
     protected AbstractDatabaseAppender(final String name, final Filter filter,
-            final Layout<? extends Serializable> layout, final boolean ignoreExceptions, Property[] properties, final T manager) {
+              final Layout<? extends Serializable> layout, final boolean ignoreExceptions, final Property[] properties, final T manager) {
         super(name, filter, layout, ignoreExceptions, properties);
         this.manager = manager;
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/DbAppenderLoggingException.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/DbAppenderLoggingException.java
index 5545984..993f777 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/DbAppenderLoggingException.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/DbAppenderLoggingException.java
@@ -33,7 +33,7 @@ public class DbAppenderLoggingException extends AppenderLoggingException {
      * @param args The reason arguments for the exception, see {@link String#format(String, Object...)}.
      * @since 2.12.1
      */
-    public DbAppenderLoggingException(String format, Object... args) {
+    public DbAppenderLoggingException(final String format, final Object... args) {
         super(format, args);
     }
 
@@ -55,7 +55,7 @@ public class DbAppenderLoggingException extends AppenderLoggingException {
      * @param args The reason arguments for the exception, see {@link String#format(String, Object...)}.
      * @since 2.12.1
      */
-    public DbAppenderLoggingException(Throwable cause, String format, Object... args) {
+    public DbAppenderLoggingException(final Throwable cause, final String format, final Object... args) {
         super(cause, format, args);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlAppender.java
index 8819040..9a22b13 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlAppender.java
@@ -89,7 +89,7 @@ public final class NoSqlAppender extends AbstractDatabaseAppender<NoSqlDatabaseM
          *            buffer reaches this size.
          * @return this
          */
-        public B setBufferSize(int bufferSize) {
+        public B setBufferSize(final int bufferSize) {
             this.bufferSize = bufferSize;
             return asBuilder();
         }
@@ -101,7 +101,7 @@ public final class NoSqlAppender extends AbstractDatabaseAppender<NoSqlDatabaseM
          *            The NoSQL provider that provides connections to the chosen NoSQL database.
          * @return this
          */
-        public B setProvider(NoSqlProvider<?> provider) {
+        public B setProvider(final NoSqlProvider<?> provider) {
             this.provider = provider;
             return asBuilder();
         }
@@ -114,8 +114,8 @@ public final class NoSqlAppender extends AbstractDatabaseAppender<NoSqlDatabaseM
 
     private final String description;
 
-    private NoSqlAppender(final String name, final Filter filter, Layout<? extends Serializable> layout,
-            final boolean ignoreExceptions, Property[] properties, final NoSqlDatabaseManager<?> manager) {
+    private NoSqlAppender(final String name, final Filter filter, final Layout<? extends Serializable> layout,
+            final boolean ignoreExceptions, final Property[] properties, final NoSqlDatabaseManager<?> manager) {
         super(name, filter, layout, ignoreExceptions, properties, manager);
         this.description = this.getName() + "{ manager=" + this.getManager() + " }";
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java
index 3d8aa26..a911797 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java
@@ -48,7 +48,7 @@ public final class RewriteAppender extends AbstractAppender {
 
     private RewriteAppender(final String name, final Filter filter, final boolean ignoreExceptions,
                             final AppenderRef[] appenderRefs, final RewritePolicy rewritePolicy,
-                            final Configuration config, Property[] properties) {
+                            final Configuration config, final Property[] properties) {
         super(name, filter, null, ignoreExceptions, properties);
         this.config = config;
         this.rewritePolicy = rewritePolicy;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java
index 375dc09..da3ad10 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java
@@ -123,14 +123,14 @@ public abstract class AbstractRolloverStrategy implements RolloverStrategy {
         final Path current = currentFile.length() > 0 ? new File(currentFile).toPath() : null;
         LOGGER.debug("Current file: {}", currentFile);
 
-        try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
+        try (final DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
             for (final Path entry: stream) {
                 final Matcher matcher = pattern.matcher(entry.toFile().getName());
                 if (matcher.matches() && !entry.equals(current)) {
                     try {
                         final Integer index = Integer.parseInt(matcher.group(1));
                         eligibleFiles.put(index, entry);
-                    } catch (NumberFormatException ex) {
+                    } catch (final NumberFormatException ex) {
                         LOGGER.debug("Ignoring file {} which matches pattern but the index is invalid.",
                                 entry.toFile().getName());
                     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
index 0a2bbb7..560257e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
@@ -114,7 +114,7 @@ public class DefaultRolloverStrategy extends AbstractRolloverStrategy {
         public DefaultRolloverStrategy build() {
             int minIndex;
             int maxIndex;
-            boolean useMax;
+            final boolean useMax;
 
             if (fileIndex != null && fileIndex.equalsIgnoreCase("nomax")) {
                 minIndex = Integer.MIN_VALUE;
@@ -141,7 +141,7 @@ public class DefaultRolloverStrategy extends AbstractRolloverStrategy {
             }
             final int compressionLevel = Integers.parseInt(compressionLevelStr, Deflater.DEFAULT_COMPRESSION);
             // The config object can be null when this object is built programmatically.
-            StrSubstitutor nonNullStrSubstitutor = config != null ? config.getStrSubstitutor() : new StrSubstitutor();
+            final StrSubstitutor nonNullStrSubstitutor = config != null ? config.getStrSubstitutor() : new StrSubstitutor();
             return new DefaultRolloverStrategy(minIndex, maxIndex, useMax, compressionLevel, nonNullStrSubstitutor,
                     customActions, stopCustomActionsOnError, tempCompressedFilePattern);
         }
@@ -460,7 +460,7 @@ public class DefaultRolloverStrategy extends AbstractRolloverStrategy {
      */
     @Override
     public RolloverDescription rollover(final RollingFileManager manager) throws SecurityException {
-        int fileIndex;
+        final int fileIndex;
 		final StringBuilder buf = new StringBuilder(255);
         if (minIndex == Integer.MIN_VALUE) {
             final SortedMap<Integer, Path> eligibleFiles = getEligibleFiles(manager);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
index 42f77f5..79b7b38 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
@@ -115,7 +115,7 @@ public class PatternProcessor {
         this.currentFileTime = copy.currentFileTime;
     }
 
-    public void setTimeBased(boolean isTimeBased) {
+    public void setTimeBased(final boolean isTimeBased) {
         this.isTimeBased = isTimeBased;
     }
 
@@ -153,7 +153,7 @@ public class PatternProcessor {
         // Call setMinimalDaysInFirstWeek(7);
         //
         prevFileTime = nextFileTime;
-        long nextTime;
+        final long nextTime;
 
         if (frequency == null) {
             throw new IllegalStateException("Pattern does not contain a date");
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
index 5d55355..204a9b5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
@@ -115,7 +115,7 @@ public class RollingFileManager extends FileManager {
             // LOG4J2-2981 - set the file size before initializing the triggering policy.
             if (directWrite) {
                 // LOG4J2-2485: Initialize size from the most recently written file.
-                File file = new File(getFileName());
+                final File file = new File(getFileName());
                 if (file.exists()) {
                     size = file.length();
                 } else {
@@ -169,7 +169,7 @@ public class RollingFileManager extends FileManager {
      * Add a RolloverListener.
      * @param listener The RolloverListener.
      */
-    public void addRolloverListener(RolloverListener listener) {
+    public void addRolloverListener(final RolloverListener listener) {
         rolloverListeners.add(listener);
     }
 
@@ -177,7 +177,7 @@ public class RollingFileManager extends FileManager {
      * Remove a RolloverListener.
      * @param listener The RolloverListener.
      */
-    public void removeRolloverListener(RolloverListener listener) {
+    public void removeRolloverListener(final RolloverListener listener) {
         rolloverListeners.remove(listener);
     }
 
@@ -194,7 +194,7 @@ public class RollingFileManager extends FileManager {
     }
 
     @Override
-    protected void createParentDir(File file) {
+    protected void createParentDir(final File file) {
         if (directWrite) {
             file.getParentFile().mkdirs();
         }
@@ -302,7 +302,7 @@ public class RollingFileManager extends FileManager {
         return status;
     }
 
-	public synchronized void rollover(long prevFileTime, long prevRollTime) {
+	public synchronized void rollover(final long prevFileTime, final long prevRollTime) {
 		getPatternProcessor().setPrevFileTime(prevFileTime);
 		getPatternProcessor().setCurrentFileTime(prevRollTime);
 		rollover();
@@ -312,12 +312,12 @@ public class RollingFileManager extends FileManager {
         if (!hasOutputStream() && !isCreateOnDemand() && !isDirectWrite()) {
             return;
         }
-        String currentFileName = fileName;
+        final String currentFileName = fileName;
         if (rolloverListeners.size() > 0) {
-            for (RolloverListener listener : rolloverListeners) {
+            for (final RolloverListener listener : rolloverListeners) {
                 try {
                     listener.rolloverTriggered(currentFileName);
-                } catch (Exception ex) {
+                } catch (final Exception ex) {
                     LOGGER.warn("Rollover Listener {} failed with {}: {}", listener.getClass().getSimpleName(),
                             ex.getClass().getName(), ex.getMessage());
                 }
@@ -333,10 +333,10 @@ public class RollingFileManager extends FileManager {
             }
         }
         if (rolloverListeners.size() > 0) {
-            for (RolloverListener listener : rolloverListeners) {
+            for (final RolloverListener listener : rolloverListeners) {
                 try {
                     listener.rolloverComplete(currentFileName);
-                } catch (Exception ex) {
+                } catch (final Exception ex) {
                     LOGGER.warn("Rollover Listener {} failed with {}: {}", listener.getClass().getSimpleName(),
                             ex.getClass().getName(), ex.getMessage());
                 }
@@ -685,17 +685,17 @@ public class RollingFileManager extends FileManager {
         }
     }
 
-    private static long initialFileTime(File file) {
-        Path path = file.toPath();
+    private static long initialFileTime(final File file) {
+        final Path path = file.toPath();
         if (Files.exists(path)) {
             try {
-                BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
-                FileTime fileTime = attrs.creationTime();
+                final BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
+                final FileTime fileTime = attrs.creationTime();
                 if (fileTime.compareTo(EPOCH) > 0) {
                     return fileTime.toMillis();
                 }
                 LOGGER.info("Unable to obtain file creation time for " + file.getAbsolutePath());
-            } catch (Exception ex) {
+            } catch (final Exception ex) {
                 LOGGER.info("Unable to calculate file creation time for " + file.getAbsolutePath() + ": " + ex.getMessage());
             }
         }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
index 7f7bf85..924a7c4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
@@ -121,8 +121,8 @@ public class RollingRandomAccessFileManager extends RollingFileManager {
     protected synchronized void writeToDestination(final byte[] bytes, final int offset, final int length) {
         try {
             if (randomAccessFile == null) {
-                String fileName = getFileName();
-                File file = new File(fileName);
+                final String fileName = getFileName();
+                final File file = new File(fileName);
                 FileUtils.makeParentDirs(file);
                 createFileAfterRollover(fileName);
             }
@@ -139,7 +139,7 @@ public class RollingRandomAccessFileManager extends RollingFileManager {
         createFileAfterRollover(getFileName());
     }
 
-    private void createFileAfterRollover(String fileName) throws IOException {
+    private void createFileAfterRollover(final String fileName) throws IOException {
         this.randomAccessFile = new RandomAccessFile(fileName, "rw");
         if (isAttributeViewEnabled()) {
             defineAttributeView(Paths.get(fileName));
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeletingVisitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeletingVisitor.java
index 78ae1cf..f0502db 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeletingVisitor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeletingVisitor.java
@@ -77,7 +77,7 @@ public class DeletingVisitor extends SimpleFileVisitor<Path> {
     }
 
     @Override
-    public FileVisitResult visitFileFailed(Path file, IOException ioException) throws IOException {
+    public FileVisitResult visitFileFailed(final Path file, final IOException ioException) throws IOException {
         // LOG4J2-2677: Appenders may rollover and purge in parallel. SimpleVisitor rethrows exceptions from
         // failed attempts to load file attributes.
         if (ioException instanceof NoSuchFileException) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java
index 3ddca2c..2da33aa 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java
@@ -173,7 +173,7 @@ public class FileRenameAction extends AbstractAction {
         return false;
     }
 
-    private static boolean moveFile(Path source, Path target)  throws IOException {
+    private static boolean moveFile(final Path source, final Path target)  throws IOException {
         try {
             Files.move(source, target,
                     StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/GzCompressAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/GzCompressAction.java
index 5ee0ff3..f8faad2 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/GzCompressAction.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/GzCompressAction.java
@@ -158,7 +158,7 @@ public final class GzCompressAction extends AbstractAction {
 
     private static final class ConfigurableLevelGZIPOutputStream extends GZIPOutputStream {
 
-        ConfigurableLevelGZIPOutputStream(OutputStream out, int bufSize, int level) throws IOException {
+        ConfigurableLevelGZIPOutputStream(final OutputStream out, final int bufSize, final int level) throws IOException {
             super(out, bufSize);
             def.setLevel(level);
         }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/SortingVisitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/SortingVisitor.java
index 0b9f1ca..28760de 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/SortingVisitor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/SortingVisitor.java
@@ -57,7 +57,7 @@ public class SortingVisitor extends SimpleFileVisitor<Path> {
     }
 
     @Override
-    public FileVisitResult visitFileFailed(Path file, IOException ioException) throws IOException {
+    public FileVisitResult visitFileFailed(final Path file, final IOException ioException) throws IOException {
         // LOG4J2-2677: Appenders may rollover and purge in parallel. SimpleVisitor rethrows exceptions from
         // failed attempts to load file attributes.
         if (ioException instanceof NoSuchFileException) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java
index 950cdd9..30bb1f1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java
@@ -73,7 +73,7 @@ public class IdlePurgePolicy extends AbstractLifeCycle implements PurgePolicy, R
     public void purge() {
         final long createTime = System.currentTimeMillis() - timeToLive;
         for (final Entry<String, Long> entry : appendersUsage.entrySet()) {
-            long entryValue = entry.getValue();
+            final long entryValue = entry.getValue();
             if (entryValue < createTime) {
                 if (appendersUsage.remove(entry.getKey(), entryValue)) {
                     LOGGER.debug("Removing appender {}", entry.getKey());
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender.java
index 2d2e3d0..a1e9051 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender.java
@@ -157,7 +157,7 @@ public final class RoutingAppender extends AbstractAppender {
 
     private RoutingAppender(final String name, final Filter filter, final boolean ignoreExceptions, final Routes routes,
             final RewritePolicy rewritePolicy, final Configuration configuration, final PurgePolicy purgePolicy,
-            final AbstractScript defaultRouteScript, Property[] properties, final Boolean requiresLocation) {
+            final AbstractScript defaultRouteScript, final Property[] properties, final Boolean requiresLocation) {
         super(name, filter, null, ignoreExceptions, properties);
         this.routes = routes;
         this.configuration = configuration;
@@ -286,7 +286,7 @@ public final class RoutingAppender extends AbstractAppender {
             if (app == null) {
                 return null;
             }
-            CreatedRouteAppenderControl created = new CreatedRouteAppenderControl(app);
+            final CreatedRouteAppenderControl created = new CreatedRouteAppenderControl(app);
             control = created;
             createdAppenders.put(key, created);
         }
@@ -404,7 +404,7 @@ public final class RoutingAppender extends AbstractAppender {
      */
     private static abstract class RouteAppenderControl extends AppenderControl {
 
-        RouteAppenderControl(Appender appender) {
+        RouteAppenderControl(final Appender appender) {
             super(appender, null, null);
         }
 
@@ -418,7 +418,7 @@ public final class RoutingAppender extends AbstractAppender {
         private volatile boolean pendingDeletion;
         private final AtomicInteger depth = new AtomicInteger();
 
-        CreatedRouteAppenderControl(Appender appender) {
+        CreatedRouteAppenderControl(final Appender appender) {
             super(appender);
         }
 
@@ -443,7 +443,7 @@ public final class RoutingAppender extends AbstractAppender {
                     // 1. Another invocation of tryStopAppender has succeeded, or
                     // 2. Events are being appended, and will trigger stop when they complete
                     && depth.compareAndSet(0, -100_000)) {
-                Appender appender = getAppender();
+                final Appender appender = getAppender();
                 LOGGER.debug("Stopping appender {}", appender);
                 appender.stop();
             }
@@ -452,7 +452,7 @@ public final class RoutingAppender extends AbstractAppender {
 
     private static final class ReferencedRouteAppenderControl extends RouteAppenderControl {
 
-        ReferencedRouteAppenderControl(Appender appender) {
+        ReferencedRouteAppenderControl(final Appender appender) {
             super(appender);
         }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java
index 22f3d4c..36370ab 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java
@@ -148,13 +148,13 @@ public class AsyncLogger extends Logger implements EventTranslatorVararg<RingBuf
     private final TranslatorType threadLocalTranslatorType = new TranslatorType() {
 
         @Override
-        void log(String fqcn, StackTraceElement location, Level level, Marker marker, Message message,
-                 Throwable thrown) {
+        void log(final String fqcn, final StackTraceElement location, final Level level, final Marker marker, final Message message,
+                 final Throwable thrown) {
             logWithThreadLocalTranslator(fqcn, location, level, marker, message, thrown);
         }
 
         @Override
-        void log(String fqcn, Level level, Marker marker, Message message, Throwable thrown) {
+        void log(final String fqcn, final Level level, final Marker marker, final Message message, final Throwable thrown) {
             logWithThreadLocalTranslator(fqcn, level, marker, message, thrown);
         }
     };
@@ -162,12 +162,12 @@ public class AsyncLogger extends Logger implements EventTranslatorVararg<RingBuf
     private final TranslatorType varargTranslatorType = new TranslatorType() {
 
         @Override
-        void log(String fqcn, StackTraceElement location, Level level, Marker marker, Message message,
-                 Throwable thrown) {
+        void log(final String fqcn, final StackTraceElement location, final Level level, final Marker marker, final Message message,
+                 final Throwable thrown) {
             logWithVarargTranslator(fqcn, location, level, marker, message, thrown);
         }
         @Override
-        void log(String fqcn, Level level, Marker marker, Message message, Throwable thrown) {
+        void log(final String fqcn, final Level level, final Marker marker, final Message message, final Throwable thrown) {
             // LOG4J2-1172: avoid storing non-JDK classes in ThreadLocals to avoid memory leaks in web apps
             logWithVarargTranslator(fqcn, level, marker, message, thrown);
         }
@@ -491,7 +491,7 @@ public class AsyncLogger extends Logger implements EventTranslatorVararg<RingBuf
 
     @SuppressWarnings("ForLoopReplaceableByForEach") // Avoid iterator allocation
     private void onPropertiesPresent(final RingBufferLogEvent event, final List<Property> properties) {
-        StringMap contextData = getContextData(event);
+        final StringMap contextData = getContextData(event);
         for (int i = 0, size = properties.size(); i < size; i++) {
             final Property prop = properties.get(i);
             if (contextData.getValue(prop.getName()) != null) {
@@ -506,7 +506,7 @@ public class AsyncLogger extends Logger implements EventTranslatorVararg<RingBuf
     }
 
     private static StringMap getContextData(final RingBufferLogEvent event) {
-        StringMap contextData = (StringMap) event.getContextData();
+        final StringMap contextData = (StringMap) event.getContextData();
         if (contextData.isFrozen()) {
             final StringMap temp = ContextDataFactory.createContextData();
             temp.putAll(contextData);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java
index 3a6613f..796f56d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java
@@ -120,7 +120,7 @@ public class AsyncLoggerConfig extends LoggerConfig {
         super.callAppenders(event);
     }
 
-    private void logToAsyncDelegate(LogEvent event) {
+    private void logToAsyncDelegate(final LogEvent event) {
         if (!isFiltered(event)) {
             // Passes on the event to a separate thread that will call
             // asyncCallAppenders(LogEvent).
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java
index a80c787..c9a59e5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java
@@ -78,9 +78,9 @@ public class AsyncQueueFullPolicyFactory {
     }
 
     private static boolean isRouterSelected(
-            String propertyValue,
-            Class<? extends AsyncQueueFullPolicy> policy,
-            String shortPropertyValue) {
+            final String propertyValue,
+            final Class<? extends AsyncQueueFullPolicy> policy,
+            final String shortPropertyValue) {
         return propertyValue != null && (shortPropertyValue.equalsIgnoreCase(propertyValue)
                 || policy.getName().equals(propertyValue)
                 || policy.getSimpleName().equals(propertyValue));
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelector.java
index 463be00..adfa04c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelector.java
@@ -35,16 +35,16 @@ public class BasicAsyncLoggerContextSelector implements ContextSelector {
     private static final AsyncLoggerContext CONTEXT = new AsyncLoggerContext("AsyncDefault");
 
     @Override
-    public void shutdown(String fqcn, ClassLoader loader, boolean currentContext, boolean allContexts) {
-        LoggerContext ctx = getContext(fqcn, loader, currentContext);
+    public void shutdown(final String fqcn, final ClassLoader loader, final boolean currentContext, final boolean allContexts) {
+        final LoggerContext ctx = getContext(fqcn, loader, currentContext);
         if (ctx != null && ctx.isStarted()) {
             ctx.stop(DEFAULT_STOP_TIMEOUT, TimeUnit.MILLISECONDS);
         }
     }
 
     @Override
-    public boolean hasContext(String fqcn, ClassLoader loader, boolean currentContext) {
-        LoggerContext ctx = getContext(fqcn, loader, currentContext);
+    public boolean hasContext(final String fqcn, final ClassLoader loader, final boolean currentContext) {
+        final LoggerContext ctx = getContext(fqcn, loader, currentContext);
         return ctx != null && ctx.isStarted();
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DefaultAsyncQueueFullPolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DefaultAsyncQueueFullPolicy.java
index d3d53e1..e8abfcc 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DefaultAsyncQueueFullPolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DefaultAsyncQueueFullPolicy.java
@@ -30,7 +30,7 @@ public class DefaultAsyncQueueFullPolicy implements AsyncQueueFullPolicy {
 
         // LOG4J2-471: prevent deadlock when RingBuffer is full and object
         // being logged calls Logger.log() from its toString() method
-        Thread currentThread = Thread.currentThread();
+        final Thread currentThread = Thread.currentThread();
         if (currentThread.getId() == backgroundThreadId
                 // Threads owned by log4j are most likely to result in
                 // deadlocks because they generally consume events.
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
index 5925187..b77a4f6 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
@@ -97,7 +97,7 @@ final class DisruptorUtil {
     private static long parseAdditionalLongProperty(
             final String propertyName,
             final String additionalKey,
-            long defaultValue) {
+            final long defaultValue) {
         final String key = getFullPropertyKey(propertyName, additionalKey);
         return PropertiesUtil.getProperties().getLongProperty(key, defaultValue);
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
index f9183b5..c7370d6 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
@@ -275,7 +275,7 @@ public class RingBufferLogEvent implements LogEvent, ReusableMessage, CharSequen
     }
 
     @Override
-    public <S> void forEachParameter(ParameterConsumer<S> action, S state) {
+    public <S> void forEachParameter(final ParameterConsumer<S> action, final S state) {
         if (parameters != null) {
             for (short i = 0; i < parameterCount; i++) {
                 action.accept(parameters[i], i, state);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEventHandler.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEventHandler.java
index dfec3e4..5331821 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEventHandler.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEventHandler.java
@@ -54,7 +54,7 @@ public class RingBufferLogEventHandler implements
         }
     }
 
-    private void notifyCallback(long sequence) {
+    private void notifyCallback(final long sequence) {
         if (++counter > NOTIFY_PROGRESS_THRESHOLD) {
             sequenceCallback.set(sequence);
             counter = 0;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ThreadNameCachingStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ThreadNameCachingStrategy.java
index 32e15e8..c686fbc 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ThreadNameCachingStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/ThreadNameCachingStrategy.java
@@ -70,13 +70,13 @@ public enum ThreadNameCachingStrategy { // LOG4J2-467
         // LOG4J2-2052, LOG4J2-2635 JDK 8u102 ("1.8.0_102") removed the String allocation in Thread.getName()
         if (Constants.JAVA_MAJOR_VERSION == 8) {
             try {
-                Pattern javaVersionPattern = Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)_(\\d+)");
-                Matcher m = javaVersionPattern.matcher(System.getProperty("java.version"));
+                final Pattern javaVersionPattern = Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)_(\\d+)");
+                final Matcher m = javaVersionPattern.matcher(System.getProperty("java.version"));
                 if (m.matches()) {
                     return Integer.parseInt(m.group(3)) == 0 && Integer.parseInt(m.group(4)) < 102;
                 }
                 return true;
-            } catch (Exception e) {
+            } catch (final Exception e) {
                 return true;
             }
         } else {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
index 1b0f608..8c1217a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
@@ -246,8 +246,8 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
         LOGGER.debug("Configuration {} initialized", this);
     }
 
-    protected void initializeWatchers(Reconfigurable reconfigurable, ConfigurationSource configSource,
-            int monitorIntervalSeconds) {
+    protected void initializeWatchers(final Reconfigurable reconfigurable, final ConfigurationSource configSource,
+                 final int monitorIntervalSeconds) {
         if (configSource.getFile() != null || configSource.getURL() != null) {
             if (monitorIntervalSeconds > 0) {
                 watchManager.setIntervalSeconds(monitorIntervalSeconds);
@@ -268,7 +268,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
         }
     }
 
-    private void monitorSource(Reconfigurable reconfigurable, ConfigurationSource configSource) {
+    private void monitorSource(final Reconfigurable reconfigurable, final ConfigurationSource configSource) {
         if (configSource.getLastModified() > 0) {
             final Source cfgSource = new Source(configSource);
             final Watcher watcher = WatcherFactory.getInstance(pluginPackages)
@@ -528,8 +528,8 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
      */
     protected void processConditionals(final Node node) {
         try {
-            List<Node> addList = new ArrayList<>();
-            List<Node> removeList = new ArrayList<>();
+            final List<Node> addList = new ArrayList<>();
+            final List<Node> removeList = new ArrayList<>();
             for (final Node child : node.getChildren()) {
                 final PluginType<?> type = child.getType();
                 if (type != null && Arbiter.ELEMENT_TYPE.equals(type.getElementName())) {
@@ -540,7 +540,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
                     } else if (Arbiter.class.isAssignableFrom(clazz)) {
                         removeList.add(child);
                         try {
-                            Arbiter condition = (Arbiter) createPluginObject(type, child, null);
+                            final Arbiter condition = (Arbiter) createPluginObject(type, child, null);
                             if (condition.isCondition()) {
                                 addList.addAll(child.getChildren());
                                 processConditionals(child);
@@ -560,10 +560,10 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
                 }
             }
             if (!removeList.isEmpty()) {
-                List<Node> children = node.getChildren();
+                final List<Node> children = node.getChildren();
                 children.removeAll(removeList);
                 children.addAll(addList);
-                for (Node grandChild : addList) {
+                for (final Node grandChild : addList) {
                     grandChild.setParent(node);
                 }
             }
@@ -579,15 +579,15 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
      * @param type The PluginType of the Select Node.
      * @return The list of Nodes to be added to the parent.
      */
-    protected List<Node> processSelect(Node selectNode, PluginType<?> type) {
-        List<Node> addList = new ArrayList<>();
-        SelectArbiter select = (SelectArbiter) createPluginObject(type, selectNode, null);
-        List<Arbiter> conditions = new ArrayList<>();
-        for (Node child : selectNode.getChildren()) {
-            PluginType<?> nodeType = child.getType();
+    protected List<Node> processSelect(final Node selectNode, final PluginType<?> type) {
+        final List<Node> addList = new ArrayList<>();
+        final SelectArbiter select = (SelectArbiter) createPluginObject(type, selectNode, null);
+        final List<Arbiter> conditions = new ArrayList<>();
+        for (final Node child : selectNode.getChildren()) {
+            final PluginType<?> nodeType = child.getType();
             if (nodeType != null) {
                 if (Arbiter.class.isAssignableFrom(nodeType.getPluginClass())) {
-                    Arbiter condition = (Arbiter) createPluginObject(nodeType, child, null);
+                    final Arbiter condition = (Arbiter) createPluginObject(nodeType, child, null);
                     conditions.add(condition);
                     child.setObject(condition);
                 } else {
@@ -598,9 +598,9 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
                 LOGGER.error("No PluginType for node {}", child.getName());
             }
         }
-        Arbiter condition = select.evaluateConditions(conditions);
+        final Arbiter condition = select.evaluateConditions(conditions);
         if (condition != null) {
-            for (Node child : selectNode.getChildren()) {
+            for (final Node child : selectNode.getChildren()) {
                 if (condition == child.getObject()) {
                     addList.addAll(child.getChildren());
                     processConditionals(child);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
index 744a3d8..36f93ff 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
@@ -163,7 +163,7 @@ public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {
             try {
                 if (factories == null) {
                     final List<ConfigurationFactory> list = new ArrayList<>();
-                    PropertiesUtil props = PropertiesUtil.getProperties();
+                    final PropertiesUtil props = PropertiesUtil.getProperties();
                     final String factoryClass = props.getStringProperty(CONFIGURATION_FACTORY_PROPERTY);
                     if (factoryClass != null) {
                         addFactory(list, factoryClass);
@@ -197,18 +197,18 @@ public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {
         return configFactory;
     }
 
-    public static AuthorizationProvider authorizationProvider(PropertiesUtil props) {
+    public static AuthorizationProvider authorizationProvider(final PropertiesUtil props) {
         final String authClass = props.getStringProperty(AUTHORIZATION_PROVIDER);
         AuthorizationProvider provider = null;
         if (authClass != null) {
             try {
-                Object obj = LoaderUtil.newInstanceOf(authClass);
+                final Object obj = LoaderUtil.newInstanceOf(authClass);
                 if (obj instanceof AuthorizationProvider) {
                     provider = (AuthorizationProvider) obj;
                 } else {
                     LOGGER.warn("{} is not an AuthorizationProvider, using default", obj.getClass().getName());
                 }
-            } catch (Exception ex) {
+            } catch (final Exception ex) {
                 LOGGER.warn("Unable to create {}, using default: {}", authClass, ex.getMessage());
             }
         }
@@ -356,8 +356,8 @@ public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {
     protected ConfigurationSource getInputFromString(final String config, final ClassLoader loader) {
         try {
             final URL url = new URL(config);
-            URLConnection urlConnection = UrlConnectionFactory.createConnection(url);
-            File file = FileUtils.fileFromUri(url.toURI());
+            final URLConnection urlConnection = UrlConnectionFactory.createConnection(url);
+            final File file = FileUtils.fileFromUri(url.toURI());
             if (file != null) {
                 return new ConfigurationSource(urlConnection.getInputStream(), FileUtils.fileFromUri(url.toURI()));
             } else {
@@ -398,7 +398,7 @@ public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {
                 final String configLocationStr = this.substitutor.replace(PropertiesUtil.getProperties()
                         .getStringProperty(CONFIGURATION_FILE_PROPERTY));
                 if (configLocationStr != null) {
-                    String[] sources = parseConfigLocations(configLocationStr);
+                    final String[] sources = parseConfigLocations(configLocationStr);
                     if (sources.length > 1) {
                         final List<AbstractConfiguration> configs = new ArrayList<>();
                         for (final String sourceLocation : sources) {
@@ -444,7 +444,7 @@ public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {
                 }
             } else {
                 // configLocation != null
-                String[] sources = parseConfigLocations(configLocation);
+                final String[] sources = parseConfigLocations(configLocation);
                 if (sources.length > 1) {
                     final List<AbstractConfiguration> configs = new ArrayList<>();
                     for (final String sourceLocation : sources) {
@@ -500,7 +500,7 @@ public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {
             return getConfiguration(null, loggerContext, configLocationStr);
         }
 
-        private Configuration getConfiguration(String requiredVersion, final LoggerContext loggerContext,
+        private Configuration getConfiguration(final String requiredVersion, final LoggerContext loggerContext,
                 final String configLocationStr) {
             ConfigurationSource source = null;
             try {
@@ -593,13 +593,13 @@ public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {
             return null;
         }
 
-        private String[] parseConfigLocations(URI configLocations) {
+        private String[] parseConfigLocations(final URI configLocations) {
             final String[] uris = configLocations.toString().split("\\?");
             final List<String> locations = new ArrayList<>();
             if (uris.length > 1) {
                 locations.add(uris[0]);
                 final String[] pairs = configLocations.getQuery().split("&");
-                for (String pair : pairs) {
+                for (final String pair : pairs) {
                     final int idx = pair.indexOf("=");
                     final String key = idx > 0 ? URLDecoder.decode(pair.substring(0, idx), StandardCharsets.UTF_8) : pair;
                     if (key.equalsIgnoreCase(OVERRIDE_PARAM)) {
@@ -611,14 +611,14 @@ public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {
             return new String[] {uris[0]};
         }
 
-        private String[] parseConfigLocations(String configLocations) {
+        private String[] parseConfigLocations(final String configLocations) {
             final String[] uris = configLocations.split(",");
             if (uris.length > 1) {
                 return uris;
             }
             try {
                 return parseConfigLocations(new URI(configLocations));
-            } catch (URISyntaxException ex) {
+            } catch (final URISyntaxException ex) {
                 LOGGER.warn("Error parsing URI {}", configLocations);
             }
             return new String[] {configLocations};
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFileWatcher.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFileWatcher.java
index e777fbf..c1569ff 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFileWatcher.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFileWatcher.java
@@ -33,7 +33,7 @@ public class ConfigurationFileWatcher extends AbstractWatcher implements FileWat
     private long lastModifiedMillis;
 
     public ConfigurationFileWatcher(final Configuration configuration, final Reconfigurable reconfigurable,
-            final List<ConfigurationListener> configurationListeners, long lastModifiedMillis) {
+           final List<ConfigurationListener> configurationListeners, final long lastModifiedMillis) {
         super(configuration, reconfigurable, configurationListeners);
         this.lastModifiedMillis = lastModifiedMillis;
     }
@@ -48,7 +48,7 @@ public class ConfigurationFileWatcher extends AbstractWatcher implements FileWat
     }
 
     @Override
-    public void watching(Source source) {
+    public void watching(final Source source) {
         file = source.getFile();
         lastModifiedMillis = file.lastModified();
         super.watching(source);
@@ -61,8 +61,8 @@ public class ConfigurationFileWatcher extends AbstractWatcher implements FileWat
 
     @Override
     public Watcher newWatcher(final Reconfigurable reconfigurable, final List<ConfigurationListener> listeners,
-        long lastModifiedMillis) {
-        ConfigurationFileWatcher watcher = new ConfigurationFileWatcher(getConfiguration(), reconfigurable, listeners,
+           final long lastModifiedMillis) {
+        final ConfigurationFileWatcher watcher = new ConfigurationFileWatcher(getConfiguration(), reconfigurable, listeners,
             lastModifiedMillis);
         if (getSource() != null) {
             watcher.watching(getSource());
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java
index 439fbe6..36ca3ab 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java
@@ -86,7 +86,7 @@ public class ConfigurationSource {
         long modified = 0;
         try {
             modified = file.lastModified();
-        } catch (Exception ex) {
+        } catch (final Exception ex) {
             // There is a problem with the file. It will be handled somewhere else.
         }
         this.lastModified = modified;
@@ -100,7 +100,7 @@ public class ConfigurationSource {
      * @param url the URL where the input stream originated
      * @param lastModified when the source was last modified.
      */
-    public ConfigurationSource(final InputStream stream, final URL url, long lastModified) {
+    public ConfigurationSource(final InputStream stream, final URL url, final long lastModified) {
         this.stream = Objects.requireNonNull(stream, "stream is null");
         this.url = Objects.requireNonNull(url, "URL is null");
         this.location = url.toString();
@@ -136,7 +136,7 @@ public class ConfigurationSource {
         this(toByteArray(stream), null, 0);
     }
 
-    public ConfigurationSource(final Source source, final byte[] data, long lastModified) throws IOException {
+    public ConfigurationSource(final Source source, final byte[] data, final long lastModified) throws IOException {
         Objects.requireNonNull(source, "source is null");
         this.data = Objects.requireNonNull(data, "data is null");
         this.stream = new ByteArrayInputStream(data);
@@ -146,7 +146,7 @@ public class ConfigurationSource {
         this.lastModified = lastModified;
     }
 
-    private ConfigurationSource(final byte[] data, final URL url, long lastModified) {
+    private ConfigurationSource(final byte[] data, final URL url, final long lastModified) {
         this.data = Objects.requireNonNull(data, "data is null");
         this.stream = new ByteArrayInputStream(data);
         this.file = null;
@@ -198,15 +198,15 @@ public class ConfigurationSource {
         return url;
     }
 
-    public void setSource(Source source) {
+    public void setSource(final Source source) {
         this.source = source;
     }
 
-    public void setData(byte[] data) {
+    public void setData(final byte[] data) {
         this.data = data;
     }
 
-    public void setModifiedMillis(long modifiedMillis) {
+    public void setModifiedMillis(final long modifiedMillis) {
         this.modifiedMillis = modifiedMillis;
     }
 
@@ -329,10 +329,10 @@ public class ConfigurationSource {
             return null;
         }
         try {
-            URL url = configLocation.toURL();
-            URLConnection urlConnection = UrlConnectionFactory.createConnection(url);
-            InputStream is = urlConnection.getInputStream();
-            long lastModified = urlConnection.getLastModified();
+            final URL url = configLocation.toURL();
+            final URLConnection urlConnection = UrlConnectionFactory.createConnection(url);
+            final InputStream is = urlConnection.getInputStream();
+            final long lastModified = urlConnection.getLastModified();
             return new ConfigurationSource(is, configLocation.toURL(), lastModified);
         } catch (final FileNotFoundException ex) {
             ConfigurationFactory.LOGGER.warn("Could not locate file {}", configLocation.toString());
@@ -358,13 +358,13 @@ public class ConfigurationSource {
         return getConfigurationSource(url);
     }
 
-    private static ConfigurationSource getConfigurationSource(URL url) {
+    private static ConfigurationSource getConfigurationSource(final URL url) {
         try {
-            URLConnection urlConnection = url.openConnection();
-            AuthorizationProvider provider = ConfigurationFactory.authorizationProvider(PropertiesUtil.getProperties());
+            final URLConnection urlConnection = url.openConnection();
+            final AuthorizationProvider provider = ConfigurationFactory.authorizationProvider(PropertiesUtil.getProperties());
             provider.addAuthorization(urlConnection);
             if (url.getProtocol().equals(HTTPS)) {
-                SslConfiguration sslConfiguration = SslConfigurationFactory.getSslConfiguration();
+                final SslConfiguration sslConfiguration = SslConfigurationFactory.getSslConfiguration();
                 if (sslConfiguration != null) {
                     ((HttpsURLConnection) urlConnection).setSSLSocketFactory(sslConfiguration.getSslSocketFactory());
                     if (!sslConfiguration.isVerifyHostName()) {
@@ -372,18 +372,18 @@ public class ConfigurationSource {
                     }
                 }
             }
-            File file = FileUtils.fileFromUri(url.toURI());
+            final File file = FileUtils.fileFromUri(url.toURI());
             try {
                 if (file != null) {
                     return new ConfigurationSource(urlConnection.getInputStream(), FileUtils.fileFromUri(url.toURI()));
                 } else {
                     return new ConfigurationSource(urlConnection.getInputStream(), url, urlConnection.getLastModified());
                 }
-            } catch (FileNotFoundException ex) {
+            } catch (final FileNotFoundException ex) {
                 ConfigurationFactory.LOGGER.info("Unable to locate file {}, ignoring.", url.toString());
                 return null;
             }
-        } catch (IOException | URISyntaxException ex) {
+        } catch (final IOException | URISyntaxException ex) {
             ConfigurationFactory.LOGGER.warn("Error accessing {} due to {}, ignoring.", url.toString(),
                     ex.getMessage());
             return null;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java
index 6c8c624..9f508ef 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java
@@ -272,7 +272,7 @@ public final class Configurator {
      */
     public static void reconfigure() {
         try {
-            Log4jContextFactory factory = getFactory();
+            final Log4jContextFactory factory = getFactory();
             if (factory != null) {
                 factory.getSelector().getContext(FQCN, null, false).reconfigure();
             } else {
@@ -290,7 +290,7 @@ public final class Configurator {
      */
     public static void reconfigure(final URI uri) {
         try {
-            Log4jContextFactory factory = getFactory();
+            final Log4jContextFactory factory = getFactory();
             if (factory != null) {
                 factory.getSelector().getContext(FQCN, null, false).setConfigLocation(uri);
             } else {
@@ -374,7 +374,7 @@ public final class Configurator {
     }
 
     private static boolean setLevel(final String loggerName, final Level level, final Configuration config) {
-        boolean set;
+        final boolean set;
         LoggerConfig loggerConfig = config.getLoggerConfig(loggerName);
         if (!loggerName.equals(loggerConfig.getName())) {
             // TODO Should additivity be inherited?
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/HttpWatcher.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/HttpWatcher.java
index 485481d..b781a4c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/HttpWatcher.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/HttpWatcher.java
@@ -54,7 +54,7 @@ public class HttpWatcher extends AbstractWatcher {
     private static final String HTTPS = "https";
 
     public HttpWatcher(final Configuration configuration, final Reconfigurable reconfigurable,
-        final List<ConfigurationListener> configurationListeners, long lastModifiedMillis) {
+                       final List<ConfigurationListener> configurationListeners, final long lastModifiedMillis) {
         super(configuration, reconfigurable, configurationListeners);
         sslConfiguration = SslConfigurationFactory.getSslConfiguration();
         this.lastModifiedMillis = lastModifiedMillis;
@@ -71,23 +71,23 @@ public class HttpWatcher extends AbstractWatcher {
     }
 
     @Override
-    public void watching(Source source) {
+    public void watching(final Source source) {
         if (!source.getURI().getScheme().equals(HTTP) && !source.getURI().getScheme().equals(HTTPS)) {
             throw new IllegalArgumentException(
                 "HttpWatcher requires a url using the HTTP or HTTPS protocol, not " + source.getURI().getScheme());
         }
         try {
             url = source.getURI().toURL();
-        } catch (MalformedURLException ex) {
+        } catch (final MalformedURLException ex) {
             throw new IllegalArgumentException("Invalid URL for HttpWatcher " + source.getURI(), ex);
         }
         super.watching(source);
     }
 
     @Override
-    public Watcher newWatcher(Reconfigurable reconfigurable, List<ConfigurationListener> listeners,
-        long lastModifiedMillis) {
-        HttpWatcher watcher = new HttpWatcher(getConfiguration(), reconfigurable, listeners, lastModifiedMillis);
+    public Watcher newWatcher(final Reconfigurable reconfigurable, final List<ConfigurationListener> listeners,
+           final long lastModifiedMillis) {
+        final HttpWatcher watcher = new HttpWatcher(getConfiguration(), reconfigurable, listeners, lastModifiedMillis);
         if (getSource() != null) {
             watcher.watching(getSource());
         }
@@ -101,22 +101,22 @@ public class HttpWatcher extends AbstractWatcher {
             urlConnection.connect();
 
             try {
-                int code = urlConnection.getResponseCode();
+                final int code = urlConnection.getResponseCode();
                 switch (code) {
                     case NOT_MODIFIED: {
                         LOGGER.debug("Configuration Not Modified");
                         return false;
                     }
                     case OK: {
-                        try (InputStream is = urlConnection.getInputStream()) {
-                            ConfigurationSource configSource = getConfiguration().getConfigurationSource();
+                        try (final InputStream is = urlConnection.getInputStream()) {
+                            final ConfigurationSource configSource = getConfiguration().getConfigurationSource();
                             configSource.setData(readStream(is));
                             lastModifiedMillis = urlConnection.getLastModified();
                             configSource.setModifiedMillis(lastModifiedMillis);
                             LOGGER.debug("Content was modified for {}", url.toString());
                             return true;
                         } catch (final IOException e) {
-                            try (InputStream es = urlConnection.getErrorStream()) {
+                            try (final InputStream es = urlConnection.getErrorStream()) {
                                 LOGGER.info("Error accessing configuration at {}: {}", url, readStream(es));
                             } catch (final IOException ioe) {
                                 LOGGER.error("Error accessing configuration at {}: {}", url, e.getMessage());
@@ -142,9 +142,9 @@ public class HttpWatcher extends AbstractWatcher {
         return false;
     }
 
-    private byte[] readStream(InputStream is) throws IOException {
-        ByteArrayOutputStream result = new ByteArrayOutputStream();
-        byte[] buffer = new byte[BUF_SIZE];
+    private byte[] readStream(final InputStream is) throws IOException {
+        final ByteArrayOutputStream result = new ByteArrayOutputStream();
+        final byte[] buffer = new byte[BUF_SIZE];
         int length;
         while ((length = is.read(buffer)) != -1) {
             result.write(buffer, 0, length);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
index 4170f42..9d0df1b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
@@ -374,7 +374,7 @@ public class LoggerConfig extends AbstractFilterable {
                 }
             }
         }
-        StackTraceElement location = requiresLocation() ? StackLocatorUtil.calcLocation(fqcn) : null;
+        final StackTraceElement location = requiresLocation() ? StackLocatorUtil.calcLocation(fqcn) : null;
         final LogEvent logEvent = logEventFactory.createEvent(loggerName, marker, fqcn, location, level, data, props, t);
         try {
             log(logEvent, LoggerConfigPredicate.ALL);
@@ -462,7 +462,7 @@ public class LoggerConfig extends AbstractFilterable {
         return reliabilityStrategy;
     }
 
-    private void processLogEvent(final LogEvent event, LoggerConfigPredicate predicate) {
+    private void processLogEvent(final LogEvent event, final LoggerConfigPredicate predicate) {
         event.setIncludeLocation(isIncludeLocation());
         if (predicate.allow(this)) {
             callAppenders(event);
@@ -477,7 +477,7 @@ public class LoggerConfig extends AbstractFilterable {
         AppenderControl[] controls = appenders.get();
         LoggerConfig loggerConfig = this;
         while (loggerConfig != null) {
-            for (AppenderControl control : controls) {
+            for (final AppenderControl control : controls) {
                 if (control.getAppender().requiresLocation()) {
                     return true;
                 }
@@ -596,19 +596,19 @@ public class LoggerConfig extends AbstractFilterable {
     protected enum LoggerConfigPredicate {
         ALL() {
             @Override
-            boolean allow(LoggerConfig config) {
+            boolean allow(final LoggerConfig config) {
                 return true;
             }
         },
         ASYNCHRONOUS_ONLY() {
             @Override
-            boolean allow(LoggerConfig config) {
+            boolean allow(final LoggerConfig config) {
                 return config instanceof AsyncLoggerConfig;
             }
         },
         SYNCHRONOUS_ONLY() {
             @Override
-            boolean allow(LoggerConfig config) {
+            boolean allow(final LoggerConfig config) {
                 return !ASYNCHRONOUS_ONLY.allow(config);
             }
         };
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategy.java
index 6400435..75d16c3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategy.java
@@ -55,8 +55,8 @@ public interface ReliabilityStrategy {
      * @param t A Throwable or null.
      * @since 3.0
      */
-    default void log(Supplier<LoggerConfig> reconfigured, String loggerName, String fqcn, StackTraceElement location,
-            Marker marker, Level level, Message data, Throwable t) {
+    default void log(final Supplier<LoggerConfig> reconfigured, final String loggerName, final String fqcn, final StackTraceElement location,
+                     final Marker marker, final Level level, final Message data, final Throwable t) {
     }
 
     /**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/ScriptArbiter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/ScriptArbiter.java
index 4fda875..c968a32 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/ScriptArbiter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/ScriptArbiter.java
@@ -92,8 +92,8 @@ public class ScriptArbiter implements Arbiter {
 
         public ScriptArbiter build() {
             AbstractScript script = null;
-            for (Node child : node.getChildren()) {
-                PluginType<?> type = child.getType();
+            for (final Node child : node.getChildren()) {
+                final PluginType<?> type = child.getType();
                 if (type == null) {
                     LOGGER.error("Node {} is missing a Plugintype", child.getName());
                     continue;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/SelectArbiter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/SelectArbiter.java
index 2fb39f0..36493b5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/SelectArbiter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/SelectArbiter.java
@@ -30,12 +30,12 @@ import org.apache.logging.log4j.plugins.Plugin;
         printObject = true)
 public class SelectArbiter {
 
-    public Arbiter evaluateConditions(List<Arbiter> conditions) {
-        Optional<Arbiter> opt = conditions.stream().filter((c) -> c instanceof DefaultArbiter)
+    public Arbiter evaluateConditions(final List<Arbiter> conditions) {
+        final Optional<Arbiter> opt = conditions.stream().filter((c) -> c instanceof DefaultArbiter)
                 .reduce((a, b) -> {
                     throw new IllegalStateException("Multiple elements: " + a + ", " + b);
                 });
-        for (Arbiter condition : conditions) {
+        for (final Arbiter condition : conditions) {
             if (condition instanceof DefaultArbiter) {
                 continue;
             }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/SystemPropertyArbiter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/SystemPropertyArbiter.java
index 078ca32..e26690c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/SystemPropertyArbiter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/arbiters/SystemPropertyArbiter.java
@@ -43,7 +43,7 @@ public class SystemPropertyArbiter implements Arbiter {
      */
     @Override
     public boolean isCondition() {
-        String value = System.getProperty(propertyName);
+        final String value = System.getProperty(propertyName);
         return value != null && (propertyValue == null || value.equals(propertyValue));
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
index 822f742..4b299a5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
@@ -182,7 +182,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
 
     @Override
     public T build(final boolean initialize) {
-        T configuration;
+        final T configuration;
         try {
             if (source == null) {
                 source = ConfigurationSource.NULL_SOURCE;
@@ -253,7 +253,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
         return writer.toString();
     }
 
-    private String formatXml(String xml)
+    private String formatXml(final String xml)
             throws TransformerConfigurationException, TransformerException, TransformerFactoryConfigurationError {
         final StringWriter writer = new StringWriter();
         formatXml(new StreamSource(new StringReader(xml)), new StreamResult(writer));
@@ -363,12 +363,12 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
     }
 
     @Override
-    public LoggerComponentBuilder newAsyncLogger(String name) {
+    public LoggerComponentBuilder newAsyncLogger(final String name) {
         return new DefaultLoggerComponentBuilder(this, name, null, "AsyncLogger");
     }
 
     @Override
-    public LoggerComponentBuilder newAsyncLogger(String name, boolean includeLocation) {
+    public LoggerComponentBuilder newAsyncLogger(final String name, final boolean includeLocation) {
         return new DefaultLoggerComponentBuilder(this, name, null, "AsyncLogger", includeLocation);
     }
 
@@ -398,7 +398,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
     }
 
     @Override
-    public RootLoggerComponentBuilder newAsyncRootLogger(boolean includeLocation) {
+    public RootLoggerComponentBuilder newAsyncRootLogger(final boolean includeLocation) {
         return new DefaultRootLoggerComponentBuilder(this, null, "AsyncRoot", includeLocation);
     }
 
@@ -471,12 +471,12 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
     }
 
     @Override
-    public LoggerComponentBuilder newLogger(String name) {
+    public LoggerComponentBuilder newLogger(final String name) {
         return new DefaultLoggerComponentBuilder(this, name, null);
     }
 
     @Override
-    public LoggerComponentBuilder newLogger(String name, boolean includeLocation) {
+    public LoggerComponentBuilder newLogger(final String name, final boolean includeLocation) {
         return new DefaultLoggerComponentBuilder(this, name, null, includeLocation);
     }
 
@@ -506,7 +506,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
     }
 
     @Override
-    public RootLoggerComponentBuilder newRootLogger(boolean includeLocation) {
+    public RootLoggerComponentBuilder newRootLogger(final boolean includeLocation) {
         return new DefaultRootLoggerComponentBuilder(this, null, includeLocation);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/CompositeConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/CompositeConfiguration.java
index 4a6de10..0308896 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/CompositeConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/CompositeConfiguration.java
@@ -68,7 +68,7 @@ public class CompositeConfiguration extends AbstractConfiguration implements Rec
                 DefaultMergeStrategy.class.getName());
         try {
             mergeStrategy = Loader.newInstanceOf(mergeStrategyClassName);
-        } catch (ClassNotFoundException | IllegalAccessException | InvocationTargetException |
+        } catch (final ClassNotFoundException | IllegalAccessException | InvocationTargetException |
                 InstantiationException ex) {
             mergeStrategy = new DefaultMergeStrategy();
         }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/json/JsonConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/json/JsonConfiguration.java
index ef32a6c..bff1c9c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/json/JsonConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/json/JsonConfiguration.java
@@ -53,7 +53,7 @@ public class JsonConfiguration extends AbstractConfiguration implements Reconfig
     public JsonConfiguration(final LoggerContext loggerContext, final ConfigurationSource configSource) {
         super(loggerContext, configSource);
         final File configFile = configSource.getFile();
-        byte[] buffer;
+        final byte[] buffer;
         try {
             try (final InputStream configStream = configSource.getInputStream()) {
                 buffer = toByteArray(configStream);
@@ -196,7 +196,7 @@ public class JsonConfiguration extends AbstractConfiguration implements Reconfig
             }
         }
 
-        String t;
+        final String t;
         if (type == null) {
             t = "null";
         } else {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
index 8ebb37d..dd98827 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
@@ -306,13 +306,13 @@ public class PluginBuilder implements Builder<Object> {
         private final LogEvent event;
         private final StrSubstitutor strSubstitutor;
 
-        Substitutor(LogEvent event) {
+        Substitutor(final LogEvent event) {
             this.event = event;
             this.strSubstitutor = configuration.getStrSubstitutor();
         }
 
         @Override
-        public String apply(String str) {
+        public String apply(final String str) {
             return strSubstitutor.replace(event, str);
         }
     }
@@ -320,7 +320,7 @@ public class PluginBuilder implements Builder<Object> {
     public static class BuilderWrapper<T> implements Builder<T> {
         private final org.apache.logging.log4j.core.util.Builder<T> builder;
 
-        BuilderWrapper(org.apache.logging.log4j.core.util.Builder<T> builder) {
+        BuilderWrapper(final org.apache.logging.log4j.core.util.Builder<T> builder) {
             this.builder = builder;
         }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java
index 90dc00e..2fddd6a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.java
@@ -58,7 +58,7 @@ public class PluginElementVisitor extends AbstractConfigurationInjector<PluginEl
                     if (childObject == null) {
                         LOGGER.warn("Skipping null object returned for element {} in node {}", child.getName(), node.getName());
                     } else if (childObject.getClass().isArray()) {
-                        Object[] children = (Object[]) childObject;
+                        final Object[] children = (Object[]) childObject;
                         debugLog.append(Arrays.toString(children)).append('}');
                         node.getChildren().removeAll(used);
                         configurationBinder.bindObject(factory, children);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java
index 41d274f..ef8fd9c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java
@@ -258,7 +258,7 @@ public class PropertiesConfigurationBuilder extends ConfigurationBuilderFactory
         final String level = Strings.trimToNull((String) properties.remove("level"));
         final String type = (String) properties.remove(CONFIG_TYPE);
         final LoggerComponentBuilder loggerBuilder;
-        boolean includeLocation;
+        final boolean includeLocation;
         if (type != null) {
             if (type.equalsIgnoreCase("asyncLogger")) {
                 if (location != null) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java
index ca053ce..6e689d9 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java
@@ -141,7 +141,7 @@ public class XmlConfiguration extends AbstractConfiguration implements Reconfigu
             LOGGER.error("Error parsing " + configSource.getLocation(), e);
         }
         if (strict && schemaResource != null && buffer != null) {
-            try (InputStream is = Loader.getResourceAsStream(schemaResource, XmlConfiguration.class.getClassLoader())) {
+            try (final InputStream is = Loader.getResourceAsStream(schemaResource, XmlConfiguration.class.getClassLoader())) {
                 if (is != null) {
                     final javax.xml.transform.Source src = new StreamSource(is, LOG4J_XSD);
                     final SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -202,7 +202,7 @@ public class XmlConfiguration extends AbstractConfiguration implements Reconfigu
     private static void setFeature(final DocumentBuilderFactory factory, final String featureName, final boolean value) {
         try {
             factory.setFeature(featureName, value);
-        } catch (Exception | LinkageError e) {
+        } catch (final Exception | LinkageError e) {
             getStatusLogger().error("Caught {} setting feature {} to {} on DocumentBuilderFactory {}: {}",
                     e.getClass().getCanonicalName(), featureName, value, factory, e, e);
         }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/AbstractFilterable.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/AbstractFilterable.java
index cbc53a1..b1d6a3d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/AbstractFilterable.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/AbstractFilterable.java
@@ -80,7 +80,7 @@ public abstract class AbstractFilterable extends AbstractLifeCycle implements Fi
         this(null, null);
     }
 
-    protected AbstractFilterable(final Filter filter, Property[] propertyArray) {
+    protected AbstractFilterable(final Filter filter, final Property[] propertyArray) {
         this.filter = filter;
         this.propertyArray = propertyArray == null ? Property.EMPTY_ARRAY : propertyArray;
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NeutralFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NeutralFilter.java
index eac45dc..9dd1c30 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NeutralFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NeutralFilter.java
@@ -31,79 +31,79 @@ public class NeutralFilter extends AbstractFilter {
     public static final NeutralFilter INSTANCE = new NeutralFilter();
 
     @Override
-    public Result filter(LogEvent event) {
+    public Result filter(final LogEvent event) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, Message msg, Throwable t) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg, final Throwable t) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, Object msg, Throwable t) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg, final Throwable t) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, String msg, Object... params) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object... params) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, String msg, Object p0) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object p0) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, String msg, Object p0, Object p1) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object p0, final Object p1) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object p0, final Object p1, final Object p2) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2,
-            Object p3) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object p0, final Object p1, final Object p2,
+                         final Object p3) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2,
-            Object p3, Object p4) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object p0, final Object p1, final Object p2,
+                         final Object p3, final Object p4) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2,
-            Object p3, Object p4, Object p5) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object p0, final Object p1, final Object p2,
+                         final Object p3, final Object p4, final Object p5) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2,
-            Object p3, Object p4, Object p5, Object p6) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object p0, final Object p1, final Object p2,
+                         final Object p3, final Object p4, final Object p5, final Object p6) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2,
-            Object p3, Object p4, Object p5, Object p6, Object p7) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object p0, final Object p1, final Object p2,
+                         final Object p3, final Object p4, final Object p5, final Object p6, final Object p7) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2,
-            Object p3, Object p4, Object p5, Object p6, Object p7, Object p8) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object p0, final Object p1, final Object p2,
+                         final Object p3, final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
         return Result.NEUTRAL;
     }
 
     @Override
-    public Result filter(Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2,
-            Object p3, Object p4, Object p5, Object p6, Object p7, Object p8, Object p9) {
+    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, final Object p0, final Object p1, final Object p2,
+                         final Object p3, final Object p4, final Object p5, final Object p6, final Object p7, final Object p8, final Object p9) {
         return Result.NEUTRAL;
     }
     
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java
index c6f0799..67078af 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java
@@ -77,7 +77,7 @@ public final class TimeFilter extends AbstractFilter {
      * Expose for unit testing.
      */
     TimeFilter(final LocalTime start, final LocalTime end, final ZoneId timeZone, final Result onMatch,
-            final Result onMismatch, LocalDate now) {
+               final Result onMismatch, final LocalDate now) {
         super(onMatch, onMismatch);
         this.startTime = start;
         this.endTime = end;
@@ -90,7 +90,7 @@ public final class TimeFilter extends AbstractFilter {
         }
         duration = startTime.isBefore(endTime) ? Duration.between(startTime, endTime).toMillis() :
             Duration.between(startTime, endTime).plusHours(24).toMillis();
-        long difference = (endMillis - this.start) - duration;
+        final long difference = (endMillis - this.start) - duration;
         if (difference != 0) {
             // Handle switch from standard time to daylight time and daylight time to standard time.
             endMillis -= difference;
@@ -103,18 +103,18 @@ public final class TimeFilter extends AbstractFilter {
         this(start, end, timeZone, onMatch, onMismatch, LocalDate.now(timeZone));
     }
 
-    private synchronized void adjustTimes(long currentTimeMillis) {
+    private synchronized void adjustTimes(final long currentTimeMillis) {
         if (currentTimeMillis <= end) {
             return;
         }
-        LocalDate date = Instant.ofEpochMilli(currentTimeMillis).atZone(timeZone).toLocalDate();
+        final LocalDate date = Instant.ofEpochMilli(currentTimeMillis).atZone(timeZone).toLocalDate();
         this.start = ZonedDateTime.of(date, startTime, timeZone).withEarlierOffsetAtOverlap().toInstant().toEpochMilli();
         long endMillis = ZonedDateTime.of(date, endTime, timeZone).withEarlierOffsetAtOverlap().toInstant().toEpochMilli();
         if (endTime.isBefore(startTime)) {
             // End time must be tomorrow.
             endMillis += DAY_MS;
         }
-        long difference = (endMillis - this.start) - duration;
+        final long difference = (endMillis - this.start) - duration;
         if (difference != 0) {
             // Handle switch from standard time to daylight time and daylight time to standard time.
             endMillis -= difference;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
index 2a152d7..cb745ff 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
@@ -121,7 +121,7 @@ public class ContextDataFactory {
 
     public static StringMap createContextData(final Map<String, String> context) {
         final StringMap contextData = createContextData(context.size());
-        for (Entry<String, String> entry : context.entrySet()) {
+        for (final Entry<String, String> entry : context.entrySet()) {
             contextData.putValue(entry.getKey(), entry.getValue());
         }
         return contextData;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java
index c65eaa1..f207ccd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java
@@ -166,8 +166,8 @@ public final class ExtendedStackTraceElement implements Serializable {
     private void render(final StackTraceElement stElement, final StringBuilder output, final TextRenderer textRenderer) {
         final String fileName = stElement.getFileName();
         final int lineNumber = stElement.getLineNumber();
-        String moduleName = getModuleName();
-        String moduleVersion = getModuleVersion();
+        final String moduleName = getModuleName();
+        final String moduleVersion = getModuleVersion();
         if (Strings.isNotEmpty(moduleName)) {
             textRenderer.render(moduleName, output, "StackTraceElement.ModuleName");
             if (Strings.isNotEmpty(moduleVersion) && !moduleName.startsWith("java")) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jContextFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jContextFactory.java
index 4ea5518..0b99ac0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jContextFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jContextFactory.java
@@ -303,7 +303,7 @@ public class Log4jContextFactory implements LoggerContextFactory, ShutdownCallba
                 if (configurations.size() == 0) {
                     LOGGER.error("No configurations could be created for {}", configLocations.toString());
                 } else if (configurations.size() == 1) {
-                    AbstractConfiguration config = configurations.get(0);
+                    final AbstractConfiguration config = configurations.get(0);
                     LOGGER.debug("Starting LoggerContext[name={}] from configuration at {}", ctx.getName(),
                             config.getConfigurationSource().getLocation());
                     ctx.start(config);
@@ -322,7 +322,7 @@ public class Log4jContextFactory implements LoggerContextFactory, ShutdownCallba
     }
 
     @Override
-    public void shutdown(String fqcn, ClassLoader loader, boolean currentContext, boolean allContexts) {
+    public void shutdown(final String fqcn, final ClassLoader loader, final boolean currentContext, final boolean allContexts) {
         if (selector.hasContext(fqcn, loader, currentContext)) {
             selector.shutdown(fqcn, loader, currentContext, allContexts);
         }
@@ -338,7 +338,7 @@ public class Log4jContextFactory implements LoggerContextFactory, ShutdownCallba
      * @since 2.13.0
      */
     @Override
-    public boolean hasContext(String fqcn, ClassLoader loader, boolean currentContext) {
+    public boolean hasContext(final String fqcn, final ClassLoader loader, final boolean currentContext) {
         return selector.hasContext(fqcn, loader, currentContext);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
index ed9237d..1054786 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
@@ -350,7 +350,7 @@ public class Log4jLogEvent implements LogEvent {
             final String threadName, final int threadPriority, final StackTraceElement source,
             final long timestampMillis, final int nanoOfMillisecond, final long nanoTime) {
         this(loggerName, marker, loggerFQCN, level, message, thrown, thrownProxy, contextData, contextStack, threadId, threadName, threadPriority, source, nanoTime);
-        long millis = message instanceof TimestampMessage
+        final long millis = message instanceof TimestampMessage
                 ? ((TimestampMessage) message).getTimestamp()
                 : timestampMillis;
         instant.initFromEpochMilli(millis, nanoOfMillisecond);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/LogEventFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/LogEventFactory.java
index b2af73a..7593b64 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/LogEventFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/LogEventFactory.java
@@ -33,8 +33,8 @@ public interface LogEventFactory {
     LogEvent createEvent(String loggerName, Marker marker, String fqcn, Level level, Message data,
                          List<Property> properties, Throwable t);
 
-    default LogEvent createEvent(String loggerName, Marker marker, String fqcn, StackTraceElement location, Level level,
-            Message data, List<Property> properties, Throwable t) {
+    default LogEvent createEvent(final String loggerName, final Marker marker, final String fqcn, final StackTraceElement location, final Level level,
+            final Message data, final List<Property> properties, final Throwable t) {
         return createEvent(loggerName, marker, fqcn, level, data, properties, t);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MementoMessage.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MementoMessage.java
index c867ce4..3cfcb3d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MementoMessage.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MementoMessage.java
@@ -36,7 +36,7 @@ public final class MementoMessage implements Message, StringBuilderFormattable {
     private final String format;
     private final Object[] parameters;
 
-    public MementoMessage(String formattedMessage, String format, Object[] parameters) {
+    public MementoMessage(final String formattedMessage, final String format, final Object[] parameters) {
         this.formattedMessage = formattedMessage;
         this.format = format;
         this.parameters = parameters;
@@ -68,7 +68,7 @@ public final class MementoMessage implements Message, StringBuilderFormattable {
     }
 
     @Override
-    public void formatTo(StringBuilder buffer) {
+    public void formatTo(final StringBuilder buffer) {
         buffer.append(formattedMessage);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
index d08863c..7863cd2 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
@@ -253,7 +253,7 @@ public class MutableLogEvent implements LogEvent, ReusableMessage, ParameterVisi
     }
 
     @Override
-    public <S> void forEachParameter(ParameterConsumer<S> action, S state) {
+    public <S> void forEachParameter(final ParameterConsumer<S> action, final S state) {
         if (parameters != null) {
             for (short i = 0; i < parameterCount; i++) {
                 action.accept(parameters[i], i, state);
@@ -350,7 +350,7 @@ public class MutableLogEvent implements LogEvent, ReusableMessage, ParameterVisi
         return thrownProxy;
     }
 
-    public void setSource(StackTraceElement source) {
+    public void setSource(final StackTraceElement source) {
         this.source = source;
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactory.java
index ee8a0cd..cee5334 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactory.java
@@ -74,7 +74,7 @@ public class ReusableLogEventFactory implements LogEventFactory {
      */
     @Override
     public LogEvent createEvent(final String loggerName, final Marker marker,
-                                final String fqcn, StackTraceElement location, final Level level, final Message message,
+                                final String fqcn, final StackTraceElement location, final Level level, final Message message,
                                 final List<Property> properties, final Throwable t) {
         MutableLogEvent result = mutableLogEventThreadLocal.get();
         if (result == null || result.reserved) {
@@ -118,7 +118,7 @@ public class ReusableLogEventFactory implements LogEventFactory {
      */
     public static void release(final LogEvent logEvent) { // LOG4J2-1583
         if (logEvent instanceof MutableLogEvent) {
-            MutableLogEvent mutableLogEvent = (MutableLogEvent) logEvent;
+            final MutableLogEvent mutableLogEvent = (MutableLogEvent) logEvent;
             mutableLogEvent.clear();
             mutableLogEvent.reserved = false;
         }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
index b203897..15f69c9 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
@@ -79,7 +79,7 @@ public class ThreadContextDataInjector {
     }
 
     private static List<ContextDataProvider> getServiceProviders() {
-        List<ContextDataProvider> providers = new ArrayList<>();
+        final List<ContextDataProvider> providers = new ArrayList<>();
         for (final ClassLoader classLoader : LoaderUtil.getClassLoaders()) {
             try {
                 for (final ContextDataProvider provider : ServiceLoader.load(ContextDataProvider.class, classLoader)) {
@@ -126,7 +126,7 @@ public class ThreadContextDataInjector {
                 copy = providers.get(0).supplyContextData();
             } else {
                 copy = new HashMap<>();
-                for (ContextDataProvider provider : providers) {
+                for (final ContextDataProvider provider : providers) {
                     copy.putAll(provider.supplyContextData());
                 }
             }
@@ -244,7 +244,7 @@ public class ThreadContextDataInjector {
                 return providers.get(0).supplyStringMap();
             }
             int count = props == null ? 0 : props.size();
-            StringMap[] maps = new StringMap[providers.size()];
+            final StringMap[] maps = new StringMap[providers.size()];
             for (int i = 0; i < providers.size(); ++i) {
                 maps[i] = providers.get(i).supplyStringMap();
                 count += maps[i].size();
@@ -255,7 +255,7 @@ public class ThreadContextDataInjector {
             // the ThreadContext - this will throw an UnsupportedOperationException if we try to modify it.
             final StringMap result = ContextDataFactory.createContextData(count);
             copyProperties(props, result);
-            for (StringMap map : maps) {
+            for (final StringMap map : maps) {
                 result.putAll(map);
             }
             return result;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java
index c948a0c..1c043af 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java
@@ -298,7 +298,7 @@ public class ThrowableProxy implements Serializable {
      *
      * @param value New value of commonElementCount.
      */
-    void setCommonElementCount(int value) {
+    void setCommonElementCount(final int value) {
         this.commonElementCount = value;
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyHelper.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyHelper.java
index 547ca09..edeaf9f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyHelper.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyHelper.java
@@ -72,7 +72,7 @@ class ThrowableProxyHelper {
             final Stack<Class<?>> stack, final Map<String, CacheEntry> map,
             final StackTraceElement[] rootTrace,
             final StackTraceElement[] stackTrace) {
-        int stackLength;
+        final int stackLength;
         if (rootTrace != null) {
             int rootIndex = rootTrace.length - 1;
             int stackIndex = stackTrace.length - 1;
@@ -95,7 +95,7 @@ class ThrowableProxyHelper {
             // The stack returned from getCurrentStack may be missing entries for java.lang.reflect.Method.invoke()
             // and its implementation. The Throwable might also contain stack entries that are no longer
             // present as those methods have returned.
-            ExtendedClassInfo extClassInfo;
+            final ExtendedClassInfo extClassInfo;
             if (clazz != null && className.equals(clazz.getName())) {
                 final CacheEntry entry = toCacheEntry(clazz, true);
                 extClassInfo = entry.element;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyRenderer.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyRenderer.java
index d86d2bb..f13943a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyRenderer.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyRenderer.java
@@ -53,13 +53,13 @@ class ThrowableProxyRenderer {
     }
 
     private static void formatCause(final StringBuilder sb, final String prefix, final ThrowableProxy cause,
-                                    final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, String lineSeparator) {
+                                    final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
         formatThrowableProxy(sb, prefix, CAUSED_BY_LABEL, cause, ignorePackages, textRenderer, suffix, lineSeparator);
     }
 
     private static void formatThrowableProxy(final StringBuilder sb, final String prefix, final String causeLabel,
                                              final ThrowableProxy throwableProxy, final List<String> ignorePackages,
-                                             final TextRenderer textRenderer, final String suffix, String lineSeparator) {
+                                             final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
         if (throwableProxy == null) {
             return;
         }
@@ -75,7 +75,7 @@ class ThrowableProxyRenderer {
     }
 
     private static void formatSuppressed(final StringBuilder sb, final String prefix, final ThrowableProxy[] suppressedProxies,
-                                         final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, String lineSeparator) {
+                                         final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
         if (suppressedProxies == null) {
             return;
         }
@@ -86,7 +86,7 @@ class ThrowableProxyRenderer {
 
     private static void formatElements(final StringBuilder sb, final String prefix, final int commonCount,
                                        final StackTraceElement[] causedTrace, final ExtendedStackTraceElement[] extStackTrace,
-                                       final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, String lineSeparator) {
+                                       final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
         if (ignorePackages == null || ignorePackages.isEmpty()) {
             for (final ExtendedStackTraceElement element : extStackTrace) {
                 formatEntry(element, sb, prefix, textRenderer, suffix, lineSeparator);
@@ -126,7 +126,7 @@ class ThrowableProxyRenderer {
     }
 
     private static void appendSuppressedCount(final StringBuilder sb, final String prefix, final int count,
-                                              final TextRenderer textRenderer, final String suffix, String lineSeparator) {
+                                              final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
         textRenderer.render(prefix, sb, "Prefix");
         if (count == 1) {
             textRenderer.render("\t... ", sb, "Suppressed");
@@ -140,7 +140,7 @@ class ThrowableProxyRenderer {
     }
 
     private static void formatEntry(final ExtendedStackTraceElement extStackTraceElement, final StringBuilder sb,
-                                    final String prefix, final TextRenderer textRenderer, final String suffix, String lineSeparator) {
+                                    final String prefix, final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
         textRenderer.render(prefix, sb, "Prefix");
         textRenderer.render("\tat ", sb, "At");
         extStackTraceElement.renderOn(sb, textRenderer);
@@ -170,7 +170,7 @@ class ThrowableProxyRenderer {
      * @param suffix         Append this to the end of each stack frame.
      * @param lineSeparator  The end-of-line separator.
      */
-    static void formatExtendedStackTraceTo(ThrowableProxy src, final StringBuilder sb, final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
+    static void formatExtendedStackTraceTo(final ThrowableProxy src, final StringBuilder sb, final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
         textRenderer.render(src.getName(), sb, "Name");
         textRenderer.render(": ", sb, "NameMessageSeparator");
         textRenderer.render(src.getMessage(), sb, "Message");
@@ -193,7 +193,7 @@ class ThrowableProxyRenderer {
      * @param lineSeparator  The end-of-line separator.
      */
     static void formatCauseStackTrace(final ThrowableProxy src, final StringBuilder sb, final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
-        ThrowableProxy causeProxy = src.getCauseProxy();
+        final ThrowableProxy causeProxy = src.getCauseProxy();
         if (causeProxy != null) {
             formatWrapper(sb, causeProxy, ignorePackages, textRenderer, suffix, lineSeparator);
             sb.append(WRAPPED_BY_LABEL);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
index ab5a63b..15af8b8 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
@@ -176,8 +176,8 @@ public final class GelfLayout extends AbstractStringLayout {
 
         @Override
         public GelfLayout build() {
-            ListChecker mdcChecker = createChecker(threadContextExcludes, threadContextIncludes);
-            ListChecker mapChecker = createChecker(mapMessageExcludes, mapMessageIncludes);
+            final ListChecker mdcChecker = createChecker(threadContextExcludes, threadContextIncludes);
+            final ListChecker mapChecker = createChecker(mapMessageExcludes, mapMessageIncludes);
             PatternLayout patternLayout = null;
             if (messagePattern != null && patternSelector != null) {
                 LOGGER.error("A message pattern and PatternSelector cannot both be specified on GelfLayout, "
@@ -202,12 +202,12 @@ public final class GelfLayout extends AbstractStringLayout {
                     threadContextPrefix, mapPrefix);
         }
 
-        private ListChecker createChecker(String excludes, String includes) {
+        private ListChecker createChecker(final String excludes, final String includes) {
             ListChecker checker = null;
             if (excludes != null) {
                 final String[] array = excludes.split(Patterns.COMMA_SEPARATOR);
                 if (array.length > 0) {
-                    List<String> excludeList = new ArrayList<>(array.length);
+                    final List<String> excludeList = new ArrayList<>(array.length);
                     for (final String str : array) {
                         excludeList.add(str.trim());
                     }
@@ -217,7 +217,7 @@ public final class GelfLayout extends AbstractStringLayout {
             if (includes != null) {
                 final String[] array = includes.split(Patterns.COMMA_SEPARATOR);
                 if (array.length > 0) {
-                    List<String> includeList = new ArrayList<>(array.length);
+                    final List<String> includeList = new ArrayList<>(array.length);
                     for (final String str : array) {
                         includeList.add(str.trim());
                     }
@@ -471,7 +471,7 @@ public final class GelfLayout extends AbstractStringLayout {
 
     @Override
     public String toString() {
-        StringBuilder sb = new StringBuilder();
+        final StringBuilder sb = new StringBuilder();
         sb.append("host=").append(host);
         sb.append(", compressionType=").append(compressionType.toString());
         sb.append(", compressionThreshold=").append(compressionThreshold);
@@ -479,11 +479,11 @@ public final class GelfLayout extends AbstractStringLayout {
         sb.append(", includeThreadContext=").append(includeThreadContext);
         sb.append(", includeNullDelimiter=").append(includeNullDelimiter);
         sb.append(", includeNewLineDelimiter=").append(includeNewLineDelimiter);
-        String threadVars = mdcWriter.getChecker().toString();
+        final String threadVars = mdcWriter.getChecker().toString();
         if (threadVars.length() > 0) {
             sb.append(", ").append(threadVars);
         }
-        String mapVars = mapWriter.getChecker().toString();
+        final String mapVars = mapWriter.getChecker().toString();
         if (mapVars.length() > 0) {
             sb.append(", ").append(mapVars);
         }
@@ -644,14 +644,14 @@ public final class GelfLayout extends AbstractStringLayout {
         private final ListChecker checker;
         private final String prefix;
 
-        FieldWriter(ListChecker checker, String prefix) {
+        FieldWriter(final ListChecker checker, final String prefix) {
             this.checker = checker;
             this.prefix = prefix;
         }
 
         @Override
         public void accept(final String key, final Object value, final StringBuilder stringBuilder) {
-            String stringValue = String.valueOf(value);
+            final String stringValue = String.valueOf(value);
             if (checker.check(key) && (Strings.isNotEmpty(stringValue) || !omitEmptyFields)) {
                 stringBuilder.append(QU);
                 JsonUtils.quoteAsString(Strings.concat(prefix, key), stringBuilder);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
index 700b81d..7dada21 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
@@ -101,7 +101,7 @@ public final class HtmlLayout extends AbstractStringLayout {
     }
 
     private HtmlLayout(final boolean locationInfo, final String title, final String contentType, final Charset charset,
-        final String font, final String fontSize, final String headerSize, String datePattern, String timezone) {
+            final String font, final String fontSize, final String headerSize, final String datePattern, final String timezone) {
         super(charset);
         this.locationInfo = locationInfo;
         this.title = title;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LevelPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LevelPatternSelector.java
index 7b2b67b..116327f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LevelPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LevelPatternSelector.java
@@ -139,7 +139,7 @@ public class LevelPatternSelector implements PatternSelector{
             try {
                 final List<PatternFormatter> list = parser.parse(property.getPattern(), alwaysWriteExceptions,
                         disableAnsi, noConsoleNoAnsi);
-                PatternFormatter[] formatters = list.toArray(new PatternFormatter[0]);
+                final PatternFormatter[] formatters = list.toArray(new PatternFormatter[0]);
                 formatterMap.put(property.getKey(), formatters);
                 for (int i = 0; !needsLocation && i < formatters.length; ++i) {
                     needsLocation = formatters[i].requiresLocation();
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
index 651cffe..838d407 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
@@ -129,7 +129,7 @@ public class MarkerPatternSelector implements PatternSelector {
             try {
                 final List<PatternFormatter> list = parser.parse(property.getPattern(), alwaysWriteExceptions,
                         disableAnsi, noConsoleNoAnsi);
-                PatternFormatter[] formatters = list.toArray(new PatternFormatter[list.size()]);
+                final PatternFormatter[] formatters = list.toArray(new PatternFormatter[list.size()]);
                 formatterMap.put(property.getKey(), formatters);
                 for (int i = 0; !needsLocation && i < formatters.length; ++i) {
                     needsLocation = formatters[i].requiresLocation();
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
index 10a36c5..9c53164 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
@@ -184,7 +184,7 @@ public final class PatternLayout extends AbstractStringLayout {
         return eventSerializer.toSerializable(event);
     }
 
-    public void serialize(final LogEvent event, StringBuilder stringBuilder) {
+    public void serialize(final LogEvent event, final StringBuilder stringBuilder) {
         eventSerializer.toSerializable(event, stringBuilder);
     }
 
@@ -285,7 +285,7 @@ public final class PatternLayout extends AbstractStringLayout {
 
         @Override
         public boolean requiresLocation() {
-            for (PatternFormatter formatter : formatters) {
+            for (final PatternFormatter formatter : formatters) {
                 if (formatter.requiresLocation()) {
                     return true;
                 }
@@ -495,9 +495,9 @@ public final class PatternLayout extends AbstractStringLayout {
         }
 
         private boolean useAnsiEscapeCodes() {
-            PropertiesUtil propertiesUtil = PropertiesUtil.getProperties();
-            boolean isPlatformSupportsAnsi = !propertiesUtil.isOsWindows();
-            boolean isJansiRequested = !propertiesUtil.getBooleanProperty("log4j.skipJansi", true);
+            final PropertiesUtil propertiesUtil = PropertiesUtil.getProperties();
+            final boolean isPlatformSupportsAnsi = !propertiesUtil.isOsWindows();
+            final boolean isJansiRequested = !propertiesUtil.getBooleanProperty("log4j.skipJansi", true);
             return isPlatformSupportsAnsi || isJansiRequested;
         }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
index 969a769..3eb48e0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
@@ -393,7 +393,7 @@ public final class Rfc5424Layout extends AbstractStringLayout {
 
         if (isStructured) {
             if (message instanceof MessageCollectionMessage) {
-                for (StructuredDataMessage data : ((StructuredDataCollectionMessage)message)) {
+                for (final StructuredDataMessage data : ((StructuredDataCollectionMessage)message)) {
                     addStructuredData(sdElements, data);
                 }
             } else {
@@ -446,7 +446,7 @@ public final class Rfc5424Layout extends AbstractStringLayout {
     }
 
     private String computeTimeStampString(final long now) {
-        long last;
+        final long last;
         synchronized (this) {
             last = lastTimestamp;
             if (now == lastTimestamp) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
index 35bba99..356be7c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
@@ -159,7 +159,7 @@ public class ScriptPatternSelector implements PatternSelector {
         for (final PatternMatch property : properties) {
             try {
                 final List<PatternFormatter> list = parser.parse(property.getPattern(), alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi);
-                PatternFormatter[] formatters = list.toArray(new PatternFormatter[list.size()]);
+                final PatternFormatter[] formatters = list.toArray(new PatternFormatter[list.size()]);
                 formatterMap.put(property.getKey(), formatters);
                 patternMap.put(property.getKey(), property.getPattern());
                 for (int i = 0; !needsLocation && i < formatters.length; ++i) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Base64StrLookup.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Base64StrLookup.java
index d498d98..6d7b37c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Base64StrLookup.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Base64StrLookup.java
@@ -12,7 +12,7 @@ import org.apache.logging.log4j.core.LogEvent;
 public class Base64StrLookup extends AbstractLookup {
 
     @Override
-    public String lookup(LogEvent event, String key) {
+    public String lookup(final LogEvent event, final String key) {
         return new String(Base64.getDecoder().decode(key));
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/StrSubstitutor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/StrSubstitutor.java
index 33fc535..488a793 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/StrSubstitutor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/StrSubstitutor.java
@@ -995,9 +995,9 @@ public class StrSubstitutor implements ConfigurationAware {
                                             break;
                                         }
                                         if (valueEscapeDelimiterMatcher != null) {
-                                            int matchLen = valueEscapeDelimiterMatcher.isMatch(varNameExprChars, i);
+                                            final int matchLen = valueEscapeDelimiterMatcher.isMatch(varNameExprChars, i);
                                             if (matchLen != 0) {
-                                                String varNamePrefix = varNameExpr.substring(0, i) + Interpolator.PREFIX_SEPARATOR;
+                                                final String varNamePrefix = varNameExpr.substring(0, i) + Interpolator.PREFIX_SEPARATOR;
                                                 varName = varNamePrefix + varNameExpr.substring(i + matchLen - 1);
                                                 for (int j = i + matchLen; j < varNameExprChars.length; ++j){
                                                     if ((valueDelimiterMatchLen = valueDelimiterMatcher.isMatch(varNameExprChars, j)) != 0) {
@@ -1350,7 +1350,7 @@ public class StrSubstitutor implements ConfigurationAware {
             setValueDelimiterMatcher(null);
             return this;
         }
-        String escapeValue = valueDelimiter.substring(0, valueDelimiter.length() - 1) + "\\"
+        final String escapeValue = valueDelimiter.substring(0, valueDelimiter.length() - 1) + "\\"
                 + valueDelimiter.substring(valueDelimiter.length() - 1);
         valueEscapeDelimiterMatcher = StrMatcher.stringMatcher(escapeValue);
         return setValueDelimiterMatcher(StrMatcher.stringMatcher(valueDelimiter));
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
index 844c614..036f63c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
@@ -110,7 +110,7 @@ public class DatagramSocketManager extends AbstractSocketManager {
 
         @Override
         public DatagramSocketManager createManager(final String name, final FactoryData data) {
-            InetAddress inetAddress;
+            final InetAddress inetAddress;
             try {
                 inetAddress = InetAddress.getByName(data.host);
             } catch (final UnknownHostException ex) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/MulticastDnsAdvertiser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/MulticastDnsAdvertiser.java
index fc7daf2..d03f69f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/MulticastDnsAdvertiser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/MulticastDnsAdvertiser.java
@@ -93,7 +93,7 @@ public class MulticastDnsAdvertiser implements Advertiser {
             } catch (final NoSuchMethodException e) {
                 // no-op
             }
-            Object serviceInfo;
+            final Object serviceInfo;
             if (isVersion3) {
                 serviceInfo = buildServiceInfoVersion3(zone, port, name, truncatedProperties);
             } else {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
index 666aa7e..2f2e521 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
@@ -108,7 +108,7 @@ public class SslSocketManager extends TcpSocketManager {
     }
 
     private static SSLSocketFactory createSslSocketFactory(final SslConfiguration sslConf) {
-        SSLSocketFactory socketFactory;
+        final SSLSocketFactory socketFactory;
 
         if (sslConf != null) {
             socketFactory = sslConf.getSslSocketFactory();
@@ -123,8 +123,8 @@ public class SslSocketManager extends TcpSocketManager {
     private static class SslSocketManagerFactory extends TcpSocketManagerFactory<SslSocketManager, SslFactoryData> {
 
         @Override
-        SslSocketManager createManager(final String name, OutputStream os, Socket socket, InetAddress inetAddress,
-                final SslFactoryData data) {
+        SslSocketManager createManager(final String name, final OutputStream os, final Socket socket, final InetAddress inetAddress,
+                 final SslFactoryData data) {
             return new SslSocketManager(name, os, socket, data.sslConfiguration, inetAddress, data.host, data.port,
                     data.connectTimeoutMillis, data.reconnectDelayMillis, data.immediateFail, data.layout, data.bufferSize,
                     data.socketOptions);
@@ -132,13 +132,13 @@ public class SslSocketManager extends TcpSocketManager {
 
         @Override
         Socket createSocket(final SslFactoryData data) throws IOException {
-            List<InetSocketAddress> socketAddresses = resolver.resolveHost(data.host, data.port);
+            final List<InetSocketAddress> socketAddresses = resolver.resolveHost(data.host, data.port);
             IOException ioe = null;
-            for (InetSocketAddress socketAddress : socketAddresses) {
+            for (final InetSocketAddress socketAddress : socketAddresses) {
                 try {
                     return SslSocketManager.createSocket(socketAddress, data.connectTimeoutMillis,
                             data.sslConfiguration, data.socketOptions);
-                } catch (IOException ex) {
+                } catch (final IOException ex) {
                     ioe = ex;
                 }
             }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
index 9b39bce..7d2c154 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
@@ -162,7 +162,7 @@ public class TcpSocketManager extends AbstractSocketManager {
                     reconnector = createReconnector();
                     try {
                         reconnector.reconnect();
-                    } catch (IOException reconnEx) {
+                    } catch (final IOException reconnEx) {
                         LOGGER.debug("Cannot reestablish socket connection to {}: {}; starting reconnector thread {}",
                                 config, reconnEx.getLocalizedMessage(), reconnector.getName(), reconnEx);
                         reconnector.start();
@@ -171,7 +171,7 @@ public class TcpSocketManager extends AbstractSocketManager {
                     }
                     try {
                         writeAndFlush(bytes, offset, length, immediateFlush);
-                    } catch (IOException e) {
+                    } catch (final IOException e) {
                         throw new AppenderLoggingException(
                                 String.format("Error writing to %s after reestablishing connection for %s", getName(),
                                         config),
@@ -281,18 +281,18 @@ public class TcpSocketManager extends AbstractSocketManager {
         }
 
         void reconnect() throws IOException {
-            List<InetSocketAddress> socketAddresses = FACTORY.resolver.resolveHost(host, port);
+            final List<InetSocketAddress> socketAddresses = FACTORY.resolver.resolveHost(host, port);
             if (socketAddresses.size() == 1) {
                 LOGGER.debug("Reconnecting " + socketAddresses.get(0));
                 connect(socketAddresses.get(0));
             } else {
                 IOException ioe = null;
-                for (InetSocketAddress socketAddress : socketAddresses) {
+                for (final InetSocketAddress socketAddress : socketAddresses) {
                     try {
                         LOGGER.debug("Reconnecting " + socketAddress);
                         connect(socketAddress);
                         return;
-                    } catch (IOException ex) {
+                    } catch (final IOException ex) {
                         ioe = ex;
                     }
                 }
@@ -300,11 +300,11 @@ public class TcpSocketManager extends AbstractSocketManager {
             }
         }
 
-        private void connect(InetSocketAddress socketAddress) throws IOException {
+        private void connect(final InetSocketAddress socketAddress) throws IOException {
             final Socket sock = createSocket(socketAddress);
             @SuppressWarnings("resource") // newOS is managed by the enclosing Manager.
             final OutputStream newOS = sock.getOutputStream();
-            InetAddress prev = socket != null ? socket.getInetAddress() : null;
+            final InetAddress prev = socket != null ? socket.getInetAddress() : null;
             synchronized (owner) {
                 Closer.closeSilently(getOutputStream());
                 setOutputStream(newOS);
@@ -312,7 +312,7 @@ public class TcpSocketManager extends AbstractSocketManager {
                 reconnector = null;
                 shutdown = true;
             }
-            String type = prev != null && prev.getHostAddress().equals(socketAddress.getAddress().getHostAddress()) ?
+            final String type = prev != null && prev.getHostAddress().equals(socketAddress.getAddress().getHostAddress()) ?
                     "reestablished" : "established";
             LOGGER.debug("Connection to {}:{} {}: {}", host, port, type, socket);
         }
@@ -401,7 +401,7 @@ public class TcpSocketManager extends AbstractSocketManager {
         @SuppressWarnings("resource")
         @Override
         public M createManager(final String name, final T data) {
-            InetAddress inetAddress;
+            final InetAddress inetAddress;
             OutputStream os;
             try {
                 inetAddress = InetAddress.getByName(data.host);
@@ -427,27 +427,27 @@ public class TcpSocketManager extends AbstractSocketManager {
         }
 
         @SuppressWarnings("unchecked")
-        M createManager(final String name, OutputStream os, Socket socket, InetAddress inetAddress, final T data) {
+        M createManager(final String name, final OutputStream os, final Socket socket, final InetAddress inetAddress, final T data) {
             return (M) new TcpSocketManager(name, os, socket, inetAddress, data.host, data.port,
                     data.connectTimeoutMillis, data.reconnectDelayMillis, data.immediateFail, data.layout,
                     data.bufferSize, data.socketOptions);
         }
 
         Socket createSocket(final T data) throws IOException {
-            List<InetSocketAddress> socketAddresses = resolver.resolveHost(data.host, data.port);
+            final List<InetSocketAddress> socketAddresses = resolver.resolveHost(data.host, data.port);
             IOException ioe = null;
-            for (InetSocketAddress socketAddress : socketAddresses) {
+            for (final InetSocketAddress socketAddress : socketAddresses) {
                 try {
                     return TcpSocketManager.createSocket(socketAddress, data.socketOptions, data.connectTimeoutMillis);
-                } catch (IOException ex) {
+                } catch (final IOException ex) {
                     ioe = ex;
                 }
             }
             throw new IOException(errorMessage(data, socketAddresses) , ioe);
         }
 
-        protected String errorMessage(final T data, List<InetSocketAddress> socketAddresses) {
-            StringBuilder sb = new StringBuilder("Unable to create socket for ");
+        protected String errorMessage(final T data, final List<InetSocketAddress> socketAddresses) {
+            final StringBuilder sb = new StringBuilder("Unable to create socket for ");
             sb.append(data.host).append(" at port ").append(data.port);
             if (socketAddresses.size() == 1) {
                 if (!socketAddresses.get(0).getAddress().getHostAddress().equals(data.host)) {
@@ -472,16 +472,16 @@ public class TcpSocketManager extends AbstractSocketManager {
      * This method is only for unit testing. It is not Thread-safe.
      * @param resolver the HostResolver.
      */
-    public static void setHostResolver(HostResolver resolver) {
+    public static void setHostResolver(final HostResolver resolver) {
         TcpSocketManagerFactory.resolver = resolver;
     }
 
     public static class HostResolver {
 
-        public List<InetSocketAddress> resolveHost(String host, int port) throws UnknownHostException {
-            InetAddress[] addresses = InetAddress.getAllByName(host);
-            List<InetSocketAddress> socketAddresses = new ArrayList<>(addresses.length);
-            for (InetAddress address: addresses) {
+        public List<InetSocketAddress> resolveHost(final String host, final int port) throws UnknownHostException {
+            final InetAddress[] addresses = InetAddress.getAllByName(host);
+            final List<InetSocketAddress> socketAddresses = new ArrayList<>(addresses.length);
+            for (final InetAddress address: addresses) {
                 socketAddresses.add(new InetSocketAddress(address, port));
             }
             return socketAddresses;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java
index fab8b77..63df3d2 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java
@@ -43,10 +43,10 @@ public class UrlConnectionFactory {
     private static final String HTTP = "http";
     private static final String HTTPS = "https";
 
-    public static HttpURLConnection createConnection(URL url, long lastModifiedMillis, SslConfiguration sslConfiguration)
+    public static HttpURLConnection createConnection(final URL url, final long lastModifiedMillis, final SslConfiguration sslConfiguration)
         throws IOException {
         final HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
-        AuthorizationProvider provider = ConfigurationFactory.getAuthorizationProvider();
+        final AuthorizationProvider provider = ConfigurationFactory.getAuthorizationProvider();
         if (provider != null) {
             provider.addAuthorization(urlConnection);
         }
@@ -60,9 +60,9 @@ public class UrlConnectionFactory {
         if (readTimeoutMillis > 0) {
             urlConnection.setReadTimeout(readTimeoutMillis);
         }
-        String[] fileParts = url.getFile().split("\\.");
-        String type = fileParts[fileParts.length - 1].trim();
-        String contentType = isXml(type) ? XML : isJson(type) ? JSON : isProperties(type) ? PROPERTIES : TEXT;
+        final String[] fileParts = url.getFile().split("\\.");
+        final String type = fileParts[fileParts.length - 1].trim();
+        final String contentType = isXml(type) ? XML : isJson(type) ? JSON : isProperties(type) ? PROPERTIES : TEXT;
         urlConnection.setRequestProperty("Content-Type", contentType);
         if (lastModifiedMillis > 0) {
             urlConnection.setIfModifiedSince(lastModifiedMillis);
@@ -76,7 +76,7 @@ public class UrlConnectionFactory {
         return urlConnection;
     }
 
-    public static URLConnection createConnection(URL url) throws IOException {
+    public static URLConnection createConnection(final URL url) throws IOException {
         URLConnection urlConnection = null;
         if (url.getProtocol().equals(HTTPS) || url.getProtocol().equals(HTTP)) {
             urlConnection = createConnection(url, 0, SslConfigurationFactory.getSslConfiguration());
@@ -87,15 +87,15 @@ public class UrlConnectionFactory {
     }
 
 
-    private static boolean isXml(String type) {
+    private static boolean isXml(final String type) {
         return type.equalsIgnoreCase("xml");
     }
 
-    private static boolean isJson(String type) {
+    private static boolean isJson(final String type) {
         return type.equalsIgnoreCase("json") || type.equalsIgnoreCase("jsn");
     }
 
-    private static boolean isProperties(String type) {
+    private static boolean isProperties(final String type) {
         return type.equalsIgnoreCase("properties");
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/AbstractKeyStoreConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/AbstractKeyStoreConfiguration.java
index 511fd56..bff261d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/AbstractKeyStoreConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/AbstractKeyStoreConfiguration.java
@@ -52,7 +52,7 @@ public class AbstractKeyStoreConfiguration extends StoreConfiguration<KeyStore>
             }
             try (final InputStream fin = openInputStream(loadLocation)) {
                 final KeyStore ks = KeyStore.getInstance(this.keyStoreType);
-                char[] password = this.getPassword();
+                final char[] password = this.getPassword();
                 try {
                     ks.load(fin, password);
                 } finally {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/EnvironmentPasswordProvider.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/EnvironmentPasswordProvider.java
index d60f82c..da16622 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/EnvironmentPasswordProvider.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/EnvironmentPasswordProvider.java
@@ -49,7 +49,7 @@ class EnvironmentPasswordProvider implements PasswordProvider {
 
     @Override
     public char[] getPassword() {
-        String password = System.getenv(passwordEnvironmentVariable);
+        final String password = System.getenv(passwordEnvironmentVariable);
         return password == null ? null : password.toCharArray();
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/FilePasswordProvider.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/FilePasswordProvider.java
index ff59b00..355a781 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/FilePasswordProvider.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/FilePasswordProvider.java
@@ -65,14 +65,14 @@ class FilePasswordProvider implements PasswordProvider {
         byte[] bytes = null;
         try {
             bytes = Files.readAllBytes(passwordPath);
-            ByteBuffer bb = ByteBuffer.wrap(bytes);
-            CharBuffer decoded = Charset.defaultCharset().decode(bb);
-            char[] result = new char[decoded.limit()];
+            final ByteBuffer bb = ByteBuffer.wrap(bytes);
+            final CharBuffer decoded = Charset.defaultCharset().decode(bb);
+            final char[] result = new char[decoded.limit()];
             decoded.get(result, 0, result.length);
             decoded.rewind();
             decoded.put(new char[result.length]); // erase decoded CharBuffer
             return result;
-        } catch (IOException e) {
+        } catch (final IOException e) {
             throw new IllegalStateException("Could not read password from " + passwordPath + ": " + e, e);
         } finally {
             if (bytes != null) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/KeyStoreConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/KeyStoreConfiguration.java
index abe1e25..6459ac0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/KeyStoreConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/KeyStoreConfiguration.java
@@ -107,7 +107,7 @@ public class KeyStoreConfiguration extends AbstractKeyStoreConfiguration {
         }
         try {
             // @formatter:off
-            PasswordProvider provider = passwordFile != null
+            final PasswordProvider provider = passwordFile != null
                     ? new FilePasswordProvider(passwordFile)
                     : passwordEnvironmentVariable != null
                             ? new EnvironmentPasswordProvider(passwordEnvironmentVariable)
@@ -118,7 +118,7 @@ public class KeyStoreConfiguration extends AbstractKeyStoreConfiguration {
                 Arrays.fill(password, '\0');
             }
             return new KeyStoreConfiguration(location, provider, keyStoreType, keyManagerFactoryAlgorithm);
-        } catch (Exception ex) {
+        } catch (final Exception ex) {
             throw new StoreConfigurationException("Could not configure KeyStore", ex);
         }
     }
@@ -126,7 +126,7 @@ public class KeyStoreConfiguration extends AbstractKeyStoreConfiguration {
     public KeyManagerFactory initKeyManagerFactory() throws NoSuchAlgorithmException, UnrecoverableKeyException,
             KeyStoreException {
         final KeyManagerFactory kmFactory = KeyManagerFactory.getInstance(this.keyManagerFactoryAlgorithm);
-        char[] password = this.getPassword();
+        final char[] password = this.getPassword();
         try {
             kmFactory.init(this.getKeyStore(), password);
         } finally {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfiguration.java
index 6c5d087..45b4961 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfiguration.java
@@ -49,7 +49,7 @@ public class SslConfiguration {
     private final boolean verifyHostName;
 
     private SslConfiguration(final String protocol, final KeyStoreConfiguration keyStoreConfig,
-            final TrustStoreConfiguration trustStoreConfig, boolean verifyHostName) {
+            final TrustStoreConfiguration trustStoreConfig, final boolean verifyHostName) {
         this.keyStoreConfig = keyStoreConfig;
         this.trustStoreConfig = trustStoreConfig;
         this.protocol = protocol == null ? SslConfigurationDefaults.PROTOCOL : protocol;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfigurationFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfigurationFactory.java
index d0a517d..df0fdd5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfigurationFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/SslConfigurationFactory.java
@@ -43,12 +43,12 @@ public class SslConfigurationFactory {
     private static final String verifyHostName = "log4j2.ssl.verifyHostName";
 
     static {
-        PropertiesUtil props = PropertiesUtil.getProperties();
+        final PropertiesUtil props = PropertiesUtil.getProperties();
         KeyStoreConfiguration keyStoreConfiguration = null;
         TrustStoreConfiguration trustStoreConfiguration = null;
         String location = props.getStringProperty(trustStorelocation);
         if (location != null) {
-            String password = props.getStringProperty(trustStorePassword);
+            final String password = props.getStringProperty(trustStorePassword);
             char[] passwordChars = null;
             if (password != null) {
                 passwordChars = password.toCharArray();
@@ -57,14 +57,14 @@ public class SslConfigurationFactory {
                 trustStoreConfiguration = TrustStoreConfiguration.createKeyStoreConfiguration(location, passwordChars,
                     props.getStringProperty(trustStorePasswordEnvVar), props.getStringProperty(trustStorePasswordFile),
                     props.getStringProperty(trustStoreKeyStoreType), props.getStringProperty(trustStoreKeyManagerFactoryAlgorithm));
-            } catch (Exception ex) {
+            } catch (final Exception ex) {
                 LOGGER.warn("Unable to create trust store configuration due to: {} {}", ex.getClass().getName(),
                     ex.getMessage());
             }
         }
         location = props.getStringProperty(keyStoreLocation);
         if (location != null) {
-            String password = props.getStringProperty(keyStorePassword);
+            final String password = props.getStringProperty(keyStorePassword);
             char[] passwordChars = null;
             if (password != null) {
                 passwordChars = password.toCharArray();
@@ -73,13 +73,13 @@ public class SslConfigurationFactory {
                 keyStoreConfiguration = KeyStoreConfiguration.createKeyStoreConfiguration(location, passwordChars,
                     props.getStringProperty(keyStorePasswordEnvVar), props.getStringProperty(keyStorePasswordFile),
                     props.getStringProperty(keyStoreType), props.getStringProperty(keyStoreKeyManagerFactoryAlgorithm));
-            } catch (Exception ex) {
+            } catch (final Exception ex) {
                 LOGGER.warn("Unable to create key store configuration due to: {} {}", ex.getClass().getName(),
                     ex.getMessage());
             }
         }
         if (trustStoreConfiguration != null || keyStoreConfiguration != null) {
-            boolean isVerifyHostName = props.getBooleanProperty(verifyHostName, false);
+            final boolean isVerifyHostName = props.getBooleanProperty(verifyHostName, false);
             sslConfiguration = SslConfiguration.createSSLConfiguration("https", keyStoreConfiguration,
                 trustStoreConfiguration, isVerifyHostName);
         }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/StoreConfigurationException.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/StoreConfigurationException.java
index 793e6df..f635145 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/StoreConfigurationException.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/StoreConfigurationException.java
@@ -30,7 +30,7 @@ public class StoreConfigurationException extends Exception {
         super(message);
     }
 
-    public StoreConfigurationException(String message, Exception e) {
+    public StoreConfigurationException(final String message, final Exception e) {
         super(message, e);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/TrustStoreConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/TrustStoreConfiguration.java
index 17cbe51..219a861 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/TrustStoreConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/TrustStoreConfiguration.java
@@ -86,7 +86,7 @@ public class TrustStoreConfiguration extends AbstractKeyStoreConfiguration {
         }
         try {
             // @formatter:off
-            PasswordProvider provider = passwordFile != null
+            final PasswordProvider provider = passwordFile != null
                     ? new FilePasswordProvider(passwordFile)
                     : passwordEnvironmentVariable != null
                             ? new EnvironmentPasswordProvider(passwordEnvironmentVariable)
@@ -97,7 +97,7 @@ public class TrustStoreConfiguration extends AbstractKeyStoreConfiguration {
                 Arrays.fill(password, '\0');
             }
             return new TrustStoreConfiguration(location, provider, keyStoreType, trustManagerFactoryAlgorithm);
-        } catch (Exception ex) {
+        } catch (final Exception ex) {
             throw new StoreConfigurationException("Could not configure TrustStore", ex);
         }
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/osgi/BundleContextSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/osgi/BundleContextSelector.java
index ba0a14e..c14a63f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/osgi/BundleContextSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/osgi/BundleContextSelector.java
@@ -88,7 +88,7 @@ public class BundleContextSelector extends ClassLoaderContextSelector {
         return null;
     }
 
-    private void removeLoggerContext(LoggerContext context) {
+    private void removeLoggerContext(final LoggerContext context) {
         CONTEXT_MAP.remove(context.getName());
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/DatePatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/DatePatternConverter.java
index a0c013d..3946bf8 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/DatePatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/DatePatternConverter.java
@@ -184,7 +184,7 @@ public final class DatePatternConverter extends LogEventPatternConverter impleme
         cachedTime = new AtomicReference<>(fromEpochMillis(System.currentTimeMillis()));
     }
 
-    private CachedTime fromEpochMillis(long epochMillis) {
+    private CachedTime fromEpochMillis(final long epochMillis) {
         final MutableInstant temp = new MutableInstant();
         temp.initFromEpochMilli(epochMillis, 0);
         return new CachedTime(temp);
@@ -266,7 +266,7 @@ public final class DatePatternConverter extends LogEventPatternConverter impleme
     }
 
     public void format(final long epochMilli, final StringBuilder output) {
-        MutableInstant instant = getMutableInstant();
+        final MutableInstant instant = getMutableInstant();
         instant.initFromEpochMilli(epochMilli, 0);
         format(instant, output);
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java
index 5ac11eb..cc925ad 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java
@@ -231,7 +231,7 @@ public final class HighlightConverter extends LogEventPatternConverter implement
     public void format(final LogEvent event, final StringBuilder toAppendTo) {
         int start = 0;
         int end = 0;
-        String levelStyle = levelStyles.get(event.getLevel().name());
+        final String levelStyle = levelStyles.get(event.getLevel().name());
         if (!noAnsi) { // use ANSI: set prefix
             start = toAppendTo.length();
             if (levelStyle != null) {
@@ -256,7 +256,7 @@ public final class HighlightConverter extends LogEventPatternConverter implement
         }
     }
 
-    String getLevelStyle(Level level) {
+    String getLevelStyle(final Level level) {
         return levelStyles.get(level.name());
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiTextRenderer.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiTextRenderer.java
index 8377036..302ad5d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiTextRenderer.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiTextRenderer.java
@@ -172,7 +172,7 @@ public final class JAnsiTextRenderer implements TextRenderer {
     public JAnsiTextRenderer(final String[] formats, final Map<String, Code[]> defaultStyleMap) {
         String tempBeginToken = AnsiRenderer.BEGIN_TOKEN;
         String tempEndToken = AnsiRenderer.END_TOKEN;
-        Map<String, Code[]> map;
+        final Map<String, Code[]> map;
         if (formats.length > 1) {
             final String allStylesStr = formats[1];
             // Style def split
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java
index 8b684a4..4977dd8 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java
@@ -53,7 +53,7 @@ public final class MapPatternConverter extends LogEventPatternConverter {
      *
      * @param options options, may be null.
      */
-    private MapPatternConverter(final String[] options, String... format) {
+    private MapPatternConverter(final String[] options, final String... format) {
         super(options != null && options.length > 0 ? "MAP{" + options[0] + '}' : "MAP", "map");
         key = options != null && options.length > 0 ? options[0] : null;
         this.format = format;
@@ -86,7 +86,7 @@ public final class MapPatternConverter extends LogEventPatternConverter {
      */
     @Override
     public void format(final LogEvent event, final StringBuilder toAppendTo) {
-        MapMessage msg;
+        final MapMessage msg;
         if (event.getMessage() instanceof MapMessage) {
             msg = (MapMessage) event.getMessage();
         } else {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
index d76388d..4372afe 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
@@ -139,7 +139,7 @@ public final class MessagePatternConverter extends LogEventPatternConverter {
             return;
         }
         if (msg != null) {
-            String result;
+            final String result;
             if (msg instanceof MultiformatMessage) {
                 result = ((MultiformatMessage) msg).getFormattedMessage(formats);
             } else {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java
index c65835c..869e85b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java
@@ -55,7 +55,7 @@ public abstract class NameAbbreviator {
                 return DEFAULT;
             }
 
-            boolean isNegativeNumber;
+            final boolean isNegativeNumber;
             final String number;
 
             // check if number is a negative number
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
index 5b32dec..67aaacc 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
@@ -186,7 +186,7 @@ public final class PatternParser {
                     config.setNanoClock(new SystemNanoClock());
                 }
             }
-            LogEventPatternConverter pc;
+            final LogEventPatternConverter pc;
             if (converter instanceof LogEventPatternConverter) {
                 pc = (LogEventPatternConverter) converter;
                 handlesThrowable |= pc.handlesThrowable();
@@ -194,7 +194,7 @@ public final class PatternParser {
                 pc = new LiteralPatternConverter(config, Strings.EMPTY, true);
             }
 
-            FormattingInfo field;
+            final FormattingInfo field;
             if (fieldIter.hasNext()) {
                 field = fieldIter.next();
             } else {
@@ -275,7 +275,7 @@ public final class PatternParser {
             final int begin = i; // position of first real char
             int depth = 1; // already inside one level
             while (depth > 0 && i < pattern.length()) {
-                char c = pattern.charAt(i);
+                final char c = pattern.charAt(i);
                 if (c == '{') {
                     depth++;
                 } else if (c == '}') {
@@ -603,8 +603,8 @@ public final class PatternParser {
     }
 
     /** LOG4J2-2564: Returns true if all method parameters are valid for injection. */
-    private static boolean areValidNewInstanceParameters(Class<?>[] parameterTypes) {
-        for (Class<?> clazz : parameterTypes) {
+    private static boolean areValidNewInstanceParameters(final Class<?>[] parameterTypes) {
+        for (final Class<?> clazz : parameterTypes) {
             if (!clazz.isAssignableFrom(Configuration.class)
                     && !(clazz.isArray() && "[Ljava.lang.String;".equals(clazz.getName()))) {
                 return false;
@@ -658,7 +658,7 @@ public final class PatternParser {
             noConsoleNoAnsi);
 
         if (pc == null) {
-            StringBuilder msg;
+            final StringBuilder msg;
 
             if (Strings.isEmpty(converterId)) {
                 msg = new StringBuilder("Empty conversion specifier starting at position ");
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverter.java
index 4d73cdc..9e9eadd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverter.java
@@ -32,7 +32,7 @@ public final class ProcessIdPatternConverter extends LogEventPatternConverter {
     private ProcessIdPatternConverter(final String... options) {
         super("Process ID", "pid");
         final String defaultValue = options.length > 0 ? options[0] : DEFAULT_DEFAULT_VALUE;
-        String discoveredPid = ProcessIdUtil.getProcessId();
+        final String discoveredPid = ProcessIdUtil.getProcessId();
         pid = discoveredPid.equals(ProcessIdUtil.DEFAULT_PROCESSID) ? defaultValue : discoveredPid;
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/RepeatPatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/RepeatPatternConverter.java
index 0db0a3d..74141b2 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/RepeatPatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/RepeatPatternConverter.java
@@ -57,7 +57,7 @@ public final class RepeatPatternConverter extends LogEventPatternConverter {
         try {
             count = Integer.parseInt(options[1].trim());
             result = Strings.repeat(options[0], count);
-        } catch (Exception ex) {
+        } catch (final Exception ex) {
             LOGGER.error("The repeat count is not an integer: {}", options[1].trim());
         }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java
index 5de51d8..11eec46 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.java
@@ -127,9 +127,9 @@ public class ThrowablePatternConverter extends LogEventPatternConverter {
     }
 
     private void formatSubShortOption(final Throwable t, final String suffix, final StringBuilder buffer) {
-        StackTraceElement[] trace;
+        final StackTraceElement[] trace;
         StackTraceElement throwingMethod = null;
-        int len;
+        final int len;
 
         if (t != null) {
             trace = t.getStackTrace();
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java
index 097c191..6d52051 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java
@@ -92,7 +92,7 @@ public class ScriptFile extends AbstractScript {
         }
 
         final Charset actualCharset = charset == null ? Charset.defaultCharset() : charset;
-        String scriptText;
+        final String scriptText;
         try (final Reader reader = new InputStreamReader(
                 file != null ? new FileInputStream(file) : uri.toURL().openStream(), actualCharset)) {
             scriptText = IOUtils.toString(reader);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java
index 1c19e36..c89c1be 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java
@@ -33,16 +33,16 @@ public class BasicContextSelector implements ContextSelector {
     private static final LoggerContext CONTEXT = new LoggerContext("Default");
 
     @Override
-    public void shutdown(String fqcn, ClassLoader loader, boolean currentContext, boolean allContexts) {
-        LoggerContext ctx = getContext(fqcn, loader, currentContext);
+    public void shutdown(final String fqcn, final ClassLoader loader, final boolean currentContext, final boolean allContexts) {
+        final LoggerContext ctx = getContext(fqcn, loader, currentContext);
         if (ctx != null && ctx.isStarted()) {
             ctx.stop(DEFAULT_STOP_TIMEOUT, TimeUnit.MILLISECONDS);
         }
     }
 
     @Override
-    public boolean hasContext(String fqcn, ClassLoader loader, boolean currentContext) {
-        LoggerContext ctx = getContext(fqcn, loader, currentContext);
+    public boolean hasContext(final String fqcn, final ClassLoader loader, final boolean currentContext) {
+        final LoggerContext ctx = getContext(fqcn, loader, currentContext);
         return ctx != null && ctx.isStarted();
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java
index 73bb18f..f0810be 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java
@@ -77,7 +77,7 @@ public class ClassLoaderContextSelector implements ContextSelector, LoggerContex
     }
 
     @Override
-    public void contextShutdown(org.apache.logging.log4j.spi.LoggerContext loggerContext) {
+    public void contextShutdown(final org.apache.logging.log4j.spi.LoggerContext loggerContext) {
         if (loggerContext instanceof LoggerContext) {
             removeContext((LoggerContext) loggerContext);
         }
@@ -85,7 +85,7 @@ public class ClassLoaderContextSelector implements ContextSelector, LoggerContex
 
     @Override
     public boolean hasContext(final String fqcn, final ClassLoader loader, final boolean currentContext) {
-        LoggerContext ctx;
+        final LoggerContext ctx;
         if (currentContext) {
             ctx = ContextAnchor.THREAD_CONTEXT.get();
         } else if (loader != null) {
@@ -101,10 +101,10 @@ public class ClassLoaderContextSelector implements ContextSelector, LoggerContex
         return ctx != null && ctx.isStarted();
     }
 
-    private LoggerContext findContext(ClassLoader loaderOrNull) {
+    private LoggerContext findContext(final ClassLoader loaderOrNull) {
         final ClassLoader loader = loaderOrNull != null ? loaderOrNull : ClassLoader.getSystemClassLoader();
         final String name = toContextMapKey(loader);
-        AtomicReference<WeakReference<LoggerContext>> ref = CONTEXT_MAP.get(name);
+        final AtomicReference<WeakReference<LoggerContext>> ref = CONTEXT_MAP.get(name);
         if (ref != null) {
             final WeakReference<LoggerContext> weakRef = ref.get();
             return weakRef.get();
@@ -215,11 +215,11 @@ public class ClassLoaderContextSelector implements ContextSelector, LoggerContex
                     } */
                 }
             }
-            LoggerContext ctx = createContext(name, configLocation);
+            final LoggerContext ctx = createContext(name, configLocation);
             if (entry != null) {
                 ctx.putObject(entry.getKey(), entry.getValue());
             }
-            LoggerContext newContext = CONTEXT_MAP.computeIfAbsent(name,
+            final LoggerContext newContext = CONTEXT_MAP.computeIfAbsent(name,
                     k -> new AtomicReference<>(new WeakReference<>(ctx))).get().get();
             if (newContext != null && newContext == ctx) {
                 newContext.addShutdownListener(this);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ContextSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ContextSelector.java
index 14b776d..4245a16 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ContextSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ContextSelector.java
@@ -54,7 +54,7 @@ public interface ContextSelector {
      * @return true if a LoggerContext has been installed, false otherwise.
      * @since 2.13.0
      */
-    default boolean hasContext(String fqcn, ClassLoader loader, boolean currentContext) {
+    default boolean hasContext(final String fqcn, final ClassLoader loader, final boolean currentContext) {
         return false;
     }
 
@@ -77,8 +77,8 @@ public interface ContextSelector {
      * for the caller if a more appropriate Context can be determined.
      * @return The LoggerContext.
      */
-    default LoggerContext getContext(String fqcn, ClassLoader loader, Map.Entry<String, Object> entry, boolean currentContext) {
-        LoggerContext lc = getContext(fqcn, loader, currentContext);
+    default LoggerContext getContext(final String fqcn, final ClassLoader loader, final Map.Entry<String, Object> entry, final boolean currentContext) {
+        final LoggerContext lc = getContext(fqcn, loader, currentContext);
         if (lc != null) {
             lc.putObject(entry.getKey(), entry.getValue());
         }
@@ -106,9 +106,9 @@ public interface ContextSelector {
      * @param configLocation The location of the configuration for the LoggerContext.
      * @return The LoggerContext.
      */
-    default LoggerContext getContext(String fqcn, ClassLoader loader, Map.Entry<String, Object> entry,
-            boolean currentContext, URI configLocation) {
-        LoggerContext lc = getContext(fqcn, loader, currentContext, configLocation);
+    default LoggerContext getContext(final String fqcn, final ClassLoader loader, final Map.Entry<String, Object> entry,
+            final boolean currentContext, final URI configLocation) {
+        final LoggerContext lc = getContext(fqcn, loader, currentContext, configLocation);
         if (lc != null) {
             lc.putObject(entry.getKey(), entry.getValue());
         }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java
index 6822c96..9d0a49c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java
@@ -94,10 +94,10 @@ public class JndiContextSelector implements NamedContextSelector {
     private static final StatusLogger LOGGER = StatusLogger.getLogger();
 
     @Override
-    public void shutdown(String fqcn, ClassLoader loader, boolean currentContext, boolean allContexts) {
+    public void shutdown(final String fqcn, final ClassLoader loader, final boolean currentContext, final boolean allContexts) {
         LoggerContext ctx = ContextAnchor.THREAD_CONTEXT.get();
         if (ctx == null) {
-            String loggingContextName = getContextName();
+            final String loggingContextName = getContextName();
             if (loggingContextName != null) {
                 ctx = CONTEXT_MAP.get(loggingContextName);
             }
@@ -108,10 +108,10 @@ public class JndiContextSelector implements NamedContextSelector {
     }
 
     @Override
-    public boolean hasContext(String fqcn, ClassLoader loader, boolean currentContext) {
+    public boolean hasContext(final String fqcn, final ClassLoader loader, final boolean currentContext) {
         LoggerContext ctx = ContextAnchor.THREAD_CONTEXT.get();
         if (ctx == null) {
-            String loggingContextName = getContextName();
+            final String loggingContextName = getContextName();
             if (loggingContextName == null) {
                 return false;
             }
@@ -134,7 +134,7 @@ public class JndiContextSelector implements NamedContextSelector {
             return lc;
         }
 
-        String loggingContextName = getContextName();
+        final String loggingContextName = getContextName();
 
         return loggingContextName == null ? CONTEXT : locateContext(loggingContextName, null, configLocation);
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/ClockFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/ClockFactory.java
index 4753b51..aff68c2 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/ClockFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/ClockFactory.java
@@ -74,7 +74,7 @@ public final class ClockFactory {
     }
 
     private static Map<String, Supplier<Clock>> aliases() {
-        Map<String, Supplier<Clock>> result = new HashMap<>();
+        final Map<String, Supplier<Clock>> result = new HashMap<>();
         result.put("SystemClock",       new Supplier<Clock>() { @Override public Clock get() { return new SystemClock(); } });
         result.put("SystemMillisClock", new Supplier<Clock>() { @Override public Clock get() { return new SystemMillisClock(); } });
         result.put("CachedClock",       new Supplier<Clock>() { @Override public Clock get() { return CachedClock.instance(); } });
@@ -90,7 +90,7 @@ public final class ClockFactory {
             LOGGER.trace("Using default SystemClock for timestamps.");
             return logSupportedPrecision(new SystemClock());
         }
-        Supplier<Clock> specified = aliases().get(userRequest);
+        final Supplier<Clock> specified = aliases().get(userRequest);
         if (specified != null) {
             LOGGER.trace("Using specified {} for timestamps.", userRequest);
             return logSupportedPrecision(specified.get());
@@ -106,8 +106,8 @@ public final class ClockFactory {
         }
     }
 
-    private static Clock logSupportedPrecision(Clock clock) {
-        String support = clock instanceof PreciseClock ? "supports" : "does not support";
+    private static Clock logSupportedPrecision(final Clock clock) {
+        final String support = clock instanceof PreciseClock ? "supports" : "does not support";
         LOGGER.debug("{} {} precise timestamps.", clock.getClass().getName(), support);
         return clock;
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/MutableInstant.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/MutableInstant.java
index e63f3da..483ed7a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/MutableInstant.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/MutableInstant.java
@@ -133,7 +133,7 @@ public class MutableInstant implements Instant, Serializable, TemporalAccessor {
      *               the second element is the number of nanoseconds, later along the time-line, from the start of the millisecond
      */
     public static void instantToMillisAndNanos(final long epochSecond, final int nano, final long[] result) {
-        int millis = nano / NANOS_PER_MILLI;
+        final int millis = nano / NANOS_PER_MILLI;
         result[0] = epochSecond * MILLIS_PER_SECOND + millis;
         result[1] = nano - (millis * NANOS_PER_MILLI); // cheaper than nanoOfSecond % NANOS_PER_MILLI
     }
@@ -207,7 +207,7 @@ public class MutableInstant implements Instant, Serializable, TemporalAccessor {
         if (!(object instanceof MutableInstant)) {
             return false;
         }
-        MutableInstant other = (MutableInstant) object;
+        final MutableInstant other = (MutableInstant) object;
         return epochSecond == other.epochSecond && nanoOfSecond == other.nanoOfSecond;
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/SystemClock.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/SystemClock.java
index 45f5257..59823bf 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/SystemClock.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/SystemClock.java
@@ -45,9 +45,9 @@ public final class SystemClock implements Clock, PreciseClock {
      * {@inheritDoc}
      */
     @Override
-    public void init(MutableInstant mutableInstant) {
+    public void init(final MutableInstant mutableInstant) {
         if (USE_PRECISE_CLOCK) {
-            Instant instant = java.time.Clock.systemUTC().instant();
+            final Instant instant = java.time.Clock.systemUTC().instant();
             mutableInstant.initFromEpochSecond(instant.getEpochSecond(), instant.getNano());
         } else {
             mutableInstant.initFromEpochMilli(System.currentTimeMillis(), 0);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDateParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDateParser.java
index 16bc0ce..5450100 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDateParser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDateParser.java
@@ -138,7 +138,7 @@ public class FastDateParser implements DateParser, Serializable {
 
         final Calendar definingCalendar = Calendar.getInstance(timeZone, locale);
 
-        int centuryStartYear;
+        final int centuryStartYear;
         if(centuryStart!=null) {
             definingCalendar.setTime(centuryStart);
             centuryStartYear= definingCalendar.get(Calendar.YEAR);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FormatCache.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FormatCache.java
index f1eff09..a75fa13 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FormatCache.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FormatCache.java
@@ -197,7 +197,7 @@ abstract class FormatCache<F extends Format> {
         String pattern = cDateTimeInstanceCache.get(key);
         if (pattern == null) {
             try {
-                DateFormat formatter;
+                final DateFormat formatter;
                 if (dateStyle == null) {
                     formatter = DateFormat.getTimeInstance(timeStyle.intValue(), locale);                    
                 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
index ce04f44..554c4cc 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
@@ -152,7 +152,7 @@ public class CommandLine {
      * @param command the object to initialize from the command line arguments
      * @throws InitializationException if the specified command object does not have a {@link Command}, {@link Option} or {@link Parameters} annotation
      */
-    public CommandLine(Object command) {
+    public CommandLine(final Object command) {
         interpreter = new Interpreter(command);
     }
 
@@ -197,8 +197,8 @@ public class CommandLine {
      * @since 0.9.7
      * @see Command#subcommands()
      */
-    public CommandLine addSubcommand(String name, Object command) {
-        CommandLine commandLine = toCommandLine(command);
+    public CommandLine addSubcommand(final String name, final Object command) {
+        final CommandLine commandLine = toCommandLine(command);
         commandLine.parent = this;
         interpreter.commands.put(name, commandLine);
         return this;
@@ -259,9 +259,9 @@ public class CommandLine {
      * @return this {@code CommandLine} object, to allow method chaining
      * @since 0.9.7
      */
-    public CommandLine setOverwrittenOptionsAllowed(boolean newValue) {
+    public CommandLine setOverwrittenOptionsAllowed(final boolean newValue) {
         this.overwrittenOptionsAllowed = newValue;
-        for (CommandLine command : interpreter.commands.values()) {
+        for (final CommandLine command : interpreter.commands.values()) {
             command.setOverwrittenOptionsAllowed(newValue);
         }
         return this;
@@ -288,9 +288,9 @@ public class CommandLine {
      * @since 0.9.7
      * @see #getUnmatchedArguments()
      */
-    public CommandLine setUnmatchedArgumentsAllowed(boolean newValue) {
+    public CommandLine setUnmatchedArgumentsAllowed(final boolean newValue) {
         this.unmatchedArgumentsAllowed = newValue;
-        for (CommandLine command : interpreter.commands.values()) {
+        for (final CommandLine command : interpreter.commands.values()) {
             command.setUnmatchedArgumentsAllowed(newValue);
         }
         return this;
@@ -325,8 +325,8 @@ public class CommandLine {
      * @throws ParameterException if the specified command line arguments are invalid
      * @since 0.9.7
      */
-    public static <T> T populateCommand(T command, String... args) {
-        CommandLine cli = toCommandLine(command);
+    public static <T> T populateCommand(final T command, final String... args) {
+        final CommandLine cli = toCommandLine(command);
         cli.parse(args);
         return command;
     }
@@ -345,7 +345,7 @@ public class CommandLine {
      * @throws ParameterException if the specified command line arguments are invalid; use
      *      {@link ParameterException#getCommandLine()} to get the command or subcommand whose user input was invalid
      */
-    public List<CommandLine> parse(String... args) {
+    public List<CommandLine> parse(final String... args) {
         return interpreter.parse(args);
     }
     /**
@@ -407,7 +407,7 @@ public class CommandLine {
      * @since 2.0 */
     public static class DefaultExceptionHandler implements IExceptionHandler {
         @Override
-        public List<Object> handleException(ParameterException ex, PrintStream out, Help.Ansi ansi, String... args) {
+        public List<Object> handleException(final ParameterException ex, final PrintStream out, final Help.Ansi ansi, final String... args) {
             out.println(ex.getMessage());
             ex.getCommandLine().usage(out, ansi);
             return Collections.emptyList();
@@ -429,8 +429,8 @@ public class CommandLine {
      * @param ansi for printing help messages using ANSI styles and colors
      * @return {@code true} if help was printed, {@code false} otherwise
      * @since 2.0 */
-    public static boolean printHelpIfRequested(List<CommandLine> parsedCommands, PrintStream out, Help.Ansi ansi) {
-        for (CommandLine parsed : parsedCommands) {
+    public static boolean printHelpIfRequested(final List<CommandLine> parsedCommands, final PrintStream out, final Help.Ansi ansi) {
+        for (final CommandLine parsed : parsedCommands) {
             if (parsed.isUsageHelpRequested()) {
                 parsed.usage(out, ansi);
                 return true;
@@ -441,19 +441,19 @@ public class CommandLine {
         }
         return false;
     }
-    private static Object execute(CommandLine parsed) {
-        Object command = parsed.getCommand();
+    private static Object execute(final CommandLine parsed) {
+        final Object command = parsed.getCommand();
         if (command instanceof Runnable) {
             try {
                 ((Runnable) command).run();
                 return null;
-            } catch (Exception ex) {
+            } catch (final Exception ex) {
                 throw new ExecutionException(parsed, "Error while running command (" + command + ")", ex);
             }
         } else if (command instanceof Callable) {
             try {
                 return ((Callable<Object>) command).call();
-            } catch (Exception ex) {
+            } catch (final Exception ex) {
                 throw new ExecutionException(parsed, "Error while calling command (" + command + ")", ex);
             }
         }
@@ -482,7 +482,7 @@ public class CommandLine {
          *      {@link ExecutionException#getCommandLine()} to get the command or subcommand where processing failed
          */
         @Override
-        public List<Object> handleParseResult(List<CommandLine> parsedCommands, PrintStream out, Help.Ansi ansi) {
+        public List<Object> handleParseResult(final List<CommandLine> parsedCommands, final PrintStream out, final Help.Ansi ansi) {
             if (printHelpIfRequested(parsedCommands, out, ansi)) { return Collections.emptyList(); }
             return Arrays.asList(execute(parsedCommands.get(0)));
         }
@@ -533,9 +533,9 @@ public class CommandLine {
          *      {@link ExecutionException#getCommandLine()} to get the command or subcommand where processing failed
          */
         @Override
-        public List<Object> handleParseResult(List<CommandLine> parsedCommands, PrintStream out, Help.Ansi ansi) {
+        public List<Object> handleParseResult(final List<CommandLine> parsedCommands, final PrintStream out, final Help.Ansi ansi) {
             if (printHelpIfRequested(parsedCommands, out, ansi)) { return Collections.emptyList(); }
-            CommandLine last = parsedCommands.get(parsedCommands.size() - 1);
+            final CommandLine last = parsedCommands.get(parsedCommands.size() - 1);
             return Arrays.asList(execute(last));
         }
     }
@@ -559,12 +559,12 @@ public class CommandLine {
          *      {@link ExecutionException#getCommandLine()} to get the command or subcommand where processing failed
          */
         @Override
-        public List<Object> handleParseResult(List<CommandLine> parsedCommands, PrintStream out, Help.Ansi ansi) {
+        public List<Object> handleParseResult(final List<CommandLine> parsedCommands, final PrintStream out, final Help.Ansi ansi) {
             if (printHelpIfRequested(parsedCommands, out, ansi)) {
                 return null;
             }
-            List<Object> result = new ArrayList<Object>();
-            for (CommandLine parsed : parsedCommands) {
+            final List<Object> result = new ArrayList<Object>();
+            for (final CommandLine parsed : parsedCommands) {
                 result.add(execute(parsed));
             }
             return result;
@@ -607,7 +607,7 @@ public class CommandLine {
      * @see RunLast
      * @see RunAll
      * @since 2.0 */
-    public List<Object> parseWithHandler(IParseResultHandler handler, PrintStream out, String... args) {
+    public List<Object> parseWithHandler(final IParseResultHandler handler, final PrintStream out, final String... args) {
         return parseWithHandlers(handler, out, Help.Ansi.AUTO, new DefaultExceptionHandler(), args);
     }
     /**
@@ -652,11 +652,11 @@ public class CommandLine {
      * @see RunAll
      * @see DefaultExceptionHandler
      * @since 2.0 */
-    public List<Object> parseWithHandlers(IParseResultHandler handler, PrintStream out, Help.Ansi ansi, IExceptionHandler exceptionHandler, String... args) {
+    public List<Object> parseWithHandlers(final IParseResultHandler handler, final PrintStream out, final Help.Ansi ansi, final IExceptionHandler exceptionHandler, final String... args) {
         try {
-            List<CommandLine> result = parse(args);
+            final List<CommandLine> result = parse(args);
             return handler.handleParseResult(result, out, ansi);
-        } catch (ParameterException ex) {
+        } catch (final ParameterException ex) {
             return exceptionHandler.handleException(ex, out, ansi, args);
         }
     }
@@ -666,7 +666,7 @@ public class CommandLine {
      * @param out the print stream to print the help message to
      * @throws IllegalArgumentException if the specified command object does not have a {@link Command}, {@link Option} or {@link Parameters} annotation
      */
-    public static void usage(Object command, PrintStream out) {
+    public static void usage(final Object command, final PrintStream out) {
         toCommandLine(command).usage(out);
     }
 
@@ -678,7 +678,7 @@ public class CommandLine {
      * @param ansi whether the usage message should contain ANSI escape codes or not
      * @throws IllegalArgumentException if the specified command object does not have a {@link Command}, {@link Option} or {@link Parameters} annotation
      */
-    public static void usage(Object command, PrintStream out, Help.Ansi ansi) {
+    public static void usage(final Object command, final PrintStream out, final Help.Ansi ansi) {
         toCommandLine(command).usage(out, ansi);
     }
 
@@ -690,7 +690,7 @@ public class CommandLine {
      * @param colorScheme the {@code ColorScheme} defining the styles for options, parameters and commands when ANSI is enabled
      * @throws IllegalArgumentException if the specified command object does not have a {@link Command}, {@link Option} or {@link Parameters} annotation
      */
-    public static void usage(Object command, PrintStream out, Help.ColorScheme colorScheme) {
+    public static void usage(final Object command, final PrintStream out, final Help.ColorScheme colorScheme) {
         toCommandLine(command).usage(out, colorScheme);
     }
 
@@ -699,7 +699,7 @@ public class CommandLine {
      * @param out the printStream to print to
      * @see #usage(PrintStream, Help.ColorScheme)
      */
-    public void usage(PrintStream out) {
+    public void usage(final PrintStream out) {
         usage(out, Help.Ansi.AUTO);
     }
 
@@ -709,7 +709,7 @@ public class CommandLine {
      * @param ansi whether the usage message should include ANSI escape codes or not
      * @see #usage(PrintStream, Help.ColorScheme)
      */
-    public void usage(PrintStream out, Help.Ansi ansi) {
+    public void usage(final PrintStream out, final Help.Ansi ansi) {
         usage(out, Help.defaultColorScheme(ansi));
     }
     /**
@@ -744,8 +744,8 @@ public class CommandLine {
      * @param out the {@code PrintStream} to print the usage help message to
      * @param colorScheme the {@code ColorScheme} defining the styles for options, parameters and commands when ANSI is enabled
      */
-    public void usage(PrintStream out, Help.ColorScheme colorScheme) {
-        Help help = new Help(interpreter.command, colorScheme).addAllSubcommands(getSubcommands());
+    public void usage(final PrintStream out, final Help.ColorScheme colorScheme) {
+        final Help help = new Help(interpreter.command, colorScheme).addAllSubcommands(getSubcommands());
         if (!Help.DEFAULT_SEPARATOR.equals(getSeparator())) {
             help.separator = getSeparator();
             help.parameterLabelRenderer = help.createDefaultParamLabelRenderer(); // update for new separator
@@ -753,7 +753,7 @@ public class CommandLine {
         if (!Help.DEFAULT_COMMAND_NAME.equals(getCommandName())) {
             help.commandName = getCommandName();
         }
-        StringBuilder sb = new StringBuilder()
+        final StringBuilder sb = new StringBuilder()
                 .append(help.headerHeading())
                 .append(help.header())
                 .append(help.synopsisHeading())      //e.g. Usage:
@@ -777,7 +777,7 @@ public class CommandLine {
      * @see #printVersionHelp(PrintStream, Help.Ansi)
      * @since 0.9.8
      */
-    public void printVersionHelp(PrintStream out) { printVersionHelp(out, Help.Ansi.AUTO); }
+    public void printVersionHelp(final PrintStream out) { printVersionHelp(out, Help.Ansi.AUTO); }
 
     /**
      * Prints version information from the {@link Command#version()} annotation to the specified {@code PrintStream}.
@@ -790,8 +790,8 @@ public class CommandLine {
      * @see #isVersionHelpRequested()
      * @since 0.9.8
      */
-    public void printVersionHelp(PrintStream out, Help.Ansi ansi) {
-        for (String versionInfo : versionLines) {
+    public void printVersionHelp(final PrintStream out, final Help.Ansi ansi) {
+        for (final String versionInfo : versionLines) {
             out.println(ansi.new Text(versionInfo));
         }
     }
@@ -808,8 +808,8 @@ public class CommandLine {
      * @see #isVersionHelpRequested()
      * @since 1.0.0
      */
-    public void printVersionHelp(PrintStream out, Help.Ansi ansi, Object... params) {
-        for (String versionInfo : versionLines) {
+    public void printVersionHelp(final PrintStream out, final Help.Ansi ansi, final Object... params) {
+        for (final String versionInfo : versionLines) {
             out.println(ansi.new Text(String.format(versionInfo, params)));
         }
     }
@@ -832,7 +832,7 @@ public class CommandLine {
      * @see #parseWithHandlers(IParseResultHandler, PrintStream, Help.Ansi, IExceptionHandler, String...)
      * @see RunFirst
      */
-    public static <C extends Callable<T>, T> T call(C callable, PrintStream out, String... args) {
+    public static <C extends Callable<T>, T> T call(final C callable, final PrintStream out, final String... args) {
         return call(callable, out, Help.Ansi.AUTO, args);
     }
     /**
@@ -880,9 +880,9 @@ public class CommandLine {
      * @see #parseWithHandlers(IParseResultHandler, PrintStream, Help.Ansi, IExceptionHandler, String...)
      * @see RunLast
      */
-    public static <C extends Callable<T>, T> T call(C callable, PrintStream out, Help.Ansi ansi, String... args) {
-        CommandLine cmd = new CommandLine(callable); // validate command outside of try-catch
-        List<Object> results = cmd.parseWithHandlers(new RunLast(), out, ansi, new DefaultExceptionHandler(), args);
+    public static <C extends Callable<T>, T> T call(final C callable, final PrintStream out, final Help.Ansi ansi, final String... args) {
+        final CommandLine cmd = new CommandLine(callable); // validate command outside of try-catch
+        final List<Object> results = cmd.parseWithHandlers(new RunLast(), out, ansi, new DefaultExceptionHandler(), args);
         return results == null || results.isEmpty() ? null : (T) results.get(0);
     }
 
@@ -902,7 +902,7 @@ public class CommandLine {
      * @see #parseWithHandlers(IParseResultHandler, PrintStream, Help.Ansi, IExceptionHandler, String...)
      * @see RunFirst
      */
-    public static <R extends Runnable> void run(R runnable, PrintStream out, String... args) {
+    public static <R extends Runnable> void run(final R runnable, final PrintStream out, final String... args) {
         run(runnable, out, Help.Ansi.AUTO, args);
     }
     /**
@@ -948,8 +948,8 @@ public class CommandLine {
      * @see #parseWithHandlers(IParseResultHandler, PrintStream, Help.Ansi, IExceptionHandler, String...)
      * @see RunLast
      */
-    public static <R extends Runnable> void run(R runnable, PrintStream out, Help.Ansi ansi, String... args) {
-        CommandLine cmd = new CommandLine(runnable); // validate command outside of try-catch
+    public static <R extends Runnable> void run(final R runnable, final PrintStream out, final Help.Ansi ansi, final String... args) {
+        final CommandLine cmd = new CommandLine(runnable); // validate command outside of try-catch
         cmd.parseWithHandlers(new RunLast(), out, ansi, new DefaultExceptionHandler(), args);
     }
 
@@ -996,9 +996,9 @@ public class CommandLine {
      * @return this CommandLine object, to allow method chaining
      * @see #addSubcommand(String, Object)
      */
-    public <K> CommandLine registerConverter(Class<K> cls, ITypeConverter<K> converter) {
+    public <K> CommandLine registerConverter(final Class<K> cls, final ITypeConverter<K> converter) {
         interpreter.converterRegistry.put(Assert.notNull(cls, "class"), Assert.notNull(converter, "converter"));
-        for (CommandLine command : interpreter.commands.values()) {
+        for (final CommandLine command : interpreter.commands.values()) {
             command.registerConverter(cls, converter);
         }
         return this;
@@ -1014,7 +1014,7 @@ public class CommandLine {
      * The separator may also be set declaratively with the {@link CommandLine.Command#separator()} annotation attribute.
      * @param separator the String that separates option names from option values
      * @return this {@code CommandLine} object, to allow method chaining */
-    public CommandLine setSeparator(String separator) {
+    public CommandLine setSeparator(final String separator) {
         interpreter.separator = Assert.notNull(separator, "separator");
         return this;
     }
@@ -1030,35 +1030,35 @@ public class CommandLine {
      * The command name may also be set declaratively with the {@link CommandLine.Command#name()} annotation attribute.
      * @param commandName command name (also called program name) displayed in the usage help synopsis
      * @return this {@code CommandLine} object, to allow method chaining */
-    public CommandLine setCommandName(String commandName) {
+    public CommandLine setCommandName(final String commandName) {
         this.commandName = Assert.notNull(commandName, "commandName");
         return this;
     }
-    private static boolean empty(String str) { return str == null || str.trim().length() == 0; }
-    private static boolean empty(Object[] array) { return array == null || array.length == 0; }
-    private static boolean empty(Text txt) { return txt == null || txt.plain.toString().trim().length() == 0; }
-    private static String str(String[] arr, int i) { return (arr == null || arr.length == 0) ? "" : arr[i]; }
-    private static boolean isBoolean(Class<?> type) { return type == Boolean.class || type == Boolean.TYPE; }
-    private static CommandLine toCommandLine(Object obj) { return obj instanceof CommandLine ? (CommandLine) obj : new CommandLine(obj);}
-    private static boolean isMultiValue(Field field) {  return isMultiValue(field.getType()); }
-    private static boolean isMultiValue(Class<?> cls) { return cls.isArray() || Collection.class.isAssignableFrom(cls) || Map.class.isAssignableFrom(cls); }
-    private static Class<?>[] getTypeAttribute(Field field) {
-        Class<?>[] explicit = field.isAnnotationPresent(Parameters.class) ? field.getAnnotation(Parameters.class).type() : field.getAnnotation(Option.class).type();
+    private static boolean empty(final String str) { return str == null || str.trim().length() == 0; }
+    private static boolean empty(final Object[] array) { return array == null || array.length == 0; }
+    private static boolean empty(final Text txt) { return txt == null || txt.plain.toString().trim().length() == 0; }
+    private static String str(final String[] arr, final int i) { return (arr == null || arr.length == 0) ? "" : arr[i]; }
+    private static boolean isBoolean(final Class<?> type) { return type == Boolean.class || type == Boolean.TYPE; }
+    private static CommandLine toCommandLine(final Object obj) { return obj instanceof CommandLine ? (CommandLine) obj : new CommandLine(obj);}
+    private static boolean isMultiValue(final Field field) {  return isMultiValue(field.getType()); }
+    private static boolean isMultiValue(final Class<?> cls) { return cls.isArray() || Collection.class.isAssignableFrom(cls) || Map.class.isAssignableFrom(cls); }
+    private static Class<?>[] getTypeAttribute(final Field field) {
+        final Class<?>[] explicit = field.isAnnotationPresent(Parameters.class) ? field.getAnnotation(Parameters.class).type() : field.getAnnotation(Option.class).type();
         if (explicit.length > 0) { return explicit; }
         if (field.getType().isArray()) { return new Class<?>[] { field.getType().getComponentType() }; }
         if (isMultiValue(field)) {
-            Type type = field.getGenericType(); // e.g. Map<Long, ? extends Number>
+            final Type type = field.getGenericType(); // e.g. Map<Long, ? extends Number>
             if (type instanceof ParameterizedType) {
-                ParameterizedType parameterizedType = (ParameterizedType) type;
-                Type[] paramTypes = parameterizedType.getActualTypeArguments(); // e.g. ? extends Number
-                Class<?>[] result = new Class<?>[paramTypes.length];
+                final ParameterizedType parameterizedType = (ParameterizedType) type;
+                final Type[] paramTypes = parameterizedType.getActualTypeArguments(); // e.g. ? extends Number
+                final Class<?>[] result = new Class<?>[paramTypes.length];
                 for (int i = 0; i < paramTypes.length; i++) {
                     if (paramTypes[i] instanceof Class) { result[i] = (Class<?>) paramTypes[i]; continue; } // e.g. Long
                     if (paramTypes[i] instanceof WildcardType) { // e.g. ? extends Number
-                        WildcardType wildcardType = (WildcardType) paramTypes[i];
-                        Type[] lower = wildcardType.getLowerBounds(); // e.g. []
+                        final WildcardType wildcardType = (WildcardType) paramTypes[i];
+                        final Type[] lower = wildcardType.getLowerBounds(); // e.g. []
                         if (lower.length > 0 && lower[0] instanceof Class) { result[i] = (Class<?>) lower[0]; continue; }
-                        Type[] upper = wildcardType.getUpperBounds(); // e.g. Number
+                        final Type[] upper = wildcardType.getUpperBounds(); // e.g. Number
                         if (upper.length > 0 && upper[0] instanceof Class) { result[i] = (Class<?>) upper[0]; continue; }
                     }
                     Arrays.fill(result, String.class); return result; // too convoluted generic type, giving up
@@ -1656,7 +1656,7 @@ public class CommandLine {
          * @param unspecified {@code true} if no arity was specified on the option/parameter (value is based on type)
          * @param originalValue the original value that was specified on the option or parameter
          */
-        public Range(int min, int max, boolean variable, boolean unspecified, String originalValue) {
+        public Range(final int min, final int max, final boolean variable, final boolean unspecified, final String originalValue) {
             this.min = min;
             this.max = max;
             this.isVariable = variable;
@@ -1667,7 +1667,7 @@ public class CommandLine {
          * or the field type's default arity if no arity was specified.
          * @param field the field whose Option annotation to inspect
          * @return a new {@code Range} based on the Option arity annotation on the specified field */
-        public static Range optionArity(Field field) {
+        public static Range optionArity(final Field field) {
             return field.isAnnotationPresent(Option.class)
                     ? adjustForType(Range.valueOf(field.getAnnotation(Option.class).arity()), field)
                     : new Range(0, 0, false, true, "0");
@@ -1676,7 +1676,7 @@ public class CommandLine {
          * or the field type's default arity if no arity was specified.
          * @param field the field whose Parameters annotation to inspect
          * @return a new {@code Range} based on the Parameters arity annotation on the specified field */
-        public static Range parameterArity(Field field) {
+        public static Range parameterArity(final Field field) {
             return field.isAnnotationPresent(Parameters.class)
                     ? adjustForType(Range.valueOf(field.getAnnotation(Parameters.class).arity()), field)
                     : new Range(0, 0, false, true, "0");
@@ -1684,12 +1684,12 @@ public class CommandLine {
         /** Returns a new {@code Range} based on the {@link Parameters#index()} annotation on the specified field.
          * @param field the field whose Parameters annotation to inspect
          * @return a new {@code Range} based on the Parameters index annotation on the specified field */
-        public static Range parameterIndex(Field field) {
+        public static Range parameterIndex(final Field field) {
             return field.isAnnotationPresent(Parameters.class)
                     ? Range.valueOf(field.getAnnotation(Parameters.class).index())
                     : new Range(0, 0, false, true, "0");
         }
-        static Range adjustForType(Range result, Field field) {
+        static Range adjustForType(final Range result, final Field field) {
             return result.isUnspecified ? defaultArity(field) : result;
         }
         /** Returns the default arity {@code Range}: for {@link Option options} this is 0 for booleans and 1 for
@@ -1698,8 +1698,8 @@ public class CommandLine {
          * @param field the field whose default arity to return
          * @return a new {@code Range} indicating the default arity of the specified field
          * @since 2.0 */
-        public static Range defaultArity(Field field) {
-            Class<?> type = field.getType();
+        public static Range defaultArity(final Field field) {
+            final Class<?> type = field.getType();
             if (field.isAnnotationPresent(Option.class)) {
                 return defaultArity(type);
             }
@@ -1711,14 +1711,14 @@ public class CommandLine {
         /** Returns the default arity {@code Range} for {@link Option options}: booleans have arity 0, other types have arity 1.
          * @param type the type whose default arity to return
          * @return a new {@code Range} indicating the default arity of the specified type */
-        public static Range defaultArity(Class<?> type) {
+        public static Range defaultArity(final Class<?> type) {
             return isBoolean(type) ? Range.valueOf("0") : Range.valueOf("1");
         }
         private int size() { return 1 + max - min; }
-        static Range parameterCapacity(Field field) {
-            Range arity = parameterArity(field);
+        static Range parameterCapacity(final Field field) {
+            final Range arity = parameterArity(field);
             if (!isMultiValue(field)) { return arity; }
-            Range index = parameterIndex(field);
+            final Range index = parameterIndex(field);
             if (arity.max == 0)    { return arity; }
             if (index.size() == 1) { return arity; }
             if (index.isVariable)  { return Range.valueOf(arity.min + "..*"); }
@@ -1734,7 +1734,7 @@ public class CommandLine {
          * @return a new {@code Range} value */
         public static Range valueOf(String range) {
             range = range.trim();
-            boolean unspecified = range.length() == 0 || range.startsWith(".."); // || range.endsWith("..");
+            final boolean unspecified = range.length() == 0 || range.startsWith(".."); // || range.endsWith("..");
             int min = -1, max = -1;
             boolean variable = false;
             int dots = -1;
@@ -1749,10 +1749,10 @@ public class CommandLine {
             }
             return new Range(min, max, variable, unspecified, range);
         }
-        private static int parseInt(String str, int defaultValue) {
+        private static int parseInt(final String str, final int defaultValue) {
             try {
                 return Integer.parseInt(str);
-            } catch (Exception ex) {
+            } catch (final Exception ex) {
                 return defaultValue;
             }
         }
@@ -1760,25 +1760,25 @@ public class CommandLine {
          * The {@code max} of the returned Range is guaranteed not to be less than the new {@code min} value.
          * @param newMin the {@code min} value of the returned Range object
          * @return a new Range object with the specified {@code min} value */
-        public Range min(int newMin) { return new Range(newMin, Math.max(newMin, max), isVariable, isUnspecified, originalValue); }
+        public Range min(final int newMin) { return new Range(newMin, Math.max(newMin, max), isVariable, isUnspecified, originalValue); }
 
         /** Returns a new Range object with the {@code max} value replaced by the specified value.
          * The {@code min} of the returned Range is guaranteed not to be greater than the new {@code max} value.
          * @param newMax the {@code max} value of the returned Range object
          * @return a new Range object with the specified {@code max} value */
-        public Range max(int newMax) { return new Range(Math.min(min, newMax), newMax, isVariable, isUnspecified, originalValue); }
+        public Range max(final int newMax) { return new Range(Math.min(min, newMax), newMax, isVariable, isUnspecified, originalValue); }
 
         /**
          * Returns {@code true} if this Range includes the specified value, {@code false} otherwise.
          * @param value the value to check
          * @return {@code true} if the specified value is not less than the minimum and not greater than the maximum of this Range
          */
-        public boolean contains(int value) { return min <= value && max >= value; }
+        public boolean contains(final int value) { return min <= value && max >= value; }
 
         @Override
-        public boolean equals(Object object) {
+        public boolean equals(final Object object) {
             if (!(object instanceof Range)) { return false; }
-            Range other = (Range) object;
+            final Range other = (Range) object;
             return other.max == this.max && other.min == this.min && other.isVariable == this.isVariable;
         }
         @Override
@@ -1790,32 +1790,32 @@ public class CommandLine {
             return min == max ? String.valueOf(min) : min + ".." + (isVariable ? "*" : max);
         }
         @Override
-        public int compareTo(Range other) {
-            int result = min - other.min;
+        public int compareTo(final Range other) {
+            final int result = min - other.min;
             return (result == 0) ? max - other.max : result;
         }
     }
-    static void init(Class<?> cls,
-                              List<Field> requiredFields,
-                              Map<String, Field> optionName2Field,
-                              Map<Character, Field> singleCharOption2Field,
-                              List<Field> positionalParametersFields) {
-        Field[] declaredFields = cls.getDeclaredFields();
-        for (Field field : declaredFields) {
+    static void init(final Class<?> cls,
+                     final List<Field> requiredFields,
+                     final Map<String, Field> optionName2Field,
+                     final Map<Character, Field> singleCharOption2Field,
+                     final List<Field> positionalParametersFields) {
+        final Field[] declaredFields = cls.getDeclaredFields();
+        for (final Field field : declaredFields) {
             field.setAccessible(true);
             if (field.isAnnotationPresent(Option.class)) {
-                Option option = field.getAnnotation(Option.class);
+                final Option option = field.getAnnotation(Option.class);
                 if (option.required()) {
                     requiredFields.add(field);
                 }
-                for (String name : option.names()) { // cannot be null or empty
-                    Field existing = optionName2Field.put(name, field);
+                for (final String name : option.names()) { // cannot be null or empty
+                    final Field existing = optionName2Field.put(name, field);
                     if (existing != null && existing != field) {
                         throw DuplicateOptionAnnotationsException.create(name, field, existing);
                     }
                     if (name.length() == 2 && name.startsWith("-")) {
-                        char flag = name.charAt(1);
-                        Field existing2 = singleCharOption2Field.put(flag, field);
+                        final char flag = name.charAt(1);
+                        final Field existing2 = singleCharOption2Field.put(flag, field);
                         if (existing2 != null && existing2 != field) {
                             throw DuplicateOptionAnnotationsException.create(name, field, existing2);
                         }
@@ -1828,17 +1828,17 @@ public class CommandLine {
                             + field.getName() + "' is both.");
                 }
                 positionalParametersFields.add(field);
-                Range arity = Range.parameterArity(field);
+                final Range arity = Range.parameterArity(field);
                 if (arity.min > 0) {
                     requiredFields.add(field);
                 }
             }
         }
     }
-    static void validatePositionalParameters(List<Field> positionalParametersFields) {
+    static void validatePositionalParameters(final List<Field> positionalParametersFields) {
         int min = 0;
-        for (Field field : positionalParametersFields) {
-            Range index = Range.parameterIndex(field);
+        for (final Field field : positionalParametersFields) {
+            final Range index = Range.parameterIndex(field);
             if (index.min > min) {
                 throw new ParameterIndexGapException("Missing field annotated with @Parameter(index=" + min +
                         "). Nearest field '" + field.getName() + "' has index=" + index.min);
@@ -1847,7 +1847,7 @@ public class CommandLine {
             min = min == Integer.MAX_VALUE ? min : min + 1;
         }
     }
-    private static <T> Stack<T> reverse(Stack<T> stack) {
+    private static <T> Stack<T> reverse(final Stack<T> stack) {
         Collections.reverse(stack);
         return stack;
     }
@@ -1866,7 +1866,7 @@ public class CommandLine {
         private String separator = Help.DEFAULT_SEPARATOR;
         private int position;
 
-        Interpreter(Object command) {
+        Interpreter(final Object command) {
             converterRegistry.put(Path.class,          new BuiltIn.PathConverter());
             converterRegistry.put(Object.class,        new BuiltIn.StringConverter());
             converterRegistry.put(String.class,        new BuiltIn.StringConverter());
@@ -1909,28 +1909,28 @@ public class CommandLine {
                 init(cls, requiredFields, optionName2Field, singleCharOption2Field, positionalParametersFields);
                 if (cls.isAnnotationPresent(Command.class)) {
                     hasCommandAnnotation = true;
-                    Command cmd = cls.getAnnotation(Command.class);
+                    final Command cmd = cls.getAnnotation(Command.class);
                     declaredSeparator = (declaredSeparator == null) ? cmd.separator() : declaredSeparator;
                     declaredName = (declaredName == null) ? cmd.name() : declaredName;
                     CommandLine.this.versionLines.addAll(Arrays.asList(cmd.version()));
 
-                    for (Class<?> sub : cmd.subcommands()) {
-                        Command subCommand = sub.getAnnotation(Command.class);
+                    for (final Class<?> sub : cmd.subcommands()) {
+                        final Command subCommand = sub.getAnnotation(Command.class);
                         if (subCommand == null || Help.DEFAULT_COMMAND_NAME.equals(subCommand.name())) {
                             throw new InitializationException("Subcommand " + sub.getName() +
                                     " is missing the mandatory @Command annotation with a 'name' attribute");
                         }
                         try {
-                            Constructor<?> constructor = sub.getDeclaredConstructor();
+                            final Constructor<?> constructor = sub.getDeclaredConstructor();
                             constructor.setAccessible(true);
-                            CommandLine commandLine = toCommandLine(constructor.newInstance());
+                            final CommandLine commandLine = toCommandLine(constructor.newInstance());
                             commandLine.parent = CommandLine.this;
                             commands.put(subCommand.name(), commandLine);
                         }
-                        catch (InitializationException ex) { throw ex; }
-                        catch (NoSuchMethodException ex) { throw new InitializationException("Cannot instantiate subcommand " +
+                        catch (final InitializationException ex) { throw ex; }
+                        catch (final NoSuchMethodException ex) { throw new InitializationException("Cannot instantiate subcommand " +
                                 sub.getName() + ": the class has no constructor", ex); }
-                        catch (Exception ex) {
+                        catch (final Exception ex) {
                             throw new InitializationException("Could not instantiate and add subcommand " +
                                     sub.getName() + ": " + ex, ex);
                         }
@@ -1955,41 +1955,41 @@ public class CommandLine {
          * @return a list with all commands and subcommands initialized by this method
          * @throws ParameterException if the specified command line arguments are invalid
          */
-        List<CommandLine> parse(String... args) {
+        List<CommandLine> parse(final String... args) {
             Assert.notNull(args, "argument array");
             if (tracer.isInfo()) {tracer.info("Parsing %d command line args %s%n", args.length, Arrays.toString(args));}
-            Stack<String> arguments = new Stack<String>();
+            final Stack<String> arguments = new Stack<String>();
             for (int i = args.length - 1; i >= 0; i--) {
                 arguments.push(args[i]);
             }
-            List<CommandLine> result = new ArrayList<CommandLine>();
+            final List<CommandLine> result = new ArrayList<CommandLine>();
             parse(result, arguments, args);
             return result;
         }
 
-        private void parse(List<CommandLine> parsedCommands, Stack<String> argumentStack, String[] originalArgs) {
+        private void parse(final List<CommandLine> parsedCommands, final Stack<String> argumentStack, final String[] originalArgs) {
             // first reset any state in case this CommandLine instance is being reused
             isHelpRequested = false;
             CommandLine.this.versionHelpRequested = false;
             CommandLine.this.usageHelpRequested = false;
 
-            Class<?> cmdClass = this.command.getClass();
+            final Class<?> cmdClass = this.command.getClass();
             if (tracer.isDebug()) {tracer.debug("Initializing %s: %d options, %d positional parameters, %d required, %d subcommands.%n", cmdClass.getName(), new HashSet<Field>(optionName2Field.values()).size(), positionalParametersFields.size(), requiredFields.size(), commands.size());}
             parsedCommands.add(CommandLine.this);
-            List<Field> required = new ArrayList<Field>(requiredFields);
-            Set<Field> initialized = new HashSet<Field>();
+            final List<Field> required = new ArrayList<Field>(requiredFields);
+            final Set<Field> initialized = new HashSet<Field>();
             Collections.sort(required, new PositionalParametersSorter());
             try {
                 processArguments(parsedCommands, argumentStack, required, initialized, originalArgs);
-            } catch (ParameterException ex) {
+            } catch (final ParameterException ex) {
                 throw ex;
-            } catch (Exception ex) {
-                int offendingArgIndex = originalArgs.length - argumentStack.size() - 1;
-                String arg = offendingArgIndex >= 0 && offendingArgIndex < originalArgs.length ? originalArgs[offendingArgIndex] : "?";
+            } catch (final Exception ex) {
+                final int offendingArgIndex = originalArgs.length - argumentStack.size() - 1;
+                final String arg = offendingArgIndex >= 0 && offendingArgIndex < originalArgs.length ? originalArgs[offendingArgIndex] : "?";
                 throw ParameterException.create(CommandLine.this, ex, arg, offendingArgIndex, originalArgs);
             }
             if (!isAnyHelpRequested() && !required.isEmpty()) {
-                for (Field missing : required) {
+                for (final Field missing : required) {
                     if (missing.isAnnotationPresent(Option.class)) {
                         throw MissingParameterException.create(CommandLine.this, required, separator);
                     } else {
@@ -2003,11 +2003,11 @@ public class CommandLine {
             }
         }
 
-        private void processArguments(List<CommandLine> parsedCommands,
-                                      Stack<String> args,
-                                      Collection<Field> required,
-                                      Set<Field> initialized,
-                                      String[] originalArgs) throws Exception {
+        private void processArguments(final List<CommandLine> parsedCommands,
+                                      final Stack<String> args,
+                                      final Collection<Field> required,
+                                      final Set<Field> initialized,
+                                      final String[] originalArgs) throws Exception {
             // arg must be one of:
             // 1. the "--" double dash separating options from positional arguments
             // 1. a stand-alone flag, like "-v" or "--verbose": no value required, must map to boolean or Boolean field
@@ -2044,13 +2044,13 @@ public class CommandLine {
                 // or an option may have one or more option parameters.
                 // A parameter may be attached to the option.
                 boolean paramAttachedToOption = false;
-                int separatorIndex = arg.indexOf(separator);
+                final int separatorIndex = arg.indexOf(separator);
                 if (separatorIndex > 0) {
-                    String key = arg.substring(0, separatorIndex);
+                    final String key = arg.substring(0, separatorIndex);
                     // be greedy. Consume the whole arg as an option if possible.
                     if (optionName2Field.containsKey(key) && !optionName2Field.containsKey(arg)) {
                         paramAttachedToOption = true;
-                        String optionParam = arg.substring(separatorIndex + separator.length());
+                        final String optionParam = arg.substring(separatorIndex + separator.length());
                         args.push(optionParam);
                         arg = key;
                         if (tracer.isDebug()) {tracer.debug("Separated '%s' option from '%s' option parameter%n", key, optionParam);}
@@ -2080,43 +2080,43 @@ public class CommandLine {
                 }
             }
         }
-        private boolean resemblesOption(String arg) {
+        private boolean resemblesOption(final String arg) {
             int count = 0;
-            for (String optionName : optionName2Field.keySet()) {
+            for (final String optionName : optionName2Field.keySet()) {
                 for (int i = 0; i < arg.length(); i++) {
                     if (optionName.length() > i && arg.charAt(i) == optionName.charAt(i)) { count++; } else { break; }
                 }
             }
-            boolean result = count > 0 && count * 10 >= optionName2Field.size() * 9; // at least one prefix char in common with 9 out of 10 options
+            final boolean result = count > 0 && count * 10 >= optionName2Field.size() * 9; // at least one prefix char in common with 9 out of 10 options
             if (tracer.isDebug()) {tracer.debug("%s %s an option: %d matching prefix chars out of %d option names%n", arg, (result ? "resembles" : "doesn't resemble"), count, optionName2Field.size());}
             return result;
         }
-        private void handleUnmatchedArguments(String arg) {Stack<String> args = new Stack<String>(); args.add(arg); handleUnmatchedArguments(args);}
-        private void handleUnmatchedArguments(Stack<String> args) {
+        private void handleUnmatchedArguments(final String arg) {
+            final Stack<String> args = new Stack<String>(); args.add(arg); handleUnmatchedArguments(args);}
+        private void handleUnmatchedArguments(final Stack<String> args) {
             while (!args.isEmpty()) { unmatchedArguments.add(args.pop()); } // addAll would give args in reverse order
         }
 
-        private void processRemainderAsPositionalParameters(Collection<Field> required, Set<Field> initialized, Stack<String> args) throws Exception {
+        private void processRemainderAsPositionalParameters(final Collection<Field> required, final Set<Field> initialized, final Stack<String> args) throws Exception {
             while (!args.empty()) {
                 processPositionalParameter(required, initialized, args);
             }
         }
-        private void processPositionalParameter(Collection<Field> required, Set<Field> initialized, Stack<String> args) throws Exception {
+        private void processPositionalParameter(final Collection<Field> required, final Set<Field> initialized, final Stack<String> args) throws Exception {
             if (tracer.isDebug()) {tracer.debug("Processing next arg as a positional parameter at index=%d. Remainder=%s%n", position, reverse((Stack<String>) args.clone()));}
             int consumed = 0;
-            for (Field positionalParam : positionalParametersFields) {
-                Range indexRange = Range.parameterIndex(positionalParam);
+            for (final Field positionalParam : positionalParametersFields) {
+                final Range indexRange = Range.parameterIndex(positionalParam);
                 if (!indexRange.contains(position)) {
                     continue;
                 }
-                @SuppressWarnings("unchecked")
-                Stack<String> argsCopy = (Stack<String>) args.clone();
-                Range arity = Range.parameterArity(positionalParam);
+                @SuppressWarnings("unchecked") final Stack<String> argsCopy = (Stack<String>) args.clone();
+                final Range arity = Range.parameterArity(positionalParam);
                 if (tracer.isDebug()) {tracer.debug("Position %d is in index range %s. Trying to assign args to %s, arity=%s%n", position, indexRange, positionalParam, arity);}
                 assertNoMissingParameters(positionalParam, arity.min, argsCopy);
-                int originalSize = argsCopy.size();
+                final int originalSize = argsCopy.size();
                 applyOption(positionalParam, Parameters.class, arity, false, argsCopy, initialized, "args[" + indexRange + "] at position " + position);
-                int count = originalSize - argsCopy.size();
+                final int count = originalSize - argsCopy.size();
                 if (count > 0) { required.remove(positionalParam); }
                 consumed = Math.max(consumed, count);
             }
@@ -2129,12 +2129,12 @@ public class CommandLine {
             }
         }
 
-        private void processStandaloneOption(Collection<Field> required,
-                                             Set<Field> initialized,
-                                             String arg,
-                                             Stack<String> args,
-                                             boolean paramAttachedToKey) throws Exception {
-            Field field = optionName2Field.get(arg);
+        private void processStandaloneOption(final Collection<Field> required,
+                                             final Set<Field> initialized,
+                                             final String arg,
+                                             final Stack<String> args,
+                                             final boolean paramAttachedToKey) throws Exception {
+            final Field field = optionName2Field.get(arg);
             required.remove(field);
             Range arity = Range.optionArity(field);
             if (paramAttachedToKey) {
@@ -2144,19 +2144,19 @@ public class CommandLine {
             applyOption(field, Option.class, arity, paramAttachedToKey, args, initialized, "option " + arg);
         }
 
-        private void processClusteredShortOptions(Collection<Field> required,
-                                                  Set<Field> initialized,
-                                                  String arg,
-                                                  Stack<String> args)
+        private void processClusteredShortOptions(final Collection<Field> required,
+                                                  final Set<Field> initialized,
+                                                  final String arg,
+                                                  final Stack<String> args)
                 throws Exception {
-            String prefix = arg.substring(0, 1);
+            final String prefix = arg.substring(0, 1);
             String cluster = arg.substring(1);
             boolean paramAttachedToOption = true;
             do {
                 if (cluster.length() > 0 && singleCharOption2Field.containsKey(cluster.charAt(0))) {
-                    Field field = singleCharOption2Field.get(cluster.charAt(0));
+                    final Field field = singleCharOption2Field.get(cluster.charAt(0));
                     Range arity = Range.optionArity(field);
-                    String argDescription = "option " + prefix + cluster.charAt(0);
+                    final String argDescription = "option " + prefix + cluster.charAt(0);
                     if (tracer.isDebug()) {tracer.debug("Found option '%s%s' in %s: field %s, arity=%s%n", prefix, cluster.charAt(0), arg, field, arity);}
                     required.remove(field);
                     cluster = cluster.length() > 0 ? cluster.substring(1) : "";
@@ -2174,7 +2174,7 @@ public class CommandLine {
                     if (!empty(cluster)) {
                         args.push(cluster); // interpret remainder as option parameter
                     }
-                    int consumed = applyOption(field, Option.class, arity, paramAttachedToOption, args, initialized, argDescription);
+                    final int consumed = applyOption(field, Option.class, arity, paramAttachedToOption, args, initialized, argDescription);
                     // only return if cluster (and maybe more) was consumed, otherwise continue do-while loop
                     if (empty(cluster) || consumed > 0 || args.isEmpty()) {
                         return;
@@ -2207,15 +2207,15 @@ public class CommandLine {
             } while (true);
         }
 
-        private int applyOption(Field field,
-                                Class<?> annotation,
-                                Range arity,
-                                boolean valueAttachedToOption,
-                                Stack<String> args,
-                                Set<Field> initialized,
-                                String argDescription) throws Exception {
+        private int applyOption(final Field field,
+                                final Class<?> annotation,
+                                final Range arity,
+                                final boolean valueAttachedToOption,
+                                final Stack<String> args,
+                                final Set<Field> initialized,
+                                final String argDescription) throws Exception {
             updateHelpRequested(field);
-            int length = args.size();
+            final int length = args.size();
             assertNoMissingParameters(field, arity.min, args);
 
             Class<?> cls = field.getType();
@@ -2232,13 +2232,13 @@ public class CommandLine {
             return applyValueToSingleValuedField(field, arity, args, cls, initialized, argDescription);
         }
 
-        private int applyValueToSingleValuedField(Field field,
-                                                  Range arity,
-                                                  Stack<String> args,
-                                                  Class<?> cls,
-                                                  Set<Field> initialized,
-                                                  String argDescription) throws Exception {
-            boolean noMoreValues = args.isEmpty();
+        private int applyValueToSingleValuedField(final Field field,
+                                                  final Range arity,
+                                                  final Stack<String> args,
+                                                  final Class<?> cls,
+                                                  final Set<Field> initialized,
+                                                  final String argDescription) throws Exception {
+            final boolean noMoreValues = args.isEmpty();
             String value = args.isEmpty() ? null : trim(args.pop()); // unquote the value
             int result = arity.min; // the number or args we need to consume
 
@@ -2252,16 +2252,16 @@ public class CommandLine {
                     if (value != null) {
                         args.push(value); // we don't consume the value
                     }
-                    Boolean currentValue = (Boolean) field.get(command);
+                    final Boolean currentValue = (Boolean) field.get(command);
                     value = String.valueOf(currentValue == null ? true : !currentValue); // #147 toggle existing boolean value
                 }
             }
             if (noMoreValues && value == null) {
                 return 0;
             }
-            ITypeConverter<?> converter = getTypeConverter(cls, field);
-            Object newValue = tryConvert(field, -1, converter, value, cls);
-            Object oldValue = field.get(command);
+            final ITypeConverter<?> converter = getTypeConverter(cls, field);
+            final Object newValue = tryConvert(field, -1, converter, value, cls);
+            final Object oldValue = field.get(command);
             TraceLevel level = TraceLevel.INFO;
             String traceMessage = "Setting %s field '%s.%s' to '%5$s' (was '%4$s') for %6$s%n";
             if (initialized != null) {
@@ -2280,34 +2280,34 @@ public class CommandLine {
             field.set(command, newValue);
             return result;
         }
-        private int applyValuesToMapField(Field field,
-                                          Class<?> annotation,
-                                          Range arity,
-                                          Stack<String> args,
-                                          Class<?> cls,
-                                          String argDescription) throws Exception {
-            Class<?>[] classes = getTypeAttribute(field);
+        private int applyValuesToMapField(final Field field,
+                                          final Class<?> annotation,
+                                          final Range arity,
+                                          final Stack<String> args,
+                                          final Class<?> cls,
+                                          final String argDescription) throws Exception {
+            final Class<?>[] classes = getTypeAttribute(field);
             if (classes.length < 2) { throw new ParameterException(CommandLine.this, "Field " + field + " needs two types (one for the map key, one for the value) but only has " + classes.length + " types configured."); }
-            ITypeConverter<?> keyConverter   = getTypeConverter(classes[0], field);
-            ITypeConverter<?> valueConverter = getTypeConverter(classes[1], field);
+            final ITypeConverter<?> keyConverter   = getTypeConverter(classes[0], field);
+            final ITypeConverter<?> valueConverter = getTypeConverter(classes[1], field);
             Map<Object, Object> result = (Map<Object, Object>) field.get(command);
             if (result == null) {
                 result = createMap(cls);
                 field.set(command, result);
             }
-            int originalSize = result.size();
+            final int originalSize = result.size();
             consumeMapArguments(field, arity, args, classes, keyConverter, valueConverter, result, argDescription);
             return result.size() - originalSize;
         }
 
-        private void consumeMapArguments(Field field,
-                                         Range arity,
-                                         Stack<String> args,
-                                         Class<?>[] classes,
-                                         ITypeConverter<?> keyConverter,
-                                         ITypeConverter<?> valueConverter,
-                                         Map<Object, Object> result,
-                                         String argDescription) throws Exception {
+        private void consumeMapArguments(final Field field,
+                                         final Range arity,
+                                         final Stack<String> args,
+                                         final Class<?>[] classes,
+                                         final ITypeConverter<?> keyConverter,
+                                         final ITypeConverter<?> valueConverter,
+                                         final Map<Object, Object> result,
+                                         final String argDescription) throws Exception {
             // first do the arity.min mandatory parameters
             for (int i = 0; i < arity.min; i++) {
                 consumeOneMapArgument(field, arity, args, classes, keyConverter, valueConverter, result, i, argDescription);
@@ -2323,19 +2323,19 @@ public class CommandLine {
             }
         }
 
-        private void consumeOneMapArgument(Field field,
-                                           Range arity,
-                                           Stack<String> args,
-                                           Class<?>[] classes,
-                                           ITypeConverter<?> keyConverter, ITypeConverter<?> valueConverter,
-                                           Map<Object, Object> result,
-                                           int index,
-                                           String argDescription) throws Exception {
-            String[] values = split(trim(args.pop()), field);
-            for (String value : values) {
-                String[] keyValue = value.split("=");
+        private void consumeOneMapArgument(final Field field,
+                                           final Range arity,
+                                           final Stack<String> args,
+                                           final Class<?>[] classes,
+                                           final ITypeConverter<?> keyConverter, final ITypeConverter<?> valueConverter,
+                                           final Map<Object, Object> result,
+                                           final int index,
+                                           final String argDescription) throws Exception {
+            final String[] values = split(trim(args.pop()), field);
+            for (final String value : values) {
+                final String[] keyValue = value.split("=");
                 if (keyValue.length < 2) {
-                    String splitRegex = splitRegex(field);
+                    final String splitRegex = splitRegex(field);
                     if (splitRegex.length() == 0) {
                         throw new ParameterException(CommandLine.this, "Value for option " + optionDescription("", field,
                                 0) + " should be in KEY=VALUE format but was " + value);
@@ -2344,44 +2344,44 @@ public class CommandLine {
                                 0) + " should be in KEY=VALUE[" + splitRegex + "KEY=VALUE]... format but was " + value);
                     }
                 }
-                Object mapKey =   tryConvert(field, index, keyConverter,   keyValue[0], classes[0]);
-                Object mapValue = tryConvert(field, index, valueConverter, keyValue[1], classes[1]);
+                final Object mapKey =   tryConvert(field, index, keyConverter,   keyValue[0], classes[0]);
+                final Object mapValue = tryConvert(field, index, valueConverter, keyValue[1], classes[1]);
                 result.put(mapKey, mapValue);
                 if (tracer.isInfo()) {tracer.info("Putting [%s : %s] in %s<%s, %s> field '%s.%s' for %s%n", String.valueOf(mapKey), String.valueOf(mapValue),
                         result.getClass().getSimpleName(), classes[0].getSimpleName(), classes[1].getSimpleName(), field.getDeclaringClass().getSimpleName(), field.getName(), argDescription);}
             }
         }
 
-        private void checkMaxArityExceeded(Range arity, int remainder, Field field, String[] values) {
+        private void checkMaxArityExceeded(final Range arity, final int remainder, final Field field, final String[] values) {
             if (values.length <= remainder) { return; }
-            String desc = arity.max == remainder ? "" + remainder : arity + ", remainder=" + remainder;
+            final String desc = arity.max == remainder ? "" + remainder : arity + ", remainder=" + remainder;
             throw new MaxValuesforFieldExceededException(CommandLine.this, optionDescription("", field, -1) +
                     " max number of values (" + arity.max + ") exceeded: remainder is " + remainder + " but " +
                     values.length + " values were specified: " + Arrays.toString(values));
         }
 
-        private int applyValuesToArrayField(Field field,
-                                            Class<?> annotation,
-                                            Range arity,
-                                            Stack<String> args,
-                                            Class<?> cls,
-                                            String argDescription) throws Exception {
-            Object existing = field.get(command);
-            int length = existing == null ? 0 : Array.getLength(existing);
-            Class<?> type = getTypeAttribute(field)[0];
-            List<Object> converted = consumeArguments(field, annotation, arity, args, type, length, argDescription);
-            List<Object> newValues = new ArrayList<Object>();
+        private int applyValuesToArrayField(final Field field,
+                                            final Class<?> annotation,
+                                            final Range arity,
+                                            final Stack<String> args,
+                                            final Class<?> cls,
+                                            final String argDescription) throws Exception {
+            final Object existing = field.get(command);
+            final int length = existing == null ? 0 : Array.getLength(existing);
+            final Class<?> type = getTypeAttribute(field)[0];
+            final List<Object> converted = consumeArguments(field, annotation, arity, args, type, length, argDescription);
+            final List<Object> newValues = new ArrayList<Object>();
             for (int i = 0; i < length; i++) {
                 newValues.add(Array.get(existing, i));
             }
-            for (Object obj : converted) {
+            for (final Object obj : converted) {
                 if (obj instanceof Collection<?>) {
                     newValues.addAll((Collection<?>) obj);
                 } else {
                     newValues.add(obj);
                 }
             }
-            Object array = Array.newInstance(type, newValues.size());
+            final Object array = Array.newInstance(type, newValues.size());
             field.set(command, array);
             for (int i = 0; i < newValues.size(); i++) {
                 Array.set(array, i, newValues.get(i));
@@ -2390,21 +2390,21 @@ public class CommandLine {
         }
 
         @SuppressWarnings("unchecked")
-        private int applyValuesToCollectionField(Field field,
-                                                 Class<?> annotation,
-                                                 Range arity,
-                                                 Stack<String> args,
-                                                 Class<?> cls,
-                                                 String argDescription) throws Exception {
+        private int applyValuesToCollectionField(final Field field,
+                                                 final Class<?> annotation,
+                                                 final Range arity,
+                                                 final Stack<String> args,
+                                                 final Class<?> cls,
+                                                 final String argDescription) throws Exception {
             Collection<Object> collection = (Collection<Object>) field.get(command);
-            Class<?> type = getTypeAttribute(field)[0];
-            int length = collection == null ? 0 : collection.size();
-            List<Object> converted = consumeArguments(field, annotation, arity, args, type, length, argDescription);
+            final Class<?> type = getTypeAttribute(field)[0];
+            final int length = collection == null ? 0 : collection.size();
+            final List<Object> converted = consumeArguments(field, annotation, arity, args, type, length, argDescription);
             if (collection == null) {
                 collection = createCollection(cls);
                 field.set(command, collection);
             }
-            for (Object element : converted) {
+            for (final Object element : converted) {
                 if (element instanceof Collection<?>) {
                     collection.addAll((Collection<?>) element);
                 } else {
@@ -2414,14 +2414,14 @@ public class CommandLine {
             return converted.size();
         }
 
-        private List<Object> consumeArguments(Field field,
-                                              Class<?> annotation,
-                                              Range arity,
-                                              Stack<String> args,
-                                              Class<?> type,
-                                              int originalSize,
-                                              String argDescription) throws Exception {
-            List<Object> result = new ArrayList<Object>();
+        private List<Object> consumeArguments(final Field field,
+                                              final Class<?> annotation,
+                                              final Range arity,
+                                              final Stack<String> args,
+                                              final Class<?> type,
+                                              final int originalSize,
+                                              final String argDescription) throws Exception {
+            final List<Object> result = new ArrayList<Object>();
 
             // first do the arity.min mandatory parameters
             for (int i = 0; i < arity.min; i++) {
@@ -2439,16 +2439,16 @@ public class CommandLine {
             return result;
         }
 
-        private int consumeOneArgument(Field field,
-                                       Range arity,
-                                       Stack<String> args,
-                                       Class<?> type,
-                                       List<Object> result,
+        private int consumeOneArgument(final Field field,
+                                       final Range arity,
+                                       final Stack<String> args,
+                                       final Class<?> type,
+                                       final List<Object> result,
                                        int index,
-                                       int originalSize,
-                                       String argDescription) throws Exception {
-            String[] values = split(trim(args.pop()), field);
-            ITypeConverter<?> converter = getTypeConverter(type, field);
+                                       final int originalSize,
+                                       final String argDescription) throws Exception {
+            final String[] values = split(trim(args.pop()), field);
+            final ITypeConverter<?> converter = getTypeConverter(type, field);
 
             for (int j = 0; j < values.length; j++) {
                 result.add(tryConvert(field, index, converter, values[j], type));
@@ -2464,13 +2464,13 @@ public class CommandLine {
             return ++index;
         }
 
-        private String splitRegex(Field field) {
+        private String splitRegex(final Field field) {
             if (field.isAnnotationPresent(Option.class))     { return field.getAnnotation(Option.class).split(); }
             if (field.isAnnotationPresent(Parameters.class)) { return field.getAnnotation(Parameters.class).split(); }
             return "";
         }
-        private String[] split(String value, Field field) {
-            String regex = splitRegex(field);
+        private String[] split(final String value, final Field field) {
+            final String regex = splitRegex(field);
             return regex.length() == 0 ? new String[] {value} : value.split(regex);
         }
 
@@ -2480,7 +2480,7 @@ public class CommandLine {
          * @param arg the string to determine whether it is an option or not
          * @return true if it is an option, false otherwise
          */
-        private boolean isOption(String arg) {
+        private boolean isOption(final String arg) {
             if ("--".equals(arg)) {
                 return true;
             }
@@ -2488,7 +2488,7 @@ public class CommandLine {
             if (optionName2Field.containsKey(arg)) { // -v or -f or --file (not attached to param or other option)
                 return true;
             }
-            int separatorIndex = arg.indexOf(separator);
+            final int separatorIndex = arg.indexOf(separator);
             if (separatorIndex > 0) { // -f=FILE or --file==FILE (attached to param via separator)
                 if (optionName2Field.containsKey(arg.substring(0, separatorIndex))) {
                     return true;
@@ -2496,33 +2496,33 @@ public class CommandLine {
             }
             return (arg.length() > 2 && arg.startsWith("-") && singleCharOption2Field.containsKey(arg.charAt(1)));
         }
-        private Object tryConvert(Field field, int index, ITypeConverter<?> converter, String value, Class<?> type)
+        private Object tryConvert(final Field field, final int index, final ITypeConverter<?> converter, final String value, final Class<?> type)
                 throws Exception {
             try {
                 return converter.convert(value);
-            } catch (TypeConversionException ex) {
+            } catch (final TypeConversionException ex) {
                 throw new ParameterException(CommandLine.this, ex.getMessage() + optionDescription(" for ", field, index));
-            } catch (Exception other) {
-                String desc = optionDescription(" for ", field, index) + ": " + other;
+            } catch (final Exception other) {
+                final String desc = optionDescription(" for ", field, index) + ": " + other;
                 throw new ParameterException(CommandLine.this, "Could not convert '" + value + "' to " + type.getSimpleName() + desc, other);
             }
         }
 
-        private String optionDescription(String prefix, Field field, int index) {
-            Help.IParamLabelRenderer labelRenderer = Help.createMinimalParamLabelRenderer();
+        private String optionDescription(final String prefix, final Field field, final int index) {
+            final Help.IParamLabelRenderer labelRenderer = Help.createMinimalParamLabelRenderer();
             String desc = "";
             if (field.isAnnotationPresent(Option.class)) {
                 desc = prefix + "option '" + field.getAnnotation(Option.class).names()[0] + "'";
                 if (index >= 0) {
-                    Range arity = Range.optionArity(field);
+                    final Range arity = Range.optionArity(field);
                     if (arity.max > 1) {
                         desc += " at index " + index;
                     }
                     desc += " (" + labelRenderer.renderParameterLabel(field, Help.Ansi.OFF, Collections.<IStyle>emptyList()) + ")";
                 }
             } else if (field.isAnnotationPresent(Parameters.class)) {
-                Range indexRange = Range.parameterIndex(field);
-                Text label = labelRenderer.renderParameterLabel(field, Help.Ansi.OFF, Collections.<IStyle>emptyList());
+                final Range indexRange = Range.parameterIndex(field);
+                final Text label = labelRenderer.renderParameterLabel(field, Help.Ansi.OFF, Collections.<IStyle>emptyList());
                 desc = prefix + "positional parameter at index " + indexRange + " (" + label + ")";
             }
             return desc;
@@ -2530,19 +2530,19 @@ public class CommandLine {
 
         private boolean isAnyHelpRequested() { return isHelpRequested || versionHelpRequested || usageHelpRequested; }
 
-        private void updateHelpRequested(Field field) {
+        private void updateHelpRequested(final Field field) {
             if (field.isAnnotationPresent(Option.class)) {
                 isHelpRequested                       |= is(field, "help", field.getAnnotation(Option.class).help());
                 CommandLine.this.versionHelpRequested |= is(field, "versionHelp", field.getAnnotation(Option.class).versionHelp());
                 CommandLine.this.usageHelpRequested   |= is(field, "usageHelp", field.getAnnotation(Option.class).usageHelp());
             }
         }
-        private boolean is(Field f, String description, boolean value) {
+        private boolean is(final Field f, final String description, final boolean value) {
             if (value) { if (tracer.isInfo()) {tracer.info("Field '%s.%s' has '%s' annotation: not validating required fields%n", f.getDeclaringClass().getSimpleName(), f.getName(), description); }}
             return value;
         }
         @SuppressWarnings("unchecked")
-        private Collection<Object> createCollection(Class<?> collectionClass) throws Exception {
+        private Collection<Object> createCollection(final Class<?> collectionClass) throws Exception {
             if (collectionClass.isInterface()) {
                 if (List.class.isAssignableFrom(collectionClass)) {
                     return new ArrayList<Object>();
@@ -2558,14 +2558,14 @@ public class CommandLine {
             // custom Collection implementation class must have default constructor
             return (Collection<Object>) collectionClass.newInstance();
         }
-        private Map<Object, Object> createMap(Class<?> mapClass) throws Exception {
+        private Map<Object, Object> createMap(final Class<?> mapClass) throws Exception {
             try { // if it is an implementation class, instantiate it
                 return (Map<Object, Object>) mapClass.newInstance();
-            } catch (Exception ignored) {}
+            } catch (final Exception ignored) {}
             return new LinkedHashMap<Object, Object>();
         }
-        private ITypeConverter<?> getTypeConverter(final Class<?> type, Field field) {
-            ITypeConverter<?> result = converterRegistry.get(type);
+        private ITypeConverter<?> getTypeConverter(final Class<?> type, final Field field) {
+            final ITypeConverter<?> result = converterRegistry.get(type);
             if (result != null) {
                 return result;
             }
@@ -2573,7 +2573,7 @@ public class CommandLine {
                 return new ITypeConverter<Object>() {
                     @Override
                     @SuppressWarnings("unchecked")
-                    public Object convert(String value) throws Exception {
+                    public Object convert(final String value) throws Exception {
                         return Enum.valueOf((Class<Enum>) type, value);
                     }
                 };
@@ -2581,17 +2581,17 @@ public class CommandLine {
             throw new MissingTypeConverterException(CommandLine.this, "No TypeConverter registered for " + type.getName() + " of field " + field);
         }
 
-        private void assertNoMissingParameters(Field field, int arity, Stack<String> args) {
+        private void assertNoMissingParameters(final Field field, final int arity, final Stack<String> args) {
             if (arity > args.size()) {
                 if (arity == 1) {
                     if (field.isAnnotationPresent(Option.class)) {
                         throw new MissingParameterException(CommandLine.this, "Missing required parameter for " +
                                 optionDescription("", field, 0));
                     }
-                    Range indexRange = Range.parameterIndex(field);
-                    Help.IParamLabelRenderer labelRenderer = Help.createMinimalParamLabelRenderer();
+                    final Range indexRange = Range.parameterIndex(field);
+                    final Help.IParamLabelRenderer labelRenderer = Help.createMinimalParamLabelRenderer();
                     String sep = "";
-                    StringBuilder names = new StringBuilder();
+                    final StringBuilder names = new StringBuilder();
                     int count = 0;
                     for (int i = indexRange.min; i < positionalParametersFields.size(); i++) {
                         if (Range.parameterArity(positionalParametersFields.get(i)).min > 0) {
@@ -2602,7 +2602,7 @@ public class CommandLine {
                         }
                     }
                     String msg = "Missing required parameter";
-                    Range paramArity = Range.parameterArity(field);
+                    final Range paramArity = Range.parameterArity(field);
                     if (paramArity.isVariable) {
                         msg += "s at positions " + indexRange + ": ";
                     } else {
@@ -2618,11 +2618,11 @@ public class CommandLine {
                         " requires at least " + arity + " values, but only " + args.size() + " were specified: " + reverse(args));
             }
         }
-        private String trim(String value) {
+        private String trim(final String value) {
             return unquote(value);
         }
 
-        private String unquote(String value) {
+        private String unquote(final String value) {
             return value == null
                     ? null
                     : (value.length() > 1 && value.startsWith("\"") && value.endsWith("\""))
@@ -2632,8 +2632,8 @@ public class CommandLine {
     }
     private static class PositionalParametersSorter implements Comparator<Field> {
         @Override
-        public int compare(Field o1, Field o2) {
-            int result = Range.parameterIndex(o1).compareTo(Range.parameterIndex(o2));
+        public int compare(final Field o1, final Field o2) {
+            final int result = Range.parameterIndex(o1).compareTo(Range.parameterIndex(o2));
             return (result == 0) ? Range.parameterArity(o1).compareTo(Range.parameterArity(o2)) : result;
         }
     }
@@ -2646,25 +2646,25 @@ public class CommandLine {
         }
         static class StringConverter implements ITypeConverter<String> {
             @Override
-            public String convert(String value) { return value; }
+            public String convert(final String value) { return value; }
         }
         static class StringBuilderConverter implements ITypeConverter<StringBuilder> {
             @Override
-            public StringBuilder convert(String value) { return new StringBuilder(value); }
+            public StringBuilder convert(final String value) { return new StringBuilder(value); }
         }
         static class CharSequenceConverter implements ITypeConverter<CharSequence> {
             @Override
-            public String convert(String value) { return value; }
+            public String convert(final String value) { return value; }
         }
         /** Converts text to a {@code Byte} by delegating to {@link Byte#valueOf(String)}.*/
         static class ByteConverter implements ITypeConverter<Byte> {
             @Override
-            public Byte convert(String value) { return Byte.valueOf(value); }
+            public Byte convert(final String value) { return Byte.valueOf(value); }
         }
         /** Converts {@code "true"} or {@code "false"} to a {@code Boolean}. Other values result in a ParameterException.*/
         static class BooleanConverter implements ITypeConverter<Boolean> {
             @Override
-            public Boolean convert(String value) {
+            public Boolean convert(final String value) {
                 if ("true".equalsIgnoreCase(value) || "false".equalsIgnoreCase(value)) {
                     return Boolean.parseBoolean(value);
                 } else {
@@ -2674,7 +2674,7 @@ public class CommandLine {
         }
         static class CharacterConverter implements ITypeConverter<Character> {
             @Override
-            public Character convert(String value) {
+            public Character convert(final String value) {
                 if (value.length() > 1) {
                     throw new TypeConversionException("'" + value + "' is not a single character");
                 }
@@ -2684,45 +2684,45 @@ public class CommandLine {
         /** Converts text to a {@code Short} by delegating to {@link Short#valueOf(String)}.*/
         static class ShortConverter implements ITypeConverter<Short> {
             @Override
-            public Short convert(String value) { return Short.valueOf(value); }
+            public Short convert(final String value) { return Short.valueOf(value); }
         }
         /** Converts text to an {@code Integer} by delegating to {@link Integer#valueOf(String)}.*/
         static class IntegerConverter implements ITypeConverter<Integer> {
             @Override
-            public Integer convert(String value) { return Integer.valueOf(value); }
+            public Integer convert(final String value) { return Integer.valueOf(value); }
         }
         /** Converts text to a {@code Long} by delegating to {@link Long#valueOf(String)}.*/
         static class LongConverter implements ITypeConverter<Long> {
             @Override
-            public Long convert(String value) { return Long.valueOf(value); }
+            public Long convert(final String value) { return Long.valueOf(value); }
         }
         static class FloatConverter implements ITypeConverter<Float> {
             @Override
-            public Float convert(String value) { return Float.valueOf(value); }
+            public Float convert(final String value) { return Float.valueOf(value); }
         }
         static class DoubleConverter implements ITypeConverter<Double> {
             @Override
-            public Double convert(String value) { return Double.valueOf(value); }
+            public Double convert(final String value) { return Double.valueOf(value); }
         }
         static class FileConverter implements ITypeConverter<File> {
             @Override
-            public File convert(String value) { return new File(value); }
+            public File convert(final String value) { return new File(value); }
         }
         static class URLConverter implements ITypeConverter<URL> {
             @Override
-            public URL convert(String value) throws MalformedURLException { return new URL(value); }
+            public URL convert(final String value) throws MalformedURLException { return new URL(value); }
         }
         static class URIConverter implements ITypeConverter<URI> {
             @Override
-            public URI convert(String value) throws URISyntaxException { return new URI(value); }
+            public URI convert(final String value) throws URISyntaxException { return new URI(value); }
         }
         /** Converts text in {@code yyyy-mm-dd} format to a {@code java.util.Date}. ParameterException on failure. */
         static class ISO8601DateConverter implements ITypeConverter<Date> {
             @Override
-            public Date convert(String value) {
+            public Date convert(final String value) {
                 try {
                     return new SimpleDateFormat("yyyy-MM-dd").parse(value);
-                } catch (ParseException e) {
+                } catch (final ParseException e) {
                     throw new TypeConversionException("'" + value + "' is not a yyyy-MM-dd date");
                 }
             }
@@ -2731,7 +2731,7 @@ public class CommandLine {
          * {@code HH:mm:ss.SSS}, {@code HH:mm:ss,SSS}. Other formats result in a ParameterException. */
         static class ISO8601TimeConverter implements ITypeConverter<Time> {
             @Override
-            public Time convert(String value) {
+            public Time convert(final String value) {
                 try {
                     if (value.length() <= 5) {
                         return new Time(new SimpleDateFormat("HH:mm").parse(value).getTime());
@@ -2740,11 +2740,11 @@ public class CommandLine {
                     } else if (value.length() <= 12) {
                         try {
                             return new Time(new SimpleDateFormat("HH:mm:ss.SSS").parse(value).getTime());
-                        } catch (ParseException e2) {
+                        } catch (final ParseException e2) {
                             return new Time(new SimpleDateFormat("HH:mm:ss,SSS").parse(value).getTime());
                         }
                     }
-                } catch (ParseException ignored) {
+                } catch (final ParseException ignored) {
                     // ignored because we throw a ParameterException below
                 }
                 throw new TypeConversionException("'" + value + "' is not a HH:mm[:ss[.SSS]] time");
@@ -2752,28 +2752,28 @@ public class CommandLine {
         }
         static class BigDecimalConverter implements ITypeConverter<BigDecimal> {
             @Override
-            public BigDecimal convert(String value) { return new BigDecimal(value); }
+            public BigDecimal convert(final String value) { return new BigDecimal(value); }
         }
         static class BigIntegerConverter implements ITypeConverter<BigInteger> {
             @Override
-            public BigInteger convert(String value) { return new BigInteger(value); }
+            public BigInteger convert(final String value) { return new BigInteger(value); }
         }
         static class CharsetConverter implements ITypeConverter<Charset> {
             @Override
-            public Charset convert(String s) { return Charset.forName(s); }
+            public Charset convert(final String s) { return Charset.forName(s); }
         }
         /** Converts text to a {@code InetAddress} by delegating to {@link InetAddress#getByName(String)}. */
         static class InetAddressConverter implements ITypeConverter<InetAddress> {
             @Override
-            public InetAddress convert(String s) throws Exception { return InetAddress.getByName(s); }
+            public InetAddress convert(final String s) throws Exception { return InetAddress.getByName(s); }
         }
         static class PatternConverter implements ITypeConverter<Pattern> {
             @Override
-            public Pattern convert(String s) { return Pattern.compile(s); }
+            public Pattern convert(final String s) { return Pattern.compile(s); }
         }
         static class UUIDConverter implements ITypeConverter<UUID> {
             @Override
-            public UUID convert(String s) throws Exception { return UUID.fromString(s); }
+            public UUID convert(final String s) throws Exception { return UUID.fromString(s); }
         }
         private BuiltIn() {} // private constructor: never instantiate
     }
@@ -2905,7 +2905,7 @@ public class CommandLine {
         /** Constructs a new {@code Help} instance with a default color scheme, initialized from annotatations
          * on the specified class and superclasses.
          * @param command the annotated object to create usage help for */
-        public Help(Object command) {
+        public Help(final Object command) {
             this(command, Ansi.AUTO);
         }
 
@@ -2913,7 +2913,7 @@ public class CommandLine {
          * on the specified class and superclasses.
          * @param command the annotated object to create usage help for
          * @param ansi whether to emit ANSI escape codes or not */
-        public Help(Object command, Ansi ansi) {
+        public Help(final Object command, final Ansi ansi) {
             this(command, defaultColorScheme(ansi));
         }
 
@@ -2921,17 +2921,17 @@ public class CommandLine {
          * on the specified class and superclasses.
          * @param command the annotated object to create usage help for
          * @param colorScheme the color scheme to use */
-        public Help(Object command, ColorScheme colorScheme) {
+        public Help(final Object command, final ColorScheme colorScheme) {
             this.command = Assert.notNull(command, "command");
             this.colorScheme = Assert.notNull(colorScheme, "colorScheme").applySystemProperties();
-            List<Field> options = new ArrayList<Field>();
-            List<Field> operands = new ArrayList<Field>();
+            final List<Field> options = new ArrayList<Field>();
+            final List<Field> operands = new ArrayList<Field>();
             Class<?> cls = command.getClass();
             while (cls != null) {
-                for (Field field : cls.getDeclaredFields()) {
+                for (final Field field : cls.getDeclaredFields()) {
                     field.setAccessible(true);
                     if (field.isAnnotationPresent(Option.class)) {
-                        Option option = field.getAnnotation(Option.class);
+                        final Option option = field.getAnnotation(Option.class);
                         if (!option.hidden()) { // hidden options should not appear in usage help
                             // TODO remember longest concatenated option string length (issue #45)
                             options.add(field);
@@ -2943,7 +2943,7 @@ public class CommandLine {
                 }
                 // superclass values should not overwrite values if both class and superclass have a @Command annotation
                 if (cls.isAnnotationPresent(Command.class)) {
-                    Command cmd = cls.getAnnotation(Command.class);
+                    final Command cmd = cls.getAnnotation(Command.class);
                     if (DEFAULT_COMMAND_NAME.equals(commandName)) {
                         commandName = cmd.name();
                     }
@@ -2984,9 +2984,9 @@ public class CommandLine {
          * @return this Help instance (for method chaining)
          * @see CommandLine#getSubcommands()
          */
-        public Help addAllSubcommands(Map<String, CommandLine> commands) {
+        public Help addAllSubcommands(final Map<String, CommandLine> commands) {
             if (commands != null) {
-                for (Map.Entry<String, CommandLine> entry : commands.entrySet()) {
+                for (final Map.Entry<String, CommandLine> entry : commands.entrySet()) {
                     addSubcommand(entry.getKey(), entry.getValue().getCommand());
                 }
             }
@@ -2998,7 +2998,7 @@ public class CommandLine {
          * @param command the annotated object to get more information from
          * @return this Help instance (for method chaining)
          */
-        public Help addSubcommand(String commandName, Object command) {
+        public Help addSubcommand(final String commandName, final Object command) {
             commands.put(commandName, new Help(command));
             return this;
         }
@@ -3020,7 +3020,7 @@ public class CommandLine {
          * @see #detailedSynopsis(Comparator, boolean)
          * @see #synopsisHeading
          */
-        public String synopsis(int synopsisHeadingLength) {
+        public String synopsis(final int synopsisHeadingLength) {
             if (!empty(customSynopsis)) { return customSynopsis(); }
             return abbreviateSynopsis ? abbreviatedSynopsis()
                     : detailedSynopsis(synopsisHeadingLength, createShortOptionArityAndNameComparator(), true);
@@ -3030,12 +3030,12 @@ public class CommandLine {
          * that don't apply to the command (e.g., does not show [OPTIONS] if the command has no options).
          * @return a generic synopsis */
         public String abbreviatedSynopsis() {
-            StringBuilder sb = new StringBuilder();
+            final StringBuilder sb = new StringBuilder();
             if (!optionFields.isEmpty()) { // only show if annotated object actually has options
                 sb.append(" [OPTIONS]");
             }
             // sb.append(" [--] "); // implied
-            for (Field positionalParam : positionalParametersFields) {
+            for (final Field positionalParam : positionalParametersFields) {
                 if (!positionalParam.getAnnotation(Parameters.class).hidden()) {
                     sb.append(' ').append(parameterLabelRenderer.renderParameterLabel(positionalParam, ansi(), colorScheme.parameterStyles));
                 }
@@ -3050,7 +3050,7 @@ public class CommandLine {
          * @return a detailed synopsis
          * @deprecated use {@link #detailedSynopsis(int, Comparator, boolean)} instead. */
         @Deprecated
-        public String detailedSynopsis(Comparator<Field> optionSort, boolean clusterBooleanOptions) {
+        public String detailedSynopsis(final Comparator<Field> optionSort, final boolean clusterBooleanOptions) {
             return detailedSynopsis(0, optionSort, clusterBooleanOptions);
         }
 
@@ -3060,20 +3060,20 @@ public class CommandLine {
          * @param optionSort comparator to sort options or {@code null} if options should not be sorted
          * @param clusterBooleanOptions {@code true} if boolean short options should be clustered into a single string
          * @return a detailed synopsis */
-        public String detailedSynopsis(int synopsisHeadingLength, Comparator<Field> optionSort, boolean clusterBooleanOptions) {
+        public String detailedSynopsis(final int synopsisHeadingLength, final Comparator<Field> optionSort, final boolean clusterBooleanOptions) {
             Text optionText = ansi().new Text(0);
-            List<Field> fields = new ArrayList<Field>(optionFields); // iterate in declaration order
+            final List<Field> fields = new ArrayList<Field>(optionFields); // iterate in declaration order
             if (optionSort != null) {
                 Collections.sort(fields, optionSort);// iterate in specified sort order
             }
             if (clusterBooleanOptions) { // cluster all short boolean options into a single string
-                List<Field> booleanOptions = new ArrayList<Field>();
-                StringBuilder clusteredRequired = new StringBuilder("-");
-                StringBuilder clusteredOptional = new StringBuilder("-");
-                for (Field field : fields) {
+                final List<Field> booleanOptions = new ArrayList<Field>();
+                final StringBuilder clusteredRequired = new StringBuilder("-");
+                final StringBuilder clusteredOptional = new StringBuilder("-");
+                for (final Field field : fields) {
                     if (field.getType() == boolean.class || field.getType() == Boolean.class) {
-                        Option option = field.getAnnotation(Option.class);
-                        String shortestName = ShortestFirst.sort(option.names())[0];
+                        final Option option = field.getAnnotation(Option.class);
+                        final String shortestName = ShortestFirst.sort(option.names())[0];
                         if (shortestName.length() == 2 && shortestName.startsWith("-")) {
                             booleanOptions.add(field);
                             if (option.required()) {
@@ -3092,8 +3092,8 @@ public class CommandLine {
                     optionText = optionText.append(" [").append(colorScheme.optionText(clusteredOptional.toString())).append("]");
                 }
             }
-            for (Field field : fields) {
-                Option option = field.getAnnotation(Option.class);
+            for (final Field field : fields) {
+                final Option option = field.getAnnotation(Option.class);
                 if (!option.hidden()) {
                     if (option.required()) {
                         optionText = appendOptionSynopsis(optionText, field, ShortestFirst.sort(option.names())[0], " ", "");
@@ -3108,28 +3108,28 @@ public class CommandLine {
                     }
                 }
             }
-            for (Field positionalParam : positionalParametersFields) {
+            for (final Field positionalParam : positionalParametersFields) {
                 if (!positionalParam.getAnnotation(Parameters.class).hidden()) {
                     optionText = optionText.append(" ");
-                    Text label = parameterLabelRenderer.renderParameterLabel(positionalParam, colorScheme.ansi(), colorScheme.parameterStyles);
+                    final Text label = parameterLabelRenderer.renderParameterLabel(positionalParam, colorScheme.ansi(), colorScheme.parameterStyles);
                     optionText = optionText.append(label);
                 }
             }
             // Fix for #142: first line of synopsis overshoots max. characters
-            int firstColumnLength = commandName.length() + synopsisHeadingLength;
+            final int firstColumnLength = commandName.length() + synopsisHeadingLength;
 
             // synopsis heading ("Usage: ") may be on the same line, so adjust column width
-            TextTable textTable = new TextTable(ansi(), firstColumnLength, usageHelpWidth - firstColumnLength);
+            final TextTable textTable = new TextTable(ansi(), firstColumnLength, usageHelpWidth - firstColumnLength);
             textTable.indentWrappedLines = 1; // don't worry about first line: options (2nd column) always start with a space
 
             // right-adjust the command name by length of synopsis heading
-            Text PADDING = Ansi.OFF.new Text(stringOf('X', synopsisHeadingLength));
+            final Text PADDING = Ansi.OFF.new Text(stringOf('X', synopsisHeadingLength));
             textTable.addRowValues(new Text[] {PADDING.append(colorScheme.commandText(commandName)), optionText});
             return textTable.toString().substring(synopsisHeadingLength); // cut off leading synopsis heading spaces
         }
 
-        private Text appendOptionSynopsis(Text optionText, Field field, String optionName, String prefix, String suffix) {
-            Text optionParamText = parameterLabelRenderer.renderParameterLabel(field, colorScheme.ansi(), colorScheme.optionParamStyles);
+        private Text appendOptionSynopsis(final Text optionText, final Field field, final String optionName, final String prefix, final String suffix) {
+            final Text optionParamText = parameterLabelRenderer.renderParameterLabel(field, colorScheme.ansi(), colorScheme.optionParamStyles);
             return optionText.append(prefix)
                     .append(colorScheme.optionText(optionName))
                     .append(optionParamText)
@@ -3141,7 +3141,7 @@ public class CommandLine {
          * @see #detailedSynopsis(int, Comparator, boolean)
          */
         public int synopsisHeadingLength() {
-            String[] lines = Ansi.OFF.new Text(synopsisHeading).toString().split("\\r?\\n|\\r|%n", -1);
+            final String[] lines = Ansi.OFF.new Text(synopsisHeading).toString().split("\\r?\\n|\\r|%n", -1);
             return lines[lines.length - 1].length();
         }
         /**
@@ -3153,7 +3153,7 @@ public class CommandLine {
          * @see #optionList(Layout, Comparator, IParamLabelRenderer)
          */
         public String optionList() {
-            Comparator<Field> sortOrder = sortOptions == null || sortOptions.booleanValue()
+            final Comparator<Field> sortOrder = sortOptions == null || sortOptions.booleanValue()
                     ? createShortOptionNameComparator()
                     : null;
             return optionList(createDefaultLayout(), sortOrder, parameterLabelRenderer);
@@ -3167,8 +3167,8 @@ public class CommandLine {
          * @param valueLabelRenderer used for options with a parameter
          * @return the fully formatted option list
          */
-        public String optionList(Layout layout, Comparator<Field> optionSort, IParamLabelRenderer valueLabelRenderer) {
-            List<Field> fields = new ArrayList<Field>(optionFields); // options are stored in order of declaration
+        public String optionList(final Layout layout, final Comparator<Field> optionSort, final IParamLabelRenderer valueLabelRenderer) {
+            final List<Field> fields = new ArrayList<Field>(optionFields); // options are stored in order of declaration
             if (optionSort != null) {
                 Collections.sort(fields, optionSort); // default: sort options ABC
             }
@@ -3189,20 +3189,20 @@ public class CommandLine {
          * @param paramLabelRenderer for rendering parameter names
          * @return the section of the usage help message that lists the parameters
          */
-        public String parameterList(Layout layout, IParamLabelRenderer paramLabelRenderer) {
+        public String parameterList(final Layout layout, final IParamLabelRenderer paramLabelRenderer) {
             layout.addPositionalParameters(positionalParametersFields, paramLabelRenderer);
             return layout.toString();
         }
 
-        private static String heading(Ansi ansi, String values, Object... params) {
-            StringBuilder sb = join(ansi, new String[] {values}, new StringBuilder(), params);
+        private static String heading(final Ansi ansi, final String values, final Object... params) {
+            final StringBuilder sb = join(ansi, new String[] {values}, new StringBuilder(), params);
             String result = sb.toString();
             result = result.endsWith(System.getProperty("line.separator"))
                     ? result.substring(0, result.length() - System.getProperty("line.separator").length()) : result;
             return result + new String(spaces(countTrailingSpaces(values)));
         }
-        private static char[] spaces(int length) { char[] result = new char[length]; Arrays.fill(result, ' '); return result; }
-        private static int countTrailingSpaces(String str) {
+        private static char[] spaces(final int length) { final char[] result = new char[length]; Arrays.fill(result, ' '); return result; }
+        private static int countTrailingSpaces(final String str) {
             if (str == null) {return 0;}
             int trailingSpaces = 0;
             for (int i = str.length() - 1; i >= 0 && str.charAt(i) == ' '; i--) { trailingSpaces++; }
@@ -3215,19 +3215,19 @@ public class CommandLine {
          * @param sb the StringBuilder to collect the formatted strings
          * @param params the parameters to pass to the format method when formatting each value
          * @return the specified StringBuilder */
-        public static StringBuilder join(Ansi ansi, String[] values, StringBuilder sb, Object... params) {
+        public static StringBuilder join(final Ansi ansi, final String[] values, final StringBuilder sb, final Object... params) {
             if (values != null) {
-                TextTable table = new TextTable(ansi, usageHelpWidth);
+                final TextTable table = new TextTable(ansi, usageHelpWidth);
                 table.indentWrappedLines = 0;
-                for (String summaryLine : values) {
-                    Text[] lines = ansi.new Text(format(summaryLine, params)).splitLines();
-                    for (Text line : lines) {  table.addRowValues(line); }
+                for (final String summaryLine : values) {
+                    final Text[] lines = ansi.new Text(format(summaryLine, params)).splitLines();
+                    for (final Text line : lines) {  table.addRowValues(line); }
                 }
                 table.toString(sb);
             }
             return sb;
         }
-        private static String format(String formatString,  Object... params) {
+        private static String format(final String formatString, final Object... params) {
             return formatString == null ? "" : String.format(formatString, params);
         }
         /** Returns command custom synopsis as a string. A custom synopsis can be zero or more lines, and can be
@@ -3236,7 +3236,7 @@ public class CommandLine {
          * @param params Arguments referenced by the format specifiers in the synopsis strings
          * @return the custom synopsis lines combined into a single String (which may be empty)
          */
-        public String customSynopsis(Object... params) {
+        public String customSynopsis(final Object... params) {
             return join(ansi(), customSynopsis, new StringBuilder(), params).toString();
         }
         /** Returns command description text as a string. Description text can be zero or more lines, and can be specified
@@ -3245,7 +3245,7 @@ public class CommandLine {
          * @param params Arguments referenced by the format specifiers in the description strings
          * @return the description lines combined into a single String (which may be empty)
          */
-        public String description(Object... params) {
+        public String description(final Object... params) {
             return join(ansi(), description, new StringBuilder(), params).toString();
         }
         /** Returns the command header text as a string. Header text can be zero or more lines, and can be specified
@@ -3254,7 +3254,7 @@ public class CommandLine {
          * @param params Arguments referenced by the format specifiers in the header strings
          * @return the header lines combined into a single String (which may be empty)
          */
-        public String header(Object... params) {
+        public String header(final Object... params) {
             return join(ansi(), header, new StringBuilder(), params).toString();
         }
         /** Returns command footer text as a string. Footer text can be zero or more lines, and can be specified
@@ -3263,21 +3263,21 @@ public class CommandLine {
          * @param params Arguments referenced by the format specifiers in the footer strings
          * @return the footer lines combined into a single String (which may be empty)
          */
-        public String footer(Object... params) {
+        public String footer(final Object... params) {
             return join(ansi(), footer, new StringBuilder(), params).toString();
         }
 
         /** Returns the text displayed before the header text; the result of {@code String.format(headerHeading, params)}.
          * @param params the parameters to use to format the header heading
          * @return the formatted header heading */
-        public String headerHeading(Object... params) {
+        public String headerHeading(final Object... params) {
             return heading(ansi(), headerHeading, params);
         }
 
         /** Returns the text displayed before the synopsis text; the result of {@code String.format(synopsisHeading, params)}.
          * @param params the parameters to use to format the synopsis heading
          * @return the formatted synopsis heading */
-        public String synopsisHeading(Object... params) {
+        public String synopsisHeading(final Object... params) {
             return heading(ansi(), synopsisHeading, params);
         }
 
@@ -3285,7 +3285,7 @@ public class CommandLine {
          * otherwise the result of {@code String.format(descriptionHeading, params)}.
          * @param params the parameters to use to format the description heading
          * @return the formatted description heading */
-        public String descriptionHeading(Object... params) {
+        public String descriptionHeading(final Object... params) {
             return empty(descriptionHeading) ? "" : heading(ansi(), descriptionHeading, params);
         }
 
@@ -3293,7 +3293,7 @@ public class CommandLine {
          * parameters, otherwise the result of {@code String.format(parameterListHeading, params)}.
          * @param params the parameters to use to format the parameter list heading
          * @return the formatted parameter list heading */
-        public String parameterListHeading(Object... params) {
+        public String parameterListHeading(final Object... params) {
             return positionalParametersFields.isEmpty() ? "" : heading(ansi(), parameterListHeading, params);
         }
 
@@ -3301,7 +3301,7 @@ public class CommandLine {
          * otherwise the result of {@code String.format(optionListHeading, params)}.
          * @param params the parameters to use to format the option list heading
          * @return the formatted option list heading */
-        public String optionListHeading(Object... params) {
+        public String optionListHeading(final Object... params) {
             return optionFields.isEmpty() ? "" : heading(ansi(), optionListHeading, params);
         }
 
@@ -3309,48 +3309,48 @@ public class CommandLine {
          * otherwise the result of {@code String.format(commandListHeading, params)}.
          * @param params the parameters to use to format the command list heading
          * @return the formatted command list heading */
-        public String commandListHeading(Object... params) {
+        public String commandListHeading(final Object... params) {
             return commands.isEmpty() ? "" : heading(ansi(), commandListHeading, params);
         }
 
         /** Returns the text displayed before the footer text; the result of {@code String.format(footerHeading, params)}.
          * @param params the parameters to use to format the footer heading
          * @return the formatted footer heading */
-        public String footerHeading(Object... params) {
+        public String footerHeading(final Object... params) {
             return heading(ansi(), footerHeading, params);
         }
         /** Returns a 2-column list with command names and the first line of their header or (if absent) description.
          * @return a usage help section describing the added commands */
         public String commandList() {
             if (commands.isEmpty()) { return ""; }
-            int commandLength = maxLength(commands.keySet());
-            Help.TextTable textTable = new Help.TextTable(ansi(),
+            final int commandLength = maxLength(commands.keySet());
+            final Help.TextTable textTable = new Help.TextTable(ansi(),
                     new Help.Column(commandLength + 2, 2, Help.Column.Overflow.SPAN),
                     new Help.Column(usageHelpWidth - (commandLength + 2), 2, Help.Column.Overflow.WRAP));
 
-            for (Map.Entry<String, Help> entry : commands.entrySet()) {
-                Help command = entry.getValue();
-                String header = command.header != null && command.header.length > 0 ? command.header[0]
+            for (final Map.Entry<String, Help> entry : commands.entrySet()) {
+                final Help command = entry.getValue();
+                final String header = command.header != null && command.header.length > 0 ? command.header[0]
                         : (command.description != null && command.description.length > 0 ? command.description[0] : "");
                 textTable.addRowValues(colorScheme.commandText(entry.getKey()), ansi().new Text(header));
             }
             return textTable.toString();
         }
-        private static int maxLength(Collection<String> any) {
-            List<String> strings = new ArrayList<String>(any);
+        private static int maxLength(final Collection<String> any) {
+            final List<String> strings = new ArrayList<String>(any);
             Collections.sort(strings, Collections.reverseOrder(Help.shortestFirst()));
             return strings.get(0).length();
         }
-        private static String join(String[] names, int offset, int length, String separator) {
+        private static String join(final String[] names, final int offset, final int length, final String separator) {
             if (names == null) { return ""; }
-            StringBuilder result = new StringBuilder();
+            final StringBuilder result = new StringBuilder();
             for (int i = offset; i < offset + length; i++) {
                 result.append((i > offset) ? separator : "").append(names[i]);
             }
             return result.toString();
         }
-        private static String stringOf(char chr, int length) {
-            char[] buff = new char[length];
+        private static String stringOf(final char chr, final int length) {
+            final char[] buff = new char[length];
             Arrays.fill(buff, chr);
             return new String(buff);
         }
@@ -3375,7 +3375,7 @@ public class CommandLine {
          * @return a new default OptionRenderer
          */
         public IOptionRenderer createDefaultOptionRenderer() {
-            DefaultOptionRenderer result = new DefaultOptionRenderer();
+            final DefaultOptionRenderer result = new DefaultOptionRenderer();
             result.requiredMarker = String.valueOf(requiredOptionMarker);
             if (showDefaultValues != null && showDefaultValues.booleanValue()) {
                 result.command = this.command;
@@ -3403,7 +3403,7 @@ public class CommandLine {
          * @return a new default ParameterRenderer
          */
         public IParameterRenderer createDefaultParameterRenderer() {
-            DefaultParameterRenderer result = new DefaultParameterRenderer();
+            final DefaultParameterRenderer result = new DefaultParameterRenderer();
             result.requiredMarker = String.valueOf(requiredOptionMarker);
             return result;
         }
@@ -3419,8 +3419,8 @@ public class CommandLine {
         public static IParamLabelRenderer createMinimalParamLabelRenderer() {
             return new IParamLabelRenderer() {
                 @Override
-                public Text renderParameterLabel(Field field, Ansi ansi, List<IStyle> styles) {
-                    String text = DefaultParamLabelRenderer.renderParameterName(field);
+                public Text renderParameterLabel(final Field field, final Ansi ansi, final List<IStyle> styles) {
+                    final String text = DefaultParamLabelRenderer.renderParameterName(field);
                     return ansi.apply(text, styles);
                 }
                 @Override
@@ -3493,49 +3493,49 @@ public class CommandLine {
             private String sep;
             private boolean showDefault;
             @Override
-            public Text[][] render(Option option, Field field, IParamLabelRenderer paramLabelRenderer, ColorScheme scheme) {
-                String[] names = ShortestFirst.sort(option.names());
-                int shortOptionCount = names[0].length() == 2 ? 1 : 0;
-                String shortOption = shortOptionCount > 0 ? names[0] : "";
+            public Text[][] render(final Option option, final Field field, final IParamLabelRenderer paramLabelRenderer, final ColorScheme scheme) {
+                final String[] names = ShortestFirst.sort(option.names());
+                final int shortOptionCount = names[0].length() == 2 ? 1 : 0;
+                final String shortOption = shortOptionCount > 0 ? names[0] : "";
                 sep = shortOptionCount > 0 && names.length > 1 ? "," : "";
 
-                String longOption = join(names, shortOptionCount, names.length - shortOptionCount, ", ");
-                Text longOptionText = createLongOptionText(field, paramLabelRenderer, scheme, longOption);
+                final String longOption = join(names, shortOptionCount, names.length - shortOptionCount, ", ");
+                final Text longOptionText = createLongOptionText(field, paramLabelRenderer, scheme, longOption);
 
                 showDefault = command != null && !option.help() && !isBoolean(field.getType());
-                Object defaultValue = createDefaultValue(field);
+                final Object defaultValue = createDefaultValue(field);
 
-                String requiredOption = option.required() ? requiredMarker : "";
+                final String requiredOption = option.required() ? requiredMarker : "";
                 return renderDescriptionLines(option, scheme, requiredOption, shortOption, longOptionText, defaultValue);
             }
 
-            private Object createDefaultValue(Field field) {
+            private Object createDefaultValue(final Field field) {
                 Object defaultValue = null;
                 try {
                     defaultValue = field.get(command);
                     if (defaultValue == null) { showDefault = false; } // #201 don't show null default values
                     else if (field.getType().isArray()) {
-                        StringBuilder sb = new StringBuilder();
+                        final StringBuilder sb = new StringBuilder();
                         for (int i = 0; i < Array.getLength(defaultValue); i++) {
                             sb.append(i > 0 ? ", " : "").append(Array.get(defaultValue, i));
                         }
                         defaultValue = sb.insert(0, "[").append("]").toString();
                     }
-                } catch (Exception ex) {
+                } catch (final Exception ex) {
                     showDefault = false;
                 }
                 return defaultValue;
             }
 
-            private Text createLongOptionText(Field field, IParamLabelRenderer renderer, ColorScheme scheme, String longOption) {
+            private Text createLongOptionText(final Field field, final IParamLabelRenderer renderer, final ColorScheme scheme, final String longOption) {
                 Text paramLabelText = renderer.renderParameterLabel(field, scheme.ansi(), scheme.optionParamStyles);
 
                 // if no long option, fill in the space between the short option name and the param label value
                 if (paramLabelText.length > 0 && longOption.length() == 0) {
                     sep = renderer.separator();
                     // #181 paramLabelText may be =LABEL or [=LABEL...]
-                    int sepStart = paramLabelText.plainString().indexOf(sep);
-                    Text prefix = paramLabelText.substring(0, sepStart);
+                    final int sepStart = paramLabelText.plainString().indexOf(sep);
+                    final Text prefix = paramLabelText.substring(0, sepStart);
                     paramLabelText = prefix.append(paramLabelText.substring(sepStart + sep.length()));
                 }
                 Text longOptionText = scheme.optionText(longOption);
@@ -3543,14 +3543,14 @@ public class CommandLine {
                 return longOptionText;
             }
 
-            private Text[][] renderDescriptionLines(Option option,
-                                                    ColorScheme scheme,
-                                                    String requiredOption,
-                                                    String shortOption,
-                                                    Text longOptionText,
-                                                    Object defaultValue) {
-                Text EMPTY = Ansi.EMPTY_TEXT;
-                List<Text[]> result = new ArrayList<Text[]>();
+            private Text[][] renderDescriptionLines(final Option option,
+                                                    final ColorScheme scheme,
+                                                    final String requiredOption,
+                                                    final String shortOption,
+                                                    final Text longOptionText,
+                                                    final Object defaultValue) {
+                final Text EMPTY = Ansi.EMPTY_TEXT;
+                final List<Text[]> result = new ArrayList<Text[]>();
                 Text[] descriptionFirstLines = scheme.ansi().new Text(str(option.description(), 0)).splitLines();
                 if (descriptionFirstLines.length == 0) {
                     if (showDefault) {
@@ -3566,8 +3566,8 @@ public class CommandLine {
                     result.add(new Text[] { EMPTY, EMPTY, EMPTY, EMPTY, descriptionFirstLines[i] });
                 }
                 for (int i = 1; i < option.description().length; i++) {
-                    Text[] descriptionNextLines = scheme.ansi().new Text(option.description()[i]).splitLines();
-                    for (Text line : descriptionNextLines) {
+                    final Text[] descriptionNextLines = scheme.ansi().new Text(option.description()[i]).splitLines();
+                    for (final Text line : descriptionNextLines) {
                         result.add(new Text[] { EMPTY, EMPTY, EMPTY, EMPTY, line });
                     }
                 }
@@ -3581,9 +3581,9 @@ public class CommandLine {
          * option name and a description. If multiple names or description lines exist, the first value is used. */
         static class MinimalOptionRenderer implements IOptionRenderer {
             @Override
-            public Text[][] render(Option option, Field field, IParamLabelRenderer parameterLabelRenderer, ColorScheme scheme) {
+            public Text[][] render(final Option option, final Field field, final IParamLabelRenderer parameterLabelRenderer, final ColorScheme scheme) {
                 Text optionText = scheme.optionText(option.names()[0]);
-                Text paramLabelText = parameterLabelRenderer.renderParameterLabel(field, scheme.ansi(), scheme.optionParamStyles);
+                final Text paramLabelText = parameterLabelRenderer.renderParameterLabel(field, scheme.ansi(), scheme.optionParamStyles);
                 optionText = optionText.append(paramLabelText);
                 return new Text[][] {{ optionText,
                                         scheme.ansi().new Text(option.description().length == 0 ? "" : option.description()[0]) }};
@@ -3593,7 +3593,7 @@ public class CommandLine {
          * text: the parameters label and a description. If multiple description lines exist, the first value is used. */
         static class MinimalParameterRenderer implements IParameterRenderer {
             @Override
-            public Text[][] render(Parameters param, Field field, IParamLabelRenderer parameterLabelRenderer, ColorScheme scheme) {
+            public Text[][] render(final Parameters param, final Field field, final IParamLabelRenderer parameterLabelRenderer, final ColorScheme scheme) {
                 return new Text[][] {{ parameterLabelRenderer.renderParameterLabel(field, scheme.ansi(), scheme.parameterStyles),
                         scheme.ansi().new Text(param.description().length == 0 ? "" : param.description()[0]) }};
             }
@@ -3628,12 +3628,12 @@ public class CommandLine {
         static class DefaultParameterRenderer implements IParameterRenderer {
             public String requiredMarker = " ";
             @Override
-            public Text[][] render(Parameters params, Field field, IParamLabelRenderer paramLabelRenderer, ColorScheme scheme) {
-                Text label = paramLabelRenderer.renderParameterLabel(field, scheme.ansi(), scheme.parameterStyles);
-                Text requiredParameter = scheme.parameterText(Range.parameterArity(field).min > 0 ? requiredMarker : "");
+            public Text[][] render(final Parameters params, final Field field, final IParamLabelRenderer paramLabelRenderer, final ColorScheme scheme) {
+                final Text label = paramLabelRenderer.renderParameterLabel(field, scheme.ansi(), scheme.parameterStyles);
+                final Text requiredParameter = scheme.parameterText(Range.parameterArity(field).min > 0 ? requiredMarker : "");
 
-                Text EMPTY = Ansi.EMPTY_TEXT;
-                List<Text[]> result = new ArrayList<Text[]>();
+                final Text EMPTY = Ansi.EMPTY_TEXT;
+                final List<Text[]> result = new ArrayList<Text[]>();
                 Text[] descriptionFirstLines = scheme.ansi().new Text(str(params.description(), 0)).splitLines();
                 if (descriptionFirstLines.length == 0) { descriptionFirstLines = new Text[]{ EMPTY }; }
                 result.add(new Text[] { requiredParameter, EMPTY, EMPTY, label, descriptionFirstLines[0] });
@@ -3641,8 +3641,8 @@ public class CommandLine {
                     result.add(new Text[] { EMPTY, EMPTY, EMPTY, EMPTY, descriptionFirstLines[i] });
                 }
                 for (int i = 1; i < params.description().length; i++) {
-                    Text[] descriptionNextLines = scheme.ansi().new Text(params.description()[i]).splitLines();
-                    for (Text line : descriptionNextLines) {
+                    final Text[] descriptionNextLines = scheme.ansi().new Text(params.description()[i]).splitLines();
+                    for (final Text line : descriptionNextLines) {
                         result.add(new Text[] { EMPTY, EMPTY, EMPTY, EMPTY, line });
                     }
                 }
@@ -3675,16 +3675,16 @@ public class CommandLine {
             /** The string to use to separate option parameters from their options. */
             public final String separator;
             /** Constructs a new DefaultParamLabelRenderer with the specified separator string. */
-            public DefaultParamLabelRenderer(String separator) {
+            public DefaultParamLabelRenderer(final String separator) {
                 this.separator = Assert.notNull(separator, "separator");
             }
             @Override
             public String separator() { return separator; }
             @Override
-            public Text renderParameterLabel(Field field, Ansi ansi, List<IStyle> styles) {
-                boolean isOptionParameter = field.isAnnotationPresent(Option.class);
-                Range arity = isOptionParameter ? Range.optionArity(field) : Range.parameterCapacity(field);
-                String split = isOptionParameter ? field.getAnnotation(Option.class).split() : field.getAnnotation(Parameters.class).split();
+            public Text renderParameterLabel(final Field field, final Ansi ansi, final List<IStyle> styles) {
+                final boolean isOptionParameter = field.isAnnotationPresent(Option.class);
+                final Range arity = isOptionParameter ? Range.optionArity(field) : Range.parameterCapacity(field);
+                final String split = isOptionParameter ? field.getAnnotation(Option.class).split() : field.getAnnotation(Parameters.class).split();
                 Text result = ansi.new Text("");
                 String sep = isOptionParameter ? separator : "";
                 Text paramName = ansi.apply(renderParameterName(field), styles);
@@ -3713,7 +3713,7 @@ public class CommandLine {
                 }
                 return result;
             }
-            private static String renderParameterName(Field field) {
+            private static String renderParameterName(final Field field) {
                 String result = null;
                 if (field.isAnnotationPresent(Option.class)) {
                     result = field.getAnnotation(Option.class).paramLabel();
@@ -3725,7 +3725,7 @@ public class CommandLine {
                 }
                 String name = field.getName();
                 if (Map.class.isAssignableFrom(field.getType())) { // #195 better param labels for map fields
-                    Class<?>[] paramTypes = getTypeAttribute(field);
+                    final Class<?>[] paramTypes = getTypeAttribute(field);
                     if (paramTypes.length < 2 || paramTypes[0] == null || paramTypes[1] == null) {
                         name = "String=String";
                     } else { name = paramTypes[0].getSimpleName() + "=" + paramTypes[1].getSimpleName(); }
@@ -3752,14 +3752,14 @@ public class CommandLine {
              * {@linkplain Help#createDefaultOptionRenderer() default option renderer}, and the
              * {@linkplain Help#createDefaultParameterRenderer() default parameter renderer}.
              * @param colorScheme the color scheme to use for common, auto-generated parts of the usage help message */
-            public Layout(ColorScheme colorScheme) { this(colorScheme, new TextTable(colorScheme.ansi())); }
+            public Layout(final ColorScheme colorScheme) { this(colorScheme, new TextTable(colorScheme.ansi())); }
 
             /** Constructs a Layout with the specified color scheme, the specified TextTable, the
              * {@linkplain Help#createDefaultOptionRenderer() default option renderer}, and the
              * {@linkplain Help#createDefaultParameterRenderer() default parameter renderer}.
              * @param colorScheme the color scheme to use for common, auto-generated parts of the usage help message
              * @param textTable the TextTable to lay out parts of the usage help message in tabular format */
-            public Layout(ColorScheme colorScheme, TextTable textTable) {
+            public Layout(final ColorScheme colorScheme, final TextTable textTable) {
                 this(colorScheme, textTable, new DefaultOptionRenderer(), new DefaultParameterRenderer());
             }
             /** Constructs a Layout with the specified color scheme, the specified TextTable, the
@@ -3768,7 +3768,7 @@ public class CommandLine {
              * @param optionRenderer the object responsible for rendering Options to Text
              * @param parameterRenderer the object responsible for rendering Parameters to Text
              * @param textTable the TextTable to lay out parts of the usage help message in tabular format */
-            public Layout(ColorScheme colorScheme, TextTable textTable, IOptionRenderer optionRenderer, IParameterRenderer parameterRenderer) {
+            public Layout(final ColorScheme colorScheme, final TextTable textTable, final IOptionRenderer optionRenderer, final IParameterRenderer parameterRenderer) {
                 this.colorScheme       = Assert.notNull(colorScheme, "colorScheme");
                 this.table             = Assert.notNull(textTable, "textTable");
                 this.optionRenderer    = Assert.notNull(optionRenderer, "optionRenderer");
@@ -3781,17 +3781,17 @@ public class CommandLine {
              * @param field the field annotated with the specified Option or Parameters
              * @param cellValues the text values representing the Option/Parameters, to be displayed in tabular form
              */
-            public void layout(Field field, Text[][] cellValues) {
-                for (Text[] oneRow : cellValues) {
+            public void layout(final Field field, final Text[][] cellValues) {
+                for (final Text[] oneRow : cellValues) {
                     table.addRowValues(oneRow);
                 }
             }
             /** Calls {@link #addOption(Field, CommandLine.Help.IParamLabelRenderer)} for all non-hidden Options in the list.
              * @param fields fields annotated with {@link Option} to add usage descriptions for
              * @param paramLabelRenderer object that knows how to render option parameters */
-            public void addOptions(List<Field> fields, IParamLabelRenderer paramLabelRenderer) {
-                for (Field field : fields) {
-                    Option option = field.getAnnotation(Option.class);
+            public void addOptions(final List<Field> fields, final IParamLabelRenderer paramLabelRenderer) {
+                for (final Field field : fields) {
+                    final Option option = field.getAnnotation(Option.class);
                     if (!option.hidden()) {
                         addOption(field, paramLabelRenderer);
                     }
@@ -3804,17 +3804,17 @@ public class CommandLine {
              * @param field the field annotated with the specified Option
              * @param paramLabelRenderer knows how to render option parameters
              */
-            public void addOption(Field field, IParamLabelRenderer paramLabelRenderer) {
-                Option option = field.getAnnotation(Option.class);
-                Text[][] values = optionRenderer.render(option, field, paramLabelRenderer, colorScheme);
+            public void addOption(final Field field, final IParamLabelRenderer paramLabelRenderer) {
+                final Option option = field.getAnnotation(Option.class);
+                final Text[][] values = optionRenderer.render(option, field, paramLabelRenderer, colorScheme);
                 layout(field, values);
             }
             /** Calls {@link #addPositionalParameter(Field, CommandLine.Help.IParamLabelRenderer)} for all non-hidden Parameters in the list.
              * @param fields fields annotated with {@link Parameters} to add usage descriptions for
              * @param paramLabelRenderer knows how to render option parameters */
-            public void addPositionalParameters(List<Field> fields, IParamLabelRenderer paramLabelRenderer) {
-                for (Field field : fields) {
-                    Parameters parameters = field.getAnnotation(Parameters.class);
+            public void addPositionalParameters(final List<Field> fields, final IParamLabelRenderer paramLabelRenderer) {
+                for (final Field field : fields) {
+                    final Parameters parameters = field.getAnnotation(Parameters.class);
                     if (!parameters.hidden()) {
                         addPositionalParameter(field, paramLabelRenderer);
                     }
@@ -3827,9 +3827,9 @@ public class CommandLine {
              * @param field the field annotated with the specified Parameters
              * @param paramLabelRenderer knows how to render option parameters
              */
-            public void addPositionalParameter(Field field, IParamLabelRenderer paramLabelRenderer) {
-                Parameters option = field.getAnnotation(Parameters.class);
-                Text[][] values = parameterRenderer.render(option, field, paramLabelRenderer, colorScheme);
+            public void addPositionalParameter(final Field field, final IParamLabelRenderer paramLabelRenderer) {
+                final Parameters option = field.getAnnotation(Parameters.class);
+                final Text[][] values = parameterRenderer.render(option, field, paramLabelRenderer, colorScheme);
                 layout(field, values);
             }
             /** Returns the section of the usage help message accumulated in the TextTable owned by this layout. */
@@ -3840,11 +3840,11 @@ public class CommandLine {
         /** Sorts short strings before longer strings. */
         static class ShortestFirst implements Comparator<String> {
             @Override
-            public int compare(String o1, String o2) {
+            public int compare(final String o1, final String o2) {
                 return o1.length() - o2.length();
             }
             /** Sorts the specified array of Strings shortest-first and returns it. */
-            public static String[] sort(String[] names) {
+            public static String[] sort(final String[] names) {
                 Arrays.sort(names, new ShortestFirst());
                 return names;
             }
@@ -3853,12 +3853,12 @@ public class CommandLine {
          * multiple names, the shortest name is used for the sorting. Help options follow non-help options. */
         static class SortByShortestOptionNameAlphabetically implements Comparator<Field> {
             @Override
-            public int compare(Field f1, Field f2) {
-                Option o1 = f1.getAnnotation(Option.class);
-                Option o2 = f2.getAnnotation(Option.class);
+            public int compare(final Field f1, final Field f2) {
+                final Option o1 = f1.getAnnotation(Option.class);
+                final Option o2 = f2.getAnnotation(Option.class);
                 if (o1 == null) { return 1; } else if (o2 == null) { return -1; } // options before params
-                String[] names1 = ShortestFirst.sort(o1.names());
-                String[] names2 = ShortestFirst.sort(o2.names());
+                final String[] names1 = ShortestFirst.sort(o1.names());
+                final String[] names2 = ShortestFirst.sort(o2.names());
                 int result = names1[0].toUpperCase().compareTo(names2[0].toUpperCase()); // case insensitive sort
                 result = result == 0 ? -names1[0].compareTo(names2[0]) : result; // lower case before upper case
                 return o1.help() == o2.help() ? result : o2.help() ? -1 : 1; // help options come last
@@ -3867,11 +3867,11 @@ public class CommandLine {
         /** Sorts {@code Option} instances by their max arity first, then their min arity, then delegates to super class. */
         static class SortByOptionArityAndNameAlphabetically extends SortByShortestOptionNameAlphabetically {
             @Override
-            public int compare(Field f1, Field f2) {
-                Option o1 = f1.getAnnotation(Option.class);
-                Option o2 = f2.getAnnotation(Option.class);
-                Range arity1 = Range.optionArity(f1);
-                Range arity2 = Range.optionArity(f2);
+            public int compare(final Field f1, final Field f2) {
+                final Option o1 = f1.getAnnotation(Option.class);
+                final Option o2 = f2.getAnnotation(Option.class);
+                final Range arity1 = Range.optionArity(f1);
+                final Range arity2 = Range.optionArity(f2);
                 int result = arity1.max - arity2.max;
                 if (result == 0) {
                     result = arity1.min - arity2.min;
@@ -3901,7 +3901,7 @@ public class CommandLine {
                 /** Constructs a new Cell with the specified coordinates in the table.
                  * @param column the zero-based table column
                  * @param row the zero-based table row */
-                public Cell(int column, int row) { this.column = column; this.row = row; }
+                public Cell(final int column, final int row) { this.column = column; this.row = row; }
             }
 
             /** The column definitions of this table. */
@@ -3925,7 +3925,7 @@ public class CommandLine {
              * </ol>
              * @param ansi whether to emit ANSI escape codes or not
              */
-            public TextTable(Ansi ansi) {
+            public TextTable(final Ansi ansi) {
                 // "* -c, --create                Creates a ...."
                 this(ansi, new Column[] {
                             new Column(2,                                        0, TRUNCATE), // "*"
@@ -3941,7 +3941,7 @@ public class CommandLine {
              * @param ansi whether to emit ANSI escape codes or not
              * @param columnWidths the width of the table columns (all columns have zero indent)
              */
-            public TextTable(Ansi ansi, int... columnWidths) {
+            public TextTable(final Ansi ansi, final int... columnWidths) {
                 this.ansi = Assert.notNull(ansi, "ansi");
                 columns = new Column[columnWidths.length];
                 for (int i = 0; i < columnWidths.length; i++) {
@@ -3951,7 +3951,7 @@ public class CommandLine {
             /** Constructs a {@code TextTable} with the specified columns.
              * @param ansi whether to emit ANSI escape codes or not
              * @param columns columns to construct this TextTable with */
-            public TextTable(Ansi ansi, Column... columns) {
+            public TextTable(final Ansi ansi, final Column... columns) {
                 this.ansi = Assert.notNull(ansi, "ansi");
                 this.columns = Assert.notNull(columns, "columns");
                 if (columns.length == 0) { throw new IllegalArgumentException("At least one column is required"); }
@@ -3961,7 +3961,7 @@ public class CommandLine {
              * @param col the column of the cell whose Text to return
              * @return the Text object at the specified row and column
              * @since 2.0 */
-            public Text textAt(int row, int col) { return columnValues.get(col + (row * columns.length)); }
+            public Text textAt(final int row, final int col) { return columnValues.get(col + (row * columns.length)); }
 
             /** Returns the {@code Text} slot at the specified row and column to write a text value into.
              * @param row the row of the cell whose Text to return
@@ -3969,7 +3969,7 @@ public class CommandLine {
              * @return the Text object at the specified row and column
              * @deprecated use {@link #textAt(int, int)} instead */
             @Deprecated
-            public Text cellAt(int row, int col) { return textAt(row, col); }
+            public Text cellAt(final int row, final int col) { return textAt(row, col); }
 
             /** Returns the current number of rows of this {@code TextTable}.
              * @return the current number of rows in this TextTable */
@@ -3984,8 +3984,8 @@ public class CommandLine {
 
             /** Delegates to {@link #addRowValues(CommandLine.Help.Ansi.Text...)}.
              * @param values the text values to display in each column of the current row */
-            public void addRowValues(String... values) {
-                Text[] array = new Text[values.length];
+            public void addRowValues(final String... values) {
+                final Text[] array = new Text[values.length];
                 for (int i = 0; i < array.length; i++) {
                     array[i] = values[i] == null ? Ansi.EMPTY_TEXT : ansi.new Text(values[i]);
                 }
@@ -3998,15 +3998,15 @@ public class CommandLine {
              * @param values the values to write into a new row in this TextTable
              * @throws IllegalArgumentException if the number of values exceeds the number of Columns in this table
              */
-            public void addRowValues(Text... values) {
+            public void addRowValues(final Text... values) {
                 if (values.length > columns.length) {
                     throw new IllegalArgumentException(values.length + " values don't fit in " +
                             columns.length + " columns");
                 }
                 addEmptyRow();
                 for (int col = 0; col < values.length; col++) {
-                    int row = rowCount() - 1;// write to last row: previous value may have wrapped to next row
-                    Cell cell = putValue(row, col, values[col]);
+                    final int row = rowCount() - 1;// write to last row: previous value may have wrapped to next row
+                    final Cell cell = putValue(row, col, values[col]);
 
                     // add row if a value spanned/wrapped and there are still remaining values
                     if ((cell.row != row || cell.column != col) && col != values.length - 1) {
@@ -4031,17 +4031,17 @@ public class CommandLine {
                     throw new IllegalArgumentException("Cannot write to row " + row + ": rowCount=" + rowCount());
                 }
                 if (value == null || value.plain.length() == 0) { return new Cell(col, row); }
-                Column column = columns[col];
+                final Column column = columns[col];
                 int indent = column.indent;
                 switch (column.overflow) {
                     case TRUNCATE:
                         copy(value, textAt(row, col), indent);
                         return new Cell(col, row);
                     case SPAN:
-                        int startColumn = col;
+                        final int startColumn = col;
                         do {
-                            boolean lastColumn = col == columns.length - 1;
-                            int charsWritten = lastColumn
+                            final boolean lastColumn = col == columns.length - 1;
+                            final int charsWritten = lastColumn
                                     ? copy(BreakIterator.getLineInstance(), value, textAt(row, col), indent)
                                     : copy(value, textAt(row, col), indent);
                             value = value.substring(charsWritten);
@@ -4058,9 +4058,9 @@ public class CommandLine {
                         } while (value.length > 0);
                         return new Cell(col, row);
                     case WRAP:
-                        BreakIterator lineBreakIterator = BreakIterator.getLineInstance();
+                        final BreakIterator lineBreakIterator = BreakIterator.getLineInstance();
                         do {
-                            int charsWritten = copy(lineBreakIterator, value, textAt(row, col), indent);
+                            final int charsWritten = copy(lineBreakIterator, value, textAt(row, col), indent);
                             value = value.substring(charsWritten);
                             indent = column.indent + indentWrappedLines;
                             if (value.length > 0) {  // value did not fit in column
@@ -4072,16 +4072,16 @@ public class CommandLine {
                 }
                 throw new IllegalStateException(column.overflow.toString());
             }
-            private static int length(Text str) {
+            private static int length(final Text str) {
                 return str.length; // TODO count some characters as double length
             }
 
-            private int copy(BreakIterator line, Text text, Text columnValue, int offset) {
+            private int copy(final BreakIterator line, final Text text, final Text columnValue, final int offset) {
                 // Deceive the BreakIterator to ensure no line breaks after '-' character
                 line.setText(text.plainString().replace("-", "\u00ff"));
                 int done = 0;
                 for (int start = line.first(), end = line.next(); end != BreakIterator.DONE; start = end, end = line.next()) {
-                    Text word = text.substring(start, end); //.replace("\u00ff", "-"); // not needed
+                    final Text word = text.substring(start, end); //.replace("\u00ff", "-"); // not needed
                     if (columnValue.maxLength >= offset + done + length(word)) {
                         done += copy(word, columnValue, offset + done); // TODO localized length
                     } else {
@@ -4094,8 +4094,8 @@ public class CommandLine {
                 }
                 return done;
             }
-            private static int copy(Text value, Text destination, int offset) {
-                int length = Math.min(value.length, destination.maxLength - offset);
+            private static int copy(final Text value, final Text destination, final int offset) {
+                final int length = Math.min(value.length, destination.maxLength - offset);
                 value.getStyledChars(value.from, length, destination, offset);
                 return length;
             }
@@ -4103,11 +4103,11 @@ public class CommandLine {
             /** Copies the text representation that we built up from the options into the specified StringBuilder.
              * @param text the StringBuilder to write into
              * @return the specified StringBuilder object (to allow method chaining and a more fluid API) */
-            public StringBuilder toString(StringBuilder text) {
-                int columnCount = this.columns.length;
-                StringBuilder row = new StringBuilder(usageHelpWidth);
+            public StringBuilder toString(final StringBuilder text) {
+                final int columnCount = this.columns.length;
+                final StringBuilder row = new StringBuilder(usageHelpWidth);
                 for (int i = 0; i < columnValues.size(); i++) {
-                    Text column = columnValues.get(i);
+                    final Text column = columnValues.get(i);
                     row.append(column.toString());
                     row.append(new String(spaces(columns[i % columnCount].width - column.length)));
                     if (i % columnCount == columnCount - 1) {
@@ -4140,7 +4140,7 @@ public class CommandLine {
 
             /** Policy that determines how to handle values larger than the column width. */
             public final Overflow overflow;
-            public Column(int width, int indent, Overflow overflow) {
+            public Column(final int width, final int indent, final Overflow overflow) {
                 this.width = width;
                 this.indent = indent;
                 this.overflow = Assert.notNull(overflow, "overflow");
@@ -4167,40 +4167,40 @@ public class CommandLine {
             /** Constructs a new ColorScheme with the specified Ansi enabled mode.
              * @param ansi whether to emit ANSI escape codes or not
              */
-            public ColorScheme(Ansi ansi) {this.ansi = Assert.notNull(ansi, "ansi"); }
+            public ColorScheme(final Ansi ansi) {this.ansi = Assert.notNull(ansi, "ansi"); }
 
             /** Adds the specified styles to the registered styles for commands in this color scheme and returns this color scheme.
              * @param styles the styles to add to the registered styles for commands in this color scheme
              * @return this color scheme to enable method chaining for a more fluent API */
-            public ColorScheme commands(IStyle... styles)     { return addAll(commandStyles, styles); }
+            public ColorScheme commands(final IStyle... styles)     { return addAll(commandStyles, styles); }
             /** Adds the specified styles to the registered styles for options in this color scheme and returns this color scheme.
              * @param styles the styles to add to registered the styles for options in this color scheme
              * @return this color scheme to enable method chaining for a more fluent API */
-            public ColorScheme options(IStyle... styles)      { return addAll(optionStyles, styles);}
+            public ColorScheme options(final IStyle... styles)      { return addAll(optionStyles, styles);}
             /** Adds the specified styles to the registered styles for positional parameters in this color scheme and returns this color scheme.
              * @param styles the styles to add to registered the styles for parameters in this color scheme
              * @return this color scheme to enable method chaining for a more fluent API */
-            public ColorScheme parameters(IStyle... styles)   { return addAll(parameterStyles, styles);}
+            public ColorScheme parameters(final IStyle... styles)   { return addAll(parameterStyles, styles);}
             /** Adds the specified styles to the registered styles for option parameters in this color scheme and returns this color scheme.
              * @param styles the styles to add to the registered styles for option parameters in this color scheme
              * @return this color scheme to enable method chaining for a more fluent API */
-            public ColorScheme optionParams(IStyle... styles) { return addAll(optionParamStyles, styles);}
+            public ColorScheme optionParams(final IStyle... styles) { return addAll(optionParamStyles, styles);}
             /** Returns a Text with all command styles applied to the specified command string.
              * @param command the command string to apply the registered command styles to
              * @return a Text with all command styles applied to the specified command string */
-            public Ansi.Text commandText(String command)         { return ansi().apply(command,     commandStyles); }
+            public Ansi.Text commandText(final String command)         { return ansi().apply(command,     commandStyles); }
             /** Returns a Text with all option styles applied to the specified option string.
              * @param option the option string to apply the registered option styles to
              * @return a Text with all option styles applied to the specified option string */
-            public Ansi.Text optionText(String option)           { return ansi().apply(option,      optionStyles); }
+            public Ansi.Text optionText(final String option)           { return ansi().apply(option,      optionStyles); }
             /** Returns a Text with all parameter styles applied to the specified parameter string.
              * @param parameter the parameter string to apply the registered parameter styles to
              * @return a Text with all parameter styles applied to the specified parameter string */
-            public Ansi.Text parameterText(String parameter)     { return ansi().apply(parameter,   parameterStyles); }
+            public Ansi.Text parameterText(final String parameter)     { return ansi().apply(parameter,   parameterStyles); }
             /** Returns a Text with all optionParam styles applied to the specified optionParam string.
              * @param optionParam the option parameter string to apply the registered option parameter styles to
              * @return a Text with all option parameter styles applied to the specified option parameter string */
-            public Ansi.Text optionParamText(String optionParam) { return ansi().apply(optionParam, optionParamStyles); }
+            public Ansi.Text optionParamText(final String optionParam) { return ansi().apply(optionParam, optionParamStyles); }
 
             /** Replaces colors and styles in this scheme with ones specified in system properties, and returns this scheme.
              * Supported property names:<ul>
@@ -4218,13 +4218,13 @@ public class CommandLine {
                 replace(optionParamStyles, System.getProperty("picocli.color.optionParams"));
                 return this;
             }
-            private void replace(List<IStyle> styles, String property) {
+            private void replace(final List<IStyle> styles, final String property) {
                 if (property != null) {
                     styles.clear();
                     addAll(styles, Style.parse(property));
                 }
             }
-            private ColorScheme addAll(List<IStyle> styles, IStyle... add) {
+            private ColorScheme addAll(final List<IStyle> styles, final IStyle... add) {
                 styles.addAll(Arrays.asList(add));
                 return this;
             }
@@ -4239,7 +4239,7 @@ public class CommandLine {
          * @param ansi whether the usage help message should contain ANSI escape codes or not
          * @return a new default color scheme
          */
-        public static ColorScheme defaultColorScheme(Ansi ansi) {
+        public static ColorScheme defaultColorScheme(final Ansi ansi) {
             return new ColorScheme(ansi)
                     .commands(Style.bold)
                     .options(Style.fg_yellow)
@@ -4265,7 +4265,7 @@ public class CommandLine {
             static final boolean calcTTY() {
                 if (isWindows && isXterm) { return true; } // Cygwin uses pseudo-tty and console is always null...
                 try { return System.class.getDeclaredMethod("console").invoke(null) != null; }
-                catch (Throwable reflectionFailed) { return true; }
+                catch (final Throwable reflectionFailed) { return true; }
             }
             private static boolean ansiPossible() { return ISATTY && (!isWindows || isXterm); }
 
@@ -4306,7 +4306,7 @@ public class CommandLine {
                 private final int startCode;
                 private final int endCode;
 
-                Style(int startCode, int endCode) {this.startCode = startCode; this.endCode = endCode; }
+                Style(final int startCode, final int endCode) {this.startCode = startCode; this.endCode = endCode; }
                 @Override
                 public String on() { return CSI + startCode + "m"; }
                 @Override
@@ -4315,9 +4315,9 @@ public class CommandLine {
 				/** Returns the concatenated ANSI escape codes for turning all specified styles on.
                  * @param styles the styles to generate ANSI escape codes for
                  * @return the concatenated ANSI escape codes for turning all specified styles on */
-                public static String on(IStyle... styles) {
-                    StringBuilder result = new StringBuilder();
-                    for (IStyle style : styles) {
+                public static String on(final IStyle... styles) {
+                    final StringBuilder result = new StringBuilder();
+                    for (final IStyle style : styles) {
                         result.append(style.on());
                     }
                     return result.toString();
@@ -4325,9 +4325,9 @@ public class CommandLine {
 				/** Returns the concatenated ANSI escape codes for turning all specified styles off.
                  * @param styles the styles to generate ANSI escape codes for
                  * @return the concatenated ANSI escape codes for turning all specified styles off */
-                public static String off(IStyle... styles) {
-                    StringBuilder result = new StringBuilder();
-                    for (IStyle style : styles) {
+                public static String off(final IStyle... styles) {
+                    final StringBuilder result = new StringBuilder();
+                    for (final IStyle style : styles) {
                         result.append(style.off());
                     }
                     return result.toString();
@@ -4339,9 +4339,9 @@ public class CommandLine {
                  *          or {@code "46"} (indexed color) or {@code "0;5;0"} (RGB components of an indexed color)
 				 * @return the IStyle for the specified converter
 				 */
-                public static IStyle fg(String str) {
-                    try { return Style.valueOf(str.toLowerCase(ENGLISH)); } catch (Exception ignored) {}
-                    try { return Style.valueOf("fg_" + str.toLowerCase(ENGLISH)); } catch (Exception ignored) {}
+                public static IStyle fg(final String str) {
+                    try { return Style.valueOf(str.toLowerCase(ENGLISH)); } catch (final Exception ignored) {}
+                    try { return Style.valueOf("fg_" + str.toLowerCase(ENGLISH)); } catch (final Exception ignored) {}
                     return new Palette256Color(true, str);
                 }
 				/** Parses the specified style markup and returns the associated style.
@@ -4351,9 +4351,9 @@ public class CommandLine {
                  *          or {@code "46"} (indexed color) or {@code "0;5;0"} (RGB components of an indexed color)
 				 * @return the IStyle for the specified converter
 				 */
-                public static IStyle bg(String str) {
-                    try { return Style.valueOf(str.toLowerCase(ENGLISH)); } catch (Exception ignored) {}
-                    try { return Style.valueOf("bg_" + str.toLowerCase(ENGLISH)); } catch (Exception ignored) {}
+                public static IStyle bg(final String str) {
+                    try { return Style.valueOf(str.toLowerCase(ENGLISH)); } catch (final Exception ignored) {}
+                    try { return Style.valueOf("bg_" + str.toLowerCase(ENGLISH)); } catch (final Exception ignored) {}
                     return new Palette256Color(false, str);
                 }
                 /** Parses the specified comma-separated sequence of style descriptors and returns the associated
@@ -4362,15 +4362,15 @@ public class CommandLine {
                  * @param commaSeparatedCodes one or more descriptors, e.g. {@code "bg(blue),underline,red"}
                  * @return an array with all styles for the specified descriptors
                  */
-                public static IStyle[] parse(String commaSeparatedCodes) {
-                    String[] codes = commaSeparatedCodes.split(",");
-                    IStyle[] styles = new IStyle[codes.length];
+                public static IStyle[] parse(final String commaSeparatedCodes) {
+                    final String[] codes = commaSeparatedCodes.split(",");
+                    final IStyle[] styles = new IStyle[codes.length];
                     for(int i = 0; i < codes.length; ++i) {
                         if (codes[i].toLowerCase(ENGLISH).startsWith("fg(")) {
-                            int end = codes[i].indexOf(')');
+                            final int end = codes[i].indexOf(')');
                             styles[i] = Style.fg(codes[i].substring(3, end < 0 ? codes[i].length() : end));
                         } else if (codes[i].toLowerCase(ENGLISH).startsWith("bg(")) {
-                            int end = codes[i].indexOf(')');
+                            final int end = codes[i].indexOf(')');
                             styles[i] = Style.bg(codes[i].substring(3, end < 0 ? codes[i].length() : end));
                         } else {
                             styles[i] = Style.fg(codes[i]);
@@ -4386,9 +4386,9 @@ public class CommandLine {
                 private final int fgbg;
                 private final int color;
 
-                Palette256Color(boolean foreground, String color) {
+                Palette256Color(final boolean foreground, final String color) {
                     this.fgbg = foreground ? 38 : 48;
-                    String[] rgb = color.split(";");
+                    final String[] rgb = color.split(";");
                     if (rgb.length == 3) {
                         this.color = 16 + 36 * Integer.decode(rgb[0]) + 6 * Integer.decode(rgb[1]) + Integer.decode(rgb[2]);
                     } else {
@@ -4405,10 +4405,10 @@ public class CommandLine {
                 final int length;
                 final String startStyles;
                 final String endStyles;
-                StyledSection(int start, int len, String style1, String style2) {
+                StyledSection(final int start, final int len, final String style1, final String style2) {
                     startIndex = start; length = len; startStyles = style1; endStyles = style2;
                 }
-                StyledSection withStartIndex(int newStart) {
+                StyledSection withStartIndex(final int newStart) {
                     return new StyledSection(newStart, length, startStyles, endStyles);
                 }
             }
@@ -4420,10 +4420,10 @@ public class CommandLine {
              * @param styles the styles to apply to the full plain text
              * @return a new Text object
              */
-            public Text apply(String plainText, List<IStyle> styles) {
+            public Text apply(final String plainText, final List<IStyle> styles) {
                 if (plainText.length() == 0) { return new Text(0); }
-                Text result = new Text(plainText.length());
-                IStyle[] all = styles.toArray(new IStyle[styles.size()]);
+                final Text result = new Text(plainText.length());
+                final IStyle[] all = styles.toArray(new IStyle[styles.size()]);
                 result.sections.add(new StyledSection(
                         0, plainText.length(), Style.on(all), Style.off(reverse(all)) + Style.reset.off()));
                 result.plain.append(plainText);
@@ -4431,9 +4431,9 @@ public class CommandLine {
                 return result;
             }
 
-            private static <T> T[] reverse(T[] all) {
+            private static <T> T[] reverse(final T[] all) {
                 for (int i = 0; i < all.length / 2; i++) {
-                    T temp = all[i];
+                    final T temp = all[i];
                     all[i] = all[all.length - i - 1];
                     all[all.length - i - 1] = temp;
                 }
@@ -4454,14 +4454,14 @@ public class CommandLine {
 
                 /** Constructs a Text with the specified max length (for use in a TextTable Column).
                  * @param maxLength max length of this text */
-                public Text(int maxLength) { this.maxLength = maxLength; }
+                public Text(final int maxLength) { this.maxLength = maxLength; }
 
                 /**
                  * Constructs a Text with the specified String, which may contain markup like
                  * {@code @|bg(red),white,underline some text|@}.
                  * @param input the string with markup to parse
                  */
-                public Text(String input) {
+                public Text(final String input) {
                     maxLength = -1;
                     plain.setLength(0);
                     int i = 0;
@@ -4479,7 +4479,7 @@ public class CommandLine {
                             return;
                         }
                         plain.append(input.substring(i, j));
-                        int k = input.indexOf("|@", j);
+                        final int k = input.indexOf("|@", j);
                         if (k == -1) {
                             plain.append(input);
                             length = plain.length();
@@ -4487,35 +4487,35 @@ public class CommandLine {
                         }
 
                         j += 2;
-                        String spec = input.substring(j, k);
-                        String[] items = spec.split(" ", 2);
+                        final String spec = input.substring(j, k);
+                        final String[] items = spec.split(" ", 2);
                         if (items.length == 1) {
                             plain.append(input);
                             length = plain.length();
                             return;
                         }
 
-                        IStyle[] styles = Style.parse(items[0]);
+                        final IStyle[] styles = Style.parse(items[0]);
                         addStyledSection(plain.length(), items[1].length(),
                                 Style.on(styles), Style.off(reverse(styles)) + Style.reset.off());
                         plain.append(items[1]);
                         i = k + 2;
                     }
                 }
-                private void addStyledSection(int start, int length, String startStyle, String endStyle) {
+                private void addStyledSection(final int start, final int length, final String startStyle, final String endStyle) {
                     sections.add(new StyledSection(start, length, startStyle, endStyle));
                 }
                 @Override
                 public Object clone() {
-                    try { return super.clone(); } catch (CloneNotSupportedException e) { throw new IllegalStateException(e); }
+                    try { return super.clone(); } catch (final CloneNotSupportedException e) { throw new IllegalStateException(e); }
                 }
 
                 public Text[] splitLines() {
-                    List<Text> result = new ArrayList<Text>();
+                    final List<Text> result = new ArrayList<Text>();
                     boolean trailingEmptyString = false;
                     int start = 0, end = 0;
                     for (int i = 0; i < plain.length(); i++, end = i) {
-                        char c = plain.charAt(i);
+                        final char c = plain.charAt(i);
                         boolean eol = c == '\n';
                         eol |= (c == '\r' && i + 1 < plain.length() && plain.charAt(i + 1) == '\n' && ++i > 0); // \r\n
                         eol |= c == '\r';
@@ -4534,7 +4534,7 @@ public class CommandLine {
                 /** Returns a new {@code Text} instance that is a substring of this Text. Does not modify this instance!
                  * @param start index in the plain text where to start the substring
                  * @return a new Text instance that is a substring of this Text */
-                public Text substring(int start) {
+                public Text substring(final int start) {
                     return substring(start, length);
                 }
 
@@ -4542,8 +4542,8 @@ public class CommandLine {
                  * @param start index in the plain text where to start the substring
                  * @param end index in the plain text where to end the substring
                  * @return a new Text instance that is a substring of this Text */
-                public Text substring(int start, int end) {
-                    Text result = (Text) clone();
+                public Text substring(final int start, final int end) {
+                    final Text result = (Text) clone();
                     result.from = from + start;
                     result.length = end - start;
                     return result;
@@ -4551,24 +4551,24 @@ public class CommandLine {
                 /** Returns a new {@code Text} instance with the specified text appended. Does not modify this instance!
                  * @param string the text to append
                  * @return a new Text instance */
-                public Text append(String string) {
+                public Text append(final String string) {
                     return append(new Text(string));
                 }
 
                 /** Returns a new {@code Text} instance with the specified text appended. Does not modify this instance!
                  * @param other the text to append
                  * @return a new Text instance */
-                public Text append(Text other) {
-                    Text result = (Text) clone();
+                public Text append(final Text other) {
+                    final Text result = (Text) clone();
                     result.plain = new StringBuilder(plain.toString().substring(from, from + length));
                     result.from = 0;
                     result.sections = new ArrayList<StyledSection>();
-                    for (StyledSection section : sections) {
+                    for (final StyledSection section : sections) {
                         result.sections.add(section.withStartIndex(section.startIndex - from));
                     }
                     result.plain.append(other.plain.toString().substring(other.from, other.from + other.length));
-                    for (StyledSection section : other.sections) {
-                        int index = result.length + section.startIndex - other.from;
+                    for (final StyledSection section : other.sections) {
+                        final int index = result.length + section.startIndex - other.from;
                         result.sections.add(section.withStartIndex(index));
                     }
                     result.length = result.plain.length();
@@ -4582,14 +4582,14 @@ public class CommandLine {
                  * @param destination destination Text to modify
                  * @param offset indentation (padding)
                  */
-                public void getStyledChars(int from, int length, Text destination, int offset) {
+                public void getStyledChars(final int from, final int length, final Text destination, final int offset) {
                     if (destination.length < offset) {
                         for (int i = destination.length; i < offset; i++) {
                             destination.plain.append(' ');
                         }
                         destination.length = offset;
                     }
-                    for (StyledSection section : sections) {
+                    for (final StyledSection section : sections) {
                         destination.sections.add(section.withStartIndex(section.startIndex - from + destination.length));
                     }
                     destination.plain.append(plain.toString().substring(from, from + length));
@@ -4600,7 +4600,7 @@ public class CommandLine {
                 public String plainString() {  return plain.toString().substring(from, from + length); }
 
                 @Override
-                public boolean equals(Object obj) { return toString().equals(String.valueOf(obj)); }
+                public boolean equals(final Object obj) { return toString().equals(String.valueOf(obj)); }
                 @Override
                 public int hashCode() { return toString().hashCode(); }
 
@@ -4613,11 +4613,11 @@ public class CommandLine {
                         return plain.toString().substring(from, from + length);
                     }
                     if (length == 0) { return ""; }
-                    StringBuilder sb = new StringBuilder(plain.length() + 20 * sections.size());
+                    final StringBuilder sb = new StringBuilder(plain.length() + 20 * sections.size());
                     StyledSection current = null;
-                    int end = Math.min(from + length, plain.length());
+                    final int end = Math.min(from + length, plain.length());
                     for (int i = from; i < end; i++) {
-                        StyledSection section = findSectionContaining(i);
+                        final StyledSection section = findSectionContaining(i);
                         if (section != current) {
                             if (current != null) { sb.append(current.endStyles); }
                             if (section != null) { sb.append(section.startStyles); }
@@ -4629,8 +4629,8 @@ public class CommandLine {
                     return sb.toString();
                 }
 
-                private StyledSection findSectionContaining(int index) {
-                    for (StyledSection section : sections) {
+                private StyledSection findSectionContaining(final int index) {
+                    for (final StyledSection section : sections) {
                         if (index >= section.startIndex && index < section.startIndex + section.length) {
                             return section;
                         }
@@ -4652,7 +4652,7 @@ public class CommandLine {
          * @param <T> type of the object to check
          * @return the verified object
          */
-        static <T> T notNull(T object, String description) {
+        static <T> T notNull(final T object, final String description) {
             if (object == null) {
                 throw new NullPointerException(description);
             }
@@ -4661,19 +4661,19 @@ public class CommandLine {
         private Assert() {} // private constructor: never instantiate
     }
     private enum TraceLevel { OFF, WARN, INFO, DEBUG;
-        public boolean isEnabled(TraceLevel other) { return ordinal() >= other.ordinal(); }
-        private void print(Tracer tracer, String msg, Object... params) {
+        public boolean isEnabled(final TraceLevel other) { return ordinal() >= other.ordinal(); }
+        private void print(final Tracer tracer, final String msg, final Object... params) {
             if (tracer.level.isEnabled(this)) { tracer.stream.printf(prefix(msg), params); }
         }
-        private String prefix(String msg) { return "[picocli " + this + "] " + msg; }
-        static TraceLevel lookup(String key) { return key == null ? WARN : empty(key) || "true".equalsIgnoreCase(key) ? INFO : valueOf(key); }
+        private String prefix(final String msg) { return "[picocli " + this + "] " + msg; }
+        static TraceLevel lookup(final String key) { return key == null ? WARN : empty(key) || "true".equalsIgnoreCase(key) ? INFO : valueOf(key); }
     }
     private static class Tracer {
         private final TraceLevel level = TraceLevel.lookup(System.getProperty("picocli.trace"));
         private final PrintStream stream = System.err;
-        void warn (String msg, Object... params) { TraceLevel.WARN.print(this, msg, params); }
-        void info (String msg, Object... params) { TraceLevel.INFO.print(this, msg, params); }
-        void debug(String msg, Object... params) { TraceLevel.DEBUG.print(this, msg, params); }
+        void warn (final String msg, final Object... params) { TraceLevel.WARN.print(this, msg, params); }
+        void info (final String msg, final Object... params) { TraceLevel.INFO.print(this, msg, params); }
+        void debug(final String msg, final Object... params) { TraceLevel.DEBUG.print(this, msg, params); }
         boolean isWarn()  { return level.isEnabled(TraceLevel.WARN); }
         boolean isInfo()  { return level.isEnabled(TraceLevel.INFO); }
         boolean isDebug() { return level.isEnabled(TraceLevel.DEBUG); }
@@ -4682,26 +4682,26 @@ public class CommandLine {
      * @since 2.0 */
     public static class PicocliException extends RuntimeException {
         private static final long serialVersionUID = -2574128880125050818L;
-        public PicocliException(String msg) { super(msg); }
-        public PicocliException(String msg, Exception ex) { super(msg, ex); }
+        public PicocliException(final String msg) { super(msg); }
+        public PicocliException(final String msg, final Exception ex) { super(msg, ex); }
     }
     /** Exception indicating a problem during {@code CommandLine} initialization.
      * @since 2.0 */
     public static class InitializationException extends PicocliException {
         private static final long serialVersionUID = 8423014001666638895L;
-        public InitializationException(String msg) { super(msg); }
-        public InitializationException(String msg, Exception ex) { super(msg, ex); }
+        public InitializationException(final String msg) { super(msg); }
+        public InitializationException(final String msg, final Exception ex) { super(msg, ex); }
     }
     /** Exception indicating a problem while invoking a command or subcommand.
      * @since 2.0 */
     public static class ExecutionException extends PicocliException {
         private static final long serialVersionUID = 7764539594267007998L;
         private final CommandLine commandLine;
-        public ExecutionException(CommandLine commandLine, String msg) {
+        public ExecutionException(final CommandLine commandLine, final String msg) {
             super(msg);
             this.commandLine = Assert.notNull(commandLine, "commandLine");
         }
-        public ExecutionException(CommandLine commandLine, String msg, Exception ex) {
+        public ExecutionException(final CommandLine commandLine, final String msg, final Exception ex) {
             super(msg, ex);
             this.commandLine = Assert.notNull(commandLine, "commandLine");
         }
@@ -4714,7 +4714,7 @@ public class CommandLine {
     /** Exception thrown by {@link ITypeConverter} implementations to indicate a String could not be converted. */
     public static class TypeConversionException extends PicocliException {
         private static final long serialVersionUID = 4251973913816346114L;
-        public TypeConversionException(String msg) { super(msg); }
+        public TypeConversionException(final String msg) { super(msg); }
     }
     /** Exception indicating something went wrong while parsing command line options. */
     public static class ParameterException extends PicocliException {
@@ -4725,7 +4725,7 @@ public class CommandLine {
          * @param commandLine the command or subcommand whose input was invalid
          * @param msg describes the problem
          * @since 2.0 */
-        public ParameterException(CommandLine commandLine, String msg) {
+        public ParameterException(final CommandLine commandLine, final String msg) {
             super(msg);
             this.commandLine = Assert.notNull(commandLine, "commandLine");
         }
@@ -4734,7 +4734,7 @@ public class CommandLine {
          * @param msg describes the problem
          * @param ex the exception that caused this ParameterException
          * @since 2.0 */
-        public ParameterException(CommandLine commandLine, String msg, Exception ex) {
+        public ParameterException(final CommandLine commandLine, final String msg, final Exception ex) {
             super(msg, ex);
             this.commandLine = Assert.notNull(commandLine, "commandLine");
         }
@@ -4745,8 +4745,8 @@ public class CommandLine {
          */
         public CommandLine getCommandLine() { return commandLine; }
 
-        private static ParameterException create(CommandLine cmd, Exception ex, String arg, int i, String[] args) {
-            String msg = ex.getClass().getSimpleName() + ": " + ex.getLocalizedMessage()
+        private static ParameterException create(final CommandLine cmd, final Exception ex, final String arg, final int i, final String[] args) {
+            final String msg = ex.getClass().getSimpleName() + ": " + ex.getLocalizedMessage()
                     + " while processing argument at or before arg[" + i + "] '" + arg + "' in " + Arrays.toString(args) + ": " + ex.toString();
             return new ParameterException(cmd, msg, ex);
         }
@@ -4756,23 +4756,23 @@ public class CommandLine {
      */
     public static class MissingParameterException extends ParameterException {
         private static final long serialVersionUID = 5075678535706338753L;
-        public MissingParameterException(CommandLine commandLine, String msg) {
+        public MissingParameterException(final CommandLine commandLine, final String msg) {
             super(commandLine, msg);
         }
 
-        private static MissingParameterException create(CommandLine cmd, Collection<Field> missing, String separator) {
+        private static MissingParameterException create(final CommandLine cmd, final Collection<Field> missing, final String separator) {
             if (missing.size() == 1) {
                 return new MissingParameterException(cmd, "Missing required option '"
                         + describe(missing.iterator().next(), separator) + "'");
             }
-            List<String> names = new ArrayList<String>(missing.size());
-            for (Field field : missing) {
+            final List<String> names = new ArrayList<String>(missing.size());
+            for (final Field field : missing) {
                 names.add(describe(field, separator));
             }
             return new MissingParameterException(cmd, "Missing required options " + names.toString());
         }
-        private static String describe(Field field, String separator) {
-            String prefix = (field.isAnnotationPresent(Option.class))
+        private static String describe(final Field field, final String separator) {
+            final String prefix = (field.isAnnotationPresent(Option.class))
                 ? field.getAnnotation(Option.class).names()[0] + separator
                 : "params[" + field.getAnnotation(Parameters.class).index() + "]" + separator;
             return prefix + Help.DefaultParamLabelRenderer.renderParameterName(field);
@@ -4784,9 +4784,9 @@ public class CommandLine {
      */
     public static class DuplicateOptionAnnotationsException extends InitializationException {
         private static final long serialVersionUID = -3355128012575075641L;
-        public DuplicateOptionAnnotationsException(String msg) { super(msg); }
+        public DuplicateOptionAnnotationsException(final String msg) { super(msg); }
 
-        private static DuplicateOptionAnnotationsException create(String name, Field field1, Field field2) {
+        private static DuplicateOptionAnnotationsException create(final String name, final Field field1, final Field field2) {
             return new DuplicateOptionAnnotationsException("Option name '" + name + "' is used by both " +
                     field1.getDeclaringClass().getName() + "." + field1.getName() + " and " +
                     field2.getDeclaringClass().getName() + "." + field2.getName());
@@ -4795,25 +4795,25 @@ public class CommandLine {
     /** Exception indicating that there was a gap in the indices of the fields annotated with {@link Parameters}. */
     public static class ParameterIndexGapException extends InitializationException {
         private static final long serialVersionUID = -1520981133257618319L;
-        public ParameterIndexGapException(String msg) { super(msg); }
+        public ParameterIndexGapException(final String msg) { super(msg); }
     }
     /** Exception indicating that a command line argument could not be mapped to any of the fields annotated with
      * {@link Option} or {@link Parameters}. */
     public static class UnmatchedArgumentException extends ParameterException {
         private static final long serialVersionUID = -8700426380701452440L;
-        public UnmatchedArgumentException(CommandLine commandLine, String msg) { super(commandLine, msg); }
-        public UnmatchedArgumentException(CommandLine commandLine, Stack<String> args) { this(commandLine, new ArrayList<String>(reverse(args))); }
-        public UnmatchedArgumentException(CommandLine commandLine, List<String> args) { this(commandLine, "Unmatched argument" + (args.size() == 1 ? " " : "s ") + args); }
+        public UnmatchedArgumentException(final CommandLine commandLine, final String msg) { super(commandLine, msg); }
+        public UnmatchedArgumentException(final CommandLine commandLine, final Stack<String> args) { this(commandLine, new ArrayList<String>(reverse(args))); }
+        public UnmatchedArgumentException(final CommandLine commandLine, final List<String> args) { this(commandLine, "Unmatched argument" + (args.size() == 1 ? " " : "s ") + args); }
     }
     /** Exception indicating that more values were specified for an option or parameter than its {@link Option#arity() arity} allows. */
     public static class MaxValuesforFieldExceededException extends ParameterException {
         private static final long serialVersionUID = 6536145439570100641L;
-        public MaxValuesforFieldExceededException(CommandLine commandLine, String msg) { super(commandLine, msg); }
+        public MaxValuesforFieldExceededException(final CommandLine commandLine, final String msg) { super(commandLine, msg); }
     }
     /** Exception indicating that an option for a single-value option field has been specified multiple times on the command line. */
     public static class OverwrittenOptionException extends ParameterException {
         private static final long serialVersionUID = 1338029208271055776L;
-        public OverwrittenOptionException(CommandLine commandLine, String msg) { super(commandLine, msg); }
+        public OverwrittenOptionException(final CommandLine commandLine, final String msg) { super(commandLine, msg); }
     }
     /**
      * Exception indicating that an annotated field had a type for which no {@link ITypeConverter} was
@@ -4821,6 +4821,6 @@ public class CommandLine {
      */
     public static class MissingTypeConverterException extends ParameterException {
         private static final long serialVersionUID = -6050931703233083760L;
-        public MissingTypeConverterException(CommandLine commandLine, String msg) { super(commandLine, msg); }
+        public MissingTypeConverterException(final CommandLine commandLine, final String msg) { super(commandLine, msg); }
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/AbstractWatcher.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/AbstractWatcher.java
index bdfd316..195ec32 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/AbstractWatcher.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/AbstractWatcher.java
@@ -64,7 +64,7 @@ public abstract class AbstractWatcher implements Watcher {
     public abstract boolean isModified();
 
     @Override
-    public void watching(Source source) {
+    public void watching(final Source source) {
         this.source = source;
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/BasicAuthorizationProvider.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/BasicAuthorizationProvider.java
index d751260..52df233 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/BasicAuthorizationProvider.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/BasicAuthorizationProvider.java
@@ -41,20 +41,20 @@ public class BasicAuthorizationProvider implements AuthorizationProvider {
 
     private String authString = null;
 
-    public BasicAuthorizationProvider(PropertiesUtil props) {
-        String userName = props.getStringProperty(PREFIXES,AUTH_USER_NAME,
+    public BasicAuthorizationProvider(final PropertiesUtil props) {
+        final String userName = props.getStringProperty(PREFIXES,AUTH_USER_NAME,
                 () -> props.getStringProperty(CONFIG_USER_NAME));
         String password = props.getStringProperty(PREFIXES, AUTH_PASSWORD,
                 () -> props.getStringProperty(CONFIG_PASSWORD));
-        String decryptor = props.getStringProperty(PREFIXES, AUTH_PASSWORD_DECRYPTOR,
+        final String decryptor = props.getStringProperty(PREFIXES, AUTH_PASSWORD_DECRYPTOR,
                 () -> props.getStringProperty(PASSWORD_DECRYPTOR));
         if (decryptor != null) {
             try {
-                Object obj = LoaderUtil.newInstanceOf(decryptor);
+                final Object obj = LoaderUtil.newInstanceOf(decryptor);
                 if (obj instanceof PasswordDecryptor) {
                     password = ((PasswordDecryptor) obj).decryptPassword(password);
                 }
-            } catch (Exception ex) {
+            } catch (final Exception ex) {
                 LOGGER.warn("Unable to decrypt password.", ex);
             }
         }
@@ -64,7 +64,7 @@ public class BasicAuthorizationProvider implements AuthorizationProvider {
     }
 
     @Override
-    public void addAuthorization(URLConnection urlConnection) {
+    public void addAuthorization(final URLConnection urlConnection) {
         if (authString != null) {
             urlConnection.setRequestProperty("Authorization", authString);
         }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/DefaultShutdownCallbackRegistry.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/DefaultShutdownCallbackRegistry.java
index e2bf8b5..749f367 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/DefaultShutdownCallbackRegistry.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/DefaultShutdownCallbackRegistry.java
@@ -73,7 +73,7 @@ public class DefaultShutdownCallbackRegistry implements ShutdownCallbackRegistry
     public void run() {
         if (state.compareAndSet(State.STARTED, State.STOPPING)) {
             for (final Reference<Cancellable> hookRef : hooks) {
-                Cancellable hook = hookRef.get();
+                final Cancellable hook = hookRef.get();
                 if (hook != null) {
                     try {
                         hook.run();
@@ -103,11 +103,11 @@ public class DefaultShutdownCallbackRegistry implements ShutdownCallbackRegistry
         @Override
         public void cancel() {
             callback = null;
-            Collection<Reference<Cancellable>> references = registered;
+            final Collection<Reference<Cancellable>> references = registered;
             if (references != null) {
                 registered = null;
                 references.removeIf(ref -> {
-                    Cancellable value = ref.get();
+                    final Cancellable value = ref.get();
                     return value == null || value == RegisteredCancellable.this;
                 });
             }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/FileUtils.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/FileUtils.java
index a50a20d..19bf93d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/FileUtils.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/FileUtils.java
@@ -64,7 +64,7 @@ public final class FileUtils {
             if (JBOSS_FILE.equals(uri.getScheme())) try {
                 // patch the scheme
                 uri = new URI(PROTOCOL_FILE, uri.getSchemeSpecificPart(), uri.getFragment());
-            } catch (URISyntaxException use) {
+            } catch (final URISyntaxException use) {
                 // should not happen, ignore
             }
             try {
@@ -75,7 +75,7 @@ public final class FileUtils {
                 LOGGER.warn("Invalid URI {}", uri);
             }
         } else {
-            File file = new File(uri.toString());
+            final File file = new File(uri.toString());
             try {
                 if (file.exists()) {
                     return file;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Loader.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Loader.java
index 75baa4a..f3f182f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Loader.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Loader.java
@@ -287,7 +287,7 @@ public final class Loader {
         throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException,
         IllegalAccessException {
         final String className = PropertiesUtil.getProperties().getStringProperty(propertyName);
-        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+        final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
         try {
             Thread.currentThread().setContextClassLoader(getClassLoader());
             return LoaderUtil.newCheckedInstanceOfProperty(propertyName, clazz);
@@ -323,7 +323,7 @@ public final class Loader {
      * @return {@code true} if the class could be found or {@code false} otherwise.
      */
     public static boolean isClassAvailable(final String className) {
-        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+        final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
         try {
             Thread.currentThread().setContextClassLoader(getClassLoader());
             return LoaderUtil.isClassAvailable(className);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java
index 195dbff..d075aab 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java
@@ -128,7 +128,7 @@ public final class NetUtils {
     public static String getMacAddressString() {
         final byte[] macAddr = getMacAddress();
         if (!ArrayUtils.isEmpty(macAddr)) {
-            StringBuilder sb = new StringBuilder(String.format("%02x", macAddr[0]));
+            final StringBuilder sb = new StringBuilder(String.format("%02x", macAddr[0]));
             for (int i = 1; i < macAddr.length; ++i) {
                 sb.append(":").append(String.format("%02x", macAddr[i]));
             }
@@ -158,7 +158,7 @@ public final class NetUtils {
             try {
                 final URL url = new URL(path);
                 return new URI(url.getProtocol(), url.getHost(), url.getPath(), null);
-            } catch (MalformedURLException | URISyntaxException nestedEx) {
+            } catch (final MalformedURLException | URISyntaxException nestedEx) {
                 return new File(path).toURI();
             }
         }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/OptionConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/OptionConverter.java
index eacd715..b442576 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/OptionConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/OptionConverter.java
@@ -156,14 +156,14 @@ public final class OptionConverter {
         return defaultValue;
     }
 
-    public static Level toLevel(String value, Level defaultValue) {
+    public static Level toLevel(String value, final Level defaultValue) {
         if(value == null) {
             return defaultValue;
         }
 
         value = value.trim();
 
-        int hashIndex = value.indexOf('#');
+        final int hashIndex = value.indexOf('#');
         if (hashIndex == -1) {
             if("NULL".equalsIgnoreCase(value)) {
                 return null;
@@ -175,8 +175,8 @@ public final class OptionConverter {
 
         Level result = defaultValue;
 
-        String clazz = value.substring(hashIndex+1);
-        String levelName = value.substring(0, hashIndex);
+        final String clazz = value.substring(hashIndex+1);
+        final String levelName = value.substring(0, hashIndex);
 
         // This is degenerate case but you never know.
         if("NULL".equalsIgnoreCase(levelName)) {
@@ -187,36 +187,36 @@ public final class OptionConverter {
                 + ":pri=[" + levelName + "]");
 
         try {
-            Class customLevel = Loader.loadClass(clazz);
+            final Class customLevel = Loader.loadClass(clazz);
 
             // get a ref to the specified class' static method
             // toLevel(String, org.apache.log4j.Level)
-            Class[] paramTypes = new Class[] { String.class, Level.class
+            final Class[] paramTypes = new Class[] { String.class, Level.class
             };
-            java.lang.reflect.Method toLevelMethod =
+            final java.lang.reflect.Method toLevelMethod =
                     customLevel.getMethod("toLevel", paramTypes);
 
             // now call the toLevel method, passing level string + default
-            Object[] params = new Object[] {levelName, defaultValue};
-            Object o = toLevelMethod.invoke(null, params);
+            final Object[] params = new Object[] {levelName, defaultValue};
+            final Object o = toLevelMethod.invoke(null, params);
 
             result = (Level) o;
-        } catch(ClassNotFoundException e) {
+        } catch(final ClassNotFoundException e) {
             LOGGER.warn("custom level class [" + clazz + "] not found.");
-        } catch(NoSuchMethodException e) {
+        } catch(final NoSuchMethodException e) {
             LOGGER.warn("custom level class [" + clazz + "]"
                     + " does not have a class function toLevel(String, Level)", e);
-        } catch(java.lang.reflect.InvocationTargetException e) {
+        } catch(final java.lang.reflect.InvocationTargetException e) {
             if (e.getTargetException() instanceof InterruptedException
                     || e.getTargetException() instanceof InterruptedIOException) {
                 Thread.currentThread().interrupt();
             }
             LOGGER.warn("custom level class [" + clazz + "]" + " could not be instantiated", e);
-        } catch(ClassCastException e) {
+        } catch(final ClassCastException e) {
             LOGGER.warn("class [" + clazz + "] is not a subclass of org.apache.log4j.Level", e);
-        } catch(IllegalAccessException e) {
+        } catch(final IllegalAccessException e) {
             LOGGER.warn("class ["+clazz+ "] cannot be instantiated due to access restrictions", e);
-        } catch(RuntimeException e) {
+        } catch(final RuntimeException e) {
             LOGGER.warn("class ["+clazz+"], level [" + levelName + "] conversion failed.", e);
         }
         return result;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/ProcessIdUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/ProcessIdUtil.java
index 2579350..22b7fa4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/ProcessIdUtil.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/ProcessIdUtil.java
@@ -30,13 +30,13 @@ public class ProcessIdUtil {
     public static String getProcessId() {
         try {
             // LOG4J2-2126 use reflection to improve compatibility with Android Platform which does not support JMX extensions
-            Class<?> managementFactoryClass = Class.forName("java.lang.management.ManagementFactory");
-            Method getRuntimeMXBean = managementFactoryClass.getDeclaredMethod("getRuntimeMXBean");
-            Class<?> runtimeMXBeanClass = Class.forName("java.lang.management.RuntimeMXBean");
-            Method getName = runtimeMXBeanClass.getDeclaredMethod("getName");
+            final Class<?> managementFactoryClass = Class.forName("java.lang.management.ManagementFactory");
+            final Method getRuntimeMXBean = managementFactoryClass.getDeclaredMethod("getRuntimeMXBean");
+            final Class<?> runtimeMXBeanClass = Class.forName("java.lang.management.RuntimeMXBean");
+            final Method getName = runtimeMXBeanClass.getDeclaredMethod("getName");
 
-            Object runtimeMXBean = getRuntimeMXBean.invoke(null);
-            String name = (String) getName.invoke(runtimeMXBean);
+            final Object runtimeMXBean = getRuntimeMXBean.invoke(null);
+            final String name = (String) getName.invoke(runtimeMXBean);
             //String name = ManagementFactory.getRuntimeMXBean().getName(); //JMX not allowed on Android
             return name.split("@")[0]; // likely works on most platforms
         } catch (final Exception ex) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Source.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Source.java
index a13fa65..a870209 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Source.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Source.java
@@ -40,7 +40,7 @@ public class Source {
      * Constructs a Source from a ConfigurationSource.
      * @param source The ConfigurationSource.
      */
-    public Source(ConfigurationSource source) {
+    public Source(final ConfigurationSource source) {
         this.file = source.getFile();
         this.uri = source.getURI();
         this.location = source.getLocation();
@@ -105,14 +105,14 @@ public class Source {
     }
 
     @Override
-    public boolean equals(Object o) {
+    public boolean equals(final Object o) {
         if (this == o) {
             return true;
         }
         if (!(o instanceof Source)) {
             return false;
         }
-        Source source = (Source) o;
+        final Source source = (Source) o;
         return Objects.equals(location, source.location);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java
index a56706a..32e619e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java
@@ -86,7 +86,7 @@ public final class UuidUtil {
         final ByteBuffer buf = ByteBuffer.wrap(node);
         long rand = INITIAL_UUID_SEQNO;
         String assigned = PropertiesUtil.getProperties().getStringProperty(ASSIGNED_SEQUENCES);
-        long[] sequences;
+        final long[] sequences;
         if (assigned == null) {
             sequences = new long[0];
         } else {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WatchManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WatchManager.java
index 41de183..1f4acdb 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WatchManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WatchManager.java
@@ -157,7 +157,7 @@ public class WatchManager extends AbstractLifeCycle {
     }
 
     private List<WatchEventService> getEventServices() {
-        List<WatchEventService> list = new ArrayList<>();
+        final List<WatchEventService> list = new ArrayList<>();
         for (final ClassLoader classLoader : LoaderUtil.getClassLoaders()) {
             try {
                 final ServiceLoader<WatchEventService> serviceLoader =
@@ -193,7 +193,7 @@ public class WatchManager extends AbstractLifeCycle {
      */
     public Map<File, FileWatcher> getWatchers() {
         final Map<File, FileWatcher> map = new HashMap<>(watchers.size());
-        for (Map.Entry<Source, ConfigurationMonitor> entry : watchers.entrySet()) {
+        for (final Map.Entry<Source, ConfigurationMonitor> entry : watchers.entrySet()) {
             if (entry.getValue().getWatcher() instanceof ConfigurationFileWatcher) {
                 map.put(entry.getKey().getFile(), (FileWatcher) entry.getValue().getWatcher());
             } else {
@@ -243,7 +243,7 @@ public class WatchManager extends AbstractLifeCycle {
         if (file == null) {
             return;
         }
-        Source source = new Source(file);
+        final Source source = new Source(file);
         reset(source);
     }
 
@@ -264,7 +264,7 @@ public class WatchManager extends AbstractLifeCycle {
         }
         final ConfigurationMonitor monitor = watchers.get(source);
         if (monitor != null) {
-            Watcher watcher = monitor.getWatcher();
+            final Watcher watcher = monitor.getWatcher();
             if (watcher.isModified()) {
                 final long lastModifiedMillis = watcher.getLastModified();
                 if (logger.isDebugEnabled()) {
@@ -296,7 +296,7 @@ public class WatchManager extends AbstractLifeCycle {
             future = scheduler.scheduleWithFixedDelay(new WatchRunnable(), intervalSeconds, intervalSeconds,
                     TimeUnit.SECONDS);
         }
-        for (WatchEventService service : eventServiceList) {
+        for (final WatchEventService service : eventServiceList) {
             service.subscribe(this);
         }
     }
@@ -304,7 +304,7 @@ public class WatchManager extends AbstractLifeCycle {
     @Override
     public boolean stop(final long timeout, final TimeUnit timeUnit) {
         setStopping();
-        for (WatchEventService service : eventServiceList) {
+        for (final WatchEventService service : eventServiceList) {
             service.unsubscribe(this);
         }
         final boolean stopped = stop(future);
@@ -337,7 +337,7 @@ public class WatchManager extends AbstractLifeCycle {
      * @since 2.11.0
      */
     public void unwatchFile(final File file) {
-        Source source = new Source(file);
+        final Source source = new Source(file);
         unwatch(source);
     }
 
@@ -363,13 +363,13 @@ public class WatchManager extends AbstractLifeCycle {
      * @param fileWatcher the watcher to notify of file changes.
      */
     public void watchFile(final File file, final FileWatcher fileWatcher) {
-        Watcher watcher;
+        final Watcher watcher;
         if (fileWatcher instanceof Watcher) {
             watcher = (Watcher) fileWatcher;
         } else {
             watcher = new WrappedFileWatcher(fileWatcher);
         }
-        Source source = new Source(file);
+        final Source source = new Source(file);
         watch(source, watcher);
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WatcherFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WatcherFactory.java
index 31acd5a..cd4ec28 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WatcherFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WatcherFactory.java
@@ -43,12 +43,12 @@ public class WatcherFactory {
 
     private final Map<String, PluginType<?>> plugins;
 
-    private WatcherFactory(List<String> packages) {
+    private WatcherFactory(final List<String> packages) {
         pluginManager.collectPlugins(packages);
         plugins = pluginManager.getPlugins();
     }
 
-    public static WatcherFactory getInstance(List<String> packages) {
+    public static WatcherFactory getInstance(final List<String> packages) {
         if (factory == null) {
             synchronized (pluginManager) {
                 if (factory == null) {
@@ -59,14 +59,14 @@ public class WatcherFactory {
         return factory;
     }
 
-    public Watcher newWatcher(Source source, final Configuration configuration, final Reconfigurable reconfigurable,
-        final List<ConfigurationListener> configurationListeners, long lastModifiedMillis) {
+    public Watcher newWatcher(final Source source, final Configuration configuration, final Reconfigurable reconfigurable,
+                              final List<ConfigurationListener> configurationListeners, final long lastModifiedMillis) {
         if (source.getFile() != null) {
             return new ConfigurationFileWatcher(configuration, reconfigurable, configurationListeners,
                 lastModifiedMillis);
         } else {
-            String name = source.getURI().getScheme();
-            PluginType<?> pluginType = plugins.get(name);
+            final String name = source.getURI().getScheme();
+            final PluginType<?> pluginType = plugins.get(name);
             if (pluginType != null) {
                 return instantiate(name, pluginType.getPluginClass().asSubclass(Watcher.class), configuration,
                     reconfigurable, configurationListeners, lastModifiedMillis);
@@ -76,15 +76,15 @@ public class WatcherFactory {
         }
     }
 
-    public static <T extends Watcher> T instantiate(String name, final Class<T> clazz,
-        final Configuration configuration, final Reconfigurable reconfigurable,
-        final List<ConfigurationListener> listeners, long lastModifiedMillis) {
+    public static <T extends Watcher> T instantiate(final String name, final Class<T> clazz,
+                                                    final Configuration configuration, final Reconfigurable reconfigurable,
+                                                    final List<ConfigurationListener> listeners, final long lastModifiedMillis) {
         Objects.requireNonNull(clazz, "No class provided");
         try {
-            Constructor<T> constructor = clazz
+            final Constructor<T> constructor = clazz
                 .getConstructor(Configuration.class, Reconfigurable.class, List.class, long.class);
             return constructor.newInstance(configuration, reconfigurable, listeners, lastModifiedMillis);
-        } catch (NoSuchMethodException ex) {
+        } catch (final NoSuchMethodException ex) {
             throw new IllegalArgumentException("No valid constructor for Watcher plugin " + name, ex);
         } catch (final LinkageError | InstantiationException e) {
             // LOG4J2-1051
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WrappedFileWatcher.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WrappedFileWatcher.java
index 54933b2..f5c5817 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WrappedFileWatcher.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/WrappedFileWatcher.java
@@ -32,16 +32,16 @@ public class WrappedFileWatcher extends AbstractWatcher implements FileWatcher {
     private final FileWatcher watcher;
     private volatile long lastModifiedMillis;
 
-    public WrappedFileWatcher(FileWatcher watcher, final Configuration configuration,
-        final Reconfigurable reconfigurable, final List<ConfigurationListener> configurationListeners,
-        final long lastModifiedMillis) {
+    public WrappedFileWatcher(final FileWatcher watcher, final Configuration configuration,
+                              final Reconfigurable reconfigurable, final List<ConfigurationListener> configurationListeners,
+                              final long lastModifiedMillis) {
         super(configuration, reconfigurable, configurationListeners);
         this.watcher = watcher;
         this.lastModifiedMillis = lastModifiedMillis;
     }
 
 
-    public WrappedFileWatcher(FileWatcher watcher) {
+    public WrappedFileWatcher(final FileWatcher watcher) {
         super(null, null, null);
         this.watcher = watcher;
     }
@@ -51,13 +51,13 @@ public class WrappedFileWatcher extends AbstractWatcher implements FileWatcher {
     }
 
     @Override
-    public void fileModified(File file) {
+    public void fileModified(final File file) {
         watcher.fileModified(file);
     }
 
     @Override
     public boolean isModified() {
-        long lastModified = getSource().getFile().lastModified();
+        final long lastModified = getSource().getFile().lastModified();
         if (lastModifiedMillis != lastModified) {
             lastModifiedMillis = lastModified;
             return true;
@@ -84,15 +84,15 @@ public class WrappedFileWatcher extends AbstractWatcher implements FileWatcher {
     }
 
     @Override
-    public void watching(Source source) {
+    public void watching(final Source source) {
         lastModifiedMillis = source.getFile().lastModified();
         super.watching(source);
     }
 
     @Override
     public Watcher newWatcher(final Reconfigurable reconfigurable, final List<ConfigurationListener> listeners,
-        long lastModifiedMillis) {
-        WrappedFileWatcher watcher = new WrappedFileWatcher(this.watcher, getConfiguration(), reconfigurable, listeners,
+           final long lastModifiedMillis) {
+        final WrappedFileWatcher watcher = new WrappedFileWatcher(this.watcher, getConfiguration(), reconfigurable, listeners,
             lastModifiedMillis);
         if (getSource() != null) {
             watcher.watching(getSource());
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FastDateFormat.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FastDateFormat.java
index 691b268..4b728f3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FastDateFormat.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FastDateFormat.java
@@ -103,7 +103,7 @@ public class FastDateFormat extends Format implements DateParser, DatePrinter {
         return new FastDateFormat(org.apache.logging.log4j.core.time.internal.format.FastDateFormat.getDateTimeInstance(dateStyle, timeStyle, timeZone, locale));
     }
 
-    private FastDateFormat(org.apache.logging.log4j.core.time.internal.format.FastDateFormat formatter) {
+    private FastDateFormat(final org.apache.logging.log4j.core.time.internal.format.FastDateFormat formatter) {
         this.formatter = formatter;
     }