You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2020/11/24 16:28:42 UTC

[commons-scxml] 02/02: Use final.

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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-scxml.git

commit 1aadd58a9f167acc39236f10a84cbb058e8eefc2
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Nov 24 11:28:33 2020 -0500

    Use final.
---
 .../commons/scxml2/ActionExecutionContext.java     |   4 +-
 .../apache/commons/scxml2/EvaluatorFactory.java    |  12 +-
 .../commons/scxml2/NotificationRegistry.java       |  16 +-
 .../java/org/apache/commons/scxml2/SCInstance.java |  34 +--
 .../scxml2/SCInstanceObjectInputStream.java        |   6 +-
 .../commons/scxml2/SCXMLExecutionContext.java      |  42 ++--
 .../org/apache/commons/scxml2/SCXMLExecutor.java   |  30 +--
 .../apache/commons/scxml2/SCXMLSystemContext.java  |   4 +-
 .../java/org/apache/commons/scxml2/Status.java     |   6 +-
 .../org/apache/commons/scxml2/TriggerEvent.java    |   4 +-
 .../commons/scxml2/env/AbstractBaseEvaluator.java  |  18 +-
 .../commons/scxml2/env/AbstractStateMachine.java   |  12 +-
 .../commons/scxml2/env/EffectiveContextMap.java    |   6 +-
 .../org/apache/commons/scxml2/env/LogUtils.java    |   4 +-
 .../apache/commons/scxml2/env/SimpleContext.java   |   2 +-
 .../commons/scxml2/env/SimpleDispatcher.java       |  10 +-
 .../commons/scxml2/env/SimpleErrorReporter.java    |  22 +-
 .../commons/scxml2/env/SimpleSCXMLListener.java    |   2 +-
 .../org/apache/commons/scxml2/env/URLResolver.java |   4 +-
 .../commons/scxml2/env/groovy/GroovyContext.java   |  16 +-
 .../scxml2/env/groovy/GroovyContextBinding.java    |  16 +-
 .../commons/scxml2/env/groovy/GroovyEvaluator.java |  20 +-
 .../env/groovy/GroovyExtendableScriptCache.java    |  40 +--
 .../scxml2/env/groovy/GroovySCXMLScript.java       |   6 +-
 .../commons/scxml2/env/javascript/JSBindings.java  |  18 +-
 .../commons/scxml2/env/javascript/JSEvaluator.java |  24 +-
 .../commons/scxml2/env/jexl/JexlEvaluator.java     |  18 +-
 .../scxml2/env/minimal/MinimalEvaluator.java       |   4 +-
 .../commons/scxml2/invoke/SimpleSCXMLInvoker.java  |   8 +-
 .../apache/commons/scxml2/io/ContentParser.java    |  16 +-
 .../org/apache/commons/scxml2/io/ModelUpdater.java |  74 +++---
 .../org/apache/commons/scxml2/io/SCXMLReader.java  | 274 ++++++++++-----------
 .../org/apache/commons/scxml2/io/SCXMLWriter.java  |  94 +++----
 .../org/apache/commons/scxml2/model/Assign.java    |   8 +-
 .../org/apache/commons/scxml2/model/Cancel.java    |  10 +-
 .../apache/commons/scxml2/model/CustomAction.java  |   8 +-
 .../org/apache/commons/scxml2/model/ElseIf.java    |   2 +-
 .../commons/scxml2/model/EnterableState.java       |   2 +-
 .../org/apache/commons/scxml2/model/Final.java     |  16 +-
 .../org/apache/commons/scxml2/model/Foreach.java   |  20 +-
 .../java/org/apache/commons/scxml2/model/If.java   |  12 +-
 .../org/apache/commons/scxml2/model/Invoke.java    |  20 +-
 .../java/org/apache/commons/scxml2/model/Log.java  |   6 +-
 .../commons/scxml2/model/PayloadBuilder.java       |  14 +-
 .../org/apache/commons/scxml2/model/Raise.java     |   4 +-
 .../org/apache/commons/scxml2/model/SCXML.java     |   8 +-
 .../org/apache/commons/scxml2/model/Script.java    |   6 +-
 .../java/org/apache/commons/scxml2/model/Send.java |  22 +-
 .../commons/scxml2/model/SimpleTransition.java     |   8 +-
 .../org/apache/commons/scxml2/model/State.java     |   4 +-
 .../apache/commons/scxml2/model/Transition.java    |   4 +-
 .../commons/scxml2/model/TransitionTarget.java     |   8 +-
 .../commons/scxml2/model/TransitionalState.java    |   8 +-
 .../java/org/apache/commons/scxml2/model/Var.java  |  10 +-
 .../scxml2/semantics/SCXMLSemanticsImpl.java       | 210 ++++++++--------
 .../org/apache/commons/scxml2/semantics/Step.java  |   2 +-
 .../scxml2/test/StandaloneJexlExpressions.java     |   2 +-
 .../commons/scxml2/test/StandaloneUtils.java       |  28 +--
 .../org/apache/commons/scxml2/EventDataTest.java   |  24 +-
 .../org/apache/commons/scxml2/SCInstanceTest.java  |  46 ++--
 .../apache/commons/scxml2/SCXMLExecutorTest.java   |  72 +++---
 .../org/apache/commons/scxml2/SCXMLTestHelper.java |  86 +++----
 .../java/org/apache/commons/scxml2/StatusTest.java |  18 +-
 .../org/apache/commons/scxml2/TieBreakerTest.java  |  22 +-
 .../org/apache/commons/scxml2/WildcardTest.java    |   4 +-
 .../org/apache/commons/scxml2/WizardsTest.java     |  10 +-
 .../scxml2/env/AbstractSCXMLListenerTest.java      |  22 +-
 .../scxml2/env/AbstractStateMachineTest.java       |   8 +-
 .../apache/commons/scxml2/env/LogUtilsTest.java    |  14 +-
 .../commons/scxml2/env/MockErrorReporter.java      |   8 +-
 .../commons/scxml2/env/SimpleContextTest.java      |  58 ++---
 .../org/apache/commons/scxml2/env/StopWatch.java   |   6 +-
 .../commons/scxml2/env/StopWatchDisplay.java       |  24 +-
 .../scxml2/env/groovy/GroovyClosureTest.java       |   8 +-
 .../scxml2/env/groovy/GroovyContextTest.java       |  12 +-
 .../scxml2/env/groovy/GroovyEvaluatorTest.java     |  22 +-
 .../groovy/SerializableInitialBaseScriptTest.java  |   2 +-
 .../scxml2/env/groovy/StaticMethodTest.java        |   4 +-
 .../scxml2/env/javascript/JSEvaluatorTest.java     |  22 +-
 .../scxml2/env/javascript/JSExampleTest.java       |  10 +-
 .../env/javascript/JavaScriptEngineTest.java       |   6 +-
 .../commons/scxml2/env/jexl/ForeachTest.java       |   2 +-
 .../commons/scxml2/env/jexl/JexlContextTest.java   |   8 +-
 .../commons/scxml2/env/jexl/JexlEvaluatorTest.java |  10 +-
 .../commons/scxml2/env/jexl/StaticMethodTest.java  |   4 +-
 .../commons/scxml2/invoke/InvokeParamNameTest.java |  10 +-
 .../apache/commons/scxml2/invoke/InvokeTest.java   |  22 +-
 .../commons/scxml2/io/ContentParserTest.java       |  12 +-
 .../apache/commons/scxml2/io/SCXMLReaderTest.java  |  78 +++---
 .../scxml2/io/SCXMLRequiredAttributesTest.java     |  26 +-
 .../apache/commons/scxml2/io/SCXMLWriterTest.java  |  36 +--
 .../org/apache/commons/scxml2/io/StateSrcTest.java |   6 +-
 .../apache/commons/scxml2/issues/Issue112Test.java |  12 +-
 .../apache/commons/scxml2/issues/Issue62Test.java  |  12 +-
 .../apache/commons/scxml2/issues/Issue64Test.java  |   4 +-
 .../apache/commons/scxml2/model/ActionTest.java    |  30 +--
 .../apache/commons/scxml2/model/ActionsTest.java   |  10 +-
 .../apache/commons/scxml2/model/AssignTest.java    |   8 +-
 .../apache/commons/scxml2/model/CancelTest.java    |   4 +-
 .../commons/scxml2/model/CustomActionTest.java     |  36 +--
 .../apache/commons/scxml2/model/DatamodelTest.java |  22 +-
 .../org/apache/commons/scxml2/model/Hello.java     |   6 +-
 .../apache/commons/scxml2/model/HistoryTest.java   |  20 +-
 .../apache/commons/scxml2/model/ParallelTest.java  |   6 +-
 .../apache/commons/scxml2/model/ScriptTest.java    |   8 +-
 .../scxml2/model/ScxmlInitialAttributeTest.java    |  12 +-
 .../org/apache/commons/scxml2/model/SendTest.java  |   6 +-
 .../org/apache/commons/scxml2/model/StateTest.java |  54 ++--
 .../commons/scxml2/model/StatelessModelTest.java   |  32 +--
 .../commons/scxml2/model/TransitionTargetTest.java |  18 +-
 .../commons/scxml2/model/TransitionTest.java       |   2 +-
 .../scxml2/semantics/SCXMLSemanticsImplTest.java   |  32 +--
 .../org/apache/commons/scxml2/w3c/W3CTests.java    |  50 ++--
 113 files changed, 1207 insertions(+), 1207 deletions(-)

diff --git a/src/main/java/org/apache/commons/scxml2/ActionExecutionContext.java b/src/main/java/org/apache/commons/scxml2/ActionExecutionContext.java
index 96c6d1b..b402c75 100644
--- a/src/main/java/org/apache/commons/scxml2/ActionExecutionContext.java
+++ b/src/main/java/org/apache/commons/scxml2/ActionExecutionContext.java
@@ -35,7 +35,7 @@ public class ActionExecutionContext {
      * Constructor
      * @param exctx The SCXML execution context this action execution context belongs to
      */
-    public ActionExecutionContext(SCXMLExecutionContext exctx) {
+    public ActionExecutionContext(final SCXMLExecutionContext exctx) {
         this.exctx = exctx;
     }
 
@@ -57,7 +57,7 @@ public class ActionExecutionContext {
      * @param state an EnterableState
      * @return Returns the context for an EnterableState
      */
-    public Context getContext(EnterableState state) {
+    public Context getContext(final EnterableState state) {
         return exctx.getScInstance().getContext(state);
     }
 
diff --git a/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java b/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java
index 49f71b4..3886f95 100644
--- a/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java
+++ b/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java
@@ -66,7 +66,7 @@ public class EvaluatorFactory {
         providers.put(DEFAULT_DATA_MODEL, providers.get(JexlEvaluator.SUPPORTED_DATA_MODEL));
     }
 
-    public static void setDefaultProvider(EvaluatorProvider defaultProvider) {
+    public static void setDefaultProvider(final EvaluatorProvider defaultProvider) {
         INSTANCE.providers.put(DEFAULT_DATA_MODEL, defaultProvider);
     }
 
@@ -76,17 +76,17 @@ public class EvaluatorFactory {
     }
 
     @SuppressWarnings("unused")
-    public static EvaluatorProvider getEvaluatorProvider(String datamodelName) {
+    public static EvaluatorProvider getEvaluatorProvider(final String datamodelName) {
         return INSTANCE.providers.get(datamodelName == null ? DEFAULT_DATA_MODEL : datamodelName);
     }
 
     @SuppressWarnings("unused")
-    public static void registerEvaluatorProvider(EvaluatorProvider provider) {
+    public static void registerEvaluatorProvider(final EvaluatorProvider provider) {
         INSTANCE.providers.put(provider.getSupportedDatamodel(), provider);
     }
 
     @SuppressWarnings("unused")
-    public static void unregisterEvaluatorProvider(String datamodelName) {
+    public static void unregisterEvaluatorProvider(final String datamodelName) {
         INSTANCE.providers.remove(datamodelName == null ? DEFAULT_DATA_MODEL : datamodelName);
     }
 
@@ -98,8 +98,8 @@ public class EvaluatorFactory {
      * @throws ModelException If the SCXML document datamodel is not supported.
      */
     public static Evaluator getEvaluator(final SCXML document) throws ModelException {
-        String datamodelName = document != null ? document.getDatamodelName() : null;
-        EvaluatorProvider provider = INSTANCE.providers.get(datamodelName == null ? DEFAULT_DATA_MODEL : datamodelName);
+        final String datamodelName = document != null ? document.getDatamodelName() : null;
+        final EvaluatorProvider provider = INSTANCE.providers.get(datamodelName == null ? DEFAULT_DATA_MODEL : datamodelName);
         if (provider == null) {
             throw new ModelException("Unsupported SCXML document datamodel \""+(datamodelName)+"\"");
         }
diff --git a/src/main/java/org/apache/commons/scxml2/NotificationRegistry.java b/src/main/java/org/apache/commons/scxml2/NotificationRegistry.java
index 34291ea..01583ac 100644
--- a/src/main/java/org/apache/commons/scxml2/NotificationRegistry.java
+++ b/src/main/java/org/apache/commons/scxml2/NotificationRegistry.java
@@ -57,7 +57,7 @@ public final class NotificationRegistry {
      */
     synchronized void addListener(final Observable source, final SCXMLListener lst) {
         if (source != null && source.getObservableId() != null) {
-            Set<SCXMLListener> entries = regs.computeIfAbsent(source.getObservableId(), k -> new LinkedHashSet<>());
+            final Set<SCXMLListener> entries = regs.computeIfAbsent(source.getObservableId(), k -> new LinkedHashSet<>());
             entries.add(lst);
         }
     }
@@ -70,7 +70,7 @@ public final class NotificationRegistry {
      */
     synchronized void removeListener(final Observable source, final SCXMLListener lst) {
         if (source != null && source.getObservableId() != null) {
-            Set<SCXMLListener> entries = regs.get(source.getObservableId());
+            final Set<SCXMLListener> entries = regs.get(source.getObservableId());
             if (entries != null) {
                 entries.remove(lst);
                 if (entries.size() == 0) {
@@ -90,9 +90,9 @@ public final class NotificationRegistry {
     public synchronized void fireOnEntry(final Observable source,
             final EnterableState state) {
         if (source != null && source.getObservableId() != null) {
-            Set<SCXMLListener> entries = regs.get(source.getObservableId());
+            final Set<SCXMLListener> entries = regs.get(source.getObservableId());
             if (entries != null) {
-                for (SCXMLListener lst : entries) {
+                for (final SCXMLListener lst : entries) {
                     lst.onEntry(state);
                 }
             }
@@ -109,9 +109,9 @@ public final class NotificationRegistry {
     public synchronized void fireOnExit(final Observable source,
             final EnterableState state) {
         if (source != null && source.getObservableId() != null) {
-            Set<SCXMLListener> entries = regs.get(source.getObservableId());
+            final Set<SCXMLListener> entries = regs.get(source.getObservableId());
             if (entries != null) {
-                for (SCXMLListener lst : entries) {
+                for (final SCXMLListener lst : entries) {
                     lst.onExit(state);
                 }
             }
@@ -131,9 +131,9 @@ public final class NotificationRegistry {
             final TransitionTarget from, final TransitionTarget to,
             final Transition transition, final String event) {
         if (source != null && source.getObservableId() != null) {
-            Set<SCXMLListener> entries = regs.get(source.getObservableId());
+            final Set<SCXMLListener> entries = regs.get(source.getObservableId());
             if (entries != null) {
-                for (SCXMLListener lst : entries) {
+                for (final SCXMLListener lst : entries) {
                     lst.onTransition(from, to, transition, event);
                 }
             }
diff --git a/src/main/java/org/apache/commons/scxml2/SCInstance.java b/src/main/java/org/apache/commons/scxml2/SCInstance.java
index d29291b..f417e6a 100644
--- a/src/main/java/org/apache/commons/scxml2/SCInstance.java
+++ b/src/main/java/org/apache/commons/scxml2/SCInstance.java
@@ -180,12 +180,12 @@ public class SCInstance implements Serializable {
     protected void initializeDatamodel(final Map<String, Object> data) {
         if (globalContext == null) {
             // Clone root datamodel
-            Datamodel rootdm = stateMachine.getDatamodel();
+            final Datamodel rootdm = stateMachine.getDatamodel();
             cloneDatamodel(rootdm, getGlobalContext(), evaluator, errorReporter);
 
             // initialize/override global context data
             if (data != null) {
-                for (String key : data.keySet()) {
+                for (final String key : data.keySet()) {
                     if (globalContext.has(key)) {
                         globalContext.set(key, data.get(key));
                     }
@@ -193,7 +193,7 @@ public class SCInstance implements Serializable {
             }
             if (stateMachine.isLateBinding() == null || Boolean.FALSE.equals(stateMachine.isLateBinding())) {
                 // early binding
-                for (EnterableState es : stateMachine.getChildren()) {
+                for (final EnterableState es : stateMachine.getChildren()) {
                     getContext(es);
                 }
             }
@@ -216,7 +216,7 @@ public class SCInstance implements Serializable {
      * Sets the I/O Processor for the internal event queue
      * @param internalIOProcessor the I/O Processor
      */
-    protected void setInternalIOProcessor(SCXMLIOProcessor internalIOProcessor) {
+    protected void setInternalIOProcessor(final SCXMLIOProcessor internalIOProcessor) {
         this.internalIOProcessor = internalIOProcessor;
     }
 
@@ -230,7 +230,7 @@ public class SCInstance implements Serializable {
      * @param reAttach Flag whether or not re-attaching it
      * @throws ModelException if {@code evaluator} is null
      */
-    protected void setEvaluator(Evaluator evaluator, boolean reAttach) throws ModelException {
+    protected void setEvaluator(final Evaluator evaluator, final boolean reAttach) throws ModelException {
         this.evaluator = evaluator;
         if (initialized) {
             if (!reAttach) {
@@ -255,7 +255,7 @@ public class SCInstance implements Serializable {
      * @param errorReporter The error reporter for this state machine instance.
      * @throws ModelException if an attempt is made to set a null value for the error reporter
      */
-    protected void setErrorReporter(ErrorReporter errorReporter) throws ModelException {
+    protected void setErrorReporter(final ErrorReporter errorReporter) throws ModelException {
         if (errorReporter == null) {
             throw new ModelException(ERR_NO_ERROR_REPORTER);
         }
@@ -278,7 +278,7 @@ public class SCInstance implements Serializable {
      * @param stateMachine The state machine for this instance
      * @throws ModelException if an attempt is made to set a null value for the state machine
      */
-    protected void setStateMachine(SCXML stateMachine) throws ModelException {
+    protected void setStateMachine(final SCXML stateMachine) throws ModelException {
         if (stateMachine == null) {
             throw new ModelException(ERR_NO_STATE_MACHINE);
         }
@@ -286,7 +286,7 @@ public class SCInstance implements Serializable {
         initialize();
     }
 
-    public void setSingleContext(boolean singleContext) throws ModelException {
+    public void setSingleContext(final boolean singleContext) throws ModelException {
         if (initialized) {
             throw new ModelException("SCInstance: already initialized");
         }
@@ -310,11 +310,11 @@ public class SCInstance implements Serializable {
         if (datamodel == null || Evaluator.NULL_DATA_MODEL.equals(evaluator.getSupportedDatamodel())) {
             return;
         }
-        List<Data> data = datamodel.getData();
+        final List<Data> data = datamodel.getData();
         if (data == null) {
             return;
         }
-        for (Data datum : data) {
+        for (final Data datum : data) {
             if (getGlobalContext() == ctx && ctx.has(datum.getId())) {
                 // earlier/externally defined 'initial' value found: do not overwrite
                 continue;
@@ -332,7 +332,7 @@ public class SCInstance implements Serializable {
                     datum.setParsedValue(ContentParser.DEFAULT_PARSER.parseResource(resolvedSrc));
                     value = evaluator.cloneData(datum.getParsedValue().getValue());
                     setValue = true;
-                } catch (IOException e) {
+                } catch (final IOException e) {
                     if (internalIOProcessor != null) {
                         internalIOProcessor.addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build());
                     }
@@ -343,7 +343,7 @@ public class SCInstance implements Serializable {
                 try {
                     value = evaluator.eval(ctx, datum.getExpr());
                     setValue = true;
-                } catch (SCXMLExpressionException see) {
+                } catch (final SCXMLExpressionException see) {
                     if (internalIOProcessor != null) {
                         internalIOProcessor.addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build());
                     }
@@ -364,7 +364,7 @@ public class SCInstance implements Serializable {
                     // directly injecting them in the context.
                     try {
                         ((JSEvaluator)evaluator).injectData(ctx, datum.getId(), value);
-                    } catch (SCXMLExpressionException e) {
+                    } catch (final SCXMLExpressionException e) {
                         if (internalIOProcessor != null) {
                             internalIOProcessor.addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build());
                         }
@@ -452,10 +452,10 @@ public class SCInstance implements Serializable {
             // force initialization of rootContext
             getRootContext();
             if (rootContext != null) {
-                Context internalContext = new SimpleContext(rootContext);
+                final Context internalContext = new SimpleContext(rootContext);
                 systemContext = new SCXMLSystemContext(internalContext);
                 systemContext.getContext().set(SCXMLSystemContext.SESSIONID_KEY, UUID.randomUUID().toString());
-                String _name = stateMachine != null && stateMachine.getName() != null ? stateMachine.getName() : "";
+                final String _name = stateMachine != null && stateMachine.getName() != null ? stateMachine.getName() : "";
                 systemContext.getContext().set(SCXMLSystemContext.SCXML_NAME_KEY, _name);
                 systemContext.getPlatformVariables().put(SCXMLSystemContext.STATUS_KEY, currentStatus);
             }
@@ -490,7 +490,7 @@ public class SCInstance implements Serializable {
                 context = getGlobalContext();
             }
             else {
-                EnterableState parent = state.getParent();
+                final EnterableState parent = state.getParent();
                 if (parent == null) {
                     // docroot
                     context = evaluator.newContext(getGlobalContext());
@@ -499,7 +499,7 @@ public class SCInstance implements Serializable {
                 }
             }
             if (state instanceof TransitionalState) {
-                Datamodel datamodel = ((TransitionalState)state).getDatamodel();
+                final Datamodel datamodel = ((TransitionalState)state).getDatamodel();
                 cloneDatamodel(datamodel, context, evaluator, errorReporter);
             }
             contexts.put(state, context);
diff --git a/src/main/java/org/apache/commons/scxml2/SCInstanceObjectInputStream.java b/src/main/java/org/apache/commons/scxml2/SCInstanceObjectInputStream.java
index 72ce5d8..45ce297 100644
--- a/src/main/java/org/apache/commons/scxml2/SCInstanceObjectInputStream.java
+++ b/src/main/java/org/apache/commons/scxml2/SCInstanceObjectInputStream.java
@@ -81,13 +81,13 @@ public class SCInstanceObjectInputStream extends ObjectInputStream {
      * @param classResolver custom class resolver
      * @return the old classResolver replaced by the new {@code classResolver}
      */
-    public ClassResolver setClassResolver(ClassResolver classResolver) {
-        ClassResolver old = this.classResolver;
+    public ClassResolver setClassResolver(final ClassResolver classResolver) {
+        final ClassResolver old = this.classResolver;
         this.classResolver = classResolver;
         return old;
     }
 
-    protected Class resolveClass(ObjectStreamClass osc) throws IOException, ClassNotFoundException {
+    protected Class resolveClass(final ObjectStreamClass osc) throws IOException, ClassNotFoundException {
         if (classResolver != null) {
             return classResolver.resolveClass(osc);
         }
diff --git a/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java b/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java
index 171ebf8..d8f7449 100644
--- a/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java
+++ b/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java
@@ -137,8 +137,8 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      * @param eventDispatcher The event dispatcher, if null a SimpleDispatcher instance will be used
      * @param errorReporter The error reporter, if null a SimpleErrorReporter instance will be used
      */
-    protected SCXMLExecutionContext(SCXMLExecutor scxmlExecutor, Evaluator evaluator,
-                                    EventDispatcher eventDispatcher, ErrorReporter errorReporter) {
+    protected SCXMLExecutionContext(final SCXMLExecutor scxmlExecutor, final Evaluator evaluator,
+                                    final EventDispatcher eventDispatcher, final ErrorReporter errorReporter) {
         this.scxmlExecutor = scxmlExecutor;
         this.externalIOProcessor = scxmlExecutor;
         this.evaluator = evaluator;
@@ -183,7 +183,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      * Set if the SCXML configuration should be checked before execution (default = true)
      * @param checkLegalConfiguration flag to set
      */
-    public void setCheckLegalConfiguration(boolean checkLegalConfiguration) {
+    public void setCheckLegalConfiguration(final boolean checkLegalConfiguration) {
         this.checkLegalConfiguration = checkLegalConfiguration;
     }
 
@@ -201,7 +201,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      */
     public void initialize(final Map<String, Object> data) throws ModelException {
         if (!invokeIds.isEmpty()) {
-            for (Invoke invoke : new ArrayList<>(invokeIds.keySet())) {
+            for (final Invoke invoke : new ArrayList<>(invokeIds.keySet())) {
                 cancelInvoker(invoke);
             }
         }
@@ -259,7 +259,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      * @param stateMachine The state machine to set
      * @throws ModelException if attempting to set a null value or the state machine instance failed to re-initialize
      */
-    protected void setStateMachine(SCXML stateMachine) throws ModelException {
+    protected void setStateMachine(final SCXML stateMachine) throws ModelException {
         scInstance.setStateMachine(stateMachine);
         // synchronize possible derived evaluator
         this.evaluator = scInstance.getEvaluator();
@@ -289,7 +289,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      * @param evaluator The evaluator to set
      * @throws ModelException if attempting to set a null value or the state machine instance failed to re-initialize
      */
-    protected void setEvaluator(Evaluator evaluator) throws ModelException {
+    protected void setEvaluator(final Evaluator evaluator) throws ModelException {
         scInstance.setEvaluator(evaluator, false);
         // synchronize possible derived evaluator
         this.evaluator = scInstance.getEvaluator();
@@ -308,12 +308,12 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      *
      * @param errorReporter The error reporter to set, if null a SimpleErrorReporter instance will be used instead
      */
-    protected void setErrorReporter(ErrorReporter errorReporter) {
+    protected void setErrorReporter(final ErrorReporter errorReporter) {
         this.errorReporter = errorReporter != null ? errorReporter : new SimpleErrorReporter();
         try {
             scInstance.setErrorReporter(errorReporter);
         }
-        catch (ModelException me) {
+        catch (final ModelException me) {
             // won't happen
         }
     }
@@ -330,7 +330,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      *
      * @param eventdispatcher The event dispatcher to set, if null a SimpleDispatcher instance will be used instead
      */
-    protected void setEventdispatcher(EventDispatcher eventdispatcher) {
+    protected void setEventdispatcher(final EventDispatcher eventdispatcher) {
         this.eventdispatcher = eventdispatcher != null ? eventdispatcher : new SimpleDispatcher();
     }
 
@@ -347,7 +347,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
     protected void initializeIOProcessors() {
         if (scInstance.getEvaluator() != null) {
             // lazy register/reset #_scxml_sessionId event target
-            String currentSessionId = (String)getScInstance().getSystemContext().get(SCXMLSystemContext.SESSIONID_KEY);
+            final String currentSessionId = (String)getScInstance().getSystemContext().get(SCXMLSystemContext.SESSIONID_KEY);
             if (sessionId != null && !sessionId.equals(currentSessionId)) {
                 // remove possible old/stale #_scxml_sessionId target
                 ioProcessors.remove(SCXMLIOProcessor.SCXML_SESSION_EVENT_PROCESSOR_PREFIX+sessionId);
@@ -368,9 +368,9 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      * @return the detached instance
      */
     protected SCInstance detachInstance() {
-        SCInstance instance = scInstance;
+        final SCInstance instance = scInstance;
         scInstance.detach();
-        Map<String, Object> systemVars = scInstance.getSystemContext().getVars();
+        final Map<String, Object> systemVars = scInstance.getSystemContext().getVars();
         systemVars.remove(SCXMLSystemContext.IOPROCESSORS_KEY);
         systemVars.remove(SCXMLSystemContext.EVENT_KEY);
         scInstance = null;
@@ -384,7 +384,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      * </p>
      * @param instance An previously detached SCInstance
      */
-    protected void attachInstance(SCInstance instance) {
+    protected void attachInstance(final SCInstance instance) {
         if (scInstance != null ) {
             scInstance.detach();
         }
@@ -397,7 +397,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
                 scInstance.setErrorReporter(errorReporter);
                 initializeIOProcessors();
             }
-            catch (ModelException me) {
+            catch (final ModelException me) {
                 // should not happen
             }
         }
@@ -442,7 +442,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      * @throws InvokerException When a suitable {@link Invoker} cannot be instantiated.
      */
     public Invoker newInvoker(final String type) throws InvokerException {
-        Class<? extends Invoker> invokerClass = invokerClasses.get(stripTrailingSlash(type));
+        final Class<? extends Invoker> invokerClass = invokerClasses.get(stripTrailingSlash(type));
         if (invokerClass == null) {
             throw new InvokerException("No Invoker registered for type \"" + stripTrailingSlash(type) + "\"");
         }
@@ -474,7 +474,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      * @throws InvokerException when the Invoker doesn't have an invokerId
      */
     public void registerInvoker(final Invoke invoke, final Invoker invoker) throws InvokerException {
-        String invokeId = invoker.getInvokeId();
+        final String invokeId = invoker.getInvokeId();
         if (invokeId == null) {
             throw new InvokerException("Registering an Invoker without invokerId");
         }
@@ -507,13 +507,13 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      *
      * @param invoke The Invoke for the Invoker to cancel
      */
-    public void cancelInvoker(Invoke invoke) {
-        String invokeId = invokeIds.get(invoke);
+    public void cancelInvoker(final Invoke invoke) {
+        final String invokeId = invokeIds.get(invoke);
         if (invokeId != null) {
             try {
                 invokers.get(invokeId).cancel();
-            } catch (InvokerException ie) {
-                TriggerEvent te = new EventBuilder("failed.invoke.cancel."+invokeId, TriggerEvent.ERROR_EVENT).build();
+            } catch (final InvokerException ie) {
+                final TriggerEvent te = new EventBuilder("failed.invoke.cancel."+invokeId, TriggerEvent.ERROR_EVENT).build();
                 addEvent(te);
             }
             removeInvoker(invoke);
@@ -525,7 +525,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor {
      * @param event The event
      */
     @Override
-    public void addEvent(TriggerEvent event) {
+    public void addEvent(final TriggerEvent event) {
         internalEventQueue.add(event);
     }
 
diff --git a/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java b/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java
index 411b12b..c5808d2 100644
--- a/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java
+++ b/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java
@@ -160,11 +160,11 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
      * @see SCInstance#initialize()
      * @see SCXMLSemantics#isLegalConfiguration(java.util.Set, ErrorReporter)
      */
-    public synchronized void setConfiguration(Set<String> atomicStateIds) throws ModelException {
+    public synchronized void setConfiguration(final Set<String> atomicStateIds) throws ModelException {
         semantics.initialize(exctx, Collections.emptyMap());
-        Set<EnterableState> states = new HashSet<>();
-        for (String stateId : atomicStateIds) {
-            TransitionTarget tt = getStateMachine().getTargets().get(stateId);
+        final Set<EnterableState> states = new HashSet<>();
+        for (final String stateId : atomicStateIds) {
+            final TransitionTarget tt = getStateMachine().getTargets().get(stateId);
             if (tt instanceof EnterableState && ((EnterableState)tt).isAtomicState()) {
                 EnterableState es = (EnterableState)tt;
                 while (es != null && !states.add(es)) {
@@ -176,7 +176,7 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
             }
         }
         if (semantics.isLegalConfiguration(states, getErrorReporter())) {
-            for (EnterableState es : states) {
+            for (final EnterableState es : states) {
                 exctx.getScInstance().getStateConfiguration().enterState(es);
             }
             logState();
@@ -246,7 +246,7 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
         exctx.getScInstance().setRootContext(rootContext);
     }
 
-    public void setSingleContext(boolean singleContext) throws ModelException {
+    public void setSingleContext(final boolean singleContext) throws ModelException {
         getSCInstance().setSingleContext(singleContext);
     }
 
@@ -327,7 +327,7 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
      * Set if the SCXML configuration should be checked before execution (default = true)
      * @param checkLegalConfiguration flag to set
      */
-    public void setCheckLegalConfiguration(boolean checkLegalConfiguration) {
+    public void setCheckLegalConfiguration(final boolean checkLegalConfiguration) {
         this.exctx.setCheckLegalConfiguration(checkLegalConfiguration);
     }
 
@@ -410,7 +410,7 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
      * </p>
      * @param instance An previously detached SCInstance
      */
-    public void attachInstance(SCInstance instance) {
+    public void attachInstance(final SCInstance instance) {
         exctx.attachInstance(instance);
     }
 
@@ -458,12 +458,12 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
 
     public Thread run(final Map<String, Object> data) throws ModelException {
         go(data);
-        Thread t = new Thread(() -> {
+        final Thread t = new Thread(() -> {
             try {
                 while (exctx.isRunning()) {
                     triggerEvents();
                 }
-            } catch (ModelException ignored) {
+            } catch (final ModelException ignored) {
             }
         });
         t.start();
@@ -525,7 +525,7 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
     public void triggerEvents(final TriggerEvent[] evts)
             throws ModelException {
         if (evts != null) {
-            for (TriggerEvent evt : evts) {
+            for (final TriggerEvent evt : evts) {
                 addEvent(evt);
             }
         }
@@ -543,7 +543,7 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
         }
     }
 
-    protected void eventStep(TriggerEvent event) throws ModelException {
+    protected void eventStep(final TriggerEvent event) throws ModelException {
         semantics.nextStep(exctx, event);
         logState();
     }
@@ -562,11 +562,11 @@ public class SCXMLExecutor implements SCXMLIOProcessor {
      */
     protected void logState() {
         if (log.isDebugEnabled()) {
-            StringBuilder sb = new StringBuilder("Current States: [ ");
-            for (EnterableState es : getStatus().getStates()) {
+            final StringBuilder sb = new StringBuilder("Current States: [ ");
+            for (final EnterableState es : getStatus().getStates()) {
                 sb.append(es.getId()).append(", ");
             }
-            int length = sb.length();
+            final int length = sb.length();
             sb.delete(length - 2, length).append(" ]");
             log.debug(sb.toString());
         }
diff --git a/src/main/java/org/apache/commons/scxml2/SCXMLSystemContext.java b/src/main/java/org/apache/commons/scxml2/SCXMLSystemContext.java
index 0d39dd0..e03642d 100644
--- a/src/main/java/org/apache/commons/scxml2/SCXMLSystemContext.java
+++ b/src/main/java/org/apache/commons/scxml2/SCXMLSystemContext.java
@@ -79,7 +79,7 @@ public class SCXMLSystemContext implements Context, Serializable {
      * @param systemContext the system context to set
      * @throws java.lang.NullPointerException if systemContext == null
      */
-    void setSystemContext(Context systemContext) {
+    void setSystemContext(final Context systemContext) {
         if (this.systemContext != null) {
             // replace systemContext
             systemContext.getVars().putAll(this.systemContext.getVars());
@@ -97,7 +97,7 @@ public class SCXMLSystemContext implements Context, Serializable {
      */
     private Map<String, Object> protectedVars;
 
-    public SCXMLSystemContext(Context systemContext) {
+    public SCXMLSystemContext(final Context systemContext) {
         setSystemContext(systemContext);
     }
 
diff --git a/src/main/java/org/apache/commons/scxml2/Status.java b/src/main/java/org/apache/commons/scxml2/Status.java
index 9c7ab99..288d526 100644
--- a/src/main/java/org/apache/commons/scxml2/Status.java
+++ b/src/main/java/org/apache/commons/scxml2/Status.java
@@ -36,7 +36,7 @@ public class Status implements Serializable {
     private final StateConfiguration configuration;
 
 
-    public Status(StateConfiguration configuration) {
+    public Status(final StateConfiguration configuration) {
         this.configuration = configuration;
     }
 
@@ -52,7 +52,7 @@ public class Status implements Serializable {
      */
     public Final getFinalState() {
         if (configuration.getStates().size() == 1) {
-            EnterableState es = configuration.getStates().iterator().next();
+            final EnterableState es = configuration.getStates().iterator().next();
             if (es instanceof Final && es.getParent() == null) {
                 return (Final)es;
             }
@@ -80,7 +80,7 @@ public class Status implements Serializable {
     }
 
     public boolean isInState(final String state) {
-        for (EnterableState es : configuration.getActiveStates()) {
+        for (final EnterableState es : configuration.getActiveStates()) {
             if (state.equals(es.getId())) {
                 return true;
             }
diff --git a/src/main/java/org/apache/commons/scxml2/TriggerEvent.java b/src/main/java/org/apache/commons/scxml2/TriggerEvent.java
index 438b8ab..c58f6da 100644
--- a/src/main/java/org/apache/commons/scxml2/TriggerEvent.java
+++ b/src/main/java/org/apache/commons/scxml2/TriggerEvent.java
@@ -167,7 +167,7 @@ public class TriggerEvent implements Serializable {
     @Override
     public boolean equals(final Object obj) {
         if (obj instanceof TriggerEvent) {
-            TriggerEvent te2 = (TriggerEvent) obj;
+            final TriggerEvent te2 = (TriggerEvent) obj;
             if (type == te2.type && name.equals(te2.name) &&
                     equals(sendId, te2.sendId) &&
                     equals(origin, te2.origin) &&
@@ -187,7 +187,7 @@ public class TriggerEvent implements Serializable {
      */
     @Override
     public String toString() {
-        StringBuilder buf = new StringBuilder("TriggerEvent{name=");
+        final StringBuilder buf = new StringBuilder("TriggerEvent{name=");
         buf.append(name).append(", type=").append(type);
         if (sendId != null) {
             buf.append(", sendid=").append(invokeId);
diff --git a/src/main/java/org/apache/commons/scxml2/env/AbstractBaseEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/AbstractBaseEvaluator.java
index 44239c7..db6e7f1 100644
--- a/src/main/java/org/apache/commons/scxml2/env/AbstractBaseEvaluator.java
+++ b/src/main/java/org/apache/commons/scxml2/env/AbstractBaseEvaluator.java
@@ -44,11 +44,11 @@ public abstract class AbstractBaseEvaluator implements Evaluator, Serializable {
      * @see Evaluator#evalAssign(Context, String, Object)
      */
     public void evalAssign(final Context ctx, final String location, final Object data) throws SCXMLExpressionException {
-        StringBuilder sb = new StringBuilder(location).append("=").append(ASSIGN_VARIABLE_NAME);
+        final StringBuilder sb = new StringBuilder(location).append("=").append(ASSIGN_VARIABLE_NAME);
         try {
             ctx.getVars().put(ASSIGN_VARIABLE_NAME, data);
             eval(ctx, sb.toString());
-        } catch (SCXMLExpressionException e) {
+        } catch (final SCXMLExpressionException e) {
             if (e.getCause() != null && e.getCause() != null && e.getCause().getMessage() != null) {
                 throw new SCXMLExpressionException("Error evaluating assign to location=\"" + location + "\": " + e.getCause().getMessage());
             }
@@ -68,24 +68,24 @@ public abstract class AbstractBaseEvaluator implements Evaluator, Serializable {
                 return ((Node)data).cloneNode(true);
             }
             else if (data instanceof NodeList) {
-                NodeList nodeList = (NodeList)data;
-                ArrayList<Node> list = new ArrayList<>();
+                final NodeList nodeList = (NodeList)data;
+                final ArrayList<Node> list = new ArrayList<>();
                 for (int i = 0, size = nodeList.getLength(); i < size; i++) {
                     list.add(nodeList.item(i).cloneNode(true));
                 }
                 return list;
             }
             else if (data instanceof List) {
-                ArrayList<Object> list = new ArrayList<>();
-                for (Object v : (List)data) {
+                final ArrayList<Object> list = new ArrayList<>();
+                for (final Object v : (List)data) {
                     list.add(cloneData(v));
                 }
                 return list;
             }
             else if (data instanceof Map) {
-                Map<?,?> dataMap = (Map<?,?>)data;
-                HashMap<Object, Object> map = new LinkedHashMap<>();
-                for (Map.Entry<?,?> entry : dataMap.entrySet()) {
+                final Map<?,?> dataMap = (Map<?,?>)data;
+                final HashMap<Object, Object> map = new LinkedHashMap<>();
+                for (final Map.Entry<?,?> entry : dataMap.entrySet()) {
                     map.put(cloneData(entry.getKey()), cloneData(entry.getValue()));
                 }
                 return map;
diff --git a/src/main/java/org/apache/commons/scxml2/env/AbstractStateMachine.java b/src/main/java/org/apache/commons/scxml2/env/AbstractStateMachine.java
index eae5822..1531fcb 100644
--- a/src/main/java/org/apache/commons/scxml2/env/AbstractStateMachine.java
+++ b/src/main/java/org/apache/commons/scxml2/env/AbstractStateMachine.java
@@ -181,7 +181,7 @@ public abstract class AbstractStateMachine {
         engine.addListener(stateMachine, new EntryListener());
         try {
             engine.go();
-        } catch (ModelException me) {
+        } catch (final ModelException me) {
             logError(me);
         }
     }
@@ -194,10 +194,10 @@ public abstract class AbstractStateMachine {
      *         configuration.
      */
     public boolean fireEvent(final String event) {
-        TriggerEvent[] evts = {new EventBuilder(event, TriggerEvent.SIGNAL_EVENT).build()};
+        final TriggerEvent[] evts = {new EventBuilder(event, TriggerEvent.SIGNAL_EVENT).build()};
         try {
             engine.triggerEvents(evts);
-        } catch (ModelException me) {
+        } catch (final ModelException me) {
             logError(me);
         }
         return engine.getStatus().isFinal();
@@ -238,9 +238,9 @@ public abstract class AbstractStateMachine {
      * @return Whether the invoke was successful.
      */
     public boolean invoke(final String methodName) {
-        Class<?> clas = this.getClass();
+        final Class<?> clas = this.getClass();
         try {
-            Method method = clas.getDeclaredMethod(methodName, SIGNATURE);
+            final Method method = clas.getDeclaredMethod(methodName, SIGNATURE);
             method.invoke(this, PARAMETERS);
         } catch (SecurityException | NoSuchMethodException | IllegalAccessException | IllegalArgumentException |
                 InvocationTargetException se) {
@@ -258,7 +258,7 @@ public abstract class AbstractStateMachine {
     public boolean resetMachine() {
         try {
             engine.reset();
-        } catch (ModelException me) {
+        } catch (final ModelException me) {
             logError(me);
             return false;
         }
diff --git a/src/main/java/org/apache/commons/scxml2/env/EffectiveContextMap.java b/src/main/java/org/apache/commons/scxml2/env/EffectiveContextMap.java
index 8025a27..97b9fc3 100644
--- a/src/main/java/org/apache/commons/scxml2/env/EffectiveContextMap.java
+++ b/src/main/java/org/apache/commons/scxml2/env/EffectiveContextMap.java
@@ -56,7 +56,7 @@ public final class EffectiveContextMap extends AbstractMap<String, Object> imple
      */
     @Override
     public Set<Entry<String, Object>> entrySet() {
-        Map<String, Object> map = new HashMap<>();
+        final Map<String, Object> map = new HashMap<>();
         mergeVars(leaf, map);
         return Collections.unmodifiableMap(map).entrySet();
     }
@@ -66,7 +66,7 @@ public final class EffectiveContextMap extends AbstractMap<String, Object> imple
      * @param leaf current leaf Context
      * @param map Map to merge vars into
      */
-    protected void mergeVars(Context leaf, Map<String, Object> map) {
+    protected void mergeVars(final Context leaf, final Map<String, Object> map) {
         if (leaf != null) {
             mergeVars(leaf.getParent(), map);
             map.putAll(leaf.getVars());
@@ -78,7 +78,7 @@ public final class EffectiveContextMap extends AbstractMap<String, Object> imple
      */
     @Override
     public Object put(final String key, final Object value) {
-        Object old = leaf.get(key);
+        final Object old = leaf.get(key);
         if (leaf.has(key)) {
             leaf.set(key, value);
         } else {
diff --git a/src/main/java/org/apache/commons/scxml2/env/LogUtils.java b/src/main/java/org/apache/commons/scxml2/env/LogUtils.java
index df4cb3b..4e6ab6b 100644
--- a/src/main/java/org/apache/commons/scxml2/env/LogUtils.java
+++ b/src/main/java/org/apache/commons/scxml2/env/LogUtils.java
@@ -35,7 +35,7 @@ public final class LogUtils {
      * @return String The human readable log entry
      */
     public static String transToString(final TransitionTarget from,
-            final TransitionTarget to, final Transition transition, String event) {
+            final TransitionTarget to, final Transition transition, final String event) {
         return "(" + "event = " + event +
                 ", cond = " + transition.getCond() +
                 ", from = " + getTTPath(from) +
@@ -51,7 +51,7 @@ public final class LogUtils {
      *                the SCXML document
      */
     public static String getTTPath(final TransitionTarget tt) {
-        StringBuilder sb = new StringBuilder("/");
+        final StringBuilder sb = new StringBuilder("/");
         for (int i = 0; i < tt.getNumberOfAncestors(); i++) {
             sb.append(tt.getAncestor(i).getId());
             sb.append("/");
diff --git a/src/main/java/org/apache/commons/scxml2/env/SimpleContext.java b/src/main/java/org/apache/commons/scxml2/env/SimpleContext.java
index 7d155d1..256262e 100644
--- a/src/main/java/org/apache/commons/scxml2/env/SimpleContext.java
+++ b/src/main/java/org/apache/commons/scxml2/env/SimpleContext.java
@@ -103,7 +103,7 @@ public class SimpleContext implements Context, Serializable {
      * @see org.apache.commons.scxml2.Context#get(java.lang.String)
      */
     public Object get(final String name) {
-        Object localValue = getVars().get(name);
+        final Object localValue = getVars().get(name);
         if (localValue != null) {
             return localValue;
         } else if (parent != null) {
diff --git a/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java b/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java
index 9888a83..fe8eea4 100644
--- a/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java
+++ b/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java
@@ -77,7 +77,7 @@ public class SimpleDispatcher implements EventDispatcher, Serializable {
          * @param event The event to be triggered.
          * @param target The target io processor
          */
-        DelayedEventTask(final String id, final TriggerEvent event, SCXMLIOProcessor target) {
+        DelayedEventTask(final String id, final TriggerEvent event, final SCXMLIOProcessor target) {
             this.id = id;
             this.event = event;
             this.target = target;
@@ -140,7 +140,7 @@ public class SimpleDispatcher implements EventDispatcher, Serializable {
         if (!timers.containsKey(sendId)) {
             return; // done, we don't track this one or its already expired
         }
-        Timer timer = timers.get(sendId);
+        final Timer timer = timers.get(sendId);
         if (timer != null) {
             timer.cancel();
             if (log.isDebugEnabled()) {
@@ -173,7 +173,7 @@ public class SimpleDispatcher implements EventDispatcher, Serializable {
 
         if (type == null || type.equalsIgnoreCase(SCXMLIOProcessor.SCXML_EVENT_PROCESSOR) ||
                 type.equals(SCXMLIOProcessor.DEFAULT_EVENT_PROCESSOR)) {
-            String originType = SCXMLIOProcessor.DEFAULT_EVENT_PROCESSOR;
+            final String originType = SCXMLIOProcessor.DEFAULT_EVENT_PROCESSOR;
             SCXMLIOProcessor ioProcessor;
 
             boolean internal = false;
@@ -211,7 +211,7 @@ public class SimpleDispatcher implements EventDispatcher, Serializable {
                 throw new ActionExecutionError(true, "<send>: Cannot send without event name");
             }
             else {
-                EventBuilder eventBuilder = new EventBuilder(event, TriggerEvent.SIGNAL_EVENT)
+                final EventBuilder eventBuilder = new EventBuilder(event, TriggerEvent.SIGNAL_EVENT)
                         .sendId(id)
                         .data(data);
                 if (!internal) {
@@ -221,7 +221,7 @@ public class SimpleDispatcher implements EventDispatcher, Serializable {
                     }
                     if (delay > 0L) {
                         // Need to schedule this one
-                        Timer timer = new Timer(true);
+                        final Timer timer = new Timer(true);
                         timer.schedule(new DelayedEventTask(id, eventBuilder.build(), ioProcessor), delay);
                         timers.put(id, timer);
                         if (log.isDebugEnabled()) {
diff --git a/src/main/java/org/apache/commons/scxml2/env/SimpleErrorReporter.java b/src/main/java/org/apache/commons/scxml2/env/SimpleErrorReporter.java
index 23ce987..915c8de 100644
--- a/src/main/java/org/apache/commons/scxml2/env/SimpleErrorReporter.java
+++ b/src/main/java/org/apache/commons/scxml2/env/SimpleErrorReporter.java
@@ -56,8 +56,8 @@ public class SimpleErrorReporter implements ErrorReporter, Serializable {
             final Object errCtx) {
         //Note: the if-then-else below is based on the actual usage
         // (codebase search), it has to be kept up-to-date as the code changes
-        String errCode = errorCode.intern();
-        StringBuffer msg = new StringBuffer();
+        final String errCode = errorCode.intern();
+        final StringBuffer msg = new StringBuffer();
         msg.append(errCode).append(" (");
         msg.append(errDetail).append("): ");
         if (errCode == ErrorConstants.NO_INITIAL) {
@@ -75,13 +75,13 @@ public class SimpleErrorReporter implements ErrorReporter, Serializable {
         } else if (errCode == ErrorConstants.ILLEGAL_CONFIG) {
             //isLegalConfig
             if (errCtx instanceof Map.Entry) { //unchecked cast below
-                Map.Entry<EnterableState, Set<EnterableState>> badConfigMap =
+                final Map.Entry<EnterableState, Set<EnterableState>> badConfigMap =
                     (Map.Entry<EnterableState, Set<EnterableState>>) errCtx;
-                EnterableState es = badConfigMap.getKey();
-                Set<EnterableState> vals = badConfigMap.getValue();
+                final EnterableState es = badConfigMap.getKey();
+                final Set<EnterableState> vals = badConfigMap.getValue();
                 msg.append(LogUtils.getTTPath(es)).append(" : [");
-                for (Iterator<EnterableState> i = vals.iterator(); i.hasNext();) {
-                    EnterableState ex = i.next();
+                for (final Iterator<EnterableState> i = vals.iterator(); i.hasNext();) {
+                    final EnterableState ex = i.next();
                     msg.append(LogUtils.getTTPath(ex));
                     if (i.hasNext()) { // reason for iterator usage
                         msg.append(", ");
@@ -89,10 +89,10 @@ public class SimpleErrorReporter implements ErrorReporter, Serializable {
                 }
                 msg.append(']');
             } else if (errCtx instanceof Set) { //unchecked cast below
-                Set<EnterableState> vals = (Set<EnterableState>) errCtx;
+                final Set<EnterableState> vals = (Set<EnterableState>) errCtx;
                 msg.append("<SCXML> : [");
-                for (Iterator<EnterableState> i = vals.iterator(); i.hasNext();) {
-                    EnterableState ex = i.next();
+                for (final Iterator<EnterableState> i = vals.iterator(); i.hasNext();) {
+                    final EnterableState ex = i.next();
                     msg.append(LogUtils.getTTPath(ex));
                     if (i.hasNext()) {
                         msg.append(", ");
@@ -102,7 +102,7 @@ public class SimpleErrorReporter implements ErrorReporter, Serializable {
             }
         } else if (errCode == ErrorConstants.EXPRESSION_ERROR) {
             if (errCtx instanceof Executable) {
-                TransitionTarget parent = ((Executable) errCtx).getParent();
+                final TransitionTarget parent = ((Executable) errCtx).getParent();
                 msg.append("Expression error inside ").append(LogUtils.getTTPath(parent));
             }
             else if (errCtx instanceof Data) {
diff --git a/src/main/java/org/apache/commons/scxml2/env/SimpleSCXMLListener.java b/src/main/java/org/apache/commons/scxml2/env/SimpleSCXMLListener.java
index 4ad7730..e6eba13 100644
--- a/src/main/java/org/apache/commons/scxml2/env/SimpleSCXMLListener.java
+++ b/src/main/java/org/apache/commons/scxml2/env/SimpleSCXMLListener.java
@@ -59,7 +59,7 @@ public class SimpleSCXMLListener implements SCXMLListener, Serializable {
 * @see SCXMLListener#onTransition(TransitionTarget,TransitionTarget,Transition,String)
      */
     public void onTransition(final TransitionTarget from,
-            final TransitionTarget to, final Transition transition, String event) {
+            final TransitionTarget to, final Transition transition, final String event) {
         if (log.isInfoEnabled()) {
             log.info("transition " + LogUtils.transToString(from, to, transition, event));
         }
diff --git a/src/main/java/org/apache/commons/scxml2/env/URLResolver.java b/src/main/java/org/apache/commons/scxml2/env/URLResolver.java
index 6e2447b..0b20dc5 100644
--- a/src/main/java/org/apache/commons/scxml2/env/URLResolver.java
+++ b/src/main/java/org/apache/commons/scxml2/env/URLResolver.java
@@ -58,7 +58,7 @@ public class URLResolver implements PathResolver, Serializable {
         try {
             combined = new URL(baseURL, ctxPath);
             return combined.toString();
-        } catch (MalformedURLException e) {
+        } catch (final MalformedURLException e) {
             log.error("Malformed URL", e);
         }
         return null;
@@ -72,7 +72,7 @@ public class URLResolver implements PathResolver, Serializable {
         try {
             combined = new URL(baseURL, ctxPath);
             return new URLResolver(combined);
-        } catch (MalformedURLException e) {
+        } catch (final MalformedURLException e) {
             log.error("Malformed URL", e);
         }
         return null;
diff --git a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContext.java b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContext.java
index a5d73bf..d5191b4 100644
--- a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContext.java
+++ b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContext.java
@@ -64,7 +64,7 @@ public class GroovyContext extends SimpleContext {
      * @param initialVars The initial set of variables.
      * @param evaluator The groovy evaluator
      */
-    public GroovyContext(final Context parent, final Map<String, Object> initialVars, GroovyEvaluator evaluator) {
+    public GroovyContext(final Context parent, final Map<String, Object> initialVars, final GroovyEvaluator evaluator) {
         super(parent, initialVars);
         this.evaluator = evaluator;
     }
@@ -75,7 +75,7 @@ public class GroovyContext extends SimpleContext {
      * @param parent The parent context.
      * @param evaluator The groovy evaluator
      */
-    public GroovyContext(final Context parent, GroovyEvaluator evaluator) {
+    public GroovyContext(final Context parent, final GroovyEvaluator evaluator) {
         super(parent);
         this.evaluator = evaluator;
     }
@@ -84,7 +84,7 @@ public class GroovyContext extends SimpleContext {
         return evaluator;
     }
 
-    protected void setGroovyEvaluator(GroovyEvaluator evaluator) {
+    protected void setGroovyEvaluator(final GroovyEvaluator evaluator) {
         this.evaluator = evaluator;
     }
 
@@ -98,7 +98,7 @@ public class GroovyContext extends SimpleContext {
         this.vars = vars;
     }
 
-    protected void setScriptBaseClass(String scriptBaseClass) {
+    protected void setScriptBaseClass(final String scriptBaseClass) {
         this.scriptBaseClass = scriptBaseClass;
     }
 
@@ -112,12 +112,12 @@ public class GroovyContext extends SimpleContext {
         return null;
     }
 
-    private void writeObject(ObjectOutputStream out) throws IOException {
+    private void writeObject(final ObjectOutputStream out) throws IOException {
         boolean closureErased = false;
         if (vars != null) {
-            Iterator<Map.Entry<String, Object>> iterator = getVars().entrySet().iterator();
+            final Iterator<Map.Entry<String, Object>> iterator = getVars().entrySet().iterator();
             while (iterator.hasNext()) {
-                Map.Entry<String, Object> entry = iterator.next();
+                final Map.Entry<String, Object> entry = iterator.next();
                 if (entry.getValue() != null && entry.getValue() instanceof Closure) {
                     iterator.remove();
                     closureErased = true;
@@ -134,7 +134,7 @@ public class GroovyContext extends SimpleContext {
     }
 
     @SuppressWarnings("unchecked")
-    private void readObject(ObjectInputStream in) throws IOException,ClassNotFoundException {
+    private void readObject(final ObjectInputStream in) throws IOException,ClassNotFoundException {
         this.scriptBaseClass = (String)in.readObject();
         this.evaluator = (GroovyEvaluator)in.readObject();
         this.binding = (GroovyContextBinding)in.readObject();
diff --git a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContextBinding.java b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContextBinding.java
index e1bf007..79b1978 100644
--- a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContextBinding.java
+++ b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContextBinding.java
@@ -30,9 +30,9 @@ public class GroovyContextBinding extends Binding implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private GroovyContext context;
+    private final GroovyContext context;
 
-    public GroovyContextBinding(GroovyContext context) {
+    public GroovyContextBinding(final GroovyContext context) {
         if (context == null) {
             throw new IllegalArgumentException("Parameter context may not be null");
         }
@@ -44,8 +44,8 @@ public class GroovyContextBinding extends Binding implements Serializable {
     }
 
     @Override
-    public Object getVariable(String name) {
-        Object result = context.get(name);
+    public Object getVariable(final String name) {
+        final Object result = context.get(name);
         if (result == null && !context.has(name)) {
             throw new MissingPropertyException(name, this.getClass());
         }
@@ -53,7 +53,7 @@ public class GroovyContextBinding extends Binding implements Serializable {
     }
 
     @Override
-    public void setVariable(String name, Object value) {
+    public void setVariable(final String name, final Object value) {
         if (context.has(name)) {
             context.set(name, value);
         } else {
@@ -62,7 +62,7 @@ public class GroovyContextBinding extends Binding implements Serializable {
     }
 
     @Override
-    public boolean hasVariable(String name) {
+    public boolean hasVariable(final String name) {
         return context.has(name);
     }
 
@@ -72,12 +72,12 @@ public class GroovyContextBinding extends Binding implements Serializable {
     }
 
     @Override
-    public Object getProperty(String property) {
+    public Object getProperty(final String property) {
         return getVariable(property);
     }
 
     @Override
-    public void setProperty(String property, Object newValue) {
+    public void setProperty(final String property, final Object newValue) {
         setVariable(property, newValue);
     }
 }
diff --git a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java
index 23bbe9c..aa2c0e6 100644
--- a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java
+++ b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java
@@ -90,7 +90,7 @@ public class GroovyEvaluator extends AbstractBaseEvaluator {
                 return script;
             }
             StringBuffer sb = null;
-            Matcher m = GROOVY_OPERATOR_ALIASES_PATTERN.matcher(script);
+            final Matcher m = GROOVY_OPERATOR_ALIASES_PATTERN.matcher(script);
             while (m.find()) {
                 if (sb == null) {
                     sb = new StringBuffer();
@@ -112,7 +112,7 @@ public class GroovyEvaluator extends AbstractBaseEvaluator {
         this(false);
     }
 
-    public GroovyEvaluator(boolean useInitialScriptAsBaseScript) {
+    public GroovyEvaluator(final boolean useInitialScriptAsBaseScript) {
         this.useInitialScriptAsBaseScript = useInitialScriptAsBaseScript;
         this.scriptCache = newScriptCache();
     }
@@ -127,15 +127,15 @@ public class GroovyEvaluator extends AbstractBaseEvaluator {
      * @return GroovyExtendableScriptCache for this GroovyEvaluator
      */
     protected GroovyExtendableScriptCache newScriptCache() {
-        GroovyExtendableScriptCache scriptCache = new GroovyExtendableScriptCache();
+        final GroovyExtendableScriptCache scriptCache = new GroovyExtendableScriptCache();
         scriptCache.setScriptPreProcessor(getScriptPreProcessor());
         scriptCache.setScriptBaseClass(GroovySCXMLScript.class.getName());
         return scriptCache;
     }
 
     @SuppressWarnings("unchecked")
-    protected Script getScript(GroovyContext groovyContext, String scriptBaseClassName, String scriptSource) {
-        Script script = scriptCache.getScript(scriptBaseClassName, scriptSource);
+    protected Script getScript(final GroovyContext groovyContext, final String scriptBaseClassName, final String scriptSource) {
+        final Script script = scriptCache.getScript(scriptBaseClassName, scriptSource);
         script.setBinding(groovyContext.getBinding());
         return script;
     }
@@ -188,8 +188,8 @@ public class GroovyEvaluator extends AbstractBaseEvaluator {
         try {
             return getScript(getEffectiveContext(groovyCtx), groovyCtx.getScriptBaseClass(), expr).run();
         }
-        catch (Exception e) {
-            String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
+        catch (final Exception e) {
+            final String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
             throw new SCXMLExpressionException("eval('" + expr + "'): " + exMessage, e);
         }
     }
@@ -214,8 +214,8 @@ public class GroovyEvaluator extends AbstractBaseEvaluator {
         try {
             final Object result = getScript(getEffectiveContext(groovyCtx), groovyCtx.getScriptBaseClass(), expr).run();
             return result == null ? Boolean.FALSE : (Boolean)result;
-        } catch (Exception e) {
-            String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
+        } catch (final Exception e) {
+            final String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
             throw new SCXMLExpressionException("evalCond('" + expr + "'): " + exMessage, e);
         }
     }
@@ -246,7 +246,7 @@ public class GroovyEvaluator extends AbstractBaseEvaluator {
                 groovyCtx.setScriptBaseClass(script.getClass().getName());
             }
             return result;
-        } catch (Exception e) {
+        } catch (final Exception e) {
             final String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
             throw new SCXMLExpressionException("evalScript('" + scriptSource + "'): " + exMessage, e);
         }
diff --git a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyExtendableScriptCache.java b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyExtendableScriptCache.java
index b75a186..5418774 100644
--- a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyExtendableScriptCache.java
+++ b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyExtendableScriptCache.java
@@ -111,7 +111,7 @@ public class GroovyExtendableScriptCache implements Serializable {
         protected String scriptName;
         protected transient Class<? extends Script> scriptClass;
 
-        public ScriptCacheElement(String baseClass, String scriptSource) {
+        public ScriptCacheElement(final String baseClass, final String scriptSource) {
             this.baseClass = baseClass;
             this.scriptSource = scriptSource;
         }
@@ -128,7 +128,7 @@ public class GroovyExtendableScriptCache implements Serializable {
             return scriptName;
         }
 
-        public void setScriptName(String scriptName) {
+        public void setScriptName(final String scriptName) {
             this.scriptName = scriptName;
         }
 
@@ -136,7 +136,7 @@ public class GroovyExtendableScriptCache implements Serializable {
             return scriptClass;
         }
 
-        public void setScriptClass(Class<? extends Script> scriptClass) {
+        public void setScriptClass(final Class<? extends Script> scriptClass) {
             this.scriptClass = scriptClass;
         }
 
@@ -183,7 +183,7 @@ public class GroovyExtendableScriptCache implements Serializable {
      * Hook into the de-serialization process, reloading the transient GroovyClassLoader, CompilerConfiguration and
      * re-generate Script classes through {@link #ensureInitializedOrReloaded()}
      */
-    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+    private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
         in.defaultReadObject();
         ensureInitializedOrReloaded();
     }
@@ -198,21 +198,21 @@ public class GroovyExtendableScriptCache implements Serializable {
      * @return A new Script instance from a compiled (or cached) Groovy class parsed from the provided
      * scriptSource
      */
-    public Script getScript(String scriptSource) {
+    public Script getScript(final String scriptSource) {
         return getScript(null, scriptSource);
     }
 
-    public Script getScript(String scriptBaseClass, String scriptSource) {
+    public Script getScript(final String scriptBaseClass, final String scriptSource) {
         Class<? extends Script> scriptClass;
         synchronized (scriptCache) {
             ensureInitializedOrReloaded();
-            ScriptCacheElement cacheKey = new ScriptCacheElement(scriptBaseClass, scriptSource);
-            ScriptCacheElement cacheElement = scriptCache.get(cacheKey);
+            final ScriptCacheElement cacheKey = new ScriptCacheElement(scriptBaseClass, scriptSource);
+            final ScriptCacheElement cacheElement = scriptCache.get(cacheKey);
             if (cacheElement != null) {
                 scriptClass = cacheElement.getScriptClass();
             }
             else {
-                String scriptName = generatedScriptName(scriptSource, scriptCache.size());
+                final String scriptName = generatedScriptName(scriptSource, scriptCache.size());
                 scriptClass = compileScript(scriptBaseClass, scriptSource, scriptName);
                 cacheKey.setScriptName(scriptName);
                 cacheKey.setScriptClass(scriptClass);
@@ -221,7 +221,7 @@ public class GroovyExtendableScriptCache implements Serializable {
         }
         try {
             return scriptClass.newInstance();
-        } catch (Exception e) {
+        } catch (final Exception e) {
             throw new GroovyRuntimeException("Failed to create Script instance for class: "+ scriptClass + ". Reason: " + e, e);
         }
     }
@@ -237,7 +237,7 @@ public class GroovyExtendableScriptCache implements Serializable {
                     () -> new GroovyClassLoader(getParentClassLoaderFactory().getClassLoader(), compilerConfiguration));
             if (!scriptCache.isEmpty()) {
                 // de-serialized: need to re-generate all previously compiled scripts (this can cause a hick-up...):
-                for (ScriptCacheElement element : scriptCache.keySet()) {
+                for (final ScriptCacheElement element : scriptCache.keySet()) {
                     element.setScriptClass(compileScript(element.getBaseClass(), element.getScriptSource(), element.getScriptName()));
                 }
             }
@@ -245,13 +245,13 @@ public class GroovyExtendableScriptCache implements Serializable {
     }
 
     @SuppressWarnings("unchecked")
-    protected Class<Script> compileScript(final String scriptBaseClass, String scriptSource, final String scriptName) {
+    protected Class<Script> compileScript(final String scriptBaseClass, final String scriptSource, final String scriptName) {
         final String script = preProcessScript(scriptSource);
 
-        GroovyCodeSource codeSource = AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>)
+        final GroovyCodeSource codeSource = AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>)
                 () -> new GroovyCodeSource(script, scriptName, getScriptCodeBase()));
 
-        String currentScriptBaseClass = compilerConfiguration.getScriptBaseClass();
+        final String currentScriptBaseClass = compilerConfiguration.getScriptBaseClass();
         try {
             if (scriptBaseClass != null) {
                 compilerConfiguration.setScriptBaseClass(scriptBaseClass);
@@ -263,11 +263,11 @@ public class GroovyExtendableScriptCache implements Serializable {
         }
     }
 
-    protected String preProcessScript(String scriptSource) {
+    protected String preProcessScript(final String scriptSource) {
         return getScriptPreProcessor() != null ? getScriptPreProcessor().preProcess(scriptSource) : scriptSource;
     }
 
-    protected String generatedScriptName(String scriptSource, int seed) {
+    protected String generatedScriptName(final String scriptSource, final int seed) {
         return "script"+seed+"_"+Math.abs(scriptSource.hashCode())+".groovy";
     }
 
@@ -282,7 +282,7 @@ public class GroovyExtendableScriptCache implements Serializable {
      *                             the {@link #DEFAULT_SCRIPT_CODE_BASE} will be set instead.
      */
     @SuppressWarnings("unused")
-    public void setScriptCodeBase(String scriptCodeBase) {
+    public void setScriptCodeBase(final String scriptCodeBase) {
         if (scriptCodeBase != null && scriptCodeBase.length() > 0 && scriptCodeBase.charAt(0) == '/') {
             this.scriptCodeBase = scriptCodeBase;
         }
@@ -295,7 +295,7 @@ public class GroovyExtendableScriptCache implements Serializable {
         return scriptBaseClass;
     }
 
-    public void setScriptBaseClass(String scriptBaseClass) {
+    public void setScriptBaseClass(final String scriptBaseClass) {
         this.scriptBaseClass = scriptBaseClass;
     }
 
@@ -304,7 +304,7 @@ public class GroovyExtendableScriptCache implements Serializable {
     }
 
     @SuppressWarnings("unused")
-    public void setParentClassLoaderFactory(ParentClassLoaderFactory parentClassLoaderFactory) {
+    public void setParentClassLoaderFactory(final ParentClassLoaderFactory parentClassLoaderFactory) {
         this.parentClassLoaderFactory = parentClassLoaderFactory != null ? parentClassLoaderFactory : DEFAULT_PARENT_CLASS_LOADER_FACTORY;
     }
 
@@ -313,7 +313,7 @@ public class GroovyExtendableScriptCache implements Serializable {
     }
 
     @SuppressWarnings("unused")
-    public void setCompilerConfigurationFactory(CompilerConfigurationFactory compilerConfigurationFactory) {
+    public void setCompilerConfigurationFactory(final CompilerConfigurationFactory compilerConfigurationFactory) {
         this.compilerConfigurationFactory = compilerConfigurationFactory != null ? compilerConfigurationFactory : DEFAULT_COMPILER_CONFIGURATION_FACTORY;
     }
 
diff --git a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovySCXMLScript.java b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovySCXMLScript.java
index cdd1dcb..fc86291 100644
--- a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovySCXMLScript.java
+++ b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovySCXMLScript.java
@@ -75,11 +75,11 @@ public abstract class GroovySCXMLScript extends Script {
      * @param property the name of variable to check if it exists
      * @return true if the variable exists, false otherwise
      */
-    public boolean var(String property) {
+    public boolean var(final String property) {
         if (!context.has(property)) {
             try {
                 getMetaClass().getProperty(this, property);
-            } catch (MissingPropertyException e) {
+            } catch (final MissingPropertyException e) {
                 return false;
             }
         }
@@ -104,7 +104,7 @@ public abstract class GroovySCXMLScript extends Script {
      * @param obj the object to check if it is empty
      * @return true if the object is empty, false otherwise
      */
-    public boolean empty(Object obj) {
+    public boolean empty(final Object obj) {
         return obj == null ||
                 (obj instanceof String && ((String)obj).isEmpty()) ||
                 ((obj.getClass().isArray() && Array.getLength(obj)==0)) ||
diff --git a/src/main/java/org/apache/commons/scxml2/env/javascript/JSBindings.java b/src/main/java/org/apache/commons/scxml2/env/javascript/JSBindings.java
index 8e257d6..0322365 100644
--- a/src/main/java/org/apache/commons/scxml2/env/javascript/JSBindings.java
+++ b/src/main/java/org/apache/commons/scxml2/env/javascript/JSBindings.java
@@ -40,7 +40,7 @@ public class JSBindings implements Bindings {
      * @throws IllegalArgumentException Thrown if <code>jsContext</code> is <code>null</code>.
      *
      */
-    public JSBindings(JSContext jsContext) {
+    public JSBindings(final JSContext jsContext) {
         setContext(jsContext);
     }
 
@@ -50,7 +50,7 @@ public class JSBindings implements Bindings {
      * @param jsContext the SCXML context to use for script variables.
      * @throws IllegalArgumentException Thrown if <code>jsContext</code> is <code>null</code>.
      */
-    public void setContext(JSContext jsContext) {
+    public void setContext(final JSContext jsContext) {
         if (jsContext == null) {
             throw new IllegalArgumentException("SCXML context is required");
         }
@@ -61,7 +61,7 @@ public class JSBindings implements Bindings {
      * Returns <code>true</code> if the SCXML context contains a variable identified by <code>key</code>.
      */
     @Override
-    public boolean containsKey(Object key) {
+    public boolean containsKey(final Object key) {
         return context.has(key.toString());
     }
 
@@ -85,7 +85,7 @@ public class JSBindings implements Bindings {
      * Returns <code>true</code> if the SCXML context contains <code>value</code>.
      */
     @Override
-    public boolean containsValue(Object value) {
+    public boolean containsValue(final Object value) {
         return context.getVars().containsValue(value);
     }
 
@@ -117,7 +117,7 @@ public class JSBindings implements Bindings {
      * Returns the value from the SCXML context identified by <code>key</code>.
      */
     @Override
-    public Object get(Object key) {
+    public Object get(final Object key) {
         return context.get(key.toString());
     }
 
@@ -131,7 +131,7 @@ public class JSBindings implements Bindings {
      * @param value The variable value
      */
     @Override
-    public Object put(String name, Object value) {
+    public Object put(final String name, final Object value) {
         Object old = null;
         if (context.has(name)) {
             old = context.get(name);
@@ -147,8 +147,8 @@ public class JSBindings implements Bindings {
      * @param toMerge the map of variables to merge
      */
     @Override
-    public void putAll(Map<? extends String, ?> toMerge) {
-        for (Map.Entry<? extends String, ?> entry : toMerge.entrySet()) {
+    public void putAll(final Map<? extends String, ?> toMerge) {
+        for (final Map.Entry<? extends String, ?> entry : toMerge.entrySet()) {
             put(entry.getKey(), entry.getValue());
         }
     }
@@ -158,7 +158,7 @@ public class JSBindings implements Bindings {
      * @param name the variable name
      */
     @Override
-    public Object remove(Object name) {
+    public Object remove(final Object name) {
         return context.getVars().remove(name);
     }
 
diff --git a/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java
index 265e473..b1c6b65 100644
--- a/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java
+++ b/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java
@@ -105,7 +105,7 @@ public class JSEvaluator extends AbstractBaseEvaluator {
                 try {
                     initGlobalsScript = IOUtils.toString(JSEvaluator.class.getResourceAsStream("init_global.js"), "UTF-8");
                 }
-                catch (IOException ioe) {
+                catch (final IOException ioe) {
                     throw new RuntimeException("Failed to load init_global.js from classpath", ioe);
                 }
             }
@@ -155,7 +155,7 @@ public class JSEvaluator extends AbstractBaseEvaluator {
      * @return The SCXML instance shared ScriptContext
      * @throws ScriptException Thrown if the initialization of the Global Javascript engine itself failed
      */
-    protected ScriptContext getScriptContext(JSContext jsContext) throws ScriptException {
+    protected ScriptContext getScriptContext(final JSContext jsContext) throws ScriptException {
         if (scriptContext == null) {
             scriptContext = new SimpleScriptContext();
             scriptContext.setBindings(getEngine().createBindings(), ScriptContext.ENGINE_SCOPE);
@@ -192,7 +192,7 @@ public class JSEvaluator extends AbstractBaseEvaluator {
      *
      */
     @Override
-    public Context newContext(Context parent) {
+    public Context newContext(final Context parent) {
         return new JSContext(parent);
     }
 
@@ -208,7 +208,7 @@ public class JSEvaluator extends AbstractBaseEvaluator {
      * @throws SCXMLExpressionException Thrown if the expression was invalid or the execution raised an error itself.
      */
     @Override
-    public Object eval(Context context, String expression) throws SCXMLExpressionException {
+    public Object eval(final Context context, final String expression) throws SCXMLExpressionException {
         if (expression == null) {
             return null;
         }
@@ -217,14 +217,14 @@ public class JSEvaluator extends AbstractBaseEvaluator {
         }
 
         try {
-            JSContext effectiveContext = getEffectiveContext((JSContext)context);
-            ScriptContext scriptContext = getScriptContext(effectiveContext);
-            Object ret = getEngine().eval(expression, scriptContext);
+            final JSContext effectiveContext = getEffectiveContext((JSContext)context);
+            final ScriptContext scriptContext = getScriptContext(effectiveContext);
+            final Object ret = getEngine().eval(expression, scriptContext);
             // copy Javascript global variables to SCXML context.
             copyJavascriptGlobalsToScxmlContext(scriptContext.getBindings(ScriptContext.ENGINE_SCOPE), effectiveContext);
             return ret;
-        } catch (Exception e) {
-            String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
+        } catch (final Exception e) {
+            final String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
             throw new SCXMLExpressionException("eval('" + expression + "'): " + exMessage, e);
         }
     }
@@ -241,7 +241,7 @@ public class JSEvaluator extends AbstractBaseEvaluator {
      * @throws SCXMLExpressionException Thrown if the expression was invalid.
      */
     @Override
-    public Boolean evalCond(Context context, String expression) throws SCXMLExpressionException {
+    public Boolean evalCond(final Context context, final String expression) throws SCXMLExpressionException {
         return (Boolean)eval(context, "Boolean("+expression+")");
     }
 
@@ -256,7 +256,7 @@ public class JSEvaluator extends AbstractBaseEvaluator {
      * @throws SCXMLExpressionException Thrown if the script was invalid.
      */
     @Override
-    public Object evalScript(Context ctx, String script) throws SCXMLExpressionException {
+    public Object evalScript(final Context ctx, final String script) throws SCXMLExpressionException {
         return eval(ctx, script);
     }
 
@@ -283,7 +283,7 @@ public class JSEvaluator extends AbstractBaseEvaluator {
      */
     private void copyJavascriptGlobalsToScxmlContext(final Bindings global, final JSContext jsContext) {
         if (global != null) {
-            for (String key : global.keySet()) {
+            for (final String key : global.keySet()) {
                 if (!SCXML_SYSTEM_CONTEXT.equals(key)) {
                     jsContext.set(key, global.get(key));
                 }
diff --git a/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java
index 0f11d0f..9f181bf 100644
--- a/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java
+++ b/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java
@@ -107,10 +107,10 @@ public class JexlEvaluator extends AbstractBaseEvaluator {
         }
         try {
             final JexlContext effective = getEffectiveContext((JexlContext)ctx);
-            JexlExpression exp = getJexlEngine().createExpression(expr);
+            final JexlExpression exp = getJexlEngine().createExpression(expr);
             return exp.evaluate(effective);
-        } catch (Exception e) {
-            String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
+        } catch (final Exception e) {
+            final String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
             throw new SCXMLExpressionException("eval('" + expr + "'): " + exMessage, e);
         }
     }
@@ -128,11 +128,11 @@ public class JexlEvaluator extends AbstractBaseEvaluator {
         }
         try {
             final JexlContext effective = getEffectiveContext((JexlContext)ctx);
-            JexlExpression exp = getJexlEngine().createExpression(expr);
+            final JexlExpression exp = getJexlEngine().createExpression(expr);
             final Object result = exp.evaluate(effective);
             return result == null ? Boolean.FALSE : (Boolean)result;
-        } catch (Exception e) {
-            String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
+        } catch (final Exception e) {
+            final String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
             throw new SCXMLExpressionException("evalCond('" + expr + "'): " + exMessage, e);
         }
     }
@@ -152,8 +152,8 @@ public class JexlEvaluator extends AbstractBaseEvaluator {
             final JexlContext effective = getEffectiveContext((JexlContext) ctx);
             final JexlScript jexlScript = getJexlEngine().createScript(script);
             return jexlScript.execute(effective);
-        } catch (Exception e) {
-            String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
+        } catch (final Exception e) {
+            final String exMessage = e.getMessage() != null ? e.getMessage() : e.getClass().getCanonicalName();
             throw new SCXMLExpressionException("evalScript('" + script + "'): " + exMessage, e);
         }
     }
@@ -178,7 +178,7 @@ public class JexlEvaluator extends AbstractBaseEvaluator {
     protected JexlEngine createJexlEngine() {
         // With null prefix, define top-level user defined functions.
         // See javadoc of org.apache.commons.jexl2.JexlEngine#setFunctions(Map<String,Object> funcs) for detail.
-        Map<String, Object> funcs = new HashMap<>();
+        final Map<String, Object> funcs = new HashMap<>();
         funcs.put(null, JexlBuiltin.class);
         return new JexlBuilder().namespaces(funcs).cache(256).create();
     }
diff --git a/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java
index 6f0443b..93adb09 100644
--- a/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java
+++ b/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java
@@ -79,9 +79,9 @@ public class MinimalEvaluator implements Evaluator, Serializable {
     @Override
     public Boolean evalCond(final Context ctx, final String expr) throws SCXMLExpressionException {
         // only support the "In(stateId)" predicate
-        String predicate = expr != null ? expr.trim() : "";
+        final String predicate = expr != null ? expr.trim() : "";
         if (predicate.startsWith("In(") && predicate.endsWith(")")) {
-            String stateId = predicate.substring(3, predicate.length()-1);
+            final String stateId = predicate.substring(3, predicate.length()-1);
             return Builtin.isMember(ctx, stateId);
         }
         return false;
diff --git a/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java b/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java
index 5cdcb63..0d12f82 100644
--- a/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java
+++ b/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java
@@ -72,7 +72,7 @@ public class SimpleSCXMLInvoker implements Invoker, Serializable {
      * {@inheritDoc}.
      */
     @Override
-    public void setParentSCXMLExecutor(SCXMLExecutor parentSCXMLExecutor) {
+    public void setParentSCXMLExecutor(final SCXMLExecutor parentSCXMLExecutor) {
         this.parentSCXMLExecutor = parentSCXMLExecutor;
     }
 
@@ -115,17 +115,17 @@ public class SimpleSCXMLInvoker implements Invoker, Serializable {
         execute(scxml, params);
     }
 
-    protected void execute(SCXML scxml, final Map<String, Object> params) throws InvokerException {
+    protected void execute(final SCXML scxml, final Map<String, Object> params) throws InvokerException {
         try {
             executor = new SCXMLExecutor(parentSCXMLExecutor, invokeId, scxml);
         }
-        catch (ModelException me) {
+        catch (final ModelException me) {
             throw new InvokerException(me);
         }
         executor.addListener(scxml, new SimpleSCXMLListener());
         try {
             executor.run(params);
-        } catch (ModelException me) {
+        } catch (final ModelException me) {
             throw new InvokerException(me.getMessage(), me.getCause());
         }
     }
diff --git a/src/main/java/org/apache/commons/scxml2/io/ContentParser.java b/src/main/java/org/apache/commons/scxml2/io/ContentParser.java
index 099cb7f..2d326ee 100644
--- a/src/main/java/org/apache/commons/scxml2/io/ContentParser.java
+++ b/src/main/java/org/apache/commons/scxml2/io/ContentParser.java
@@ -104,8 +104,8 @@ public class ContentParser {
     public static String spaceNormalizeContent(final String content) {
         if (content != null) {
             int index = 0;
-            int length = content.length();
-            StringBuilder buffer = new StringBuilder(length);
+            final int length = content.length();
+            final StringBuilder buffer = new StringBuilder(length);
             boolean whiteSpace = false;
             while (index < length) {
                 if (isWhiteSpace(content.charAt(index))) {
@@ -200,16 +200,16 @@ public class ContentParser {
      */
     public String toXml(final Node node) throws IOException {
         try {
-            StringWriter writer = new StringWriter();
-            Transformer transformer = TransformerFactory.newInstance().newTransformer();
-            Properties outputProps = new Properties();
+            final StringWriter writer = new StringWriter();
+            final Transformer transformer = TransformerFactory.newInstance().newTransformer();
+            final Properties outputProps = new Properties();
             outputProps.put(OutputKeys.OMIT_XML_DECLARATION, "no");
             outputProps.put(OutputKeys.STANDALONE, "no");
             outputProps.put(OutputKeys.INDENT, "yes");
             transformer.setOutputProperties(outputProps);
             transformer.transform(new DOMSource(node), new StreamResult(writer));
             return writer.toString();
-        } catch (TransformerException e) {
+        } catch (final TransformerException e) {
             throw new IOException(e);
         }
     }
@@ -227,7 +227,7 @@ public class ContentParser {
      */
     public ParsedValue parseContent(final String content) throws IOException {
         if (content != null) {
-            String src = trimContent(content);
+            final String src = trimContent(content);
             if (hasJsonSignature(src)) {
                 return new JsonValue(parseJson(src), false);
             }
@@ -247,7 +247,7 @@ public class ContentParser {
      */
     public ParsedValue parseResource(final String resourceURL) throws IOException {
         try (InputStream in = new URL(resourceURL).openStream()) {
-            String content = IOUtils.toString(in, "UTF-8");
+            final String content = IOUtils.toString(in, "UTF-8");
             return parseContent(content);
         }
     }
diff --git a/src/main/java/org/apache/commons/scxml2/io/ModelUpdater.java b/src/main/java/org/apache/commons/scxml2/io/ModelUpdater.java
index c74555f..9c79903 100644
--- a/src/main/java/org/apache/commons/scxml2/io/ModelUpdater.java
+++ b/src/main/java/org/apache/commons/scxml2/io/ModelUpdater.java
@@ -137,8 +137,8 @@ final class ModelUpdater {
     static void updateSCXML(final SCXML scxml) throws ModelException {
         initDocumentOrder(scxml.getChildren(), 1);
 
-        String initial = scxml.getInitial();
-        SimpleTransition initialTransition = new SimpleTransition();
+        final String initial = scxml.getInitial();
+        final SimpleTransition initialTransition = new SimpleTransition();
 
         if (initial != null) {
 
@@ -156,7 +156,7 @@ final class ModelUpdater {
         }
 
         scxml.setInitialTransition(initialTransition);
-        Map<String, TransitionTarget> targets = scxml.getTargets();
+        final Map<String, TransitionTarget> targets = scxml.getTargets();
         updateEnterableStates(scxml.getChildren(), targets);
 
         scxml.getInitialTransition().setObservableId(1);
@@ -171,11 +171,11 @@ final class ModelUpdater {
      * @return Returns the next to be used order value
      */
     private static int initDocumentOrder(final List<EnterableState> states, int nextOrder) {
-        for (EnterableState state : states) {
+        for (final EnterableState state : states) {
             state.setOrder(nextOrder++);
             if (state instanceof TransitionalState) {
-                TransitionalState ts = (TransitionalState)state;
-                for (Transition t : ts.getTransitionsList()) {
+                final TransitionalState ts = (TransitionalState)state;
+                for (final Transition t : ts.getTransitionsList()) {
                     t.setOrder(nextOrder++);
                 }
                 nextOrder = initDocumentOrder(ts.getChildren(), nextOrder);
@@ -192,20 +192,20 @@ final class ModelUpdater {
      * @return Returns the next to be used observable id sequence value
      */
     private static int initObservables(final List<EnterableState>states, int nextObservableId) {
-        for (EnterableState es : states) {
+        for (final EnterableState es : states) {
             es.setObservableId(nextObservableId++);
             if (es instanceof TransitionalState) {
-                TransitionalState ts = (TransitionalState)es;
+                final TransitionalState ts = (TransitionalState)es;
                 if (ts instanceof State) {
-                    State s = (State)ts;
+                    final State s = (State)ts;
                     if (s.getInitial() != null && s.getInitial().getTransition() != null) {
                         s.getInitial().getTransition().setObservableId(nextObservableId++);
                     }
                 }
-                for (Transition t : ts.getTransitionsList()) {
+                for (final Transition t : ts.getTransitionsList()) {
                     t.setObservableId(nextObservableId++);
                 }
-                for (History h : ts.getHistory()) {
+                for (final History h : ts.getHistory()) {
                     h.setObservableId(nextObservableId++);
                     if (h.getTransition() != null) {
                         h.getTransition().setObservableId(nextObservableId++);
@@ -227,7 +227,7 @@ final class ModelUpdater {
      */
     private static void updateState(final State state, final Map<String, TransitionTarget> targets)
             throws ModelException {
-        List<EnterableState> children = state.getChildren();
+        final List<EnterableState> children = state.getChildren();
         if (state.isComposite()) {
             //initialize next / initial
             Initial ini = state.getInitial();
@@ -235,16 +235,16 @@ final class ModelUpdater {
                 state.setFirst(children.get(0).getId());
                 ini = state.getInitial();
             }
-            SimpleTransition initialTransition = ini.getTransition();
+            final SimpleTransition initialTransition = ini.getTransition();
             updateTransition(initialTransition, targets);
-            Set<TransitionTarget> initialStates = initialTransition.getTargets();
+            final Set<TransitionTarget> initialStates = initialTransition.getTargets();
             // we have to allow for an indirect descendant initial (targets)
             //check that initialState is a descendant of s
             if (initialStates.size() == 0) {
                 logAndThrowModelError(ERR_STATE_BAD_INIT,
                         new Object[] {getName(state)});
             } else {
-                for (TransitionTarget initialState : initialStates) {
+                for (final TransitionTarget initialState : initialStates) {
                     if (!initialState.isDescendantOf(state)) {
                         logAndThrowModelError(ERR_STATE_BAD_INIT,
                                 new Object[] {getName(state)});
@@ -256,19 +256,19 @@ final class ModelUpdater {
             logAndThrowModelError(ERR_UNSUPPORTED_INIT, new Object[] {getName(state)});
         }
 
-        List<History> histories = state.getHistory();
+        final List<History> histories = state.getHistory();
         if (histories.size() > 0 && state.isSimple()) {
             logAndThrowModelError(ERR_HISTORY_SIMPLE_STATE,
                     new Object[] {getName(state)});
         }
-        for (History history : histories) {
+        for (final History history : histories) {
             updateHistory(history, targets, state);
         }
-        for (Transition transition : state.getTransitionsList()) {
+        for (final Transition transition : state.getTransitionsList()) {
             updateTransition(transition, targets);
         }
 
-        for (Invoke inv : state.getInvokes()) {
+        for (final Invoke inv : state.getInvokes()) {
             if (inv.getSrc() != null && inv.getSrcexpr() != null) {
                 logAndThrowModelError(ERR_INVOKE_AMBIGUOUS_SRC, new Object[] {getName(state)});
             }
@@ -287,11 +287,11 @@ final class ModelUpdater {
     private static void updateParallel(final Parallel parallel, final Map<String, TransitionTarget> targets)
             throws ModelException {
         updateEnterableStates(parallel.getChildren(), targets);
-        for (Transition transition : parallel.getTransitionsList()) {
+        for (final Transition transition : parallel.getTransitionsList()) {
             updateTransition(transition, targets);
         }
-        List<History> histories = parallel.getHistory();
-        for (History history : histories) {
+        final List<History> histories = parallel.getHistory();
+        for (final History history : histories) {
             updateHistory(history, targets, parallel);
         }
         // TODO: parallel must may have invokes too
@@ -307,7 +307,7 @@ final class ModelUpdater {
     private static void updateEnterableStates(final List<EnterableState> states,
                                               final Map<String, TransitionTarget> targets)
         throws ModelException {
-        for (EnterableState es : states) {
+        for (final EnterableState es : states) {
             if (es instanceof State) {
                 updateState((State) es, targets);
             } else if (es instanceof Parallel) {
@@ -328,19 +328,19 @@ final class ModelUpdater {
                                       final Map<String, TransitionTarget> targets,
                                       final TransitionalState parent)
             throws ModelException {
-        SimpleTransition transition = history.getTransition();
+        final SimpleTransition transition = history.getTransition();
         if (transition == null || transition.getNext() == null) {
             logAndThrowModelError(ERR_HISTORY_NO_DEFAULT,
                     new Object[] {history.getId(), getName(parent)});
         }
         else {
             updateTransition(transition, targets);
-            Set<TransitionTarget> historyStates = transition.getTargets();
+            final Set<TransitionTarget> historyStates = transition.getTargets();
             if (historyStates.size() == 0) {
                 logAndThrowModelError(ERR_STATE_NO_HIST,
                         new Object[] {getName(parent)});
             }
-            for (TransitionTarget historyState : historyStates) {
+            for (final TransitionTarget historyState : historyStates) {
                 if (!history.isDeep()) {
                     // Shallow history
                     if (!parent.getChildren().contains(historyState)) {
@@ -367,17 +367,17 @@ final class ModelUpdater {
      */
     private static void updateTransition(final SimpleTransition transition,
                                          final Map<String, TransitionTarget> targets) throws ModelException {
-        String next = transition.getNext();
+        final String next = transition.getNext();
         if (next == null) { // stay transition
             return;
         }
-        Set<TransitionTarget> tts = transition.getTargets();
+        final Set<TransitionTarget> tts = transition.getTargets();
         if (tts.isEmpty()) {
             // 'next' is a space separated list of transition target IDs
-            StringTokenizer ids = new StringTokenizer(next);
+            final StringTokenizer ids = new StringTokenizer(next);
             while (ids.hasMoreTokens()) {
-                String id = ids.nextToken();
-                TransitionTarget tt = targets.get(id);
+                final String id = ids.nextToken();
+                final TransitionTarget tt = targets.get(id);
                 if (tt == null) {
                     logAndThrowModelError(ERR_TARGET_NOT_FOUND, new Object[] {
                             id });
@@ -385,7 +385,7 @@ final class ModelUpdater {
                 tts.add(tt);
             }
             if (tts.size() > 1) {
-                boolean legal = verifyTransitionTargets(tts);
+                final boolean legal = verifyTransitionTargets(tts);
                 if (!legal) {
                     logAndThrowModelError(ERR_ILLEGAL_TARGETS, new Object[] {
                             next });
@@ -403,9 +403,9 @@ final class ModelUpdater {
      */
     private static void logAndThrowModelError(final String errType,
                                               final Object[] msgArgs) throws ModelException {
-        MessageFormat msgFormat = new MessageFormat(errType);
-        String errMsg = msgFormat.format(msgArgs);
-        org.apache.commons.logging.Log log = LogFactory.
+        final MessageFormat msgFormat = new MessageFormat(errType);
+        final String errMsg = msgFormat.format(msgArgs);
+        final org.apache.commons.logging.Log log = LogFactory.
                 getLog(ModelUpdater.class);
         log.error(errMsg);
         throw new ModelException(errMsg);
@@ -460,7 +460,7 @@ final class ModelUpdater {
         }
         TransitionTarget first = null;
         int i = 0;
-        for (TransitionTarget tt : tts) {
+        for (final TransitionTarget tt : tts) {
             if (first == null) {
                 first = tt;
                 i = tt.getNumberOfAncestors();
@@ -473,7 +473,7 @@ final class ModelUpdater {
                 return false;
             }
             // ensure no target is an ancestor of any other target on the list
-            for (TransitionTarget other : tts) {
+            for (final TransitionTarget other : tts) {
                 if (other != tt && other.isDescendantOf(tt) || tt.isDescendantOf(other)) {
                     return false;
                 }
diff --git a/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java b/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java
index e62062f..63529d9 100644
--- a/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java
+++ b/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java
@@ -278,7 +278,7 @@ public final class SCXMLReader {
         if (scxmlPath == null) {
             throw new IllegalArgumentException(ERR_NULL_PATH);
         }
-        SCXML scxml = readInternal(configuration, null, scxmlPath, null, null, null);
+        final SCXML scxml = readInternal(configuration, null, scxmlPath, null, null, null);
         if (scxml != null) {
             ModelUpdater.updateSCXML(scxml);
         }
@@ -322,7 +322,7 @@ public final class SCXMLReader {
         if (scxmlURL == null) {
             throw new IllegalArgumentException(ERR_NULL_URL);
         }
-        SCXML scxml = readInternal(configuration, scxmlURL, null, null, null, null);
+        final SCXML scxml = readInternal(configuration, scxmlURL, null, null, null, null);
         if (scxml != null) {
             ModelUpdater.updateSCXML(scxml);
         }
@@ -366,7 +366,7 @@ public final class SCXMLReader {
         if (scxmlStream == null) {
             throw new IllegalArgumentException(ERR_NULL_ISTR);
         }
-        SCXML scxml = readInternal(configuration, null, null, scxmlStream, null, null);
+        final SCXML scxml = readInternal(configuration, null, null, scxmlStream, null, null);
         if (scxml != null) {
             ModelUpdater.updateSCXML(scxml);
         }
@@ -410,7 +410,7 @@ public final class SCXMLReader {
         if (scxmlReader == null) {
             throw new IllegalArgumentException(ERR_NULL_READ);
         }
-        SCXML scxml = readInternal(configuration, null, null, null, scxmlReader, null);
+        final SCXML scxml = readInternal(configuration, null, null, null, scxmlReader, null);
         if (scxml != null) {
             ModelUpdater.updateSCXML(scxml);
         }
@@ -454,7 +454,7 @@ public final class SCXMLReader {
         if (scxmlSource == null) {
             throw new IllegalArgumentException(ERR_NULL_SRC);
         }
-        SCXML scxml = readInternal(configuration, null, null, null, null, scxmlSource);
+        final SCXML scxml = readInternal(configuration, null, null, null, null, scxmlSource);
         if (scxml != null) {
             ModelUpdater.updateSCXML(scxml);
         }
@@ -494,7 +494,7 @@ public final class SCXMLReader {
             }
         }
 
-        XMLStreamReader reader = getReader(configuration, scxmlURL, scxmlPath, scxmlStream, scxmlReader, scxmlSource);
+        final XMLStreamReader reader = getReader(configuration, scxmlURL, scxmlPath, scxmlStream, scxmlReader, scxmlSource);
 
         return readDocument(reader, configuration);
     }
@@ -519,7 +519,7 @@ public final class SCXMLReader {
     private static SCXML readDocument(final XMLStreamReader reader, final Configuration configuration)
             throws IOException, ModelException, XMLStreamException {
 
-        SCXML scxml = new SCXML();
+        final SCXML scxml = new SCXML();
         scxml.setPathResolver(configuration.pathResolver);
         while (reader.hasNext()) {
             String name, nsURI;
@@ -567,7 +567,7 @@ public final class SCXMLReader {
         scxml.setName(readAV(reader, SCXMLConstants.ATTR_NAME));
         scxml.setProfile(readAV(reader, SCXMLConstants.ATTR_PROFILE));
         scxml.setVersion(readRequiredAV(reader, SCXMLConstants.ELEM_SCXML, SCXMLConstants.ATTR_VERSION));
-        String binding = readAV(reader, SCXMLConstants.ATTR_BINDING);
+        final String binding = readAV(reader, SCXMLConstants.ATTR_BINDING);
         if (binding != null) {
             if (SCXMLConstants.ATTR_BINDING_LATE.equals(binding)) {
                 scxml.setLateBinding(true);
@@ -633,16 +633,16 @@ public final class SCXMLReader {
                                   final TransitionalState parent)
             throws IOException, ModelException, XMLStreamException {
 
-        State state = new State();
+        final State state = new State();
         state.setId(readOrGeneratedTransitionTargetId(reader, scxml, SCXMLConstants.ELEM_STATE));
-        String initial = readAV(reader, SCXMLConstants.ATTR_INITIAL);
+        final String initial = readAV(reader, SCXMLConstants.ATTR_INITIAL);
         if (initial != null) {
             state.setFirst(initial);
         }
-        String src = readAV(reader, SCXMLConstants.ATTR_SRC);
+        final String src = readAV(reader, SCXMLConstants.ATTR_SRC);
         if (src != null) {
             String source = src;
-            Configuration copy = new Configuration(configuration);
+            final Configuration copy = new Configuration(configuration);
             if (copy.parent == null) {
                 copy.parent = scxml;
             }
@@ -724,12 +724,12 @@ public final class SCXMLReader {
                                      final TransitionalState parent)
             throws IOException, ModelException, XMLStreamException {
 
-        Parallel parallel = new Parallel();
+        final Parallel parallel = new Parallel();
         parallel.setId(readOrGeneratedTransitionTargetId(reader, scxml, SCXMLConstants.ELEM_PARALLEL));
-        String src = readAV(reader, SCXMLConstants.ATTR_SRC);
+        final String src = readAV(reader, SCXMLConstants.ATTR_SRC);
         if (src != null) {
             String source = src;
-            Configuration copy = new Configuration(configuration);
+            final Configuration copy = new Configuration(configuration);
             if (copy.parent == null) {
                 copy.parent = scxml;
             }
@@ -807,7 +807,7 @@ public final class SCXMLReader {
                                   final State parent)
             throws XMLStreamException, ModelException, IOException {
 
-        Final end = new Final();
+        final Final end = new Final();
         end.setId(readOrGeneratedTransitionTargetId(reader, scxml, SCXMLConstants.ELEM_FINAL));
 
         if (parent == null) {
@@ -862,7 +862,7 @@ public final class SCXMLReader {
     private static void readDoneData(final XMLStreamReader reader, final Configuration configuration, final Final parent)
             throws XMLStreamException, ModelException {
 
-        DoneData doneData = new DoneData();
+        final DoneData doneData = new DoneData();
         parent.setDoneData(doneData);
 
         loop : while (reader.hasNext()) {
@@ -917,8 +917,8 @@ public final class SCXMLReader {
             throws ModelException {
 
         // Check for URI fragment
-        String[] fragments = src.split("#", 2);
-        String location = fragments[0];
+        final String[] fragments = src.split("#", 2);
+        final String location = fragments[0];
         String fragment = null;
         if (fragments.length > 1) {
             fragment = fragments[1];
@@ -928,9 +928,9 @@ public final class SCXMLReader {
         SCXML externalSCXML;
         try {
             externalSCXML = SCXMLReader.readInternal(configuration, new URL(location), null, null, null, null);
-        } catch (Exception e) {
-            MessageFormat msgFormat = new MessageFormat(ERR_STATE_SRC);
-            String errMsg = msgFormat.format(new Object[] {src});
+        } catch (final Exception e) {
+            final MessageFormat msgFormat = new MessageFormat(ERR_STATE_SRC);
+            final String errMsg = msgFormat.format(new Object[] {src});
             throw new ModelException(errMsg + " : " + e.getMessage(), e);
         }
 
@@ -938,13 +938,13 @@ public final class SCXMLReader {
         if (fragment == null) {
             // All targets pulled in since its not a src fragment
             if (ts instanceof State) {
-                State s = (State) ts;
-                Initial ini = new Initial();
-                SimpleTransition t = new SimpleTransition();
+                final State s = (State) ts;
+                final Initial ini = new Initial();
+                final SimpleTransition t = new SimpleTransition();
                 t.setNext(externalSCXML.getInitial());
                 ini.setTransition(t);
                 s.setInitial(ini);
-                for (EnterableState child : externalSCXML.getChildren()) {
+                for (final EnterableState child : externalSCXML.getChildren()) {
                     s.addChild(child);
                 }
                 s.setDatamodel(externalSCXML.getDatamodel());
@@ -953,48 +953,48 @@ public final class SCXMLReader {
             }
         } else {
             // Need to pull in only descendent targets
-            Object source = externalSCXML.getTargets().get(fragment);
+            final Object source = externalSCXML.getTargets().get(fragment);
             if (source == null) {
-                MessageFormat msgFormat = new MessageFormat(ERR_STATE_SRC_FRAGMENT);
-                String errMsg = msgFormat.format(new Object[] {src});
+                final MessageFormat msgFormat = new MessageFormat(ERR_STATE_SRC_FRAGMENT);
+                final String errMsg = msgFormat.format(new Object[] {src});
                 throw new ModelException(errMsg);
             }
             if (source instanceof State && ts instanceof State) {
-                State s = (State) ts;
-                State include = (State) source;
-                for (OnEntry onentry : include.getOnEntries()) {
+                final State s = (State) ts;
+                final State include = (State) source;
+                for (final OnEntry onentry : include.getOnEntries()) {
                     s.addOnEntry(onentry);
                 }
-                for (OnExit onexit : include.getOnExits()) {
+                for (final OnExit onexit : include.getOnExits()) {
                     s.addOnExit(onexit);
                 }
                 s.setDatamodel(include.getDatamodel());
-                List<History> histories = include.getHistory();
-                for (History h : histories) {
+                final List<History> histories = include.getHistory();
+                for (final History h : histories) {
                     s.addHistory(h);
                     configuration.parent.addTarget(h);
                 }
-                for (EnterableState child : include.getChildren()) {
+                for (final EnterableState child : include.getChildren()) {
                     s.addChild(child);
                     configuration.parent.addTarget(child);
                     readInExternalTargets(configuration.parent, child);
                 }
-                for (Invoke invoke : include.getInvokes()) {
+                for (final Invoke invoke : include.getInvokes()) {
                     s.addInvoke(invoke);
                 }
                 if (include.getInitial() != null) {
                     s.setInitial(include.getInitial());
                 }
-                List<Transition> transitions = include.getTransitionsList();
-                for (Transition t : transitions) {
+                final List<Transition> transitions = include.getTransitionsList();
+                for (final Transition t : transitions) {
                     s.addTransition(t);
                 }
             } else if (ts instanceof Parallel && source instanceof Parallel) {
                 // TODO src attribute for <parallel>
             } else {
-                MessageFormat msgFormat =
+                final MessageFormat msgFormat =
                         new MessageFormat(ERR_STATE_SRC_FRAGMENT_TARGET);
-                String errMsg = msgFormat.format(new Object[] {src});
+                final String errMsg = msgFormat.format(new Object[] {src});
                 throw new ModelException(errMsg);
             }
         }
@@ -1008,10 +1008,10 @@ public final class SCXMLReader {
      */
     private static void readInExternalTargets(final SCXML parent, final EnterableState es) {
         if (es instanceof TransitionalState) {
-            for (History h : ((TransitionalState)es).getHistory()) {
+            for (final History h : ((TransitionalState)es).getHistory()) {
                 parent.addTarget(h);
             }
-            for (EnterableState child : ((TransitionalState) es).getChildren()) {
+            for (final EnterableState child : ((TransitionalState) es).getChildren()) {
                 parent.addTarget(child);
                 readInExternalTargets(parent, child);
             }
@@ -1034,7 +1034,7 @@ public final class SCXMLReader {
                                       final SCXML scxml, final TransitionalState parent)
             throws XMLStreamException, ModelException {
 
-        Datamodel dm = new Datamodel();
+        final Datamodel dm = new Datamodel();
 
         loop : while (reader.hasNext()) {
             String name, nsURI;
@@ -1077,7 +1077,7 @@ public final class SCXMLReader {
     private static void readData(final XMLStreamReader reader, final Configuration configuration, final Datamodel dm)
             throws XMLStreamException, ModelException {
 
-        Data datum = new Data();
+        final Data datum = new Data();
         datum.setId(readRequiredAV(reader, SCXMLConstants.ELEM_DATA, SCXMLConstants.ATTR_ID));
         final String expr = readAV(reader, SCXMLConstants.ATTR_EXPR);
         final String src = readAV(reader, SCXMLConstants.ATTR_SRC);
@@ -1112,7 +1112,7 @@ public final class SCXMLReader {
                                    final TransitionalState parent)
             throws XMLStreamException, ModelException {
 
-        Invoke invoke = new Invoke();
+        final Invoke invoke = new Invoke();
         invoke.setId(readAV(reader, SCXMLConstants.ATTR_ID));
         invoke.setIdlocation(readAV(reader, SCXMLConstants.ATTR_IDLOCATION));
         invoke.setSrc(readAV(reader, SCXMLConstants.ATTR_SRC));
@@ -1163,10 +1163,10 @@ public final class SCXMLReader {
                                   final ParamsContainer parent)
             throws XMLStreamException, ModelException {
 
-        Param param = new Param();
+        final Param param = new Param();
         param.setName(readRequiredAV(reader, SCXMLConstants.ELEM_PARAM, SCXMLConstants.ATTR_NAME));
-        String location = readAV(reader, SCXMLConstants.ATTR_LOCATION);
-        String expr = readAV(reader, SCXMLConstants.ATTR_EXPR);
+        final String location = readAV(reader, SCXMLConstants.ATTR_LOCATION);
+        final String expr = readAV(reader, SCXMLConstants.ATTR_EXPR);
         if (expr != null) {
             if (location != null) {
                 reportConflictingAttribute(reader, configuration, SCXMLConstants.ELEM_PARAM, SCXMLConstants.ATTR_LOCATION, SCXMLConstants.ATTR_EXPR);
@@ -1202,7 +1202,7 @@ public final class SCXMLReader {
                                      final TransitionalState state, final Invoke invoke)
             throws XMLStreamException, ModelException {
 
-        Finalize finalize = new Finalize();
+        final Finalize finalize = new Finalize();
         readExecutableContext(reader, configuration, finalize, null);
         invoke.setFinalize(finalize);
         finalize.setParent(state);
@@ -1221,7 +1221,7 @@ public final class SCXMLReader {
                                     final ContentContainer contentContainer)
             throws XMLStreamException, ModelException {
 
-        Content content = new Content();
+        final Content content = new Content();
         content.setExpr(readAV(reader, SCXMLConstants.ATTR_EXPR));
         if (content.getExpr() != null) {
             skipToEndElement(reader);
@@ -1247,7 +1247,7 @@ public final class SCXMLReader {
                                     final State state)
             throws XMLStreamException, ModelException {
 
-        Initial initial = new Initial();
+        final Initial initial = new Initial();
 
         loop : while (reader.hasNext()) {
             String name, nsURI;
@@ -1290,7 +1290,7 @@ public final class SCXMLReader {
                                     final SCXML scxml, final TransitionalState ts)
             throws XMLStreamException, ModelException {
 
-        History history = new History();
+        final History history = new History();
         history.setId(readOrGeneratedTransitionTargetId(reader, scxml, SCXMLConstants.ELEM_HISTORY));
         history.setType(readAV(reader, SCXMLConstants.ATTR_TYPE));
 
@@ -1335,7 +1335,7 @@ public final class SCXMLReader {
                                     final EnterableState es)
             throws XMLStreamException, ModelException {
 
-        OnEntry onentry = new OnEntry();
+        final OnEntry onentry = new OnEntry();
         onentry.setRaiseEvent(readBooleanAV(reader, SCXMLConstants.ELEM_ONENTRY, SCXMLConstants.ATTR_EVENT));
         readExecutableContext(reader, configuration, onentry, null);
         es.addOnEntry(onentry);
@@ -1356,7 +1356,7 @@ public final class SCXMLReader {
                                    final EnterableState es)
             throws XMLStreamException, ModelException {
 
-        OnExit onexit = new OnExit();
+        final OnExit onexit = new OnExit();
         onexit.setRaiseEvent(readBooleanAV(reader, SCXMLConstants.ELEM_ONEXIT, SCXMLConstants.ATTR_EVENT));
         readExecutableContext(reader, configuration, onexit, null);
         es.addOnExit(onexit);
@@ -1375,16 +1375,16 @@ public final class SCXMLReader {
     private static SimpleTransition readSimpleTransition(final XMLStreamReader reader, final Configuration configuration)
             throws XMLStreamException, ModelException {
 
-        SimpleTransition transition = new SimpleTransition();
+        final SimpleTransition transition = new SimpleTransition();
         transition.setNext(readAV(reader, SCXMLConstants.ATTR_TARGET));
-        String type = readAV(reader, SCXMLConstants.ATTR_TYPE);
+        final String type = readAV(reader, SCXMLConstants.ATTR_TYPE);
         if (type != null) {
             try {
                 transition.setType(TransitionType.valueOf(type));
             }
-            catch (IllegalArgumentException e) {
-                MessageFormat msgFormat = new MessageFormat(ERR_UNSUPPORTED_TRANSITION_TYPE);
-                String errMsg = msgFormat.format(new Object[] {type, reader.getLocation()});
+            catch (final IllegalArgumentException e) {
+                final MessageFormat msgFormat = new MessageFormat(ERR_UNSUPPORTED_TRANSITION_TYPE);
+                final String errMsg = msgFormat.format(new Object[] {type, reader.getLocation()});
                 throw new ModelException(errMsg);
             }
         }
@@ -1407,18 +1407,18 @@ public final class SCXMLReader {
     private static Transition readTransition(final XMLStreamReader reader, final Configuration configuration)
             throws XMLStreamException, ModelException {
 
-        Transition transition = new Transition();
+        final Transition transition = new Transition();
         transition.setCond(readAV(reader, SCXMLConstants.ATTR_COND));
         transition.setEvent(readAV(reader, SCXMLConstants.ATTR_EVENT));
         transition.setNext(readAV(reader, SCXMLConstants.ATTR_TARGET));
-        String type = readAV(reader, SCXMLConstants.ATTR_TYPE);
+        final String type = readAV(reader, SCXMLConstants.ATTR_TYPE);
         if (type != null) {
             try {
                 transition.setType(TransitionType.valueOf(type));
             }
-            catch (IllegalArgumentException e) {
-                MessageFormat msgFormat = new MessageFormat(ERR_UNSUPPORTED_TRANSITION_TYPE);
-                String errMsg = msgFormat.format(new Object[] {type, reader.getLocation()});
+            catch (final IllegalArgumentException e) {
+                final MessageFormat msgFormat = new MessageFormat(ERR_UNSUPPORTED_TRANSITION_TYPE);
+                final String errMsg = msgFormat.format(new Object[] {type, reader.getLocation()});
                 throw new ModelException(errMsg);
             }
         }
@@ -1504,7 +1504,7 @@ public final class SCXMLReader {
                     } else { // custom action
                         CustomAction customAction = null;
                         if (!configuration.customActions.isEmpty()) {
-                            for (CustomAction ca : configuration.customActions) {
+                            for (final CustomAction ca : configuration.customActions) {
                                 if (ca.getNamespaceURI().equals(nsURI) && ca.getLocalName().equals(name)) {
                                     customAction = ca;
                                     break;
@@ -1548,7 +1548,7 @@ public final class SCXMLReader {
             reportIgnoredElement(reader, configuration, SCXMLConstants.ELEM_FINALIZE, SCXMLConstants.XMLNS_SCXML, SCXMLConstants.ELEM_RAISE);
         }
         else {
-            Raise raise = new Raise();
+            final Raise raise = new Raise();
             raise.setEvent(readAV(reader, SCXMLConstants.ATTR_EVENT));
             raise.setParent(executable);
             if (parent != null) {
@@ -1576,7 +1576,7 @@ public final class SCXMLReader {
                                final Executable executable, final ActionsContainer parent)
             throws XMLStreamException, ModelException {
 
-        If iff = new If();
+        final If iff = new If();
         iff.setCond(readRequiredAV(reader, SCXMLConstants.ELEM_IF, SCXMLConstants.ATTR_COND));
         iff.setParent(executable);
         if (parent != null) {
@@ -1599,7 +1599,7 @@ public final class SCXMLReader {
     private static void readElseIf(final XMLStreamReader reader, final Executable executable, final If iff)
             throws XMLStreamException, ModelException {
 
-        ElseIf elseif = new ElseIf();
+        final ElseIf elseif = new ElseIf();
         elseif.setCond(readRequiredAV(reader, SCXMLConstants.ELEM_ELSEIF, SCXMLConstants.ATTR_COND));
         elseif.setParent(executable);
         iff.addAction(elseif);
@@ -1618,7 +1618,7 @@ public final class SCXMLReader {
     private static void readElse(final XMLStreamReader reader, final Executable executable, final If iff)
             throws XMLStreamException {
 
-        Else els = new Else();
+        final Else els = new Else();
         els.setParent(executable);
         iff.addAction(els);
         skipToEndElement(reader);
@@ -1640,7 +1640,7 @@ public final class SCXMLReader {
                                     final Executable executable, final ActionsContainer parent)
             throws XMLStreamException, ModelException {
 
-        Foreach fe = new Foreach();
+        final Foreach fe = new Foreach();
         fe.setArray(readRequiredAV(reader, SCXMLConstants.ELEM_FOREACH, SCXMLConstants.ATTR_ARRAY));
         fe.setItem(readRequiredAV(reader, SCXMLConstants.ELEM_FOREACH, SCXMLConstants.ATTR_ITEM));
         fe.setIndex(readAV(reader, SCXMLConstants.ATTR_INDEX));
@@ -1665,7 +1665,7 @@ public final class SCXMLReader {
     private static void readLog(final XMLStreamReader reader, final Executable executable, final ActionsContainer parent)
             throws XMLStreamException {
 
-        Log log = new Log();
+        final Log log = new Log();
         log.setExpr(readAV(reader, SCXMLConstants.ATTR_EXPR));
         log.setLabel(readAV(reader, SCXMLConstants.ATTR_LABEL));
         log.setParent(executable);
@@ -1691,7 +1691,7 @@ public final class SCXMLReader {
                                    final Executable executable, final ActionsContainer parent)
             throws XMLStreamException, ModelException {
 
-        Assign assign = new Assign();
+        final Assign assign = new Assign();
         assign.setExpr(readAV(reader, SCXMLConstants.ATTR_EXPR));
         assign.setLocation(readRequiredAV(reader, SCXMLConstants.ELEM_ASSIGN, SCXMLConstants.ATTR_LOCATION));
         assign.setSrc(readAV(reader, SCXMLConstants.ATTR_SRC));
@@ -1709,12 +1709,12 @@ public final class SCXMLReader {
             }
             try {
                 assign.setParsedValue(ContentParser.DEFAULT_PARSER.parseResource(resolvedSrc));
-            } catch (IOException e) {
+            } catch (final IOException e) {
                 throw new ModelException(e);
             }
         }
         else {
-            Location location = reader.getLocation();
+            final Location location = reader.getLocation();
             readParsedValue(reader, configuration, assign, false);
             if (assign.getParsedValue() == null) {
                 // report missing expression (as most common use-case)
@@ -1754,7 +1754,7 @@ public final class SCXMLReader {
             return;
         }
 
-        Send send = new Send();
+        final Send send = new Send();
         send.setId(readAV(reader, SCXMLConstants.ATTR_ID));
         String attrValue = readAV(reader, SCXMLConstants.ATTR_IDLOCATION);
         if (attrValue != null) {
@@ -1864,9 +1864,9 @@ public final class SCXMLReader {
                                    final Executable executable, final ActionsContainer parent)
             throws XMLStreamException, ModelException {
 
-        Cancel cancel = new Cancel();
+        final Cancel cancel = new Cancel();
         cancel.setSendid(readAV(reader, SCXMLConstants.ATTR_SENDID));
-        String attrValue = readAV(reader, SCXMLConstants.ATTR_SENDIDEXPR);
+        final String attrValue = readAV(reader, SCXMLConstants.ATTR_SENDIDEXPR);
         if (attrValue != null) {
             if (cancel.getSendid() != null) {
                 reportConflictingAttribute(reader, configuration, SCXMLConstants.ELEM_CANCEL, SCXMLConstants.ATTR_SENDID, SCXMLConstants.ATTR_SENDIDEXPR);
@@ -1898,7 +1898,7 @@ public final class SCXMLReader {
                                    final Executable executable, final ActionsContainer parent)
             throws XMLStreamException, ModelException {
 
-        Script script = readScript(reader, configuration);
+        final Script script = readScript(reader, configuration);
         script.setParent(executable);
         if (parent != null) {
             parent.addAction(script);
@@ -1922,7 +1922,7 @@ public final class SCXMLReader {
                                          final SCXML scxml)
             throws XMLStreamException, ModelException {
 
-        Script globalScript = readScript(reader, configuration);
+        final Script globalScript = readScript(reader, configuration);
         globalScript.setGlobalScript(true);
         scxml.setGlobalScript(globalScript);
     }
@@ -1938,7 +1938,7 @@ public final class SCXMLReader {
     private static Script readScript(final XMLStreamReader reader, final Configuration configuration)
             throws XMLStreamException, ModelException {
 
-        Script script = new Script();
+        final Script script = new Script();
         script.setSrc(readAV(reader, SCXMLConstants.ATTR_SRC));
         if (script.getSrc() != null) {
             String resolvedSrc = script.getSrc();
@@ -1948,7 +1948,7 @@ public final class SCXMLReader {
             try (InputStream in = new URL(resolvedSrc).openStream()){
                 script.setScript(IOUtils.toString(in, "UTF-8"));
             }
-            catch (IOException e) {
+            catch (final IOException e) {
                 throw new ModelException(e);
             }
             skipToEndElement(reader);
@@ -1977,7 +1977,7 @@ public final class SCXMLReader {
 
         // Instantiate custom action
         Object actionObject;
-        String className = customAction.getActionClass().getName();
+        final String className = customAction.getActionClass().getName();
         ClassLoader cl = configuration.customActionClassLoader;
         if (configuration.useContextClassLoaderForCustomActions) {
             cl = Thread.currentThread().getContextClassLoader();
@@ -1989,11 +1989,11 @@ public final class SCXMLReader {
         try {
             clazz = cl.loadClass(className);
             actionObject = clazz.newInstance();
-        } catch (ClassNotFoundException cnfe) {
+        } catch (final ClassNotFoundException cnfe) {
             throw new XMLStreamException("Cannot find custom action class:" + className, cnfe);
-        } catch (IllegalAccessException iae) {
+        } catch (final IllegalAccessException iae) {
             throw new XMLStreamException("Cannot access custom action class:" + className, iae);
-        } catch (InstantiationException ie) {
+        } catch (final InstantiationException ie) {
             throw new XMLStreamException("Cannot instantiate custom action class:" + className, ie);
         }
         if (!(actionObject instanceof Action)) {
@@ -2001,35 +2001,35 @@ public final class SCXMLReader {
         }
 
         // Set the attribute values as properties
-        Action action = (Action) actionObject;
+        final Action action = (Action) actionObject;
 
-        CustomActionWrapper actionWrapper = new CustomActionWrapper();
+        final CustomActionWrapper actionWrapper = new CustomActionWrapper();
         actionWrapper.setAction(action);
         actionWrapper.setPrefix(reader.getPrefix());
         actionWrapper.setLocalName(reader.getLocalName());
-        Map<String, String> namespaces = readNamespaces(reader);
+        final Map<String, String> namespaces = readNamespaces(reader);
         if (namespaces != null) {
             actionWrapper.getNamespaces().putAll(namespaces);
         }
 
-        Map<String, String> attributes = new HashMap<>();
+        final Map<String, String> attributes = new HashMap<>();
         for (int i = 0; i < reader.getAttributeCount(); i++) {
-            String name = reader.getAttributeLocalName(i);
-            String qname = createQualifiedName(reader.getAttributePrefix(i), name);
-            String value = reader.getAttributeValue(i);
+            final String name = reader.getAttributeLocalName(i);
+            final String qname = createQualifiedName(reader.getAttributePrefix(i), name);
+            final String value = reader.getAttributeValue(i);
             attributes.put(qname, value);
-            String setter = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
+            final String setter = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
             Method method;
             try {
                 method = clazz.getMethod(setter, String.class);
                 method.invoke(action, value);
-            } catch (NoSuchMethodException nsme) {
+            } catch (final NoSuchMethodException nsme) {
                 logger.warn("No method: " + setter + "(String) found in custom action class: " + className+ " for "
                         + qname + "=\"" + value + "\". Attribute ignored");
-            } catch (InvocationTargetException ite) {
+            } catch (final InvocationTargetException ite) {
                 throw new XMLStreamException("Exception calling method:" + setter + "(String) in custom action class:"
                         + className, ite);
-            } catch (IllegalAccessException iae) {
+            } catch (final IllegalAccessException iae) {
                 throw new XMLStreamException("Cannot access method: " + setter +"(String) in custom action class: "
                         + className, iae);
             }
@@ -2069,11 +2069,11 @@ public final class SCXMLReader {
     private static void readParsedValue(final XMLStreamReader reader, final Configuration configuration,
                                         final ParsedValueContainer valueContainer, final boolean invokeContent)
             throws XMLStreamException, ModelException {
-        Element element = readElement(reader);
+        final Element element = readElement(reader);
         if (element.hasChildNodes()) {
-            NodeList children = element.getChildNodes();
+            final NodeList children = element.getChildNodes();
             Node child = children.item(0);
-            boolean cdata = child.getNodeType() == Node.CDATA_SECTION_NODE;
+            final boolean cdata = child.getNodeType() == Node.CDATA_SECTION_NODE;
             if (invokeContent) {
                 // search or and only use first <scxml> element
                 if (child.getNodeType() != Node.ELEMENT_NODE) {
@@ -2090,7 +2090,7 @@ public final class SCXMLReader {
                         // transform <invoke><content><scxml> back to text
                         try {
                             valueContainer.setParsedValue(new NodeTextValue(ContentParser.DEFAULT_PARSER.toXml(child)));
-                        } catch (IOException e) {
+                        } catch (final IOException e) {
                             throw new XMLStreamException(e);
                         }
                     }
@@ -2101,11 +2101,11 @@ public final class SCXMLReader {
                 }
             }
             else if (children.getLength() == 1 && (cdata || child.getNodeType() == Node.TEXT_NODE )) {
-                String text = ContentParser.trimContent(child.getNodeValue());
+                final String text = ContentParser.trimContent(child.getNodeValue());
                 if (ContentParser.hasJsonSignature(text)) {
                     try {
                         valueContainer.setParsedValue(new JsonValue(configuration.contentParser.parseJson(text), cdata));
-                    } catch (IOException e) {
+                    } catch (final IOException e) {
                         throw new ModelException(e);
                     }
                 }
@@ -2116,7 +2116,7 @@ public final class SCXMLReader {
             } else if (children.getLength() == 1) {
                 valueContainer.setParsedValue(new NodeValue(child));
             } else {
-                ArrayList<Node> nodeList = new ArrayList<>();
+                final ArrayList<Node> nodeList = new ArrayList<>();
                 for (int i = 0, size = children.getLength(); i < size; i++) {
                     nodeList.add(children.item(i));
                 }
@@ -2141,12 +2141,12 @@ public final class SCXMLReader {
         Document document;
         try {
             document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
-        } catch (ParserConfigurationException pce) {
+        } catch (final ParserConfigurationException pce) {
             throw new XMLStreamException(ERR_PARSER_CFG);
         }
 
         // This root element will be returned, add any attributes as specified
-        Element root = document.createElementNS(reader.getNamespaceURI(), createQualifiedName(reader.getPrefix(), reader.getLocalName()));
+        final Element root = document.createElementNS(reader.getNamespaceURI(), createQualifiedName(reader.getPrefix(), reader.getLocalName()));
         document.appendChild(root);
 
         boolean children = false, cdata = false;
@@ -2162,10 +2162,10 @@ public final class SCXMLReader {
                         root.setTextContent(null);
                     }
                     children = true;
-                    Element elem = document.createElementNS(reader.getNamespaceURI(),
+                    final Element elem = document.createElementNS(reader.getNamespaceURI(),
                             createQualifiedName(reader.getPrefix(), reader.getLocalName()));
                     for (int i = 0; i < reader.getAttributeCount(); i++) {
-                        Attr attr = document.createAttributeNS(reader.getAttributeNamespace(i),
+                        final Attr attr = document.createAttributeNS(reader.getAttributeNamespace(i),
                                 createQualifiedName(reader.getAttributePrefix(i), reader.getAttributeLocalName(i)));
                         attr.setValue(reader.getAttributeValue(i));
                         elem.setAttributeNodeNS(attr);
@@ -2199,7 +2199,7 @@ public final class SCXMLReader {
             }
         }
         if (!children && root.hasChildNodes() && root.getChildNodes().getLength() > 1) {
-            String text = root.getTextContent().trim();
+            final String text = root.getTextContent().trim();
             if (!cdata) {
                 root.setTextContent(text);
             } else {
@@ -2222,7 +2222,7 @@ public final class SCXMLReader {
     private static String readBody(final XMLStreamReader reader)
             throws XMLStreamException {
 
-        StringBuilder body = new StringBuilder();
+        final StringBuilder body = new StringBuilder();
 
         // Add all body content to StringBuilder
         loop : while (reader.hasNext()) {
@@ -2261,7 +2261,7 @@ public final class SCXMLReader {
      * @param input input string to check if null or empty after trim
      * @return null if input is null or empty after trim()
      */
-    private static String nullIfEmpty(String input) {
+    private static String nullIfEmpty(final String input) {
         return input == null || input.trim().length()==0 ? null : input.trim();
     }
 
@@ -2290,11 +2290,11 @@ public final class SCXMLReader {
     private static Boolean readBooleanAV(final XMLStreamReader reader, final String elementName,
                                          final String attrLocalName)
             throws ModelException {
-        String value = nullIfEmpty(reader.getAttributeValue(XMLNS_DEFAULT, attrLocalName));
-        Boolean result = "true".equals(value) ? Boolean.TRUE : "false".equals(value) ? Boolean.FALSE : null;
+        final String value = nullIfEmpty(reader.getAttributeValue(XMLNS_DEFAULT, attrLocalName));
+        final Boolean result = "true".equals(value) ? Boolean.TRUE : "false".equals(value) ? Boolean.FALSE : null;
         if (result == null && value != null) {
-            MessageFormat msgFormat = new MessageFormat(ERR_ATTRIBUTE_NOT_BOOLEAN);
-            String errMsg = msgFormat.format(new Object[] {value, attrLocalName, elementName, reader.getLocation()});
+            final MessageFormat msgFormat = new MessageFormat(ERR_ATTRIBUTE_NOT_BOOLEAN);
+            final String errMsg = msgFormat.format(new Object[] {value, attrLocalName, elementName, reader.getLocation()});
             throw new ModelException(errMsg);
         }
         return result;
@@ -2312,7 +2312,7 @@ public final class SCXMLReader {
      */
     private static String readRequiredAV(final XMLStreamReader reader, final String elementName, final String attrLocalName)
             throws ModelException {
-        String value = nullIfEmpty(reader.getAttributeValue(XMLNS_DEFAULT, attrLocalName));
+        final String value = nullIfEmpty(reader.getAttributeValue(XMLNS_DEFAULT, attrLocalName));
         if (value == null) {
             reportMissingAttribute(reader.getLocation(), elementName, attrLocalName);
         }
@@ -2327,8 +2327,8 @@ public final class SCXMLReader {
             id = scxml.generateTransitionTargetId();
         }
         else if (id.startsWith(SCXML.GENERATED_TT_ID_PREFIX)) {
-            MessageFormat msgFormat = new MessageFormat(ERR_RESERVED_ID_PREFIX);
-            String errMsg = msgFormat.format(new Object[] {elementName, id, reader.getLocation()});
+            final MessageFormat msgFormat = new MessageFormat(ERR_RESERVED_ID_PREFIX);
+            final String errMsg = msgFormat.format(new Object[] {elementName, id, reader.getLocation()});
             throw new ModelException(errMsg);
         }
         return id;
@@ -2362,8 +2362,8 @@ public final class SCXMLReader {
      */
     private static void reportMissingAttribute(final Location location, final String elementName, final String attrLocalName)
             throws ModelException {
-        MessageFormat msgFormat = new MessageFormat(ERR_REQUIRED_ATTRIBUTE_MISSING);
-        String errMsg = msgFormat.format(new Object[] {elementName, attrLocalName, location});
+        final MessageFormat msgFormat = new MessageFormat(ERR_REQUIRED_ATTRIBUTE_MISSING);
+        final String errMsg = msgFormat.format(new Object[] {elementName, attrLocalName, location});
         throw new ModelException(errMsg);
     }
 
@@ -2385,7 +2385,7 @@ public final class SCXMLReader {
                                              final String parent, final String nsURI, final String name)
             throws XMLStreamException, ModelException {
 
-        StringBuilder sb = new StringBuilder();
+        final StringBuilder sb = new StringBuilder();
         sb.append("Ignoring unknown or invalid element <").append(name)
                 .append("> in namespace \"").append(nsURI)
                 .append("\" as child of <").append(parent)
@@ -2396,7 +2396,7 @@ public final class SCXMLReader {
         if (configuration.isStrict()) {
             throw new ModelException(sb.toString());
         }
-        XMLReporter reporter = configuration.reporter;
+        final XMLReporter reporter = configuration.reporter;
         if (reporter != null) {
             reporter.report(sb.toString(), "COMMONS_SCXML", null, reader.getLocation());
         }
@@ -2411,7 +2411,7 @@ public final class SCXMLReader {
     private static void skipToEndElement(final XMLStreamReader reader) throws XMLStreamException {
         int elementsToSkip = 1;
         while (elementsToSkip > 0 && reader.hasNext()) {
-            int next = reader.next();
+            final int next = reader.next();
             if (next == XMLStreamConstants.START_ELEMENT) {
                 elementsToSkip++;
             }
@@ -2439,7 +2439,7 @@ public final class SCXMLReader {
                                                final String element, final String attr, final String value)
             throws XMLStreamException, ModelException {
 
-        StringBuilder sb = new StringBuilder();
+        final StringBuilder sb = new StringBuilder();
         sb.append("Ignoring unknown or invalid <").append(element).append("> attribute ").append(attr)
                 .append("=\"").append(value).append("\" at ").append(reader.getLocation());
         if (!configuration.isSilent() && logger.isWarnEnabled()) {
@@ -2448,7 +2448,7 @@ public final class SCXMLReader {
         if (configuration.isStrict()) {
             throw new ModelException(sb.toString());
         }
-        XMLReporter reporter = configuration.reporter;
+        final XMLReporter reporter = configuration.reporter;
         if (reporter != null) {
             reporter.report(sb.toString(), "COMMONS_SCXML", null, reader.getLocation());
         }
@@ -2472,7 +2472,7 @@ public final class SCXMLReader {
                                              final String element, final String attr, final String conflictingAttr)
             throws XMLStreamException, ModelException {
 
-        StringBuilder sb = new StringBuilder();
+        final StringBuilder sb = new StringBuilder();
         sb.append("Ignoring <").append(element).append("> attribute \"").append(conflictingAttr)
                 .append("\" which conflicts with already defined attribute \"").append(attr)
                 .append("\" at ").append(reader.getLocation());
@@ -2482,7 +2482,7 @@ public final class SCXMLReader {
         if (configuration.isStrict()) {
             throw new ModelException(sb.toString());
         }
-        XMLReporter reporter = configuration.reporter;
+        final XMLReporter reporter = configuration.reporter;
         if (reporter != null) {
             reporter.report(sb.toString(), "COMMONS_SCXML", null, reader.getLocation());
         }
@@ -2518,7 +2518,7 @@ public final class SCXMLReader {
         if (factory.isPropertySupported(XMLInputFactory_JDK_PROP_REPORT_CDATA)) {
             factory.setProperty(XMLInputFactory_JDK_PROP_REPORT_CDATA, Boolean.TRUE);
         }
-        for (Map.Entry<String, Object> property : configuration.properties.entrySet()) {
+        for (final Map.Entry<String, Object> property : configuration.properties.entrySet()) {
             if (factory.isPropertySupported(property.getKey())) {
                 factory.setProperty(property.getKey(), property.getValue());
             }
@@ -2529,8 +2529,8 @@ public final class SCXMLReader {
         // Consolidate InputStream options
         InputStream urlStream = null;
         if (url != null || path != null) {
-            URL scxml = (url != null ? url : new URL(path));
-            URLConnection conn = scxml.openConnection();
+            final URL scxml = (url != null ? url : new URL(path));
+            final URLConnection conn = scxml.openConnection();
             conn.setUseCaches(false);
             urlStream = conn.getInputStream();
         } else if (stream != null) {
@@ -2543,16 +2543,16 @@ public final class SCXMLReader {
         if (configuration.validate) {
             // Validation requires us to use a Source
 
-            URL scxmlSchema = new URL("TODO"); // TODO, point to appropriate location
-            SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
+            final URL scxmlSchema = new URL("TODO"); // TODO, point to appropriate location
+            final SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
             Schema schema;
             try {
                 schema = schemaFactory.newSchema(scxmlSchema);
-            } catch (SAXException se) {
+            } catch (final SAXException se) {
                 throw new XMLStreamException("Failed to create SCXML Schema for validation", se);
             }
 
-            Validator validator = schema.newValidator();
+            final Validator validator = schema.newValidator();
             validator.setErrorHandler(new SimpleErrorHandler());
 
             Source src = null;
@@ -2575,7 +2575,7 @@ public final class SCXMLReader {
             xsr = factory.createXMLStreamReader(src);
             try {
                 validator.validate(src);
-            } catch (SAXException se) {
+            } catch (final SAXException se) {
                 throw new XMLStreamException("Failed to create apply SCXML Validator", se);
             }
 
@@ -2915,7 +2915,7 @@ public final class SCXMLReader {
          * @param silent silent mode (whether to read models silently without any model error warning logs)
          * @see #silent
          */
-        public void setSilent(boolean silent) {
+        public void setSilent(final boolean silent) {
             this.silent = silent;
         }
 
@@ -2933,7 +2933,7 @@ public final class SCXMLReader {
          * @param strict strict model (whether to check model strictly with throwing exception on any model error)
          * @see #strict
          */
-        public void setStrict(boolean strict) {
+        public void setStrict(final boolean strict) {
             this.strict = strict;
         }
     }
diff --git a/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java b/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java
index fa7fde5..07e084e 100644
--- a/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java
+++ b/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java
@@ -305,11 +305,11 @@ public class SCXMLWriter {
         }
 
         // Make the writer an arbitrary bit larger than the source string
-        int len = str.length();
-        StringWriter stringWriter = new StringWriter(len + 8);
+        final int len = str.length();
+        final StringWriter stringWriter = new StringWriter(len + 8);
 
         for (int i = 0; i < len; i++) {
-            char c = str.charAt(i);
+            final char c = str.charAt(i);
             String entityName = null; // Look for XML 1.0 predefined entities
             switch (c) {
                 case '"':
@@ -361,7 +361,7 @@ public class SCXMLWriter {
                                       final OutputStream scxmlStream, final Writer scxmlWriter, final Result scxmlResult)
             throws IOException, XMLStreamException {
 
-        XMLStreamWriter writer = getWriter(configuration, scxmlStream, scxmlWriter, scxmlResult);
+        final XMLStreamWriter writer = getWriter(configuration, scxmlStream, scxmlWriter, scxmlResult);
         writeDocument(writer, configuration, scxml);
         writer.flush();
         writer.close();
@@ -369,7 +369,7 @@ public class SCXMLWriter {
             configuration.internalWriter.flush();
         }
         if (configuration.usePrettyPrint) {
-            Writer prettyPrintWriter = (scxmlWriter != null ? scxmlWriter : new StringWriter());
+            final Writer prettyPrintWriter = (scxmlWriter != null ? scxmlWriter : new StringWriter());
             writePretty(configuration, scxmlStream, prettyPrintWriter, scxmlResult);
             if (configuration.writeToString) {
                 prettyPrintWriter.flush();
@@ -419,8 +419,8 @@ public class SCXMLWriter {
         writer.writeNamespace(null, SCXMLConstants.XMLNS_SCXML);
 //        writer.writeNamespace("cs", XMLNS_COMMONS_SCXML);
         if (scxml.getNamespaces() != null) {
-            for (Map.Entry<String, String> entry : scxml.getNamespaces().entrySet()) {
-                String key = entry.getKey();
+            for (final Map.Entry<String, String> entry : scxml.getNamespaces().entrySet()) {
+                final String key = entry.getKey();
                 if (key != null && key.trim().length() > 0) {
                     writer.writeNamespace(key, entry.getValue());
                 }
@@ -443,7 +443,7 @@ public class SCXMLWriter {
 
         // Write global script if defined
         if (scxml.getGlobalScript() != null) {
-            Script s = scxml.getGlobalScript();
+            final Script s = scxml.getGlobalScript();
             writer.writeStartElement(SCXMLConstants.XMLNS_SCXML, SCXMLConstants.ELEM_SCRIPT);
             if (s.getSrc() != null) {
                 writeAV(writer, SCXMLConstants.ATTR_SRC, s.getSrc());
@@ -477,7 +477,7 @@ public class SCXMLWriter {
         }
 
         writer.writeStartElement(SCXMLConstants.ELEM_DATAMODEL);
-        for (Data d : datamodel.getData()) {
+        for (final Data d : datamodel.getData()) {
             writer.writeStartElement(SCXMLConstants.ELEM_DATA);
             writeAV(writer, SCXMLConstants.ATTR_ID, d.getId());
             writeAV(writer, SCXMLConstants.ATTR_SRC, escapeXML(d.getSrc()));
@@ -518,21 +518,21 @@ public class SCXMLWriter {
         writeInitial(writer, state.getInitial());
         writeDatamodel(writer, state.getDatamodel());
         writeHistory(writer, state.getHistory());
-        for (OnEntry onentry : state.getOnEntries()) {
+        for (final OnEntry onentry : state.getOnEntries()) {
             writeOnEntry(writer, onentry);
         }
 
-        for (Transition t : state.getTransitionsList()) {
+        for (final Transition t : state.getTransitionsList()) {
             writeTransition(writer, t);
         }
 
-        for (Invoke inv : state.getInvokes()) {
+        for (final Invoke inv : state.getInvokes()) {
             writeInvoke(writer, inv);
         }
 
         writeEnterableStates(writer, state.getChildren());
 
-        for (OnExit onexit : state.getOnExits()) {
+        for (final OnExit onexit : state.getOnExits()) {
             writeOnExit(writer, onexit);
         }
         writer.writeEndElement();
@@ -554,21 +554,21 @@ public class SCXMLWriter {
 
         writeDatamodel(writer, parallel.getDatamodel());
         writeHistory(writer, parallel.getHistory());
-        for (OnEntry onentry : parallel.getOnEntries()) {
+        for (final OnEntry onentry : parallel.getOnEntries()) {
             writeOnEntry(writer, onentry);
         }
 
-        for (Transition t : parallel.getTransitionsList()) {
+        for (final Transition t : parallel.getTransitionsList()) {
             writeTransition(writer, t);
         }
 
-        for (Invoke inv : parallel.getInvokes()) {
+        for (final Invoke inv : parallel.getInvokes()) {
             writeInvoke(writer, inv);
         }
 
         writeEnterableStates(writer, parallel.getChildren());
 
-        for (OnExit onexit : parallel.getOnExits()) {
+        for (final OnExit onexit : parallel.getOnExits()) {
             writeOnExit(writer, onexit);
         }
         writer.writeEndElement();
@@ -587,10 +587,10 @@ public class SCXMLWriter {
 
         writer.writeStartElement(SCXMLConstants.ELEM_FINAL);
         writeTransitionTargetId(writer, end);
-        for (OnEntry onentry : end.getOnEntries()) {
+        for (final OnEntry onentry : end.getOnEntries()) {
             writeOnEntry(writer, onentry);
         }
-        for (OnExit onexit : end.getOnExits()) {
+        for (final OnExit onexit : end.getOnExits()) {
             writeOnExit(writer, onexit);
         }
         if (end.getDoneData() != null) {
@@ -612,7 +612,7 @@ public class SCXMLWriter {
      */
     private static void writeEnterableStates(final XMLStreamWriter writer, final List<EnterableState> states)
             throws XMLStreamException {
-        for (EnterableState es : states) {
+        for (final EnterableState es : states) {
             if (es instanceof Final) {
                 writeFinal(writer, (Final) es);
             } else if (es instanceof State) {
@@ -659,7 +659,7 @@ public class SCXMLWriter {
             return;
         }
 
-        for (History h : history) {
+        for (final History h : history) {
             writer.writeStartElement(SCXMLConstants.ELEM_HISTORY);
             writeTransitionTargetId(writer, h);
             if (h.isDeep()) {
@@ -795,9 +795,9 @@ public class SCXMLWriter {
         if (actions == null) {
             return;
         }
-        for (Action a : actions) {
+        for (final Action a : actions) {
             if (a instanceof Assign) {
-                Assign asn = (Assign) a;
+                final Assign asn = (Assign) a;
                 writer.writeStartElement(SCXMLConstants.XMLNS_SCXML, SCXMLConstants.ELEM_ASSIGN);
                 writeAV(writer, SCXMLConstants.ATTR_LOCATION, asn.getLocation());
                 writeAV(writer, SCXMLConstants.ATTR_SRC, asn.getSrc());
@@ -807,25 +807,25 @@ public class SCXMLWriter {
             } else if (a instanceof Send) {
                 writeSend(writer, (Send) a);
             } else if (a instanceof Cancel) {
-                Cancel c = (Cancel) a;
+                final Cancel c = (Cancel) a;
                 writer.writeStartElement(SCXMLConstants.XMLNS_SCXML, SCXMLConstants.ELEM_CANCEL);
                 writeAV(writer, SCXMLConstants.ATTR_SENDID, c.getSendid());
                 writer.writeEndElement();
             } else if (a instanceof Foreach) {
                 writeForeach(writer, (Foreach) a);
             } else if (a instanceof Log) {
-                Log lg = (Log) a;
+                final Log lg = (Log) a;
                 writer.writeStartElement(SCXMLConstants.XMLNS_SCXML, SCXMLConstants.ELEM_LOG);
                 writeAV(writer, SCXMLConstants.ATTR_LABEL, lg.getLabel());
                 writeAV(writer, SCXMLConstants.ATTR_EXPR, escapeXML(lg.getExpr()));
                 writer.writeEndElement();
             } else if (a instanceof Raise) {
-                Raise e = (Raise) a;
+                final Raise e = (Raise) a;
                 writer.writeStartElement(SCXMLConstants.XMLNS_SCXML, SCXMLConstants.ELEM_RAISE);
                 writeAV(writer, SCXMLConstants.ATTR_EVENT, e.getEvent());
                 writer.writeEndElement();
             } else if (a instanceof Script) {
-                Script s = (Script) a;
+                final Script s = (Script) a;
                 writer.writeStartElement(SCXMLConstants.XMLNS_SCXML, SCXMLConstants.ELEM_SCRIPT);
                 if (s.getSrc() != null) {
                     writeAV(writer, SCXMLConstants.ATTR_SRC, s.getSrc());
@@ -838,19 +838,19 @@ public class SCXMLWriter {
             } else if (a instanceof Else) {
                 writer.writeEmptyElement(SCXMLConstants.ELEM_ELSE);
             } else if (a instanceof ElseIf) {
-                ElseIf eif = (ElseIf) a;
+                final ElseIf eif = (ElseIf) a;
                 writer.writeStartElement(SCXMLConstants.XMLNS_SCXML, SCXMLConstants.ELEM_ELSEIF);
                 writeAV(writer, SCXMLConstants.ATTR_COND, escapeXML(eif.getCond()));
                 writer.writeEndElement();
             } else if (a instanceof Var) {
                 // 'naked' Var custom action, not wrapped in a CustomActionWrapper
-                Var v = (Var) a;
+                final Var v = (Var) a;
                 writer.writeStartElement(SCXMLConstants.XMLNS_COMMONS_SCXML, SCXMLConstants.ELEM_VAR);
                 writeAV(writer, SCXMLConstants.ATTR_NAME, v.getName());
                 writeAV(writer, SCXMLConstants.ATTR_EXPR, escapeXML(v.getExpr()));
                 writer.writeEndElement();
             } else if (a instanceof CustomActionWrapper) {
-                CustomActionWrapper actionWrapper = (CustomActionWrapper)a;
+                final CustomActionWrapper actionWrapper = (CustomActionWrapper)a;
                 writer.writeStartElement(createQualifiedName(actionWrapper.getPrefix(), actionWrapper.getLocalName()));
                 if (actionWrapper.getAttributes() != null) {
                     for (final String attr : actionWrapper.getAttributes().keySet()) {
@@ -911,7 +911,7 @@ public class SCXMLWriter {
      */
     private static void writeParams(final XMLStreamWriter writer, final List<Param> params)
             throws XMLStreamException {
-        for (Param p : params) {
+        for (final Param p : params) {
             writer.writeStartElement(SCXMLConstants.ELEM_PARAM);
             writeAV(writer, SCXMLConstants.ATTR_NAME, p.getName());
             writeAV(writer, SCXMLConstants.ATTR_LOCATION, p.getLocation());
@@ -1012,7 +1012,7 @@ public class SCXMLWriter {
                         }
                         break;
                     case NODE_LIST:
-                        List<Node> nodeList = ((NodeListValue)parsedValue).getValue();
+                        final List<Node> nodeList = ((NodeListValue)parsedValue).getValue();
                         if (!nodeList.isEmpty() && XFORMER == null) {
                             writer.writeComment("element body was not serialized");
                         } else {
@@ -1026,7 +1026,7 @@ public class SCXMLWriter {
                         break;
                 }
             }
-        } catch (IOException e) {
+        } catch (final IOException e) {
             throw new XMLStreamException(e);
         }
     }
@@ -1042,13 +1042,13 @@ public class SCXMLWriter {
     private static void writeNode(final XMLStreamWriter writer, final Node node)
             throws XMLStreamException {
 
-        Source input = new DOMSource(node);
-        StringWriter out = new StringWriter();
-        Result output = new StreamResult(out);
+        final Source input = new DOMSource(node);
+        final StringWriter out = new StringWriter();
+        final Result output = new StreamResult(out);
         try {
             XFORMER.transform(input, output);
-        } catch (TransformerException te) {
-            org.apache.commons.logging.Log log = LogFactory.getLog(SCXMLWriter.class);
+        } catch (final TransformerException te) {
+            final org.apache.commons.logging.Log log = LogFactory.getLog(SCXMLWriter.class);
             log.error(te.getMessage(), te);
             writer.writeComment("TransformerException: Node was not serialized");
         }
@@ -1115,7 +1115,7 @@ public class SCXMLWriter {
 
         // There isn't any portable way to write pretty using the JDK 1.6 StAX API
         configuration.internalWriter.flush();
-        Source prettyPrintSource = new StreamSource(new StringReader(configuration.internalWriter.toString()));
+        final Source prettyPrintSource = new StreamSource(new StringReader(configuration.internalWriter.toString()));
         Result prettyPrintResult = null;
         if (scxmlStream != null) {
             prettyPrintResult = new StreamResult(scxmlStream);
@@ -1125,15 +1125,15 @@ public class SCXMLWriter {
             prettyPrintResult = scxmlResult;
         }
 
-        TransformerFactory factory = TransformerFactory.newInstance();
+        final TransformerFactory factory = TransformerFactory.newInstance();
         try {
-            Transformer transformer = factory.newTransformer();
+            final Transformer transformer = factory.newTransformer();
             if (configuration.encoding != null) {
                 transformer.setOutputProperty(OutputKeys.ENCODING, configuration.encoding);
             }
             transformer.setOutputProperty(OutputKeys.INDENT, "yes");
             transformer.transform(prettyPrintSource, prettyPrintResult);
-        } catch (TransformerException te) {
+        } catch (final TransformerException te) {
             throw new XMLStreamException("TransformerException while pretty printing SCXML", te);
         }
     }
@@ -1156,14 +1156,14 @@ public class SCXMLWriter {
             throws XMLStreamException {
 
         // Instantiate the XMLOutputFactory
-        XMLOutputFactory factory = XMLOutputFactory.newInstance();
+        final XMLOutputFactory factory = XMLOutputFactory.newInstance();
         /*
         if (configuration.factoryId != null && configuration.factoryClassLoader != null) {
             // TODO StAX API bug means we can't use custom factories yet
             //factory = XMLOutputFactory.newInstance(configuration.factoryId, configuration.factoryClassLoader);
         }
         */
-        for (Map.Entry<String, Object> property : configuration.properties.entrySet()) {
+        for (final Map.Entry<String, Object> property : configuration.properties.entrySet()) {
             factory.setProperty(property.getKey(), property.getValue());
         }
 
@@ -1191,16 +1191,16 @@ public class SCXMLWriter {
      */
     private static Transformer getTransformer() {
         Transformer transformer;
-        Properties outputProps = new Properties();
+        final Properties outputProps = new Properties();
         outputProps.put(OutputKeys.OMIT_XML_DECLARATION, "yes");
         outputProps.put(OutputKeys.STANDALONE, "no");
         outputProps.put(OutputKeys.INDENT, "yes");
         try {
-            TransformerFactory tfFactory = TransformerFactory.newInstance();
+            final TransformerFactory tfFactory = TransformerFactory.newInstance();
             transformer = tfFactory.newTransformer();
             transformer.setOutputProperties(outputProps);
         } catch (TransformerFactoryConfigurationError | TransformerConfigurationException t) {
-            org.apache.commons.logging.Log log = LogFactory.getLog(SCXMLWriter.class);
+            final org.apache.commons.logging.Log log = LogFactory.getLog(SCXMLWriter.class);
             log.error(t.getMessage(), t);
             return null;
         }
diff --git a/src/main/java/org/apache/commons/scxml2/model/Assign.java b/src/main/java/org/apache/commons/scxml2/model/Assign.java
index a4ccb20..d52684b 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Assign.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Assign.java
@@ -135,10 +135,10 @@ public class Assign extends Action implements ParsedValueContainer {
      * {@inheritDoc}
      */
     @Override
-    public void execute(ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
-        EnterableState parentState = getParentEnterableState();
-        Context ctx = exctx.getContext(parentState);
-        Evaluator evaluator = exctx.getEvaluator();
+    public void execute(final ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
+        final EnterableState parentState = getParentEnterableState();
+        final Context ctx = exctx.getContext(parentState);
+        final Evaluator evaluator = exctx.getEvaluator();
         Object data = null;
         if (expr != null) {
             data = evaluator.eval(ctx, expr);
diff --git a/src/main/java/org/apache/commons/scxml2/model/Cancel.java b/src/main/java/org/apache/commons/scxml2/model/Cancel.java
index 33c79f2..426e703 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Cancel.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Cancel.java
@@ -81,7 +81,7 @@ public class Cancel extends Action {
      * 
      * @param sendidexpr the expression that evaluates to the ID of the send message that should be cancelled.
      */
-    public void setSendidexpr(String sendidexpr) {
+    public void setSendidexpr(final String sendidexpr) {
         this.sendidexpr = sendidexpr;
     }
 
@@ -89,10 +89,10 @@ public class Cancel extends Action {
      * {@inheritDoc}
      */
     @Override
-    public void execute(ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
-        EnterableState parentState = getParentEnterableState();
-        Context ctx = exctx.getContext(parentState);
-        Evaluator eval = exctx.getEvaluator();
+    public void execute(final ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
+        final EnterableState parentState = getParentEnterableState();
+        final Context ctx = exctx.getContext(parentState);
+        final Evaluator eval = exctx.getEvaluator();
 
         String sendidValue = sendid;
         if (sendidValue == null && sendidexpr != null) {
diff --git a/src/main/java/org/apache/commons/scxml2/model/CustomAction.java b/src/main/java/org/apache/commons/scxml2/model/CustomAction.java
index db13784..57f732d 100644
--- a/src/main/java/org/apache/commons/scxml2/model/CustomAction.java
+++ b/src/main/java/org/apache/commons/scxml2/model/CustomAction.java
@@ -66,17 +66,17 @@ public class CustomAction {
     /**
      * The namespace this custom action belongs to.
      */
-    private String namespaceURI;
+    private final String namespaceURI;
 
     /**
      * The local name of the custom action.
      */
-    private String localName;
+    private final String localName;
 
     /**
      * The implementation of this custom action.
      */
-    private Class<? extends Action> actionClass;
+    private final Class<? extends Action> actionClass;
 
     /**
      * Constructor, if the namespace or local name is null or empty,
@@ -90,7 +90,7 @@ public class CustomAction {
      */
     public CustomAction(final String namespaceURI, final String localName,
             final Class<? extends Action> actionClass) {
-        Log log = LogFactory.getLog(CustomAction.class);
+        final Log log = LogFactory.getLog(CustomAction.class);
         if (namespaceURI == null || namespaceURI.trim().length() == 0) {
             log.error(ERR_NO_NAMESPACE);
             throw new IllegalArgumentException(ERR_NO_NAMESPACE);
diff --git a/src/main/java/org/apache/commons/scxml2/model/ElseIf.java b/src/main/java/org/apache/commons/scxml2/model/ElseIf.java
index 4d0e703..834c596 100644
--- a/src/main/java/org/apache/commons/scxml2/model/ElseIf.java
+++ b/src/main/java/org/apache/commons/scxml2/model/ElseIf.java
@@ -64,7 +64,7 @@ public class ElseIf extends Action {
      * {@inheritDoc}
      */
     @Override
-    public void execute(ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
+    public void execute(final ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
         // nothing to do, the <if> container will take care of this
     }
 
diff --git a/src/main/java/org/apache/commons/scxml2/model/EnterableState.java b/src/main/java/org/apache/commons/scxml2/model/EnterableState.java
index 39f5917..dc6585e 100644
--- a/src/main/java/org/apache/commons/scxml2/model/EnterableState.java
+++ b/src/main/java/org/apache/commons/scxml2/model/EnterableState.java
@@ -60,7 +60,7 @@ public abstract class EnterableState extends TransitionTarget implements Documen
      * @param order the document order
      * @see DocumentOrder
      */
-    public final void setOrder(int order) {
+    public final void setOrder(final int order) {
         this.order = order;
     }
 
diff --git a/src/main/java/org/apache/commons/scxml2/model/Final.java b/src/main/java/org/apache/commons/scxml2/model/Final.java
index 4ca71aa..a9c6197 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Final.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Final.java
@@ -60,7 +60,7 @@ public class Final extends EnterableState {
      * Set the parent State.
      * @param parent The parent state to set
      */
-    public final void setParent(State parent) {
+    public final void setParent(final State parent) {
         super.setParent(parent);
     }
 
@@ -80,19 +80,19 @@ public class Final extends EnterableState {
         this.doneData = doneData;
     }
 
-    public Object processDoneData(SCXMLExecutionContext exctx) throws ModelException {
+    public Object processDoneData(final SCXMLExecutionContext exctx) throws ModelException {
         Object result = null;
         if (doneData != null) {
             try {
-                Content content = doneData.getContent();
-                Evaluator eval = exctx.getEvaluator();
-                Context ctx = exctx.getScInstance().getGlobalContext();
+                final Content content = doneData.getContent();
+                final Evaluator eval = exctx.getEvaluator();
+                final Context ctx = exctx.getScInstance().getGlobalContext();
                 if (content != null) {
                     if (content.getExpr() != null) {
                         Object evalResult;
                         try {
                             evalResult = eval.eval(ctx, content.getExpr());
-                        } catch (SCXMLExpressionException e) {
+                        } catch (final SCXMLExpressionException e) {
                             exctx.getInternalIOProcessor().addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION,
                                     TriggerEvent.ERROR_EVENT).build());
                             exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR,
@@ -105,14 +105,14 @@ public class Final extends EnterableState {
                         result = eval.cloneData(content.getParsedValue().getValue());
                     }
                 } else {
-                    Map<String, Object> payloadDataMap = new LinkedHashMap<>();
+                    final Map<String, Object> payloadDataMap = new LinkedHashMap<>();
                     PayloadBuilder.addParamsToPayload(exctx.getScInstance().getGlobalContext(),
                             exctx.getEvaluator(), doneData.getParams(), payloadDataMap);
                     if (!payloadDataMap.isEmpty()) {
                         result = payloadDataMap;
                     }
                 }
-            } catch (SCXMLExpressionException e) {
+            } catch (final SCXMLExpressionException e) {
                 result = null;
                 exctx.getInternalIOProcessor().addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build());
                 exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR,
diff --git a/src/main/java/org/apache/commons/scxml2/model/Foreach.java b/src/main/java/org/apache/commons/scxml2/model/Foreach.java
index 73ace8f..b79824a 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Foreach.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Foreach.java
@@ -92,10 +92,10 @@ public class Foreach extends Action implements ActionsContainer {
      * {@inheritDoc}
      */
     @Override
-    public void execute(ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
-        Context ctx = exctx.getContext(getParentEnterableState());
-        Evaluator eval = exctx.getEvaluator();
-        Object arrayObject = eval.eval(ctx,array);
+    public void execute(final ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
+        final Context ctx = exctx.getContext(getParentEnterableState());
+        final Evaluator eval = exctx.getEvaluator();
+        final Object arrayObject = eval.eval(ctx,array);
         if (arrayObject != null && (arrayObject.getClass().isArray() || arrayObject instanceof Iterable || arrayObject instanceof Map)) {
             if (arrayObject.getClass().isArray()) {
                 for (int currentIndex = 0, size = Array.getLength(arrayObject); currentIndex < size; currentIndex++) {
@@ -104,7 +104,7 @@ public class Foreach extends Action implements ActionsContainer {
                         ctx.setLocal(index, currentIndex);
                     }
                     // The "foreach" statement is a "container"
-                    for (Action aa : actions) {
+                    for (final Action aa : actions) {
                         aa.execute(exctx);
                     }
                 }
@@ -112,24 +112,24 @@ public class Foreach extends Action implements ActionsContainer {
             else {
                 // In case of Javascript based arrays, the (Nashorn) engine returns a ScriptObjectMirror
                 // which (also) implements Map<String, Object), so then we can/must use the map values as Iterable
-                Iterable iterable = arrayObject instanceof Iterable ? (Iterable)arrayObject : ((Map)arrayObject).values();
+                final Iterable iterable = arrayObject instanceof Iterable ? (Iterable)arrayObject : ((Map)arrayObject).values();
 
                 // Spec requires to iterate over a shallow copy of underlying array in a way that modifications to
                 // the collection during the execution of <foreach> must not affect the iteration behavior.
                 // For array objects (see above) this isn't needed, but for Iterables we don't have that guarantee
                 // so we make a copy first
-                ArrayList<Object> arrayList = new ArrayList<>();
-                for (Object value: iterable) {
+                final ArrayList<Object> arrayList = new ArrayList<>();
+                for (final Object value: iterable) {
                     arrayList.add(value);
                 }
                 int currentIndex = 0;
-                for (Object value : arrayList) {
+                for (final Object value : arrayList) {
                     eval.evalAssign(ctx, item, value);
                     if (index != null) {
                         ctx.setLocal(index, currentIndex);
                     }
                     // The "foreach" statement is a "container"
-                    for (Action aa : actions) {
+                    for (final Action aa : actions) {
                         aa.execute(exctx);
                     }
                     currentIndex++;
diff --git a/src/main/java/org/apache/commons/scxml2/model/If.java b/src/main/java/org/apache/commons/scxml2/model/If.java
index d8a8fc7..61a17b9 100644
--- a/src/main/java/org/apache/commons/scxml2/model/If.java
+++ b/src/main/java/org/apache/commons/scxml2/model/If.java
@@ -110,10 +110,10 @@ public class If extends Action implements ActionsContainer {
      * {@inheritDoc}
      */
     @Override
-    public void execute(ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
-        EnterableState parentState = getParentEnterableState();
-        Context ctx = exctx.getContext(parentState);
-        Evaluator eval = exctx.getEvaluator();
+    public void execute(final ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
+        final EnterableState parentState = getParentEnterableState();
+        final Context ctx = exctx.getContext(parentState);
+        final Evaluator eval = exctx.getEvaluator();
         Boolean rslt;
         try {
             rslt = eval.evalCond(ctx, cond);
@@ -124,7 +124,7 @@ public class If extends Action implements ActionsContainer {
                 }
                 rslt = Boolean.FALSE;
             }
-        } catch (SCXMLExpressionException e) {
+        } catch (final SCXMLExpressionException e) {
             rslt = Boolean.FALSE;
             exctx.getInternalIOProcessor().addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build());
             exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR, "Treating as false due to error: "
@@ -132,7 +132,7 @@ public class If extends Action implements ActionsContainer {
         }
         execute = rslt;
         // The "if" statement is a "container"
-        for (Action aa : actions) {
+        for (final Action aa : actions) {
             if (execute && !(aa instanceof ElseIf)) {
                 aa.execute(exctx);
             } else if (execute && aa instanceof ElseIf) {
diff --git a/src/main/java/org/apache/commons/scxml2/model/Invoke.java b/src/main/java/org/apache/commons/scxml2/model/Invoke.java
index 3d88577..50530b3 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Invoke.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Invoke.java
@@ -358,14 +358,14 @@ public class Invoke extends Action implements ContentContainer, ParamsContainer
 
     @Override
     public void execute(final ActionExecutionContext axctx) throws ModelException {
-        EnterableState parentState = getParentEnterableState();
-        Context ctx = axctx.getContext(parentState);
-        SCXMLExecutionContext exctx = (SCXMLExecutionContext)ctx.getVars().get(getCurrentSCXMLExecutionContextKey());
+        final EnterableState parentState = getParentEnterableState();
+        final Context ctx = axctx.getContext(parentState);
+        final SCXMLExecutionContext exctx = (SCXMLExecutionContext)ctx.getVars().get(getCurrentSCXMLExecutionContextKey());
         if (exctx == null) {
             throw new ModelException("Missing current SCXMLExecutionContext instance in context under key: "+ getCurrentSCXMLExecutionContextKey());
         }
         try {
-            Evaluator eval = axctx.getEvaluator();
+            final Evaluator eval = axctx.getEvaluator();
 
             String typeValue = type;
             if (typeValue == null && typeexpr != null) {
@@ -378,7 +378,7 @@ public class Invoke extends Action implements ContentContainer, ParamsContainer
             if (typeValue == null) {
                 typeValue = SCXMLExecutionContext.SCXML_INVOKER_TYPE;
             }
-            Invoker invoker = exctx.newInvoker(typeValue);
+            final Invoker invoker = exctx.newInvoker(typeValue);
 
             String invokeId = getId();
             if (invokeId == null) {
@@ -394,7 +394,7 @@ public class Invoke extends Action implements ContentContainer, ParamsContainer
                 src = (String)eval.eval(ctx, getSrcexpr());
             }
             if (src != null) {
-                PathResolver pr = exctx.getStateMachine().getPathResolver();
+                final PathResolver pr = exctx.getStateMachine().getPathResolver();
                 if (pr != null) {
                     src = pr.resolvePath(src);
                 }
@@ -404,7 +404,7 @@ public class Invoke extends Action implements ContentContainer, ParamsContainer
                 if (content.getExpr() != null) {
                     try {
                         contentValue = eval.eval(ctx, content.getExpr());
-                    } catch (SCXMLExpressionException e) {
+                    } catch (final SCXMLExpressionException e) {
                         exctx.getInternalIOProcessor().addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION,
                                 TriggerEvent.ERROR_EVENT).build());
                         exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR,
@@ -419,14 +419,14 @@ public class Invoke extends Action implements ContentContainer, ParamsContainer
                     // inline content
                 } else if (contentValue instanceof Element) {
                     // xml based content (must be assigned through data)
-                    Element contentElement = (Element)contentValue;
+                    final Element contentElement = (Element)contentValue;
                     if (SCXMLConstants.ELEM_SCXML.equals(contentElement.getLocalName()) &&
                             SCXMLConstants.XMLNS_SCXML.equals(contentElement.getNamespaceURI())) {
                         // statemachine definition: transform to string as we cannot (yet) pass XML directly to invoker
                         try {
                             contentValue = ContentParser.DEFAULT_PARSER.toXml(contentElement);
                         }
-                        catch (IOException e) {
+                        catch (final IOException e) {
                             throw new ActionExecutionError("<invoke> for state "+parentState.getId() +
                                     ": invalid <content><scxml> definition");
                         }
@@ -443,7 +443,7 @@ public class Invoke extends Action implements ContentContainer, ParamsContainer
                 throw new ActionExecutionError("<invoke> for state "+parentState.getId() +
                         ": no src and no content defined");
             }
-            Map<String, Object> payloadDataMap = new HashMap<>();
+            final Map<String, Object> payloadDataMap = new HashMap<>();
             PayloadBuilder.addNamelistDataToPayload(parentState, ctx, eval, exctx.getErrorReporter(), namelist, payloadDataMap);
             PayloadBuilder.addParamsToPayload(ctx, eval, paramsList, payloadDataMap);
             invoker.setParentSCXMLExecutor(exctx.getSCXMLExecutor());
diff --git a/src/main/java/org/apache/commons/scxml2/model/Log.java b/src/main/java/org/apache/commons/scxml2/model/Log.java
index d606b3d..f1dd18b 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Log.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Log.java
@@ -90,9 +90,9 @@ public class Log extends Action {
      * {@inheritDoc}
      */
     @Override
-    public void execute(ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
-        Context ctx = exctx.getContext(getParentEnterableState());
-        Evaluator eval = exctx.getEvaluator();
+    public void execute(final ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
+        final Context ctx = exctx.getContext(getParentEnterableState());
+        final Evaluator eval = exctx.getEvaluator();
         exctx.getAppLog().info(label + ": " + String.valueOf(eval.eval(ctx, expr)));
     }
 }
diff --git a/src/main/java/org/apache/commons/scxml2/model/PayloadBuilder.java b/src/main/java/org/apache/commons/scxml2/model/PayloadBuilder.java
index 8ba5cf7..9ba342a 100644
--- a/src/main/java/org/apache/commons/scxml2/model/PayloadBuilder.java
+++ b/src/main/java/org/apache/commons/scxml2/model/PayloadBuilder.java
@@ -58,7 +58,7 @@ public class PayloadBuilder {
      * @param payload the payload data map to be updated
      */
     @SuppressWarnings("unchecked")
-    public static void addToPayload(final String attrName, final Object attrValue, Map<String, Object> payload) {
+    public static void addToPayload(final String attrName, final Object attrValue, final Map<String, Object> payload) {
         DataValueList valueList = null;
         Object value = payload.get(attrName);
         if (value != null) {
@@ -97,11 +97,11 @@ public class PayloadBuilder {
      * @see PayloadBuilder#addToPayload(String, Object, java.util.Map)
      */
     public static void addParamsToPayload(final Context ctx, final Evaluator evaluator, final List<Param> paramsList,
-                                          Map<String, Object> payload)
+                                          final Map<String, Object> payload)
             throws SCXMLExpressionException {
         if (!paramsList.isEmpty()) {
             Object paramValue;
-            for (Param p : paramsList) {
+            for (final Param p : paramsList) {
                 if (p.getExpr() != null) {
                     paramValue = evaluator.eval(ctx, p.getExpr());
                 }
@@ -132,13 +132,13 @@ public class PayloadBuilder {
      */
     public static void addNamelistDataToPayload(final EnterableState parentState, final Context ctx,
                                                 final Evaluator evaluator, final ErrorReporter errorReporter,
-                                                final String namelist, Map<String, Object> payload)
+                                                final String namelist, final Map<String, Object> payload)
             throws SCXMLExpressionException {
         if (namelist != null) {
-            StringTokenizer tkn = new StringTokenizer(namelist);
+            final StringTokenizer tkn = new StringTokenizer(namelist);
             while (tkn.hasMoreTokens()) {
-                String varName = tkn.nextToken();
-                Object varObj = evaluator.eval(ctx, varName);
+                final String varName = tkn.nextToken();
+                final Object varObj = evaluator.eval(ctx, varName);
                 if (varObj == null) {
                     //considered as a warning here
                     errorReporter.onError(ErrorConstants.UNDEFINED_VARIABLE, varName + " = null", parentState);
diff --git a/src/main/java/org/apache/commons/scxml2/model/Raise.java b/src/main/java/org/apache/commons/scxml2/model/Raise.java
index fc200f7..efcba47 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Raise.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Raise.java
@@ -67,12 +67,12 @@ public class Raise extends Action {
      * {@inheritDoc}
      */
     @Override
-    public void execute(ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
+    public void execute(final ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
 
         if (exctx.getAppLog().isDebugEnabled()) {
             exctx.getAppLog().debug("<raise>: Adding event '" + event + "' to list of derived events.");
         }
-        TriggerEvent ev = new EventBuilder(event, TriggerEvent.SIGNAL_EVENT).build();
+        final TriggerEvent ev = new EventBuilder(event, TriggerEvent.SIGNAL_EVENT).build();
         exctx.getInternalIOProcessor().addEvent(ev);
 
     }
diff --git a/src/main/java/org/apache/commons/scxml2/model/SCXML.java b/src/main/java/org/apache/commons/scxml2/model/SCXML.java
index 8610d99..c4875d1 100644
--- a/src/main/java/org/apache/commons/scxml2/model/SCXML.java
+++ b/src/main/java/org/apache/commons/scxml2/model/SCXML.java
@@ -154,7 +154,7 @@ public class SCXML implements Serializable, Observable {
         return globalScript;
     }
 
-    public final void setGlobalScript(Script script) {
+    public final void setGlobalScript(final Script script) {
         this.globalScript = script;
     }
 
@@ -353,7 +353,7 @@ public class SCXML implements Serializable, Observable {
 	 *
 	 * @param name The name for this state machine.
 	 */
-	public void setName(String name) {
+	public void setName(final String name) {
 		this.name = name;
 	}
 
@@ -371,7 +371,7 @@ public class SCXML implements Serializable, Observable {
 	 *
 	 * @param profile The profile to be used.
 	 */
-	public void setProfile(String profile) {
+	public void setProfile(final String profile) {
 		this.profile = profile;
 	}
 
@@ -389,7 +389,7 @@ public class SCXML implements Serializable, Observable {
 	 *
 	 * @param exmode The exmode to be used.
 	 */
-	public void setExmode(String exmode) {
+	public void setExmode(final String exmode) {
 		this.exmode = exmode;
 	}
 
diff --git a/src/main/java/org/apache/commons/scxml2/model/Script.java b/src/main/java/org/apache/commons/scxml2/model/Script.java
index 76785b8..d2cc897 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Script.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Script.java
@@ -77,9 +77,9 @@ public class Script extends Action {
      * {@inheritDoc}
      */
     @Override
-    public void execute(ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
-        Context ctx = isGlobalScript() ? exctx.getGlobalContext() : exctx.getContext(getParentEnterableState());
-        Evaluator eval = exctx.getEvaluator();
+    public void execute(final ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
+        final Context ctx = isGlobalScript() ? exctx.getGlobalContext() : exctx.getContext(getParentEnterableState());
+        final Evaluator eval = exctx.getEvaluator();
         eval.evalScript(ctx, getScript());
     }
 }
diff --git a/src/main/java/org/apache/commons/scxml2/model/Send.java b/src/main/java/org/apache/commons/scxml2/model/Send.java
index 813809c..f92cdde 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Send.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Send.java
@@ -383,11 +383,11 @@ public class Send extends Action implements ContentContainer, ParamsContainer {
      */
     @SuppressWarnings("unchecked")
     @Override
-    public void execute(ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
+    public void execute(final ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
         // Send attributes evaluation
-        EnterableState parentState = getParentEnterableState();
-        Context ctx = exctx.getContext(parentState);
-        Evaluator eval = exctx.getEvaluator();
+        final EnterableState parentState = getParentEnterableState();
+        final Context ctx = exctx.getContext(parentState);
+        final Evaluator eval = exctx.getEvaluator();
         // Most attributes of <send> are expressions so need to be
         // evaluated before the EventDispatcher callback
         Object hintsValue = null;
@@ -425,7 +425,7 @@ public class Send extends Action implements ContentContainer, ParamsContainer {
             typeValue = SCXMLIOProcessor.DEFAULT_EVENT_PROCESSOR;
         }
         Object payload = null;
-        Map<String, Object> payloadDataMap = new LinkedHashMap<>();
+        final Map<String, Object> payloadDataMap = new LinkedHashMap<>();
         PayloadBuilder.addNamelistDataToPayload(parentState, ctx, eval, exctx.getErrorReporter(), namelist, payloadDataMap);
         PayloadBuilder.addParamsToPayload(ctx, eval, paramsList, payloadDataMap);
         if (!payloadDataMap.isEmpty()) {
@@ -436,7 +436,7 @@ public class Send extends Action implements ContentContainer, ParamsContainer {
                 Object evalResult;
                 try {
                     evalResult = eval.eval(ctx, content.getExpr());
-                } catch (SCXMLExpressionException e) {
+                } catch (final SCXMLExpressionException e) {
                     exctx.getInternalIOProcessor().addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION,
                             TriggerEvent.ERROR_EVENT).build());
                     exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR,
@@ -452,7 +452,7 @@ public class Send extends Action implements ContentContainer, ParamsContainer {
         long wait = 0L;
         String delayString = delay;
         if (delayString == null && delayexpr != null) {
-            Object delayValue = eval.eval(ctx, delayexpr);
+            final Object delayValue = eval.eval(ctx, delayexpr);
             if (delayValue != null) {
                 delayString = delayValue.toString();
             }
@@ -468,7 +468,7 @@ public class Send extends Action implements ContentContainer, ParamsContainer {
                         + "\" evaluated to null");
             }
         }
-        Map<String, SCXMLIOProcessor> ioProcessors = (Map<String, SCXMLIOProcessor>) ctx.get(SCXMLSystemContext.IOPROCESSORS_KEY);
+        final Map<String, SCXMLIOProcessor> ioProcessors = (Map<String, SCXMLIOProcessor>) ctx.get(SCXMLSystemContext.IOPROCESSORS_KEY);
         if (exctx.getAppLog().isDebugEnabled()) {
             exctx.getAppLog().debug("<send>: Dispatching event '" + eventValue
                     + "' to target '" + targetValue + "' of target type '"
@@ -497,7 +497,7 @@ public class Send extends Action implements ContentContainer, ParamsContainer {
         if (delayString != null && delayString.trim().length() > 0) {
 
             try {
-                String trimDelay = delayString.trim();
+                final String trimDelay = delayString.trim();
                 String numericDelay = trimDelay;
                 if (trimDelay.endsWith(MILLIS)) {
                     numericDelay = trimDelay.substring(0, trimDelay.length() - 2);
@@ -508,7 +508,7 @@ public class Send extends Action implements ContentContainer, ParamsContainer {
                     multiplier = multiplier*MILLIS_IN_A_MINUTE;
                     numericDelay = trimDelay.substring(0, trimDelay.length() - 1);
                 }
-                int fractionIndex = numericDelay.indexOf('.');
+                final int fractionIndex = numericDelay.indexOf('.');
                 if (fractionIndex > -1) {
                     if (fractionIndex > 0) {
                         wait = Long.parseLong(numericDelay.substring(0, fractionIndex));
@@ -520,7 +520,7 @@ public class Send extends Action implements ContentContainer, ParamsContainer {
                 if (numericDelay.length() > 0) {
                     wait += Long.parseLong(numericDelay) * multiplier;
                 }
-            } catch (NumberFormatException nfe) {
+            } catch (final NumberFormatException nfe) {
                 throw new SCXMLExpressionException("<send>: invalid " + (expression ? "delayexpr=\"" : "delay=\"") + delayStringSource +"\"");
             }
         }
diff --git a/src/main/java/org/apache/commons/scxml2/model/SimpleTransition.java b/src/main/java/org/apache/commons/scxml2/model/SimpleTransition.java
index 4f24af0..25ba72f 100644
--- a/src/main/java/org/apache/commons/scxml2/model/SimpleTransition.java
+++ b/src/main/java/org/apache/commons/scxml2/model/SimpleTransition.java
@@ -80,7 +80,7 @@ public class SimpleTransition extends Executable implements Observable {
         this.targets = new HashSet<>();
     }
 
-    private boolean isCompoundStateParent(TransitionalState ts) {
+    private boolean isCompoundStateParent(final TransitionalState ts) {
         return ts instanceof State && ((State)ts).isComposite();
     }
 
@@ -95,7 +95,7 @@ public class SimpleTransition extends Executable implements Observable {
      * Sets the observableId for this Observable, which must be unique within the SCXML state machine
      * @param observableId the observableId
      */
-    public final void setObservableId(Integer observableId) {
+    public final void setObservableId(final Integer observableId) {
         this.observableId = observableId;
     }
 
@@ -160,7 +160,7 @@ public class SimpleTransition extends Executable implements Observable {
             typeInternal = TransitionType.internal == type && isCompoundStateParent(getParent());
 
             if (typeInternal && targets.size() > 0) {
-                for (TransitionTarget tt : targets) {
+                for (final TransitionTarget tt : targets) {
                     if (!tt.isDescendantOf(getParent())) {
                         typeInternal = false;
                         break;
@@ -206,7 +206,7 @@ public class SimpleTransition extends Executable implements Observable {
                     for (int i = getParent().getNumberOfAncestors()-1; i > -1; i--) {
                         if (isCompoundStateParent(getParent().getAncestor(i))) {
                             boolean allDescendants = true;
-                            for (TransitionTarget tt : targets) {
+                            for (final TransitionTarget tt : targets) {
                                 if (i >= tt.getNumberOfAncestors()) {
                                     i = tt.getNumberOfAncestors();
                                     allDescendants = false;
diff --git a/src/main/java/org/apache/commons/scxml2/model/State.java b/src/main/java/org/apache/commons/scxml2/model/State.java
index f5d1367..663310c 100644
--- a/src/main/java/org/apache/commons/scxml2/model/State.java
+++ b/src/main/java/org/apache/commons/scxml2/model/State.java
@@ -83,9 +83,9 @@ public class State extends TransitionalState {
      */
     public final void setFirst(final String target) {
         this.first = target;
-        SimpleTransition t = new SimpleTransition();
+        final SimpleTransition t = new SimpleTransition();
         t.setNext(target);
-        Initial ini = new Initial();
+        final Initial ini = new Initial();
         ini.setGenerated();
         ini.setTransition(t);
         ini.setParent(this);
diff --git a/src/main/java/org/apache/commons/scxml2/model/Transition.java b/src/main/java/org/apache/commons/scxml2/model/Transition.java
index 4c01d5a..bfd6435 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Transition.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Transition.java
@@ -81,7 +81,7 @@ public class Transition extends SimpleTransition implements DocumentOrder {
      * @param order the document order
      * @see DocumentOrder
      */
-    public final void setOrder(int order) {
+    public final void setOrder(final int order) {
         this.order = order;
     }
 
@@ -124,7 +124,7 @@ public class Transition extends SimpleTransition implements DocumentOrder {
         if (this.event != null) {
             // 'event' is a space separated list of event descriptors
             events = new ArrayList<>();
-            StringTokenizer st = new StringTokenizer(this.event);
+            final StringTokenizer st = new StringTokenizer(this.event);
             while (st.hasMoreTokens()) {
                 String token = st.nextToken();
                 if (token.equals("*") || token.equals(".*")) {
diff --git a/src/main/java/org/apache/commons/scxml2/model/TransitionTarget.java b/src/main/java/org/apache/commons/scxml2/model/TransitionTarget.java
index 022ed78..4ac5a42 100644
--- a/src/main/java/org/apache/commons/scxml2/model/TransitionTarget.java
+++ b/src/main/java/org/apache/commons/scxml2/model/TransitionTarget.java
@@ -64,7 +64,7 @@ public abstract class TransitionTarget implements Serializable, Observable {
      * Sets the observableId for this Observable, which must be unique within the SCXML state machine
      * @param observableId the observableId
      */
-    public final void setObservableId(Integer observableId) {
+    public final void setObservableId(final Integer observableId) {
         this.observableId = observableId;
     }
 
@@ -98,7 +98,7 @@ public abstract class TransitionTarget implements Serializable, Observable {
      * @param level the level of the ancestor to return, zero being top
      * @return the ancestor at specified level
      */
-    public EnterableState getAncestor(int level) {
+    public EnterableState getAncestor(final int level) {
         return ancestors[level];
     }
 
@@ -138,7 +138,7 @@ public abstract class TransitionTarget implements Serializable, Observable {
      * Update TransitionTarget descendants their ancestors
      */
     protected void updateDescendantsAncestors() {
-        TransitionTarget ttParent = parent;
+        final TransitionTarget ttParent = parent;
         ancestors = new EnterableState[ttParent.ancestors.length+1];
         System.arraycopy(ttParent.ancestors, 0, ancestors, 0, ttParent.ancestors.length);
         ancestors[ttParent.ancestors.length] = parent;
@@ -152,7 +152,7 @@ public abstract class TransitionTarget implements Serializable, Observable {
      *            TransitionTarget context - a potential ancestor
      * @return true if this is a descendant of context, false otherwise
      */
-    public final boolean isDescendantOf(TransitionTarget context) {
+    public final boolean isDescendantOf(final TransitionTarget context) {
         return getNumberOfAncestors() > context.getNumberOfAncestors()
                 && getAncestor(context.getNumberOfAncestors()) == context;
     }
diff --git a/src/main/java/org/apache/commons/scxml2/model/TransitionalState.java b/src/main/java/org/apache/commons/scxml2/model/TransitionalState.java
index 5642dbc..0632016 100644
--- a/src/main/java/org/apache/commons/scxml2/model/TransitionalState.java
+++ b/src/main/java/org/apache/commons/scxml2/model/TransitionalState.java
@@ -66,11 +66,11 @@ public abstract class TransitionalState extends EnterableState {
      */
     protected void updateDescendantsAncestors() {
         super.updateDescendantsAncestors();
-        for (History h : history) {
+        for (final History h : history) {
             // reset ancestors
             h.updateDescendantsAncestors();
         }
-        for (TransitionTarget child : children) {
+        for (final TransitionTarget child : children) {
             child.updateDescendantsAncestors();
         }
     }
@@ -100,7 +100,7 @@ public abstract class TransitionalState extends EnterableState {
      * @return the ancestor at specified level
      */
     @Override
-    public TransitionalState getAncestor(int level) {
+    public TransitionalState getAncestor(final int level) {
         return (TransitionalState)super.getAncestor(level);
     }
 
@@ -113,7 +113,7 @@ public abstract class TransitionalState extends EnterableState {
      */
     public final List<Transition> getTransitionsList(final String event) {
         List<Transition> matchingTransitions = null; // since we returned null upto v0.6
-        for (Transition t : transitions) {
+        for (final Transition t : transitions) {
             if ((event == null && t.getEvent() == null)
                     || (event != null && event.equals(t.getEvent()))) {
                 if (matchingTransitions == null) {
diff --git a/src/main/java/org/apache/commons/scxml2/model/Var.java b/src/main/java/org/apache/commons/scxml2/model/Var.java
index d70b8e9..e777090 100644
--- a/src/main/java/org/apache/commons/scxml2/model/Var.java
+++ b/src/main/java/org/apache/commons/scxml2/model/Var.java
@@ -100,16 +100,16 @@ public class Var extends Action {
      * {@inheritDoc}
      */
     @Override
-    public void execute(ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
-        Context ctx = exctx.getContext(getParentEnterableState());
-        Evaluator eval = exctx.getEvaluator();
-        Object varObj = eval.eval(ctx, expr);
+    public void execute(final ActionExecutionContext exctx) throws ModelException, SCXMLExpressionException {
+        final Context ctx = exctx.getContext(getParentEnterableState());
+        final Evaluator eval = exctx.getEvaluator();
+        final Object varObj = eval.eval(ctx, expr);
         ctx.setLocal(name, varObj);
         if (exctx.getAppLog().isDebugEnabled()) {
             exctx.getAppLog().debug("<var>: Defined variable '" + name
                 + "' with initial value '" + String.valueOf(varObj) + "'");
         }
-        TriggerEvent ev = new EventBuilder(name + ".change", TriggerEvent.CHANGE_EVENT).build();
+        final TriggerEvent ev = new EventBuilder(name + ".change", TriggerEvent.CHANGE_EVENT).build();
         exctx.getInternalIOProcessor().addEvent(ev);
     }
 }
diff --git a/src/main/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImpl.java b/src/main/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImpl.java
index 423f13f..87975c8 100644
--- a/src/main/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImpl.java
+++ b/src/main/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImpl.java
@@ -115,8 +115,8 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
         // execute global script if defined
         executeGlobalScript(exctx);
         // enter initial states
-        HashSet<TransitionalState> statesToInvoke = new HashSet<>();
-        Step step = new Step(null);
+        final HashSet<TransitionalState> statesToInvoke = new HashSet<>();
+        final Step step = new Step(null);
         step.getTransitList().add(exctx.getStateMachine().getInitialTransition());
         microStep(exctx, step, statesToInvoke);
         // Execute Immediate Transitions
@@ -166,10 +166,10 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
         else {
             setSystemEventVariable(exctx.getScInstance(), event, false);
             processInvokes(exctx, event);
-            Step step = new Step(event);
+            final Step step = new Step(event);
             selectTransitions(exctx, step);
             if (!step.getTransitList().isEmpty()) {
-                HashSet<TransitionalState> statesToInvoke = new HashSet<>();
+                final HashSet<TransitionalState> statesToInvoke = new HashSet<>();
                 microStep(exctx, step, statesToInvoke);
                 if (exctx.isRunning()) {
                     macroStep(exctx, statesToInvoke);
@@ -197,29 +197,29 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @param exctx The execution context for this step
      * @throws ModelException if a SCXML model error occurred during the execution.
      */
-    public void finalStep(SCXMLExecutionContext exctx) throws ModelException {
+    public void finalStep(final SCXMLExecutionContext exctx) throws ModelException {
         if (exctx.isRunning()) {
             return;
         }
-        ArrayList<EnterableState> configuration = new ArrayList<>(exctx.getScInstance().getStateConfiguration().getActiveStates());
+        final ArrayList<EnterableState> configuration = new ArrayList<>(exctx.getScInstance().getStateConfiguration().getActiveStates());
         configuration.sort(DocumentOrder.reverseDocumentOrderComparator);
-        for (EnterableState es : configuration) {
-            for (OnExit onexit : es.getOnExits()) {
+        for (final EnterableState es : configuration) {
+            for (final OnExit onexit : es.getOnExits()) {
                 executeContent(exctx, onexit);
             }
             if (es instanceof TransitionalState) {
                 // check if invokers are active in this state
-                for (Invoke inv : ((TransitionalState)es).getInvokes()) {
+                for (final Invoke inv : ((TransitionalState)es).getInvokes()) {
                     exctx.cancelInvoker(inv);
                 }
             }
             exctx.getNotificationRegistry().fireOnExit(es, es);
             exctx.getNotificationRegistry().fireOnExit(exctx.getStateMachine(), es);
             if (es instanceof Final && es.getParent() == null) {
-                Object donedata = ((Final)es).processDoneData(exctx);
+                final Object donedata = ((Final)es).processDoneData(exctx);
                 exctx.getScInstance().getGlobalContext().getSystemContext().getPlatformVariables().put(SCXMLSystemContext.FINAL_DONE_DATA_KEY, donedata);
                 if (exctx.getSCXMLExecutor().getParentSCXMLIOProcessor() != null) {
-                    ParentSCXMLIOProcessor ioProcessor = exctx.getSCXMLExecutor().getParentSCXMLIOProcessor();
+                    final ParentSCXMLIOProcessor ioProcessor = exctx.getSCXMLExecutor().getParentSCXMLIOProcessor();
                     if (!ioProcessor.isClosed()) {
                         ioProcessor.addEvent(
                                 new EventBuilder("done.invoke."+ioProcessor.getInvokeId(), TriggerEvent.SIGNAL_EVENT)
@@ -306,7 +306,7 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
                 Step step = new Step(null);
                 selectTransitions(exctx, step);
                 if (step.getTransitList().isEmpty()) {
-                    TriggerEvent event = exctx.nextInternalEvent();
+                    final TriggerEvent event = exctx.nextInternalEvent();
                     if (event != null) {
                         if (isCancelEvent(event)) {
                             exctx.stop();
@@ -342,7 +342,7 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      */
     public void computeExitSet(final Step step, final StateConfiguration stateConfiguration) {
         if (!stateConfiguration.getActiveStates().isEmpty()) {
-            for (SimpleTransition st : step.getTransitList()) {
+            for (final SimpleTransition st : step.getTransitList()) {
                 computeExitSet(st, step.getExitSet(), stateConfiguration.getActiveStates());
             }
             recordHistory(step, stateConfiguration.getStates(), stateConfiguration.getActiveStates());
@@ -358,15 +358,15 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @param exitSet The set for adding the states to exit to
      * @param activeStates The current active states of the state machine ({@link StateConfiguration#getActiveStates()}).
      */
-    public void computeExitSet(SimpleTransition transition, Set<EnterableState> exitSet, Set<EnterableState> activeStates) {
+    public void computeExitSet(final SimpleTransition transition, final Set<EnterableState> exitSet, final Set<EnterableState> activeStates) {
         if (!transition.getTargets().isEmpty()) {
-            TransitionalState transitionDomain = transition.getTransitionDomain();
+            final TransitionalState transitionDomain = transition.getTransitionDomain();
             if (transitionDomain == null) {
                 // root transition: every active state will be exited
                 exitSet.addAll(activeStates);
             }
             else {
-                for (EnterableState state : activeStates) {
+                for (final EnterableState state : activeStates) {
                     if (state.isDescendantOf(transitionDomain)) {
                         exitSet.add(state);
                     }
@@ -391,17 +391,17 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @param activeStates The current set of all active states in the state machine
      */
     public void recordHistory(final Step step, final Set<EnterableState> atomicStates, final Set<EnterableState> activeStates) {
-        for (EnterableState es : step.getExitSet()) {
+        for (final EnterableState es : step.getExitSet()) {
             if (es instanceof TransitionalState && ((TransitionalState)es).hasHistory()) {
-                TransitionalState ts = (TransitionalState)es;
+                final TransitionalState ts = (TransitionalState)es;
                 Set<EnterableState> shallow = null;
                 Set<EnterableState> deep = null;
-                for (History h : ts.getHistory()) {
+                for (final History h : ts.getHistory()) {
                     if (h.isDeep()) {
                         if (deep == null) {
                             //calculate deep history for a given state once
                             deep = new HashSet<>();
-                            for (EnterableState ott : atomicStates) {
+                            for (final EnterableState ott : atomicStates) {
                                 if (ott.isDescendantOf(es)) {
                                     deep.add(ott);
                                 }
@@ -430,10 +430,10 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @param step The step containing the list of transitions to be taken
      */
     public void computeEntrySet(final SCXMLExecutionContext exctx, final Step step) {
-        Set<History> historyTargets = new HashSet<>();
-        Set<EnterableState> entrySet = new HashSet<>();
-        for (SimpleTransition st : step.getTransitList()) {
-            for (TransitionTarget tt : st.getTargets()) {
+        final Set<History> historyTargets = new HashSet<>();
+        final Set<EnterableState> entrySet = new HashSet<>();
+        for (final SimpleTransition st : step.getTransitList()) {
+            for (final TransitionTarget tt : st.getTargets()) {
                 if (tt instanceof EnterableState) {
                     entrySet.add((EnterableState) tt);
                 }
@@ -443,15 +443,15 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
                 }
             }
         }
-        for (EnterableState es : entrySet) {
+        for (final EnterableState es : entrySet) {
             addDescendantStatesToEnter(exctx, step, es);
         }
-        for (History h : historyTargets) {
+        for (final History h : historyTargets) {
             addDescendantStatesToEnter(exctx, step, h);
         }
-        for (SimpleTransition st : step.getTransitList()) {
-            TransitionalState ancestor = st.getTransitionDomain();
-            for (TransitionTarget tt : st.getTargets()) {
+        for (final SimpleTransition st : step.getTransitList()) {
+            final TransitionalState ancestor = st.getTransitionDomain();
+            for (final TransitionTarget tt : st.getTargets()) {
                 addAncestorStatesToEnter(exctx, step, tt, ancestor);
             }
         }
@@ -467,33 +467,33 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
     public void addDescendantStatesToEnter(final SCXMLExecutionContext exctx, final Step step,
                                               final TransitionTarget tt) {
         if (tt instanceof History) {
-            History h = (History) tt;
+            final History h = (History) tt;
             Set<EnterableState> lastConfiguration = step.getNewHistoryConfigurations().get(h);
             if (lastConfiguration == null) {
                 lastConfiguration = exctx.getScInstance().getLastConfiguration(h);
             }
             if (lastConfiguration.isEmpty()) {
                 step.getDefaultHistoryTransitions().put(h.getParent(), h.getTransition());
-                for (TransitionTarget dtt : h.getTransition().getTargets()) {
+                for (final TransitionTarget dtt : h.getTransition().getTargets()) {
                     addDescendantStatesToEnter(exctx, step, dtt);
                 }
-                for (TransitionTarget dtt : h.getTransition().getTargets()) {
+                for (final TransitionTarget dtt : h.getTransition().getTargets()) {
                     addAncestorStatesToEnter(exctx, step, dtt, tt.getParent());
                 }
             } else {
-                for (TransitionTarget dtt : lastConfiguration) {
+                for (final TransitionTarget dtt : lastConfiguration) {
                     addDescendantStatesToEnter(exctx, step, dtt);
                 }
-                for (TransitionTarget dtt : lastConfiguration) {
+                for (final TransitionTarget dtt : lastConfiguration) {
                     addAncestorStatesToEnter(exctx, step, dtt, tt.getParent());
                 }
             }
         }
         else { // tt instanceof EnterableState
-            EnterableState es = (EnterableState)tt;
+            final EnterableState es = (EnterableState)tt;
             step.getEntrySet().add(es);
             if (es instanceof Parallel) {
-                for (EnterableState child : ((Parallel)es).getChildren()) {
+                for (final EnterableState child : ((Parallel)es).getChildren()) {
                     if (containsNoDescendant(step.getEntrySet(), child)) {
                         addDescendantStatesToEnter(exctx, step, child);
                     }
@@ -501,10 +501,10 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
             }
             else if (es instanceof State && ((State) es).isComposite()) {
                 step.getDefaultEntrySet().add(es);
-                for (TransitionTarget dtt : ((State)es).getInitial().getTransition().getTargets()) {
+                for (final TransitionTarget dtt : ((State)es).getInitial().getTransition().getTargets()) {
                     addDescendantStatesToEnter(exctx, step, dtt);
                 }
-                for (TransitionTarget dtt : ((State)es).getInitial().getTransition().getTargets()) {
+                for (final TransitionTarget dtt : ((State)es).getInitial().getTransition().getTargets()) {
                     addAncestorStatesToEnter(exctx, step, dtt, tt);
                 }
             }
@@ -520,16 +520,16 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @param ancestor The ancestor TransitionTarget
      */
     public void addAncestorStatesToEnter(final SCXMLExecutionContext exctx, final Step step,
-                                            final TransitionTarget tt, TransitionTarget ancestor) {
+                                            final TransitionTarget tt, final TransitionTarget ancestor) {
         // for for anc in getProperAncestors(tt,ancestor)
         for (int i = tt.getNumberOfAncestors()-1; i > -1; i--) {
-            EnterableState anc = tt.getAncestor(i);
+            final EnterableState anc = tt.getAncestor(i);
             if (anc == ancestor) {
                 break;
             }
             step.getEntrySet().add(anc);
             if (anc instanceof Parallel) {
-                for (EnterableState child : ((Parallel)anc).getChildren()) {
+                for (final EnterableState child : ((Parallel)anc).getChildren()) {
                     if (containsNoDescendant(step.getEntrySet(), child)) {
                         addDescendantStatesToEnter(exctx, step, child);
                     }
@@ -544,8 +544,8 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @param states the set of states to check for descendants
      * @param state the state to check with
      */
-    public boolean containsNoDescendant(Set<EnterableState> states, EnterableState state) {
-        for (EnterableState es : states) {
+    public boolean containsNoDescendant(final Set<EnterableState> states, final EnterableState state) {
+        for (final EnterableState es : states) {
             if (es.isDescendantOf(state)) {
                 return false;
             }
@@ -563,14 +563,14 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      */
     public void selectTransitions(final SCXMLExecutionContext exctx, final Step step) throws ModelException {
         step.getTransitList().clear();
-        ArrayList<Transition> enabledTransitions = new ArrayList<>();
+        final ArrayList<Transition> enabledTransitions = new ArrayList<>();
 
-        ArrayList<EnterableState> configuration = new ArrayList<>(exctx.getScInstance().getStateConfiguration().getActiveStates());
+        final ArrayList<EnterableState> configuration = new ArrayList<>(exctx.getScInstance().getStateConfiguration().getActiveStates());
         configuration.sort(DocumentOrder.documentOrderComparator);
 
-        HashSet<EnterableState> visited = new HashSet<>();
+        final HashSet<EnterableState> visited = new HashSet<>();
 
-        String eventName = step.getEvent() != null ? step.getEvent().getName() : null;
+        final String eventName = step.getEvent() != null ? step.getEvent().getName() : null;
         for (EnterableState es : configuration) {
             if (es.isAtomicState()) {
                 if (es instanceof Final) {
@@ -584,12 +584,12 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
                         es = es.getParent();
                     }
                 }
-                TransitionalState state = (TransitionalState)es;
+                final TransitionalState state = (TransitionalState)es;
                 TransitionalState current = state;
                 int ancestorIndex = state.getNumberOfAncestors()-1;
                 boolean transitionMatched = false;
                 do {
-                    for (Transition transition : current.getTransitionsList()) {
+                    for (final Transition transition : current.getTransitionsList()) {
                         if (transitionMatched = matchTransition(exctx, transition, eventName)) {
                             enabledTransitions.add(transition);
                             break;
@@ -611,17 +611,17 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      */
     public void removeConflictingTransitions(final SCXMLExecutionContext exctx, final Step step,
                                              final List<Transition> enabledTransitions) {
-        LinkedHashSet<Transition> filteredTransitions = new LinkedHashSet<>();
-        LinkedHashSet<Transition> preemptedTransitions = new LinkedHashSet<>();
-        Map<Transition, Set<EnterableState>> exitSets = new HashMap<>();
+        final LinkedHashSet<Transition> filteredTransitions = new LinkedHashSet<>();
+        final LinkedHashSet<Transition> preemptedTransitions = new LinkedHashSet<>();
+        final Map<Transition, Set<EnterableState>> exitSets = new HashMap<>();
 
-        Set<EnterableState> configuration = exctx.getScInstance().getStateConfiguration().getActiveStates();
+        final Set<EnterableState> configuration = exctx.getScInstance().getStateConfiguration().getActiveStates();
         enabledTransitions.sort(DocumentOrder.documentOrderComparator);
 
-        for (Transition t1 : enabledTransitions) {
+        for (final Transition t1 : enabledTransitions) {
             boolean t1Preempted = false;
             Set<EnterableState> t1ExitSet = exitSets.get(t1);
-            for (Transition t2 : filteredTransitions) {
+            for (final Transition t2 : filteredTransitions) {
                 if (t1ExitSet == null) {
                     t1ExitSet = new HashSet<>();
                     computeExitSet(t1, t1ExitSet, configuration);
@@ -633,10 +633,10 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
                     computeExitSet(t2, t2ExitSet, configuration);
                     exitSets.put(t2, t2ExitSet);
                 }
-                Set<EnterableState> smaller = t1ExitSet.size() < t2ExitSet.size() ? t1ExitSet : t2ExitSet;
-                Set<EnterableState> larger = smaller == t1ExitSet ? t2ExitSet : t1ExitSet;
+                final Set<EnterableState> smaller = t1ExitSet.size() < t2ExitSet.size() ? t1ExitSet : t2ExitSet;
+                final Set<EnterableState> larger = smaller == t1ExitSet ? t2ExitSet : t1ExitSet;
                 boolean hasIntersection = false;
-                for (EnterableState s1 : smaller) {
+                for (final EnterableState s1 : smaller) {
                     hasIntersection = larger.contains(s1);
                     if (hasIntersection) {
                         break;
@@ -656,7 +656,7 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
                 exitSets.remove(t1);
             }
             else {
-                for (Transition preempted : preemptedTransitions) {
+                for (final Transition preempted : preemptedTransitions) {
                     filteredTransitions.remove(preempted);
                     exitSets.remove(preempted);
                 }
@@ -677,7 +677,7 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
         if (eventName != null) {
             if (!(transition.isNoEventsTransition() || transition.isAllEventsTransition())) {
                 boolean eventMatch = false;
-                for (String event : transition.getEvents()) {
+                for (final String event : transition.getEvents()) {
                     if (eventName.startsWith(event)) {
                         if (eventName.length() == event.length() || eventName.charAt(event.length())=='.') {
                             eventMatch = true;
@@ -698,7 +698,7 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
         }
         if (transition.getCond() != null) {
             Boolean result = Boolean.FALSE;
-            Context context = exctx.getScInstance().getContext(transition.getParent());
+            final Context context = exctx.getScInstance().getContext(transition.getParent());
             try {
                 if ((result = exctx.getEvaluator().evalCond(context, transition.getCond())) == null) {
                     result = Boolean.FALSE;
@@ -708,7 +708,7 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
                     }
                 }
             }
-            catch (SCXMLExpressionException e) {
+            catch (final SCXMLExpressionException e) {
                 exctx.getInternalIOProcessor().addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build());
                 exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR, "Treating as false due to error: "
                         + e.getMessage(), transition);
@@ -728,14 +728,14 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      */
     public boolean isInFinalState(final EnterableState es, final Set<EnterableState> configuration) {
         if (es instanceof State) {
-            for (EnterableState child : ((State)es).getChildren()) {
+            for (final EnterableState child : ((State)es).getChildren()) {
                 if (child instanceof Final && configuration.contains(child)) {
                     return true;
                 }
             }
         }
         else if (es instanceof Parallel) {
-            for (EnterableState child : ((Parallel)es).getChildren()) {
+            for (final EnterableState child : ((Parallel)es).getChildren()) {
                 if (!isInFinalState(child, configuration)) {
                     return false;
                 }
@@ -751,7 +751,7 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @param event received external event
      * @return true if this event is of type {@link TriggerEvent#CANCEL_EVENT}.
      */
-    public boolean isCancelEvent(TriggerEvent event) {
+    public boolean isCancelEvent(final TriggerEvent event) {
         return (event.getType() == TriggerEvent.CANCEL_EVENT);
     }
 
@@ -774,12 +774,12 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
          * states = active configuration.
          */
         boolean legalConfig = true; // let's be optimists
-        Map<EnterableState, Set<EnterableState>> counts = new HashMap<>();
-        Set<EnterableState> scxmlCount = new HashSet<>();
+        final Map<EnterableState, Set<EnterableState>> counts = new HashMap<>();
+        final Set<EnterableState> scxmlCount = new HashSet<>();
         for (EnterableState es : states) {
             EnterableState parent;
             while ((parent = es.getParent()) != null) {
-                Set<EnterableState> cnt = counts.computeIfAbsent(parent, k -> new HashSet<>());
+                final Set<EnterableState> cnt = counts.computeIfAbsent(parent, k -> new HashSet<>());
                 cnt.add(es);
                 es = parent;
             }
@@ -792,11 +792,11 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
         }
         else {
             //Validate child counts:
-            for (Map.Entry<EnterableState, Set<EnterableState>> entry : counts.entrySet()) {
-                EnterableState es = entry.getKey();
-                Set<EnterableState> count = entry.getValue();
+            for (final Map.Entry<EnterableState, Set<EnterableState>> entry : counts.entrySet()) {
+                final EnterableState es = entry.getKey();
+                final Set<EnterableState> count = entry.getValue();
                 if (es instanceof Parallel) {
-                    Parallel p = (Parallel) es;
+                    final Parallel p = (Parallel) es;
                     if (count.size() < p.getChildren().size()) {
                         errRep.onError(ErrorConstants.ILLEGAL_CONFIG, "Not all AND states active for parallel " + p.getId(), entry);
                         legalConfig = false;
@@ -826,8 +826,8 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @param event The event being stored
      * @param internal Flag indicating the event was received internally or externally
      */
-    public void setSystemEventVariable(final SCInstance scInstance, final TriggerEvent event, boolean internal) {
-        Context systemContext = scInstance.getSystemContext();
+    public void setSystemEventVariable(final SCInstance scInstance, final TriggerEvent event, final boolean internal) {
+        final Context systemContext = scInstance.getSystemContext();
         EventVariable eventVar = null;
         if (event != null) {
             String eventType = internal ? EventVariable.TYPE_INTERNAL : EventVariable.TYPE_EXTERNAL;
@@ -849,11 +849,11 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @throws ModelException if a SCXML model error occurred during the execution.
      */
     public void executeGlobalScript(final SCXMLExecutionContext exctx) throws ModelException {
-        Script globalScript = exctx.getStateMachine().getGlobalScript();
+        final Script globalScript = exctx.getStateMachine().getGlobalScript();
         if ( globalScript != null) {
             try {
                 globalScript.execute(exctx.getActionExecutionContext());
-            } catch (SCXMLExpressionException e) {
+            } catch (final SCXMLExpressionException e) {
                 exctx.getInternalIOProcessor().addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build());
                 exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR, e.getMessage(), exctx.getStateMachine());
             }
@@ -876,20 +876,20 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
         if (step.getExitSet().isEmpty()) {
             return;
         }
-        ArrayList<EnterableState> exitList = new ArrayList<>(step.getExitSet());
+        final ArrayList<EnterableState> exitList = new ArrayList<>(step.getExitSet());
         exitList.sort(DocumentOrder.reverseDocumentOrderComparator);
 
-        for (EnterableState es : exitList) {
+        for (final EnterableState es : exitList) {
 
             if (es instanceof TransitionalState && ((TransitionalState)es).hasHistory()) {
                 // persist the new history configurations for this state to exit
-                for (History h : ((TransitionalState)es).getHistory()) {
+                for (final History h : ((TransitionalState)es).getHistory()) {
                     exctx.getScInstance().setLastConfiguration(h, step.getNewHistoryConfigurations().get(h));
                 }
             }
 
             boolean onexitEventRaised = false;
-            for (OnExit onexit : es.getOnExits()) {
+            for (final OnExit onexit : es.getOnExits()) {
                 executeContent(exctx, onexit);
                 if (!onexitEventRaised && onexit.isRaiseEvent()) {
                     onexitEventRaised = true;
@@ -901,7 +901,7 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
 
             if (es instanceof TransitionalState && !statesToInvoke.remove(es)) {
                 // check if invokers are active in this state
-                for (Invoke inv : ((TransitionalState)es).getInvokes()) {
+                for (final Invoke inv : ((TransitionalState)es).getInvokes()) {
                     exctx.cancelInvoker(inv);
                 }
             }
@@ -917,7 +917,7 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @throws ModelException if a SCXML model error occurred during the execution.
      */
     public void executeTransitionContent(final SCXMLExecutionContext exctx, final Step step) throws ModelException {
-        for (SimpleTransition transition : step.getTransitList()) {
+        for (final SimpleTransition transition : step.getTransitList()) {
             executeContent(exctx, transition);
         }
     }
@@ -929,15 +929,15 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @param exec the executable providing the execution content
      * @throws ModelException if a SCXML model error occurred during the execution.
      */
-    public void executeContent(SCXMLExecutionContext exctx, Executable exec) throws ModelException {
+    public void executeContent(final SCXMLExecutionContext exctx, final Executable exec) throws ModelException {
         try {
-            for (Action action : exec.getActions()) {
+            for (final Action action : exec.getActions()) {
                 action.execute(exctx.getActionExecutionContext());
             }
-        } catch (SCXMLExpressionException e) {
+        } catch (final SCXMLExpressionException e) {
             exctx.getInternalIOProcessor().addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build());
             exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR, e.getMessage(), exec);
-        } catch (ActionExecutionError e) {
+        } catch (final ActionExecutionError e) {
             if (!e.isEventRaised()) {
                 exctx.getInternalIOProcessor().addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build());
             }
@@ -946,12 +946,12 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
             }
         }
         if (exec instanceof Transition) {
-            Transition t = (Transition)exec;
+            final Transition t = (Transition)exec;
             if (t.getTargets().isEmpty()) {
                 notifyOnTransition(exctx, t, t.getParent());
             }
             else {
-                for (TransitionTarget tt : t.getTargets()) {
+                for (final TransitionTarget tt : t.getTargets()) {
                     notifyOnTransition(exctx, t, tt);
                 }
             }
@@ -967,8 +967,8 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      */
     public void notifyOnTransition(final SCXMLExecutionContext exctx, final Transition t,
                                       final TransitionTarget target) {
-        EventVariable event = (EventVariable)exctx.getScInstance().getSystemContext().getVars().get(SCXMLSystemContext.EVENT_KEY);
-        String eventName = event != null ? event.getName() : null;
+        final EventVariable event = (EventVariable)exctx.getScInstance().getSystemContext().getVars().get(SCXMLSystemContext.EVENT_KEY);
+        final String eventName = event != null ? event.getName() : null;
         exctx.getNotificationRegistry().fireOnTransition(t, t.getParent(), target, t, eventName);
         exctx.getNotificationRegistry().fireOnTransition(exctx.getStateMachine(), t.getParent(), target, t, eventName);
     }
@@ -989,9 +989,9 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
         if (step.getEntrySet().isEmpty()) {
             return;
         }
-        ArrayList<EnterableState> entryList = new ArrayList<>(step.getEntrySet());
+        final ArrayList<EnterableState> entryList = new ArrayList<>(step.getEntrySet());
         entryList.sort(DocumentOrder.documentOrderComparator);
-        for (EnterableState es : entryList) {
+        for (final EnterableState es : entryList) {
             exctx.getScInstance().getStateConfiguration().enterState(es);
             // ensure state context creation and datamodel cloned
             exctx.getScInstance().getContext(es);
@@ -1000,7 +1000,7 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
             }
 
             boolean onentryEventRaised = false;
-            for (OnEntry onentry : es.getOnEntries()) {
+            for (final OnEntry onentry : es.getOnEntries()) {
                 executeContent(exctx, onentry);
                 if (!onentryEventRaised && onentry.isRaiseEvent()) {
                     onentryEventRaised = true;
@@ -1014,19 +1014,19 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
                 executeContent(exctx, ((State)es).getInitial().getTransition());
             }
             if (es instanceof TransitionalState) {
-                SimpleTransition hTransition = step.getDefaultHistoryTransitions().get(es);
+                final SimpleTransition hTransition = step.getDefaultHistoryTransitions().get(es);
                 if (hTransition != null) {
                     executeContent(exctx, hTransition);
                 }
             }
 
             if (es instanceof Final) {
-                State parent = (State)es.getParent();
+                final State parent = (State)es.getParent();
                 if (parent == null) {
                     exctx.stop();
                 }
                 else {
-                    Object donedata = ((Final)es).processDoneData(exctx);
+                    final Object donedata = ((Final)es).processDoneData(exctx);
                     exctx.getInternalIOProcessor().addEvent(new EventBuilder("done.state."+parent.getId(),TriggerEvent.CHANGE_EVENT).data(donedata).build());
                     if (parent.isRegion()) {
                         if (isInFinalState(parent.getParent(), exctx.getScInstance().getStateConfiguration().getActiveStates())) {
@@ -1048,11 +1048,11 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      */
     public void initiateInvokes(final SCXMLExecutionContext exctx,
                                 final Set<TransitionalState> statesToInvoke) throws ModelException {
-        ActionExecutionContext aexctx = exctx.getActionExecutionContext();
-        for (TransitionalState ts : statesToInvoke) {
-            for (Invoke invoke : ts.getInvokes()) {
-                Context ctx = aexctx.getContext(invoke.getParentEnterableState());
-                String exctxKey = invoke.getCurrentSCXMLExecutionContextKey();
+        final ActionExecutionContext aexctx = exctx.getActionExecutionContext();
+        for (final TransitionalState ts : statesToInvoke) {
+            for (final Invoke invoke : ts.getInvokes()) {
+                final Context ctx = aexctx.getContext(invoke.getParentEnterableState());
+                final String exctxKey = invoke.getCurrentSCXMLExecutionContextKey();
                 ctx.setLocal(exctxKey, exctx);
                 invoke.execute(aexctx);
                 ctx.setLocal(exctxKey, null);
@@ -1069,10 +1069,10 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
      * @throws ModelException in case there is a fatal SCXML object model problem.
      */
     public void processInvokes(final SCXMLExecutionContext exctx, final TriggerEvent event) throws ModelException {
-        for (Map.Entry<Invoke, String> entry : exctx.getInvokeIds().entrySet()) {
+        for (final Map.Entry<Invoke, String> entry : exctx.getInvokeIds().entrySet()) {
             if (entry.getValue().equals(event.getInvokeId())) {
-                Invoke invoke = entry.getKey();
-                Finalize finalize = invoke.getFinalize();
+                final Invoke invoke = entry.getKey();
+                final Finalize finalize = invoke.getFinalize();
                 if (finalize != null) {
                     if (finalize.getActions().isEmpty()) {
                         /*
@@ -1095,7 +1095,7 @@ public class SCXMLSemanticsImpl implements SCXMLSemantics {
                                 event.getName().startsWith("done.invoke."+entry.getValue()+"."))) {
                     try {
                         exctx.getInvoker(entry.getKey()).parentEvent(event);
-                    } catch (InvokerException ie) {
+                    } catch (final InvokerException ie) {
                         exctx.getAppLog().error(ie.getMessage(), ie);
                         throw new ModelException(ie.getMessage(), ie.getCause());
                     }
diff --git a/src/main/java/org/apache/commons/scxml2/semantics/Step.java b/src/main/java/org/apache/commons/scxml2/semantics/Step.java
index 86495db..e5e4bdb 100644
--- a/src/main/java/org/apache/commons/scxml2/semantics/Step.java
+++ b/src/main/java/org/apache/commons/scxml2/semantics/Step.java
@@ -73,7 +73,7 @@ public class Step {
     /**
      * @param event The event received in this unit of progression
      */
-    public Step(TriggerEvent event) {
+    public Step(final TriggerEvent event) {
         this.event = event;
         this.exitSet = new HashSet<>();
         this.entrySet = new HashSet<>();
diff --git a/src/main/java/org/apache/commons/scxml2/test/StandaloneJexlExpressions.java b/src/main/java/org/apache/commons/scxml2/test/StandaloneJexlExpressions.java
index 0c1bd5b..fd6430c 100644
--- a/src/main/java/org/apache/commons/scxml2/test/StandaloneJexlExpressions.java
+++ b/src/main/java/org/apache/commons/scxml2/test/StandaloneJexlExpressions.java
@@ -55,7 +55,7 @@ public final class StandaloneJexlExpressions {
                     + "<url|filename>");
             System.exit(-1);
         }
-        Evaluator evaluator = new JexlEvaluator();
+        final Evaluator evaluator = new JexlEvaluator();
         StandaloneUtils.execute(args[0], evaluator);
     }
 
diff --git a/src/main/java/org/apache/commons/scxml2/test/StandaloneUtils.java b/src/main/java/org/apache/commons/scxml2/test/StandaloneUtils.java
index 9695e47..fb986a6 100644
--- a/src/main/java/org/apache/commons/scxml2/test/StandaloneUtils.java
+++ b/src/main/java/org/apache/commons/scxml2/test/StandaloneUtils.java
@@ -70,23 +70,23 @@ public final class StandaloneUtils {
      */
     public static void execute(final String uri, final Evaluator evaluator) {
         try {
-            String documentURI = getCanonicalURI(uri);
-            Context rootCtx = evaluator.newContext(null);
-            Tracer trc = new Tracer();
-            SCXML doc = SCXMLReader.read(new URL(documentURI));
+            final String documentURI = getCanonicalURI(uri);
+            final Context rootCtx = evaluator.newContext(null);
+            final Tracer trc = new Tracer();
+            final SCXML doc = SCXMLReader.read(new URL(documentURI));
             if (doc == null) {
                 System.err.println("The SCXML document " + uri
                         + " can not be parsed!");
                 System.exit(-1);
             }
             System.out.println(SCXMLWriter.write(doc));
-            SCXMLExecutor exec = new SCXMLExecutor(evaluator, null, trc);
+            final SCXMLExecutor exec = new SCXMLExecutor(evaluator, null, trc);
             exec.setStateMachine(doc);
             exec.addListener(doc, trc);
             exec.registerInvokerClass("scxml", SimpleSCXMLInvoker.class);
             exec.setRootContext(rootCtx);
             exec.go();
-            BufferedReader br = new BufferedReader(new
+            final BufferedReader br = new BufferedReader(new
                 InputStreamReader(System.in));
             String event;
             while ((event = br.readLine()) != null) {
@@ -104,23 +104,23 @@ public final class StandaloneUtils {
                 } else if (event.equalsIgnoreCase("reset")) {
                     exec.reset();
                 } else if (event.indexOf('=') != -1) {
-                    int marker = event.indexOf('=');
-                    String name = event.substring(0, marker);
-                    String value = event.substring(marker + 1);
+                    final int marker = event.indexOf('=');
+                    final String name = event.substring(0, marker);
+                    final String value = event.substring(marker + 1);
                     rootCtx.setLocal(name, value);
                     System.out.println("Set variable " + name + " to "
                         + value);
                 } else if (event.trim().length() == 0
                            || event.equalsIgnoreCase("null")) {
-                    TriggerEvent[] evts = {new EventBuilder(null,TriggerEvent.SIGNAL_EVENT).build()};
+                    final TriggerEvent[] evts = {new EventBuilder(null,TriggerEvent.SIGNAL_EVENT).build()};
                     exec.triggerEvents(evts);
                     if (exec.getStatus().isFinal()) {
                         System.out.println("A final configuration reached.");
                     }
                 } else {
-                    StringTokenizer st = new StringTokenizer(event);
-                    int tkns = st.countTokens();
-                    TriggerEvent[] evts = new TriggerEvent[tkns];
+                    final StringTokenizer st = new StringTokenizer(event);
+                    final int tkns = st.countTokens();
+                    final TriggerEvent[] evts = new TriggerEvent[tkns];
                     for (int i = 0; i < tkns; i++) {
                         evts[i] = new EventBuilder(st.nextToken(), TriggerEvent.SIGNAL_EVENT).build();
                     }
@@ -147,7 +147,7 @@ public final class StandaloneUtils {
             || uri.toLowerCase().startsWith("file://")) {
                 return uri;
         }
-        File in = new File(uri);
+        final File in = new File(uri);
         return "file:///" + in.getCanonicalPath();
     }
 
diff --git a/src/test/java/org/apache/commons/scxml2/EventDataTest.java b/src/test/java/org/apache/commons/scxml2/EventDataTest.java
index 19b2c7f..3417132 100644
--- a/src/test/java/org/apache/commons/scxml2/EventDataTest.java
+++ b/src/test/java/org/apache/commons/scxml2/EventDataTest.java
@@ -34,7 +34,7 @@ public class EventDataTest {
      */
     @Test
     public void testEventdata01Sample() throws Exception {
-    	SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/eventdata-01.xml");
+    	final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/eventdata-01.xml");
         exec.go();
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
@@ -43,7 +43,7 @@ public class EventDataTest {
         currentStates = SCXMLTestHelper.fireEvent(exec, te);
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("state3", currentStates.iterator().next().getId());
-        TriggerEvent[] evts = new TriggerEvent[] { te,
+        final TriggerEvent[] evts = new TriggerEvent[] { te,
             new EventBuilder("event.bar", TriggerEvent.SIGNAL_EVENT).data(6).build()};
         currentStates = SCXMLTestHelper.fireEvents(exec, evts);
         Assertions.assertEquals(1, currentStates.size());
@@ -56,16 +56,16 @@ public class EventDataTest {
 
     @Test
     public void testEventdata02Sample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/eventdata-02.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/eventdata-02.xml");
         exec.go();
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("state0", currentStates.iterator().next().getId());
-        TriggerEvent te1 = new EventBuilder("connection.alerting", TriggerEvent.SIGNAL_EVENT).data("line2").build();
+        final TriggerEvent te1 = new EventBuilder("connection.alerting", TriggerEvent.SIGNAL_EVENT).data("line2").build();
         currentStates = SCXMLTestHelper.fireEvent(exec, te1);
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("state2", currentStates.iterator().next().getId());
-        TriggerEvent te2 = new EventBuilder("connection.alerting", TriggerEvent.SIGNAL_EVENT)
+        final TriggerEvent te2 = new EventBuilder("connection.alerting", TriggerEvent.SIGNAL_EVENT)
                 .data(new ConnectionAlertingPayload(4)).build();
         currentStates = SCXMLTestHelper.fireEvent(exec, te2);
         Assertions.assertEquals(1, currentStates.size());
@@ -74,12 +74,12 @@ public class EventDataTest {
 
     @Test
     public void testEventdata03Sample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/eventdata-03.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/eventdata-03.xml");
         exec.go();
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("ten", currentStates.iterator().next().getId());
-        TriggerEvent te = new EventBuilder("event.foo", TriggerEvent.SIGNAL_EVENT).build();
+        final TriggerEvent te = new EventBuilder("event.foo", TriggerEvent.SIGNAL_EVENT).build();
         currentStates = SCXMLTestHelper.fireEvent(exec, te);
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("thirty", currentStates.iterator().next().getId());
@@ -87,9 +87,9 @@ public class EventDataTest {
 
     @Test
     public void testEventdata04Sample() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/jexl/eventdata-03.xml");
-        Tracer trc = new Tracer();
-        SCXMLExecutor exec = new SCXMLExecutor(null, null, trc);
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/jexl/eventdata-03.xml");
+        final Tracer trc = new Tracer();
+        final SCXMLExecutor exec = new SCXMLExecutor(null, null, trc);
         exec.addListener(scxml, trc);
         exec.setStateMachine(scxml);
         exec.go();
@@ -98,11 +98,11 @@ public class EventDataTest {
 
     public static class ConnectionAlertingPayload {
         private int line;
-        ConnectionAlertingPayload(int line) {
+        ConnectionAlertingPayload(final int line) {
             this.line = line;
         }
         @SuppressWarnings("unsed")
-        public void setLine(int line) {
+        public void setLine(final int line) {
             this.line = line;
         }
         @SuppressWarnings("unsed")
diff --git a/src/test/java/org/apache/commons/scxml2/SCInstanceTest.java b/src/test/java/org/apache/commons/scxml2/SCInstanceTest.java
index 4078f0b..3ffaf2f 100644
--- a/src/test/java/org/apache/commons/scxml2/SCInstanceTest.java
+++ b/src/test/java/org/apache/commons/scxml2/SCInstanceTest.java
@@ -41,7 +41,7 @@ public class SCInstanceTest {
     
     @Test
     public void testGetRootContext() {
-        Context context = new SimpleContext();
+        final Context context = new SimpleContext();
         context.set("name", "value");
         
         instance.setRootContext(context);
@@ -50,10 +50,10 @@ public class SCInstanceTest {
     
     @Test
     public void testGetContext() {
-        State target = new State();
+        final State target = new State();
         target.setId("1");
         
-        Context context = new SimpleContext();
+        final Context context = new SimpleContext();
         context.set("name", "value");
         
         instance.setContext(target, context);
@@ -63,14 +63,14 @@ public class SCInstanceTest {
     
     @Test
     public void testGetContextNullParent() throws Exception {
-        State target = new State();
+        final State target = new State();
         target.setId("1");
 
-        Context context = new SimpleContext();
+        final Context context = new SimpleContext();
         context.set("name", "value");
         instance.setRootContext(context);
 
-        Evaluator evaluator = new JexlEvaluator();
+        final Evaluator evaluator = new JexlEvaluator();
         executor.setEvaluator(evaluator);
 
         Assertions.assertEquals("value", instance.getContext(target).get("name"));
@@ -79,19 +79,19 @@ public class SCInstanceTest {
 
     @Test
     public void testGetContextParent() throws Exception {
-        State target = new State();
+        final State target = new State();
         target.setId("1");
         
-        State parent = new State();
+        final State parent = new State();
         parent.setId("parent");
         
         target.setParent(parent);
 
-        Context context = new SimpleContext();
+        final Context context = new SimpleContext();
         context.set("name", "value");
         instance.setRootContext(context);
 
-        Evaluator evaluator = new JexlEvaluator();
+        final Evaluator evaluator = new JexlEvaluator();
         executor.setEvaluator(evaluator);
 
         Assertions.assertEquals("value", instance.getContext(target).get("name"));
@@ -100,27 +100,27 @@ public class SCInstanceTest {
 
     @Test
     public void testGetLastConfigurationNull() {
-        History history = new History();
+        final History history = new History();
         
-        Set<EnterableState> returnConfiguration = instance.getLastConfiguration(history);
+        final Set<EnterableState> returnConfiguration = instance.getLastConfiguration(history);
         
         Assertions.assertEquals(0, returnConfiguration.size());
     }
 
     @Test
     public void testGetLastConfiguration() {
-        History history = new History();
+        final History history = new History();
         history.setId("1");
         
-        Set<EnterableState> configuration = new HashSet<>();
-        EnterableState tt1 = new State();
-        EnterableState tt2 = new State();
+        final Set<EnterableState> configuration = new HashSet<>();
+        final EnterableState tt1 = new State();
+        final EnterableState tt2 = new State();
         configuration.add(tt1);
         configuration.add(tt2);
         
         instance.setLastConfiguration(history, configuration);  
         
-        Set<EnterableState> returnConfiguration = instance.getLastConfiguration(history);
+        final Set<EnterableState> returnConfiguration = instance.getLastConfiguration(history);
         
         Assertions.assertEquals(2, returnConfiguration.size());
         Assertions.assertTrue(returnConfiguration.contains(tt1));
@@ -134,11 +134,11 @@ public class SCInstanceTest {
     
     @Test
     public void testIsEmptyFalse() {
-        History history = new History();
+        final History history = new History();
         history.setId("1");
         
-        Set<EnterableState> configuration = new HashSet<>();
-        EnterableState tt1 = new State();
+        final Set<EnterableState> configuration = new HashSet<>();
+        final EnterableState tt1 = new State();
         configuration.add(tt1);
         
         instance.setLastConfiguration(history, configuration);  
@@ -148,11 +148,11 @@ public class SCInstanceTest {
     
     @Test
     public void testReset() {
-        History history = new History();
+        final History history = new History();
         history.setId("1");
 
-        Set<EnterableState> configuration = new HashSet<>();
-        EnterableState tt1 = new State();
+        final Set<EnterableState> configuration = new HashSet<>();
+        final EnterableState tt1 = new State();
         configuration.add(tt1);
         
         instance.setLastConfiguration(history, configuration);  
diff --git a/src/test/java/org/apache/commons/scxml2/SCXMLExecutorTest.java b/src/test/java/org/apache/commons/scxml2/SCXMLExecutorTest.java
index c48547c..90b2cf6 100644
--- a/src/test/java/org/apache/commons/scxml2/SCXMLExecutorTest.java
+++ b/src/test/java/org/apache/commons/scxml2/SCXMLExecutorTest.java
@@ -35,77 +35,77 @@ public class SCXMLExecutorTest {
      */
     @Test
     public void testSCXMLExecutorMicrowave01JexlSample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/microwave-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/microwave-01.xml");
         exec.go();
         checkMicrowave01Sample(exec);
     }
 
     @Test
     public void testSCXMLExecutorMicrowave02JexlSample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/microwave-02.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/microwave-02.xml");
         exec.go();
         checkMicrowave02Sample(exec);
     }
 
     @Test
     public void testSCXMLExecutorMicrowave03JexlSample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/microwave-03.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/microwave-03.xml");
         exec.go();
         checkMicrowave01Sample(exec);
     }
 
     @Test
     public void testSCXMLExecutorMicrowave04JexlSample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/microwave-04.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/microwave-04.xml");
         exec.go();
         checkMicrowave02Sample(exec);
     }
 
     @Test
     public void testSCXMLExecutorMicrowave05JexlSample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/microwave-05.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/microwave-05.xml");
         exec.go();
         checkMicrowave02Sample(exec);
     }
 
     @Test
     public void testSCXMLExecutorMicrowave01grvSample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/microwave-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/microwave-01.xml");
         exec.go();
         checkMicrowave01Sample(exec);
     }
 
     @Test
     public void testSCXMLExecutorMicrowave02grvSample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/microwave-02.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/microwave-02.xml");
         exec.go();
         checkMicrowave02Sample(exec);
     }
 
     @Test
     public void testSCXMLExecutorMicrowave03grvSample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/microwave-03.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/microwave-03.xml");
         exec.go();
         checkMicrowave01Sample(exec);
     }
 
     @Test
     public void testSCXMLExecutorMicrowave04grvSample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/microwave-04.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/microwave-04.xml");
         exec.go();
         checkMicrowave02Sample(exec);
     }
 
     @Test
     public void testSCXMLExecutorMicrowave05grvSample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/microwave-05.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/microwave-05.xml");
         exec.go();
         checkMicrowave02Sample(exec);
     }
 
     @Test
     public void testSCXMLExecutorPrefix01Sample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/prefix-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/prefix-01.xml");
         exec.go();
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
@@ -117,7 +117,7 @@ public class SCXMLExecutorTest {
 
     @Test
     public void testSCXMLExecutorTransitions01Sample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-01.xml");
         exec.go();
         Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "done.state.ten");
         Assertions.assertEquals(1, currentStates.size());
@@ -147,15 +147,15 @@ public class SCXMLExecutorTest {
 
     @Test
     public void testSCXMLExecutorTransitions03Sample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-03.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-03.xml");
         exec.go();
-        Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "done.state.ten");
+        final Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "done.state.ten");
         Assertions.assertEquals(3, currentStates.size());
-        Set<String> expected = new HashSet<>();
+        final Set<String> expected = new HashSet<>();
         expected.add("twenty_one_2");
         expected.add("twenty_two_2");
         expected.add("twenty_three_2");
-        for (TransitionTarget tt : currentStates) {
+        for (final TransitionTarget tt : currentStates) {
             if (!expected.remove(tt.getId())) {
                 Assertions.fail("'" + tt.getId()
                     + "' is not an expected current state ID");
@@ -165,15 +165,15 @@ public class SCXMLExecutorTest {
 
     @Test
     public void testSCXMLExecutorTransitions04Sample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-04.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-04.xml");
         exec.go();
         Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "done.state.ten");
         Assertions.assertEquals(3, currentStates.size());
-        Set<String> expected = new HashSet<>();
+        final Set<String> expected = new HashSet<>();
         expected.add("twenty_one_1");
         expected.add("twenty_two_1");
         expected.add("twenty_three_1");
-        for (TransitionTarget tt : currentStates) {
+        for (final TransitionTarget tt : currentStates) {
             if (!expected.remove(tt.getId())) {
                 Assertions.fail("'" + tt.getId()
                     + "' is not an expected current state ID");
@@ -187,14 +187,14 @@ public class SCXMLExecutorTest {
 
     @Test
     public void testSCXMLExecutorTransitions05Sample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-05.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-05.xml");
         exec.go();
         SCXMLTestHelper.assertPostTriggerState(exec, "foo", "end");
     }
 
     @Test
     public void testSCXMLExecutorTransitions06Sample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-06.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-06.xml");
         exec.go();
         SCXMLTestHelper.assertPostTriggerStates(exec, "start", new String[]{"one", "two"});
         SCXMLTestHelper.assertPostTriggerState(exec, "onetwo_three", "three");
@@ -204,7 +204,7 @@ public class SCXMLExecutorTest {
 
     @Test
     public void testSend01Sample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/send-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/send-01.xml");
         exec.go();
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
@@ -216,9 +216,9 @@ public class SCXMLExecutorTest {
 
     @Test
     public void testSend02TypeSCXMLSample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/send-02.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/send-02.xml");
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("ninety", currentStates.iterator().next().getId());
         Assertions.assertTrue(exec.getStatus().isFinal());
@@ -226,9 +226,9 @@ public class SCXMLExecutorTest {
 
     @Test
     public void testSCXMLExecutorTransitionsWithCond01Sample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-with-cond-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-with-cond-01.xml");
         exec.go();
-        Map<String, Object> payload = new HashMap<>();
+        final Map<String, Object> payload = new HashMap<>();
 
         // with _event.data set to true, transition should happen as expected.
         payload.put("keyed", Boolean.TRUE);
@@ -255,16 +255,16 @@ public class SCXMLExecutorTest {
 
     @Test
     public void testSCXMLExecutorSystemEventVariable() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-event-variable.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-event-variable.xml");
         exec.go();
-        Map<String, Object> payload = new HashMap<>();
+        final Map<String, Object> payload = new HashMap<>();
         payload.put("keyed", Boolean.TRUE);
         SCXMLTestHelper.assertPostTriggerState(exec, "open", payload, "opened");
     }
 
     @Test
     public void testSCXMLExecutorSetConfiguration() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/transitions-01.xml");
         exec.go();
         Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "done.state.ten");
         Assertions.assertEquals(1, currentStates.size());
@@ -272,7 +272,7 @@ public class SCXMLExecutorTest {
         currentStates = SCXMLTestHelper.fireEvent(exec, "done.state.twenty_one");
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("twenty_two", currentStates.iterator().next().getId());
-        Set<String> stateIds = new HashSet<>();
+        final Set<String> stateIds = new HashSet<>();
         stateIds.add("twenty_one");
         exec.setConfiguration(stateIds);
         Assertions.assertEquals(1, exec.getStatus().getStates().size());
@@ -283,22 +283,22 @@ public class SCXMLExecutorTest {
 
     @Test
     public void testSCXMLExecutorFinalDoneData() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/final-donedata.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/final-donedata.xml");
         Assertions.assertNull(exec.getFinalDoneData());
         exec.go();
         Assertions.assertEquals("done", exec.getFinalDoneData());
     }
 
-    private void checkMicrowave01Sample(SCXMLExecutor exec) throws Exception {
-        Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "turn_on");
+    private void checkMicrowave01Sample(final SCXMLExecutor exec) throws Exception {
+        final Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "turn_on");
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("cooking", currentStates.iterator().next().getId());
     }
 
-    private void checkMicrowave02Sample(SCXMLExecutor exec) throws Exception {
-        Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "turn_on");
+    private void checkMicrowave02Sample(final SCXMLExecutor exec) throws Exception {
+        final Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "turn_on");
         Assertions.assertEquals(2, currentStates.size());
-        String id = (currentStates.iterator().next()).getId();
+        final String id = (currentStates.iterator().next()).getId();
         Assertions.assertTrue(id.equals("closed") || id.equals("cooking"));
     }
 }
diff --git a/src/test/java/org/apache/commons/scxml2/SCXMLTestHelper.java b/src/test/java/org/apache/commons/scxml2/SCXMLTestHelper.java
index 0ed3d97..1802bef 100644
--- a/src/test/java/org/apache/commons/scxml2/SCXMLTestHelper.java
+++ b/src/test/java/org/apache/commons/scxml2/SCXMLTestHelper.java
@@ -59,7 +59,7 @@ public class SCXMLTestHelper {
         return Integer.toString(++sequence);
     }
 
-    public static URL getResource(String name) {
+    public static URL getResource(final String name) {
         return SCXMLTestHelper.class.getClassLoader().getResource(name);
     }
 
@@ -79,16 +79,16 @@ public class SCXMLTestHelper {
 
     public static SCXML parse(final URL url, final List<CustomAction> customActions) throws Exception {
         Assertions.assertNotNull(url);
-        Configuration configuration = new Configuration(null, null, customActions);
-        SCXML scxml = SCXMLReader.read(url, configuration);
+        final Configuration configuration = new Configuration(null, null, customActions);
+        final SCXML scxml = SCXMLReader.read(url, configuration);
         Assertions.assertNotNull(scxml);
         return testModelSerializability(scxml);
     }
 
     public static SCXML parse(final Reader scxmlReader, final List<CustomAction> customActions) throws Exception {
         Assertions.assertNotNull(scxmlReader);
-        Configuration configuration = new Configuration(null, null, customActions);
-        SCXML scxml = SCXMLReader.read(scxmlReader, configuration);
+        final Configuration configuration = new Configuration(null, null, customActions);
+        final SCXML scxml = SCXMLReader.read(scxmlReader, configuration);
         Assertions.assertNotNull(scxml);
         return testModelSerializability(scxml);
     }
@@ -114,27 +114,27 @@ public class SCXMLTestHelper {
     }
 
     public static SCXMLExecutor getExecutor(final SCXML scxml, final Evaluator evaluator, final EventDispatcher eventDispatcher) throws Exception {
-        Tracer trc = new Tracer();
-        SCXMLExecutor exec = new SCXMLExecutor(evaluator, eventDispatcher, trc);
+        final Tracer trc = new Tracer();
+        final SCXMLExecutor exec = new SCXMLExecutor(evaluator, eventDispatcher, trc);
         exec.setStateMachine(scxml);
         exec.addListener(scxml, trc);
         return exec;
     }
 
-    public static TransitionTarget lookupTransitionTarget(SCXMLExecutor exec, String id) {
+    public static TransitionTarget lookupTransitionTarget(final SCXMLExecutor exec, final String id) {
         return exec.getStateMachine().getTargets().get(id);
     }
 
-    public static Context lookupContext(SCXMLExecutor exec, String id) {
-        TransitionTarget tt = lookupTransitionTarget(exec, id);
+    public static Context lookupContext(final SCXMLExecutor exec, final String id) {
+        final TransitionTarget tt = lookupTransitionTarget(exec, id);
         if (tt == null || !(tt instanceof EnterableState)) {
             return null;
         }
         return exec.getSCInstance().lookupContext((EnterableState)tt);
     }
 
-    public static void assertState(SCXMLExecutor exec, String expectedStateId) {
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+    public static void assertState(final SCXMLExecutor exec, final String expectedStateId) {
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size(),
                 "Expected 1 simple (leaf) state with id '" + expectedStateId +
                         "' but found " + currentStates.size() + " states instead.");
@@ -142,51 +142,51 @@ public class SCXMLTestHelper {
             next().getId());
     }
 
-    public static Set<EnterableState> fireEvent(SCXMLExecutor exec, String name) throws Exception {
+    public static Set<EnterableState> fireEvent(final SCXMLExecutor exec, final String name) throws Exception {
         return fireEvent(exec, name, null);
     }
 
-    public static Set<EnterableState> fireEvent(SCXMLExecutor exec, String name, Object data) throws Exception {
-        TriggerEvent[] evts = {new EventBuilder(name, TriggerEvent.SIGNAL_EVENT).data(data).build()};
+    public static Set<EnterableState> fireEvent(final SCXMLExecutor exec, final String name, final Object data) throws Exception {
+        final TriggerEvent[] evts = {new EventBuilder(name, TriggerEvent.SIGNAL_EVENT).data(data).build()};
         exec.triggerEvents(evts);
         return exec.getStatus().getStates();
     }
 
-    public static Set<EnterableState> fireEvent(SCXMLExecutor exec, TriggerEvent te) throws Exception {
+    public static Set<EnterableState> fireEvent(final SCXMLExecutor exec, final TriggerEvent te) throws Exception {
         exec.triggerEvent(te);
         return exec.getStatus().getStates();
     }
 
-    public static Set<EnterableState> fireEvents(SCXMLExecutor exec, TriggerEvent[] evts) throws Exception {
+    public static Set<EnterableState> fireEvents(final SCXMLExecutor exec, final TriggerEvent[] evts) throws Exception {
         exec.triggerEvents(evts);
         return exec.getStatus().getStates();
     }
 
-    public static void assertPostTriggerState(SCXMLExecutor exec,
-            String triggerEventName, String expectedStateId) throws Exception {
+    public static void assertPostTriggerState(final SCXMLExecutor exec,
+            final String triggerEventName, final String expectedStateId) throws Exception {
         assertPostTriggerState(exec, triggerEventName, null, expectedStateId);
     }
 
-    public static void assertPostTriggerState(SCXMLExecutor exec,
-            String triggerEventName, Object data, String expectedStateId) throws Exception {
+    public static void assertPostTriggerState(final SCXMLExecutor exec,
+            final String triggerEventName, final Object data, final String expectedStateId) throws Exception {
         assertPostTriggerState(exec, new EventBuilder(triggerEventName, TriggerEvent.SIGNAL_EVENT)
                 .data(data).build(), expectedStateId);
     }
 
-    public static void assertPostTriggerStates(SCXMLExecutor exec,
-            String triggerEventName, String[] expectedStateIds) throws Exception {
+    public static void assertPostTriggerStates(final SCXMLExecutor exec,
+            final String triggerEventName, final String[] expectedStateIds) throws Exception {
         assertPostTriggerStates(exec, triggerEventName, null, expectedStateIds);
     }
 
-    public static void assertPostTriggerStates(SCXMLExecutor exec,
-            String triggerEventName, Object data, String[] expectedStateIds) throws Exception {
+    public static void assertPostTriggerStates(final SCXMLExecutor exec,
+            final String triggerEventName, final Object data, final String[] expectedStateIds) throws Exception {
         assertPostTriggerStates(exec, new EventBuilder(triggerEventName, TriggerEvent.SIGNAL_EVENT)
                 .data(data).build(), expectedStateIds);
     }
 
-    public static void assertPostTriggerState(SCXMLExecutor exec,
-            TriggerEvent triggerEvent, String expectedStateId) throws Exception {
-        Set<EnterableState> currentStates = fireEvent(exec, triggerEvent);
+    public static void assertPostTriggerState(final SCXMLExecutor exec,
+            final TriggerEvent triggerEvent, final String expectedStateId) throws Exception {
+        final Set<EnterableState> currentStates = fireEvent(exec, triggerEvent);
         Assertions.assertEquals(1, currentStates.size(),
                 "Expected 1 simple (leaf) state with id '"
                         + expectedStateId + "' on firing event " + triggerEvent
@@ -195,21 +195,21 @@ public class SCXMLTestHelper {
             next().getId());
     }
 
-    public static void assertPostTriggerStates(SCXMLExecutor exec,
-            TriggerEvent triggerEvent, String[] expectedStateIds) throws Exception {
+    public static void assertPostTriggerStates(final SCXMLExecutor exec,
+            final TriggerEvent triggerEvent, final String[] expectedStateIds) throws Exception {
         if (expectedStateIds == null || expectedStateIds.length == 0) {
             Assertions.fail("Must specify an array of one or more "
                 + "expected state IDs");
         }
-        Set<EnterableState> currentStates = fireEvent(exec, triggerEvent);
-        int n = expectedStateIds.length;
+        final Set<EnterableState> currentStates = fireEvent(exec, triggerEvent);
+        final int n = expectedStateIds.length;
         Assertions.assertEquals(n, currentStates.size(),
                 "Expected " + n + " simple (leaf) state(s) "
                         + " on firing event " + triggerEvent + " but found "
                         + currentStates.size() + " states instead.");
-        List<String> expectedStateIdList = new ArrayList<>(Arrays.asList(expectedStateIds));
-        for (TransitionTarget tt : currentStates) {
-            String stateId = tt.getId();
+        final List<String> expectedStateIdList = new ArrayList<>(Arrays.asList(expectedStateIds));
+        for (final TransitionTarget tt : currentStates) {
+            final String stateId = tt.getId();
             if(!expectedStateIdList.remove(stateId)) {
                 Assertions.fail("Expected state with id '" + stateId
                     + "' in current states on firing event "
@@ -222,18 +222,18 @@ public class SCXMLTestHelper {
     }
 
     public static SCXML testModelSerializability(final SCXML scxml) throws Exception {
-        File fileDir = new File(SERIALIZATION_DIR);
+        final File fileDir = new File(SERIALIZATION_DIR);
         if (!fileDir.exists()) {
             fileDir.mkdirs();
         }
-        String filename = SERIALIZATION_FILE_PREFIX
+        final String filename = SERIALIZATION_FILE_PREFIX
             + getSequenceNumber() + SERIALIZATION_FILE_SUFFIX;
         SCXML roundtrip;
-        ObjectOutputStream out =
+        final ObjectOutputStream out =
             new ObjectOutputStream(new FileOutputStream(filename));
         out.writeObject(scxml);
         out.close();
-        ObjectInputStream in =
+        final ObjectInputStream in =
             new ObjectInputStream(new FileInputStream(filename));
         roundtrip = (SCXML) in.readObject();
         in.close();
@@ -241,17 +241,17 @@ public class SCXMLTestHelper {
     }
 
     public static SCXMLExecutor testInstanceSerializability(final SCXMLExecutor exec) throws Exception {
-        File fileDir = new File(SERIALIZATION_DIR);
+        final File fileDir = new File(SERIALIZATION_DIR);
         if (!fileDir.exists()) {
             fileDir.mkdirs();
         }
-        String filename = SERIALIZATION_FILE_PREFIX
+        final String filename = SERIALIZATION_FILE_PREFIX
             + getSequenceNumber() + SERIALIZATION_FILE_SUFFIX;
-        ObjectOutputStream out =
+        final ObjectOutputStream out =
             new ObjectOutputStream(new FileOutputStream(filename));
         out.writeObject(exec.detachInstance());
         out.close();
-        ObjectInputStream in =
+        final ObjectInputStream in =
             new SCInstanceObjectInputStream(new FileInputStream(filename));
         exec.attachInstance((SCInstance) in.readObject());
         in.close();
diff --git a/src/test/java/org/apache/commons/scxml2/StatusTest.java b/src/test/java/org/apache/commons/scxml2/StatusTest.java
index 4c86ced..1955210 100644
--- a/src/test/java/org/apache/commons/scxml2/StatusTest.java
+++ b/src/test/java/org/apache/commons/scxml2/StatusTest.java
@@ -38,7 +38,7 @@ public class StatusTest {
     
     @Test
     public void testIsFinalStateFalse() {
-        State state = new State();
+        final State state = new State();
 
         stateConfiguration.enterState(state);
         
@@ -47,7 +47,7 @@ public class StatusTest {
     
     @Test
     public void testIsFinalStateHasParent() {
-        Final state = new Final();
+        final Final state = new Final();
         state.setParent(new State());
         
         stateConfiguration.enterState(state);
@@ -57,7 +57,7 @@ public class StatusTest {
     
     @Test
     public void testIsFinalState() {
-        Final state = new Final();
+        final Final state = new Final();
 
         stateConfiguration.enterState(state);
 
@@ -67,32 +67,32 @@ public class StatusTest {
     @Test
     public void testGetAllStatesEmptyStatus() {
 
-        Set<EnterableState> returnValue = status.getActiveStates();
+        final Set<EnterableState> returnValue = status.getActiveStates();
 
         Assertions.assertEquals(0, returnValue.size());
     }
 
     @Test
     public void testGetAllStatesContainsParent() {
-        State parent = new State();
+        final State parent = new State();
         parent.setId("0");
         stateConfiguration.enterState(parent);
-        State state = new State();
+        final State state = new State();
         state.setId("1");
         state.setParent(parent);
         stateConfiguration.enterState(state);
 
-        Set<EnterableState> returnValue = status.getActiveStates();
+        final Set<EnterableState> returnValue = status.getActiveStates();
 
         Assertions.assertEquals(2, returnValue.size());
     }
 
     @Test
     public void testIsInState() {
-        State parent = new State();
+        final State parent = new State();
         parent.setId("0");
         stateConfiguration.enterState(parent);
-        State state = new State();
+        final State state = new State();
         state.setId("1");
         state.setParent(parent);
         stateConfiguration.enterState(state);
diff --git a/src/test/java/org/apache/commons/scxml2/TieBreakerTest.java b/src/test/java/org/apache/commons/scxml2/TieBreakerTest.java
index 959587a..b01807a 100644
--- a/src/test/java/org/apache/commons/scxml2/TieBreakerTest.java
+++ b/src/test/java/org/apache/commons/scxml2/TieBreakerTest.java
@@ -38,7 +38,7 @@ public class TieBreakerTest {
 
     @Test
     public void testTieBreaker01() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-01.xml");
         exec.go();
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
@@ -50,7 +50,7 @@ public class TieBreakerTest {
 
     @Test
     public void testTieBreaker02() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-02.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-02.xml");
         exec.go();
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
@@ -62,7 +62,7 @@ public class TieBreakerTest {
 
     @Test
     public void testTieBreaker03() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-03.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-03.xml");
         exec.go();
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
@@ -74,7 +74,7 @@ public class TieBreakerTest {
 
     @Test
     public void testTieBreaker04() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-04.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-04.xml");
         exec.go();
         Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "event_2");
         Assertions.assertEquals(1, currentStates.size());
@@ -84,19 +84,19 @@ public class TieBreakerTest {
 
     @Test
     public void testTieBreaker05() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-05.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-05.xml");
         exec.go();
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(3, currentStates.size());
-        for (TransitionTarget tt : currentStates) {
-            String id = tt.getId();
+        for (final TransitionTarget tt : currentStates) {
+            final String id = tt.getId();
             Assertions.assertTrue(id.equals("s11") || id.equals("s212")
                 || id.equals("s2111"));
         }
         currentStates = SCXMLTestHelper.fireEvent(exec, "event1");
         Assertions.assertEquals(3, currentStates.size());
-        for (TransitionTarget tt : currentStates) {
-            String id = tt.getId();
+        for (final TransitionTarget tt : currentStates) {
+            final String id = tt.getId();
             Assertions.assertTrue(id.equals("s12") || id.equals("s212")
                 || id.equals("s2112"));
         }
@@ -104,9 +104,9 @@ public class TieBreakerTest {
 
     @Test
     public void testTieBreaker06() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-06.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/tie-breaker-06.xml");
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
     }
 }
diff --git a/src/test/java/org/apache/commons/scxml2/WildcardTest.java b/src/test/java/org/apache/commons/scxml2/WildcardTest.java
index 671627c..c390959 100644
--- a/src/test/java/org/apache/commons/scxml2/WildcardTest.java
+++ b/src/test/java/org/apache/commons/scxml2/WildcardTest.java
@@ -45,9 +45,9 @@ public class WildcardTest {
 
     @Test
     public void testWildcard02Sample() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/wildcard-02.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/wildcard-02.xml");
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("state2", currentStates.iterator().next().getId());
     }
diff --git a/src/test/java/org/apache/commons/scxml2/WizardsTest.java b/src/test/java/org/apache/commons/scxml2/WizardsTest.java
index 438a713..768ea87 100644
--- a/src/test/java/org/apache/commons/scxml2/WizardsTest.java
+++ b/src/test/java/org/apache/commons/scxml2/WizardsTest.java
@@ -79,11 +79,11 @@ public class WizardsTest {
         int callback = 0;
 
         @SuppressWarnings("unchecked")
-        public void send(Map<String, SCXMLIOProcessor> ioProcessors, String id, String target, String type,
-                String event, Object data, Object hints, long delay) {
+        public void send(final Map<String, SCXMLIOProcessor> ioProcessors, final String id, final String target, final String type,
+                final String event, final Object data, final Object hints, final long delay) {
             if ("foo".equals(type)) {
-                Map<String, Object> params = (Map<String, Object>)data;
-                int i = ((Integer) params.get("aValue"));
+                final Map<String, Object> params = (Map<String, Object>)data;
+                final int i = ((Integer) params.get("aValue"));
                 switch (callback) {
                     case 0:
                         Assertions.assertTrue(i == 2); // state2
@@ -101,7 +101,7 @@ public class WizardsTest {
                 super.send(ioProcessors, id, target, type, event, data, hints, delay);
             }
         }
-        public void cancel(String sendId) {
+        public void cancel(final String sendId) {
             // should never be called
             Assertions.fail("<cancel> TestEventDispatcher callback unexpected");
         }
diff --git a/src/test/java/org/apache/commons/scxml2/env/AbstractSCXMLListenerTest.java b/src/test/java/org/apache/commons/scxml2/env/AbstractSCXMLListenerTest.java
index 9a54322..492fccc 100644
--- a/src/test/java/org/apache/commons/scxml2/env/AbstractSCXMLListenerTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/AbstractSCXMLListenerTest.java
@@ -64,12 +64,12 @@ public class AbstractSCXMLListenerTest {
 
     @Test
     public void testAbstractSCXMLListener0() {
-        SCXMLListener listener0 = new AbstractSCXMLListener() {
+        final SCXMLListener listener0 = new AbstractSCXMLListener() {
                 /**
                  * @see SCXMLListener#onEntry(EnterableState)
                  */
                 @Override
-                public void onEntry(EnterableState state) {
+                public void onEntry(final EnterableState state) {
                     heardOnEntry = true;
                 }
 
@@ -77,7 +77,7 @@ public class AbstractSCXMLListenerTest {
                  * @see SCXMLListener#onExit(EnterableState)
                  */
                 @Override
-                public void onExit(EnterableState state) {
+                public void onExit(final EnterableState state) {
                     heardOnExit = true;
                 }
 
@@ -85,8 +85,8 @@ public class AbstractSCXMLListenerTest {
                  * @see SCXMLListener#onTransition(TransitionTarget,TransitionTarget,Transition,String)
                  */
                 @Override
-                public void onTransition(TransitionTarget from, TransitionTarget to,
-                                         Transition transition, String event) {
+                public void onTransition(final TransitionTarget from, final TransitionTarget to,
+                                         final Transition transition, final String event) {
                     heardOnTransition = true;
                 }
             };
@@ -104,12 +104,12 @@ public class AbstractSCXMLListenerTest {
 
     @Test
     public void testAbstractSCXMLListener1() {
-        SCXMLListener listener1 = new AbstractSCXMLListener() {
+        final SCXMLListener listener1 = new AbstractSCXMLListener() {
                 /**
                  * @see SCXMLListener#onEntry(EnterableState)
                  */
                 @Override
-                public void onEntry(EnterableState state) {
+                public void onEntry(final EnterableState state) {
                     heardOnEntry = true;
                 }
 
@@ -117,7 +117,7 @@ public class AbstractSCXMLListenerTest {
                  * @see SCXMLListener#onExit(EnterableState)
                  */
                 @Override
-                public void onExit(EnterableState state) {
+                public void onExit(final EnterableState state) {
                     heardOnExit = true;
                 }
             };
@@ -135,12 +135,12 @@ public class AbstractSCXMLListenerTest {
 
     @Test
     public void testAbstractSCXMLListener2() {
-        SCXMLListener listener2 = new AbstractSCXMLListener() {
+        final SCXMLListener listener2 = new AbstractSCXMLListener() {
                 /**
                  * @see SCXMLListener#onEntry(EnterableState)
                  */
                 @Override
-                public void onEntry(EnterableState state) {
+                public void onEntry(final EnterableState state) {
                     heardOnEntry = true;
                 }
             };
@@ -158,7 +158,7 @@ public class AbstractSCXMLListenerTest {
 
     @Test
     public void testAbstractSCXMLListener3() {
-        SCXMLListener listener3 = new AbstractSCXMLListener() {
+        final SCXMLListener listener3 = new AbstractSCXMLListener() {
                 // empty
             };
 
diff --git a/src/test/java/org/apache/commons/scxml2/env/AbstractStateMachineTest.java b/src/test/java/org/apache/commons/scxml2/env/AbstractStateMachineTest.java
index bcdf78d..e522abe 100644
--- a/src/test/java/org/apache/commons/scxml2/env/AbstractStateMachineTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/AbstractStateMachineTest.java
@@ -29,11 +29,11 @@ public class AbstractStateMachineTest {
 
     @Test
     public void testMoreThanOneScxmlDocument() throws Exception {
-        URL fooScxmlDocument = getClass().getResource("foo.xml");
-        URL barScxmlDocument = getClass().getResource("bar.xml");
+        final URL fooScxmlDocument = getClass().getResource("foo.xml");
+        final URL barScxmlDocument = getClass().getResource("bar.xml");
 
-        Foo f = new Foo(fooScxmlDocument);
-        Bar b = new Bar(barScxmlDocument);
+        final Foo f = new Foo(fooScxmlDocument);
+        final Bar b = new Bar(barScxmlDocument);
 
         Assertions.assertTrue(f.fooCalled());
         Assertions.assertTrue(b.barCalled());
diff --git a/src/test/java/org/apache/commons/scxml2/env/LogUtilsTest.java b/src/test/java/org/apache/commons/scxml2/env/LogUtilsTest.java
index 4e69071..d56dc1d 100644
--- a/src/test/java/org/apache/commons/scxml2/env/LogUtilsTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/LogUtilsTest.java
@@ -25,7 +25,7 @@ public class LogUtilsTest {
 
     @Test
     public void testGetTTPathParentNull() {
-        State target = new State();
+        final State target = new State();
         target.setId("ID");
         
         Assertions.assertEquals("/ID", LogUtils.getTTPath(target));
@@ -33,13 +33,13 @@ public class LogUtilsTest {
     
     @Test
     public void testGetTTPathParent() {
-        State target = new State();
+        final State target = new State();
         target.setId("ID");
 
-        State parent1 = new State();
+        final State parent1 = new State();
         parent1.setId("parent1");
 
-        State parent2 = new State();
+        final State parent2 = new State();
         parent2.setId("parent2");
 
         parent1.setParent(parent2);
@@ -50,13 +50,13 @@ public class LogUtilsTest {
     
     @Test
     public void testTransToString() {
-        State targetTo = new State();
+        final State targetTo = new State();
         targetTo.setId("TO");
 
-        State targetFrom = new State();
+        final State targetFrom = new State();
         targetFrom.setId("FROM");
         
-        Transition transition = new Transition();
+        final Transition transition = new Transition();
         transition.setCond("condition");
         transition.setEvent("event happened");
         
diff --git a/src/test/java/org/apache/commons/scxml2/env/MockErrorReporter.java b/src/test/java/org/apache/commons/scxml2/env/MockErrorReporter.java
index d2c9a84..9539b65 100644
--- a/src/test/java/org/apache/commons/scxml2/env/MockErrorReporter.java
+++ b/src/test/java/org/apache/commons/scxml2/env/MockErrorReporter.java
@@ -24,7 +24,7 @@ public class MockErrorReporter implements ErrorReporter {
     private String errDetail;
     private Object errCtx;
     
-    public void onError( String errCode, String errDetail, Object errCtx ) {
+    public void onError( final String errCode, final String errDetail, final Object errCtx ) {
         this.errCode = errCode;
         this.errDetail = errDetail;
         this.errCtx = errCtx;
@@ -34,7 +34,7 @@ public class MockErrorReporter implements ErrorReporter {
         return errCode;
     }
 
-    public void setErrCode( String errCode ) {
+    public void setErrCode( final String errCode ) {
         this.errCode = errCode;
     }
 
@@ -42,7 +42,7 @@ public class MockErrorReporter implements ErrorReporter {
         return errCtx;
     }
 
-    public void setErrCtx( Object errCtx ) {
+    public void setErrCtx( final Object errCtx ) {
         this.errCtx = errCtx;
     }
 
@@ -50,7 +50,7 @@ public class MockErrorReporter implements ErrorReporter {
         return errDetail;
     }
 
-    public void setErrDetail( String errDetail ) {
+    public void setErrDetail( final String errDetail ) {
         this.errDetail = errDetail;
     }
 
diff --git a/src/test/java/org/apache/commons/scxml2/env/SimpleContextTest.java b/src/test/java/org/apache/commons/scxml2/env/SimpleContextTest.java
index 8ec830d..a5429cb 100644
--- a/src/test/java/org/apache/commons/scxml2/env/SimpleContextTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/SimpleContextTest.java
@@ -34,7 +34,7 @@ public class SimpleContextTest {
     
     @Test
     public void testHasTrue() {
-        Map<String, Object> vars = new HashMap<>();
+        final Map<String, Object> vars = new HashMap<>();
         vars.put("key", "value");
         
         context.setVars(vars);
@@ -44,7 +44,7 @@ public class SimpleContextTest {
 
     @Test
     public void testHasNullParent() {
-        Map<String, Object> vars = new HashMap<>();
+        final Map<String, Object> vars = new HashMap<>();
         vars.put("key", "value");
         
         context.setVars(vars);
@@ -54,12 +54,12 @@ public class SimpleContextTest {
     
     @Test
     public void testHasParentWrongKey() {
-        Map<String, Object> parentVars = new HashMap<>();
+        final Map<String, Object> parentVars = new HashMap<>();
         parentVars.put("key", "value");
         
-        SimpleContext parentContext = new SimpleContext(null, parentVars);
+        final SimpleContext parentContext = new SimpleContext(null, parentVars);
         
-        Map<String, Object> vars = new HashMap<>();
+        final Map<String, Object> vars = new HashMap<>();
         vars.put("key", "value");
         
         context.setVars(vars);
@@ -70,12 +70,12 @@ public class SimpleContextTest {
 
     @Test
     public void testHasParentCorrectKey() {
-        Map<String, Object> parentVars = new HashMap<>();
+        final Map<String, Object> parentVars = new HashMap<>();
         parentVars.put("differentKey", "value");
         
-        SimpleContext parentContext = new SimpleContext(null, parentVars);
+        final SimpleContext parentContext = new SimpleContext(null, parentVars);
         
-        Map<String, Object> vars = new HashMap<>();
+        final Map<String, Object> vars = new HashMap<>();
         vars.put("key", "value");
         
         context.setVars(vars);
@@ -86,14 +86,14 @@ public class SimpleContextTest {
     
     @Test
     public void testGetNull() {
-        Object value = context.get("key");
+        final Object value = context.get("key");
         
         Assertions.assertNull(value);
     }
     
     @Test
     public void testGetValue() {
-        Map<String, Object> vars = new HashMap<>();
+        final Map<String, Object> vars = new HashMap<>();
         vars.put("key", "value");
         
         context.setVars(vars);
@@ -103,12 +103,12 @@ public class SimpleContextTest {
     
     @Test
     public void testGetParentValue() {
-        Map<String, Object> parentVars = new HashMap<>();
+        final Map<String, Object> parentVars = new HashMap<>();
         parentVars.put("differentKey", "differentValue");
         
-        SimpleContext parentContext = new SimpleContext(null, parentVars);
+        final SimpleContext parentContext = new SimpleContext(null, parentVars);
         
-        Map<String, Object> vars = new HashMap<>();
+        final Map<String, Object> vars = new HashMap<>();
         vars.put("key", "value");
         
         context.setVars(vars);
@@ -119,7 +119,7 @@ public class SimpleContextTest {
     
     @Test
     public void testGetParentNull() {
-        Map<String, Object> vars = new HashMap<>();
+        final Map<String, Object> vars = new HashMap<>();
         vars.put("key", "value");
         
         context.setVars(vars);
@@ -129,12 +129,12 @@ public class SimpleContextTest {
     
     @Test
     public void testGetParentWrongValue() {
-        Map<String, Object> parentVars = new HashMap<>();
+        final Map<String, Object> parentVars = new HashMap<>();
         parentVars.put("differentKey", "differentValue");
         
-        SimpleContext parentContext = new SimpleContext(null, parentVars);
+        final SimpleContext parentContext = new SimpleContext(null, parentVars);
         
-        Map<String, Object> vars = new HashMap<>();
+        final Map<String, Object> vars = new HashMap<>();
         vars.put("key", "value");
         
         context.setVars(vars);
@@ -145,7 +145,7 @@ public class SimpleContextTest {
 
     @Test
     public void testSetVarsChangeValue() {
-        Map<String, Object> vars = new HashMap<>();
+        final Map<String, Object> vars = new HashMap<>();
         vars.put("key", "value");
         
         context.setVars(vars);
@@ -157,7 +157,7 @@ public class SimpleContextTest {
 
     @Test
     public void testSetVarsEmpty() {
-        Map<String, Object> vars = new HashMap<>();
+        final Map<String, Object> vars = new HashMap<>();
         context.setVars(vars);
         
         context.set("key", "newValue");
@@ -167,12 +167,12 @@ public class SimpleContextTest {
     
     @Test
     public void testSetVarsParent() {
-        Map<String, Object> parentVars = new HashMap<>();
+        final Map<String, Object> parentVars = new HashMap<>();
         parentVars.put("differentKey", "differentValue");
         
-        SimpleContext parentContext = new SimpleContext(null, parentVars);
+        final SimpleContext parentContext = new SimpleContext(null, parentVars);
         
-        Map<String, Object> vars = new HashMap<>();
+        final Map<String, Object> vars = new HashMap<>();
         vars.put("key", "value");
         
         context.setVars(vars);
@@ -185,10 +185,10 @@ public class SimpleContextTest {
 
     @Test
     public void testNestedEffectiveContextMapWrappingFails() {
-        SimpleContext rootContext = new SimpleContext();
+        final SimpleContext rootContext = new SimpleContext();
         rootContext.set("key", "root");
-        SimpleContext rootEffectiveContext = new SimpleContext(rootContext, new EffectiveContextMap(rootContext));
-        SimpleContext parentContext = new SimpleContext(rootEffectiveContext);
+        final SimpleContext rootEffectiveContext = new SimpleContext(rootContext, new EffectiveContextMap(rootContext));
+        final SimpleContext parentContext = new SimpleContext(rootEffectiveContext);
         Assertions.assertThrows(
                 IllegalArgumentException.class,
                 () -> new EffectiveContextMap(parentContext),
@@ -198,14 +198,14 @@ public class SimpleContextTest {
 
     @Test
     public void testEffectiveContextMapMergeStragegy() {
-        SimpleContext rootContext = new SimpleContext();
+        final SimpleContext rootContext = new SimpleContext();
         rootContext.set("key", "root");
-        SimpleContext parentContext = new SimpleContext(rootContext);
+        final SimpleContext parentContext = new SimpleContext(rootContext);
         parentContext.setLocal("key", "parent");
-        SimpleContext effectiveContext = new SimpleContext(parentContext, new EffectiveContextMap(parentContext));
+        final SimpleContext effectiveContext = new SimpleContext(parentContext, new EffectiveContextMap(parentContext));
         Assertions.assertEquals("parent", effectiveContext.get("key"));
         // ensure EffectiveContextMap provides complete local variable shadowing
-        for (Map.Entry<String,Object> entry : effectiveContext.getVars().entrySet()) {
+        for (final Map.Entry<String,Object> entry : effectiveContext.getVars().entrySet()) {
             if (entry.getKey().equals("key")) {
                 Assertions.assertEquals("parent", entry.getValue());
             }
diff --git a/src/test/java/org/apache/commons/scxml2/env/StopWatch.java b/src/test/java/org/apache/commons/scxml2/env/StopWatch.java
index 96d0d9e..5c643ee 100644
--- a/src/test/java/org/apache/commons/scxml2/env/StopWatch.java
+++ b/src/test/java/org/apache/commons/scxml2/env/StopWatch.java
@@ -84,9 +84,9 @@ public class StopWatch extends AbstractStateMachine {
     }
 
     public String getDisplay() {
-        String padhr = dhr > 9 ? EMPTY : ZERO;
-        String padmin = dmin > 9 ? EMPTY : ZERO;
-        String padsec = dsec > 9 ? EMPTY : ZERO;
+        final String padhr = dhr > 9 ? EMPTY : ZERO;
+        final String padmin = dmin > 9 ? EMPTY : ZERO;
+        final String padsec = dsec > 9 ? EMPTY : ZERO;
         return padhr + dhr + DELIM + padmin + dmin + DELIM + padsec + dsec + DOT + dfract;
     }
 
diff --git a/src/test/java/org/apache/commons/scxml2/env/StopWatchDisplay.java b/src/test/java/org/apache/commons/scxml2/env/StopWatchDisplay.java
index 7828316..190eb0b 100644
--- a/src/test/java/org/apache/commons/scxml2/env/StopWatchDisplay.java
+++ b/src/test/java/org/apache/commons/scxml2/env/StopWatchDisplay.java
@@ -48,7 +48,7 @@ import org.apache.commons.scxml2.model.ModelException;
 public class StopWatchDisplay extends JFrame
         implements ActionListener {
 
-    private StopWatch stopWatch;
+    private final StopWatch stopWatch;
     private Image watchImage;
 
     public StopWatchDisplay() throws ModelException {
@@ -57,8 +57,8 @@ public class StopWatchDisplay extends JFrame
         setupUI();
     }
 
-    public void actionPerformed(ActionEvent e) {
-        String command = e.getActionCommand();
+    public void actionPerformed(final ActionEvent e) {
+        final String command = e.getActionCommand();
         if (command.equals("START")) {
             if (start.getText().equals("Start")) {
                 stopWatch.fireEvent(StopWatch.EVENT_START);
@@ -85,14 +85,14 @@ public class StopWatchDisplay extends JFrame
     }
 
     private void setupUI() {
-        URL imageURL = this.getClass().getClassLoader().
+        final URL imageURL = this.getClass().getClassLoader().
             getResource("org/apache/commons/scxml2/env/stopwatch.gif");
-        URL iconURL = this.getClass().getClassLoader().
+        final URL iconURL = this.getClass().getClassLoader().
             getResource("org/apache/commons/scxml2/env/stopwatchicon.gif");
-        Toolkit kit = Toolkit.getDefaultToolkit();
+        final Toolkit kit = Toolkit.getDefaultToolkit();
         watchImage = kit.createImage(imageURL);
-        Image watchIcon = kit.createImage(iconURL);
-        WatchPanel panel = new WatchPanel();
+        final Image watchIcon = kit.createImage(iconURL);
+        final WatchPanel panel = new WatchPanel();
         panel.setLayout(new BorderLayout());
         setContentPane(panel);
         display = new JLabel(stopWatch.getDisplay());
@@ -111,7 +111,7 @@ public class StopWatchDisplay extends JFrame
         setSize(300,125);
         setVisible(true);
         setDefaultCloseOperation(EXIT_ON_CLOSE);
-        Timer displayTimer = new Timer();
+        final Timer displayTimer = new Timer();
         displayTimer.scheduleAtFixedRate(new TimerTask() {
             @Override
             public void run() {
@@ -125,7 +125,7 @@ public class StopWatchDisplay extends JFrame
 
     private JButton makeButton(final String actionCommand,
             final String toolTipText, final String altText) {
-        JButton button = new JButton(altText);
+        final JButton button = new JButton(altText);
         button.setActionCommand(actionCommand);
         button.setToolTipText(toolTipText);
         button.addActionListener(this);
@@ -135,14 +135,14 @@ public class StopWatchDisplay extends JFrame
 
     class WatchPanel extends JPanel {
         @Override
-        public void paintComponent(Graphics g) {
+        public void paintComponent(final Graphics g) {
             if(watchImage != null) {
                 g.drawImage(watchImage,0,0,this.getWidth(),this.getHeight(),this);
             }
         }
     }
 
-    public static void main(String[] args) throws Exception {
+    public static void main(final String[] args) throws Exception {
         new StopWatchDisplay();
     }
 
diff --git a/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyClosureTest.java b/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyClosureTest.java
index 082e1cb..db73077 100644
--- a/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyClosureTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyClosureTest.java
@@ -30,12 +30,12 @@ public class GroovyClosureTest {
 
     @Test
     public void testGroovyClosure() throws Exception {
-        URL groovyClosure = SCXMLTestHelper.getResource("org/apache/commons/scxml2/env/groovy/groovy-closure.xml");
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor(groovyClosure, new GroovyEvaluator(true));
+        final URL groovyClosure = SCXMLTestHelper.getResource("org/apache/commons/scxml2/env/groovy/groovy-closure.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(groovyClosure, new GroovyEvaluator(true));
         exec.go();
-        Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "turn_on");
+        final Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "turn_on");
         Assertions.assertEquals(2, currentStates.size());
-        String id = currentStates.iterator().next().getId();
+        final String id = currentStates.iterator().next().getId();
         Assertions.assertTrue(id.equals("closed") || id.equals("cooking"));
     }
 }
diff --git a/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyContextTest.java b/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyContextTest.java
index 6438ba4..b4b5714 100644
--- a/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyContextTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyContextTest.java
@@ -26,28 +26,28 @@ public class GroovyContextTest {
 
     @Test
     public void testNew() {
-        GroovyContext ctx = new GroovyContext();
+        final GroovyContext ctx = new GroovyContext();
         Assertions.assertNotNull(ctx);
     }
     
     @Test
     public void testPrepopulated() {
-        Map<String, Object> m = new HashMap<>();
+        final Map<String, Object> m = new HashMap<>();
         m.put("foo", "bar");
-        GroovyContext ctx = new GroovyContext(null, m, null);
+        final GroovyContext ctx = new GroovyContext(null, m, null);
         Assertions.assertNotNull(ctx);
         Assertions.assertEquals(1, ctx.getVars().size());
-        String fooValue = (String) ctx.get("foo");
+        final String fooValue = (String) ctx.get("foo");
         Assertions.assertEquals("bar", fooValue);
     }
     
     @Test
     public void testSetVars() {
-        GroovyContext ctx = new GroovyContext();
+        final GroovyContext ctx = new GroovyContext();
         Assertions.assertNotNull(ctx);
         ctx.set("foo", "bar");
         Assertions.assertEquals(1, ctx.getVars().size());
-        String fooValue = (String) ctx.get("foo");
+        final String fooValue = (String) ctx.get("foo");
         Assertions.assertEquals("bar", fooValue);
     }
 
diff --git a/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluatorTest.java b/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluatorTest.java
index 14a5d57..2d50e99 100644
--- a/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluatorTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluatorTest.java
@@ -39,24 +39,24 @@ public class GroovyEvaluatorTest {
 
     @Test
     public void testEval() throws SCXMLExpressionException {
-        Evaluator eval = new GroovyEvaluator();
+        final Evaluator eval = new GroovyEvaluator();
         Assertions.assertEquals(2, eval.eval(ctx, "1 + 1"));
     }
 
     @Test
     public void testPristine() throws SCXMLExpressionException {
-        Evaluator eval = new GroovyEvaluator();
+        final Evaluator eval = new GroovyEvaluator();
         Assertions.assertTrue(eval.evalCond(ctx, "1 + 1 == 2"));
     }
 
     @Test
     public void testBuiltInFunctions() throws SCXMLExpressionException {
-        Evaluator eval = new GroovyEvaluator();
-        StateConfiguration stateConfiguration = new StateConfiguration();
-        Status status = new Status(stateConfiguration);
+        final Evaluator eval = new GroovyEvaluator();
+        final StateConfiguration stateConfiguration = new StateConfiguration();
+        final Status status = new Status(stateConfiguration);
         ctx.getSystemContext().getPlatformVariables().put(SCXMLSystemContext.STATUS_KEY, status);
 
-        State state1 = new State();
+        final State state1 = new State();
         state1.setId("state1");
         stateConfiguration.enterState(state1);
         Assertions.assertTrue(eval.evalCond(ctx, "In('state1')"));
@@ -64,10 +64,10 @@ public class GroovyEvaluatorTest {
 
     @Test
     public void testScript() throws SCXMLExpressionException {
-        Evaluator eval = new GroovyEvaluator();
+        final Evaluator eval = new GroovyEvaluator();
         ctx.set("x", 3);
         ctx.set("y", 0);
-        String script = 
+        final String script = 
             "if ((x * 2) == 5) {" +
                 "y = 1;\n" +
             "} else {\n" +
@@ -79,9 +79,9 @@ public class GroovyEvaluatorTest {
 
     @Test
     public void testErrorMessage() {
-        Evaluator eval = new GroovyEvaluator();
+        final Evaluator eval = new GroovyEvaluator();
         Assertions.assertNotNull(eval);
-        SCXMLExpressionException e = Assertions.assertThrows(
+        final SCXMLExpressionException e = Assertions.assertThrows(
                 SCXMLExpressionException.class,
                 () -> eval.eval(ctx, BAD_EXPRESSION),
                 "GroovyEvaluator should throw SCXMLExpressionException");
@@ -91,7 +91,7 @@ public class GroovyEvaluatorTest {
 
     @Test
     public void testPreprocessScript() {
-        GroovyEvaluator evaluator = new GroovyEvaluator();
+        final GroovyEvaluator evaluator = new GroovyEvaluator();
         Assertions.assertEquals("x &&  x || x  !  x == x <  x <= x != x >  x >= x", evaluator.getScriptPreProcessor().
                 preProcess("x and x or x not x eq x lt x le x ne x gt x ge x"));
         Assertions.assertEquals("and x OR x\n ! \nx\n== x < \nx(le)x ne. xgt x ge", evaluator.getScriptPreProcessor().
diff --git a/src/test/java/org/apache/commons/scxml2/env/groovy/SerializableInitialBaseScriptTest.java b/src/test/java/org/apache/commons/scxml2/env/groovy/SerializableInitialBaseScriptTest.java
index 1b7b6c9..26f37cd 100644
--- a/src/test/java/org/apache/commons/scxml2/env/groovy/SerializableInitialBaseScriptTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/groovy/SerializableInitialBaseScriptTest.java
@@ -36,7 +36,7 @@ public class SerializableInitialBaseScriptTest {
      */
     @Test
     public void testSerializableInitialBaseScriptSample() throws Exception {
-        URL scxml = SCXMLTestHelper.getResource("org/apache/commons/scxml2/env/groovy/serializable-initial-base-script.xml");
+        final URL scxml = SCXMLTestHelper.getResource("org/apache/commons/scxml2/env/groovy/serializable-initial-base-script.xml");
     	SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml, new GroovyEvaluator(true));
         exec.go();
         Set<EnterableState> currentStates = exec.getStatus().getStates();
diff --git a/src/test/java/org/apache/commons/scxml2/env/groovy/StaticMethodTest.java b/src/test/java/org/apache/commons/scxml2/env/groovy/StaticMethodTest.java
index 323fc73..854c248 100644
--- a/src/test/java/org/apache/commons/scxml2/env/groovy/StaticMethodTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/groovy/StaticMethodTest.java
@@ -28,10 +28,10 @@ public class StaticMethodTest {
 
     @Test
     public void testGroovyStaticMethodInvocation() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/static-method.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/static-method.xml");
         exec.getRootContext().set("System", System.class);
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("static", currentStates.iterator().next().getId());
     }
diff --git a/src/test/java/org/apache/commons/scxml2/env/javascript/JSEvaluatorTest.java b/src/test/java/org/apache/commons/scxml2/env/javascript/JSEvaluatorTest.java
index b640c84..de6c28b 100644
--- a/src/test/java/org/apache/commons/scxml2/env/javascript/JSEvaluatorTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/javascript/JSEvaluatorTest.java
@@ -106,7 +106,7 @@ public class JSEvaluatorTest {
      */
     @BeforeEach
     public void setUp() throws Exception {
-        SCXMLExecutor fsm = SCXMLTestHelper.getExecutor(SCXMLReader.read(new StringReader(SCRIPT)));
+        final SCXMLExecutor fsm = SCXMLTestHelper.getExecutor(SCXMLReader.read(new StringReader(SCRIPT)));
         fsm.go();
         evaluator = fsm.getEvaluator();
         context = fsm.getGlobalContext();
@@ -121,7 +121,7 @@ public class JSEvaluatorTest {
      */    
     @Test
     public void testBasic() throws SCXMLExpressionException {
-        Evaluator evaluator = new JSEvaluator();
+        final Evaluator evaluator = new JSEvaluator();
 
         Assertions.assertNotNull(evaluator);
         Assertions.assertTrue   ((Boolean) evaluator.eval(context, "1+1 == 2"));
@@ -129,10 +129,10 @@ public class JSEvaluatorTest {
 
     @Test
     public void testScript() throws SCXMLExpressionException {
-        Evaluator evaluator = new JSEvaluator();
+        final Evaluator evaluator = new JSEvaluator();
         context.set("x", 3);
         context.set("y", 0);
-        String script = 
+        final String script = 
             "if ((x * 2.0) == 5.0) {" +
                 "y = 1.0;\n" +
             "} else {\n" +
@@ -148,10 +148,10 @@ public class JSEvaluatorTest {
      */    
     @Test
     public void testIllegalExpresssion() {
-        Evaluator evaluator = new JSEvaluator();
+        final Evaluator evaluator = new JSEvaluator();
 
         Assertions.assertNotNull(evaluator);
-        SCXMLExpressionException x= Assertions.assertThrows(
+        final SCXMLExpressionException x= Assertions.assertThrows(
                 SCXMLExpressionException.class,
                 () ->  evaluator.eval(context,BAD_EXPRESSION),
                 "JSEvaluator should throw SCXMLExpressionException");
@@ -165,8 +165,8 @@ public class JSEvaluatorTest {
      */    
     @Test
     public void testStandardExpressions() throws Exception {
-        for (TestItem item: SIMPLE_EXPRESSIONS) {
-            Object eval = evaluator.eval(context,item.expression);
+        for (final TestItem item: SIMPLE_EXPRESSIONS) {
+            final Object eval = evaluator.eval(context,item.expression);
             if (item.result instanceof Integer && eval instanceof Number) {
                 Assertions.assertEquals(((Integer) item.result).intValue(),
                         ((Number) eval).intValue(),
@@ -187,7 +187,7 @@ public class JSEvaluatorTest {
     public void testVarExpressions() throws Exception {
         context.set("fibonacci", 12.0);
 
-        for (TestItem item: VAR_EXPRESSIONS) {
+        for (final TestItem item: VAR_EXPRESSIONS) {
             Assertions.assertNotNull(context.get("fibonacci"));
             Assertions.assertEquals (12.0,context.get("fibonacci"));
             Assertions.assertEquals(item.result,
@@ -202,7 +202,7 @@ public class JSEvaluatorTest {
      */    
     @Test
     public void testInvalidVarExpressions() {
-        for (TestItem item: VAR_EXPRESSIONS) {
+        for (final TestItem item: VAR_EXPRESSIONS) {
             Assertions.assertNull(context.get("fibonacci"));
             Assertions.assertThrows(
                     SCXMLExpressionException.class,
@@ -277,7 +277,7 @@ public class JSEvaluatorTest {
         private final String expression;
         private final Object result;
 
-        private TestItem(String expression,Object result) {
+        private TestItem(final String expression,final Object result) {
             this.expression = expression;
             this.result     = result;
         }
diff --git a/src/test/java/org/apache/commons/scxml2/env/javascript/JSExampleTest.java b/src/test/java/org/apache/commons/scxml2/env/javascript/JSExampleTest.java
index f2929de..68703b5 100644
--- a/src/test/java/org/apache/commons/scxml2/env/javascript/JSExampleTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/javascript/JSExampleTest.java
@@ -46,13 +46,13 @@ public class JSExampleTest {
     @Test
     public void testExample01Sample() throws Exception {
 
-        List<CustomAction> actions  = new ArrayList<>();
+        final List<CustomAction> actions  = new ArrayList<>();
         actions.add(new CustomAction("http://my.custom-actions.domain", "eventdatamaptest", EventDataMapTest.class));
 
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/javascript/example-01.xml", actions);
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/javascript/example-01.xml", actions);
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("end", currentStates.iterator().next().getId());
     }
@@ -61,7 +61,7 @@ public class JSExampleTest {
     
     public static class EventDataMapTest extends Action {
         @Override
-        public void execute(ActionExecutionContext exctx) {
+        public void execute(final ActionExecutionContext exctx) {
             exctx.getInternalIOProcessor()
                     .addEvent(new EventBuilder("ok",TriggerEvent.SIGNAL_EVENT).data("and its ok with me to").build());
         }
diff --git a/src/test/java/org/apache/commons/scxml2/env/javascript/JavaScriptEngineTest.java b/src/test/java/org/apache/commons/scxml2/env/javascript/JavaScriptEngineTest.java
index bbb034b..a2a3778 100644
--- a/src/test/java/org/apache/commons/scxml2/env/javascript/JavaScriptEngineTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/javascript/JavaScriptEngineTest.java
@@ -41,7 +41,7 @@ public class JavaScriptEngineTest {
     public void before() {
         evaluator = new JSEvaluator();
         _systemContext = new JSContext();
-        SCXMLSystemContext systemContext = new SCXMLSystemContext(_systemContext);
+        final SCXMLSystemContext systemContext = new SCXMLSystemContext(_systemContext);
         _systemContext.set(SCXMLSystemContext.SESSIONID_KEY, UUID.randomUUID().toString());
         _systemContext.set(SCXMLSystemContext.SCXML_NAME_KEY, "test");
         stateConfiguration = new StateConfiguration();
@@ -57,7 +57,7 @@ public class JavaScriptEngineTest {
     @Test
     public void testScxmlEvent() throws Exception {
         assertTrue(evaluator.evalCond(context, "_event === undefined"));
-        EventVariable event = new EventVariable("myEvent", EventVariable.TYPE_INTERNAL, null, null, null, null,"myData");
+        final EventVariable event = new EventVariable("myEvent", EventVariable.TYPE_INTERNAL, null, null, null, null,"myData");
         _systemContext.setLocal(SCXMLSystemContext.EVENT_KEY, event);
         assertFalse(evaluator.evalCond(context, "_event === undefined"));
         assertTrue(evaluator.evalCond(context, "_event.name == 'myEvent'"));
@@ -69,7 +69,7 @@ public class JavaScriptEngineTest {
     @Test
     public void testScxmlInPredicate() throws Exception {
         assertFalse(evaluator.evalCond(context, "In('foo')"));
-        Final foo = new Final();
+        final Final foo = new Final();
         foo.setId("foo");
         stateConfiguration.enterState(foo);
         assertTrue(evaluator.evalCond(context, "In('foo')"));
diff --git a/src/test/java/org/apache/commons/scxml2/env/jexl/ForeachTest.java b/src/test/java/org/apache/commons/scxml2/env/jexl/ForeachTest.java
index d10e33b..212db0d 100644
--- a/src/test/java/org/apache/commons/scxml2/env/jexl/ForeachTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/jexl/ForeachTest.java
@@ -28,7 +28,7 @@ public class ForeachTest {
 
     @Test
     public void testForeach() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/foreach.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/foreach.xml");
         exec.go();
         Assertions.assertTrue(exec.getStatus().isFinal());
     }
diff --git a/src/test/java/org/apache/commons/scxml2/env/jexl/JexlContextTest.java b/src/test/java/org/apache/commons/scxml2/env/jexl/JexlContextTest.java
index 063bfb5..c14d288 100644
--- a/src/test/java/org/apache/commons/scxml2/env/jexl/JexlContextTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/jexl/JexlContextTest.java
@@ -26,18 +26,18 @@ public class JexlContextTest {
 
     @Test
     public void testNew() {
-        JexlContext ctx = new JexlContext();
+        final JexlContext ctx = new JexlContext();
         Assertions.assertNotNull(ctx);
     }
     
     @Test
     public void testPrepopulated() {
-        Map<String, Object> m = new HashMap<>();
+        final Map<String, Object> m = new HashMap<>();
         m.put("foo", "bar");
-        JexlContext ctx = new JexlContext(null, m);
+        final JexlContext ctx = new JexlContext(null, m);
         Assertions.assertNotNull(ctx);
         Assertions.assertEquals(1, ctx.getVars().size());
-        String fooValue = (String) ctx.get("foo");
+        final String fooValue = (String) ctx.get("foo");
         Assertions.assertEquals("bar", fooValue);
     }
 
diff --git a/src/test/java/org/apache/commons/scxml2/env/jexl/JexlEvaluatorTest.java b/src/test/java/org/apache/commons/scxml2/env/jexl/JexlEvaluatorTest.java
index 0ef5c3b..a102b66 100644
--- a/src/test/java/org/apache/commons/scxml2/env/jexl/JexlEvaluatorTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/jexl/JexlEvaluatorTest.java
@@ -29,16 +29,16 @@ public class JexlEvaluatorTest {
 
     @Test
     public void testPristine() throws SCXMLExpressionException {
-        Evaluator eval = new JexlEvaluator();
+        final Evaluator eval = new JexlEvaluator();
         Assertions.assertTrue((Boolean) eval.eval(ctx, "1+1 eq 2"));
     }
 
     @Test
     public void testScript() throws SCXMLExpressionException {
-        Evaluator eval = new JexlEvaluator();
+        final Evaluator eval = new JexlEvaluator();
         ctx.set("x", 3);
         ctx.set("y", 0);
-        String script = 
+        final String script = 
             "if ((x * 2) == 5) {" +
                 "y = 1;\n" +
             "} else {\n" +
@@ -50,9 +50,9 @@ public class JexlEvaluatorTest {
 
     @Test
     public void testErrorMessage() {
-        Evaluator eval = new JexlEvaluator();
+        final Evaluator eval = new JexlEvaluator();
         Assertions.assertNotNull(eval);
-        SCXMLExpressionException e = Assertions.assertThrows(
+        final SCXMLExpressionException e = Assertions.assertThrows(
                 SCXMLExpressionException.class,
                 () -> eval.eval(ctx, BAD_EXPRESSION),
                 "JexlEvaluator should throw SCXMLExpressionException");
diff --git a/src/test/java/org/apache/commons/scxml2/env/jexl/StaticMethodTest.java b/src/test/java/org/apache/commons/scxml2/env/jexl/StaticMethodTest.java
index 4dee68d..f597788 100644
--- a/src/test/java/org/apache/commons/scxml2/env/jexl/StaticMethodTest.java
+++ b/src/test/java/org/apache/commons/scxml2/env/jexl/StaticMethodTest.java
@@ -29,10 +29,10 @@ public class StaticMethodTest {
 
     @Test
     public void testJexlStaticMethodInvocation() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/static-method.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/static-method.xml");
         exec.getRootContext().set("System", System.class);
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("static", currentStates.iterator().next().getId());
     }
diff --git a/src/test/java/org/apache/commons/scxml2/invoke/InvokeParamNameTest.java b/src/test/java/org/apache/commons/scxml2/invoke/InvokeParamNameTest.java
index 6bae74f..e9cf6a2 100644
--- a/src/test/java/org/apache/commons/scxml2/invoke/InvokeParamNameTest.java
+++ b/src/test/java/org/apache/commons/scxml2/invoke/InvokeParamNameTest.java
@@ -81,13 +81,13 @@ public class InvokeParamNameTest {
         private String invokeId;
 
         @Override
-        public void invoke(String url, Map<String, Object> params) {
+        public void invoke(final String url, final Map<String, Object> params) {
             lastURL = url;
             lastParams = params;
         }
 
         @Override
-        public void invokeContent(String content, Map<String, Object> params) {
+        public void invokeContent(final String content, final Map<String, Object> params) {
             lastURL = null;
             lastParams = params;
         }
@@ -106,7 +106,7 @@ public class InvokeParamNameTest {
         }
 
         @Override
-        public void parentEvent(TriggerEvent evt) {
+        public void parentEvent(final TriggerEvent evt) {
             // Not needed
         }
 
@@ -116,12 +116,12 @@ public class InvokeParamNameTest {
         }
 
         @Override
-        public void setInvokeId(String invokeId) {
+        public void setInvokeId(final String invokeId) {
             this.invokeId = invokeId;
         }
 
         @Override
-        public void setParentSCXMLExecutor(SCXMLExecutor parentSCXMLExecutor) {
+        public void setParentSCXMLExecutor(final SCXMLExecutor parentSCXMLExecutor) {
             // Not needed
         }
 
diff --git a/src/test/java/org/apache/commons/scxml2/invoke/InvokeTest.java b/src/test/java/org/apache/commons/scxml2/invoke/InvokeTest.java
index 7f2be71..32214ea 100644
--- a/src/test/java/org/apache/commons/scxml2/invoke/InvokeTest.java
+++ b/src/test/java/org/apache/commons/scxml2/invoke/InvokeTest.java
@@ -39,35 +39,35 @@ public class InvokeTest {
      */    
     @Test
     public void testInvoke01Sample() throws Exception {
-        SCXML scxml = SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/invoke/invoker-01.xml"));
-        SCXMLExecutor exec = new SCXMLExecutor(null, new SimpleDispatcher(), new SimpleErrorReporter());
+        final SCXML scxml = SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/invoke/invoker-01.xml"));
+        final SCXMLExecutor exec = new SCXMLExecutor(null, new SimpleDispatcher(), new SimpleErrorReporter());
         exec.setStateMachine(scxml);
         exec.registerInvokerClass("scxml", SimpleSCXMLInvoker.class);
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("invoker", currentStates.iterator().next().getId());
     }
     
     @Test
     public void testInvoke02Sample() throws Exception {
-        SCXML scxml = SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/invoke/invoker-02.xml"));
-        SCXMLExecutor exec = new SCXMLExecutor(null, new SimpleDispatcher(), new SimpleErrorReporter());
+        final SCXML scxml = SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/invoke/invoker-02.xml"));
+        final SCXMLExecutor exec = new SCXMLExecutor(null, new SimpleDispatcher(), new SimpleErrorReporter());
         exec.setStateMachine(scxml);
         exec.registerInvokerClass("scxml", SimpleSCXMLInvoker.class);
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
     }
     
     @Test
     public void testInvoke03Sample() throws Exception {
-        SCXML scxml = SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/invoke/invoker-03.xml"));
-        SCXMLExecutor exec = new SCXMLExecutor(null, new SimpleDispatcher(), new SimpleErrorReporter());
+        final SCXML scxml = SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/invoke/invoker-03.xml"));
+        final SCXMLExecutor exec = new SCXMLExecutor(null, new SimpleDispatcher(), new SimpleErrorReporter());
         exec.setStateMachine(scxml);
         exec.registerInvokerClass("scxml", SimpleSCXMLInvoker.class);
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         SCXMLTestHelper.fireEvent(exec, "s1.next");
         SCXMLTestHelper.fireEvent(exec, "state1.next");
@@ -75,8 +75,8 @@ public class InvokeTest {
 
     @Test
     public void testExecuteInvokeAfterAllInternalEventsAreProcessed() throws Exception {
-        SCXML scxml = SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/invoke/invoker-05.xml"));
-        SCXMLExecutor exec = new SCXMLExecutor(null, new SimpleDispatcher(), new SimpleErrorReporter());
+        final SCXML scxml = SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/invoke/invoker-05.xml"));
+        final SCXMLExecutor exec = new SCXMLExecutor(null, new SimpleDispatcher(), new SimpleErrorReporter());
         exec.setStateMachine(scxml);
         exec.registerInvokerClass("scxml", SimpleSCXMLInvoker.class);
         exec.go();
diff --git a/src/test/java/org/apache/commons/scxml2/io/ContentParserTest.java b/src/test/java/org/apache/commons/scxml2/io/ContentParserTest.java
index 9313491..48eca2a 100644
--- a/src/test/java/org/apache/commons/scxml2/io/ContentParserTest.java
+++ b/src/test/java/org/apache/commons/scxml2/io/ContentParserTest.java
@@ -54,24 +54,24 @@ public class ContentParserTest {
 
     @Test
     public void testParseJson() throws Exception {
-        ObjectMapper jsonObjectMapper = new ObjectMapper();
+        final ObjectMapper jsonObjectMapper = new ObjectMapper();
         jsonObjectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
         jsonObjectMapper.configure(JsonParser.Feature.ALLOW_YAML_COMMENTS, true);
         // not by default configured, but much easier for unit-testing Java embedded JSON Strings
         jsonObjectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
 
-        ContentParser contentParser = new ContentParser(jsonObjectMapper);
+        final ContentParser contentParser = new ContentParser(jsonObjectMapper);
 
-        String jsonObjectString = "{ /*comment*/ 'string' : 'foobar', 'int' : 1, 'boolean' : false, 'null' : null }";
-        LinkedHashMap<String, Object> jsonObject = new LinkedHashMap<>();
+        final String jsonObjectString = "{ /*comment*/ 'string' : 'foobar', 'int' : 1, 'boolean' : false, 'null' : null }";
+        final LinkedHashMap<String, Object> jsonObject = new LinkedHashMap<>();
         jsonObject.put("string", "foobar");
         jsonObject.put("int", 1);
         jsonObject.put("boolean", Boolean.FALSE);
         jsonObject.put("null", null);
         Assertions.assertEquals(jsonObject, contentParser.parseJson(jsonObjectString));
 
-        String jsonArrayString = "[" + jsonObjectString + "," + "# yaml comment\n" + jsonObjectString+"]";
-        ArrayList<Object> jsonArray = new ArrayList<>(2);
+        final String jsonArrayString = "[" + jsonObjectString + "," + "# yaml comment\n" + jsonObjectString+"]";
+        final ArrayList<Object> jsonArray = new ArrayList<>(2);
         jsonArray.add(jsonObject);
         jsonArray.add(jsonObject);
         Assertions.assertEquals(jsonArray, contentParser.parseJson(jsonArrayString));
diff --git a/src/test/java/org/apache/commons/scxml2/io/SCXMLReaderTest.java b/src/test/java/org/apache/commons/scxml2/io/SCXMLReaderTest.java
index fcacc2e..d63e03f 100644
--- a/src/test/java/org/apache/commons/scxml2/io/SCXMLReaderTest.java
+++ b/src/test/java/org/apache/commons/scxml2/io/SCXMLReaderTest.java
@@ -91,43 +91,43 @@ public class SCXMLReaderTest {
      */    
     @Test
     public void testSCXMLReaderMicrowave03Sample() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/jexl/microwave-03.xml");
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/jexl/microwave-03.xml");
         Assertions.assertNotNull(scxml);
         Assertions.assertNotNull(serialize(scxml));
     }
     
     @Test
     public void testSCXMLReaderMicrowave04Sample() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/jexl/microwave-04.xml");
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/jexl/microwave-04.xml");
         Assertions.assertNotNull(scxml);
         Assertions.assertNotNull(serialize(scxml));
     }
     
     @Test
     public void testSCXMLReaderTransitions01Sample() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/transitions-01.xml");
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/transitions-01.xml");
         Assertions.assertNotNull(scxml);
         Assertions.assertNotNull(serialize(scxml));
     }
     
     @Test
     public void testSCXMLReaderPrefix01Sample() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/prefix-01.xml");
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/prefix-01.xml");
         Assertions.assertNotNull(scxml);
         Assertions.assertNotNull(serialize(scxml));
     }
     
     @Test
     public void testSCXMLReaderSend01Sample() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/send-01.xml");
-        State ten = (State) scxml.getInitialTransition().getTargets().iterator().next();
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/send-01.xml");
+        final State ten = (State) scxml.getInitialTransition().getTargets().iterator().next();
         Assertions.assertEquals("ten", ten.getId());
-        List<Transition> ten_done = ten.getTransitionsList("done.state.ten");
+        final List<Transition> ten_done = ten.getTransitionsList("done.state.ten");
         Assertions.assertEquals(1, ten_done.size());
-        Transition ten2twenty = ten_done.get(0);
-        List<Action> actions = ten2twenty.getActions();
+        final Transition ten2twenty = ten_done.get(0);
+        final List<Action> actions = ten2twenty.getActions();
         Assertions.assertEquals(1, actions.size());
-        Send send = (Send) actions.get(0);
+        final Send send = (Send) actions.get(0);
         Assertions.assertEquals("send1", send.getId());
         /* Serialize
         scxmlAsString = serialize(scxml);
@@ -142,10 +142,10 @@ public class SCXMLReaderTest {
     
     @Test
     public void testSCXMLReaderInitialAttr() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/io/scxml-initial-attr.xml");
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/io/scxml-initial-attr.xml");
         Assertions.assertNotNull(scxml);
         Assertions.assertNotNull(serialize(scxml));
-        Final foo = (Final) scxml.getInitialTransition().getTargets().iterator().next();
+        final Final foo = (Final) scxml.getInitialTransition().getTargets().iterator().next();
         Assertions.assertEquals("foo", foo.getId());
     }
 
@@ -171,16 +171,16 @@ public class SCXMLReaderTest {
 
     @Test
     public void testSCXMLReaderCustomActionWithBodyTextSample() throws Exception {
-        List<CustomAction> cas = new ArrayList<>();
-        CustomAction ca = new CustomAction("http://my.custom-actions.domain",
+        final List<CustomAction> cas = new ArrayList<>();
+        final CustomAction ca = new CustomAction("http://my.custom-actions.domain",
             "action", MyAction.class);
         cas.add(ca);
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/io/custom-action-body-test-1.xml", cas);
-        EnterableState state = (EnterableState) scxml.getInitialTransition().getTargets().iterator().next();
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/io/custom-action-body-test-1.xml", cas);
+        final EnterableState state = (EnterableState) scxml.getInitialTransition().getTargets().iterator().next();
         Assertions.assertEquals("actions", state.getId());
-        List<Action> actions = state.getOnEntries().get(0).getActions();
+        final List<Action> actions = state.getOnEntries().get(0).getActions();
         Assertions.assertEquals(1, actions.size());
-        MyAction my = (MyAction)((CustomActionWrapper)actions.get(0)).getAction();
+        final MyAction my = (MyAction)((CustomActionWrapper)actions.get(0)).getAction();
         Assertions.assertNotNull(my);
         Assertions.assertTrue(my.getParsedValue() != null);
     }
@@ -189,8 +189,8 @@ public class SCXMLReaderTest {
     public void testSCXMLReaderWithInvalidElements() throws Exception {
         // In the default lenient/verbose mode (strict == false && silent == false),
         // the model exception should be just logged without a model exception.
-        Configuration configuration = new Configuration();
-        SCXML scxml = SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/io/scxml-with-invalid-elems.xml"),
+        final Configuration configuration = new Configuration();
+        final SCXML scxml = SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/io/scxml-with-invalid-elems.xml"),
                         configuration);
         Assertions.assertNotNull(scxml);
         Assertions.assertNotNull(serialize(scxml));
@@ -209,7 +209,7 @@ public class SCXMLReaderTest {
         // In the lenient/silent mode (strict == false && silent == true),
         // no model exception is logged.
         clearRecordedLogMessages();
-        Configuration configuration2 = new Configuration();
+        final Configuration configuration2 = new Configuration();
         configuration2.setStrict(false);
         configuration2.setSilent(true);
         SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/io/scxml-with-invalid-elems.xml"),
@@ -231,7 +231,7 @@ public class SCXMLReaderTest {
         // In strict/verbose mode (strict == true && silent == false), it should fail to read the model and catch a model exception
         // with warning logs because of the invalid <baddata> element.
         clearRecordedLogMessages();
-        Configuration configuration3 = new Configuration();
+        final Configuration configuration3 = new Configuration();
         configuration3.setStrict(true);
         configuration3.setSilent(false);
         ModelException e = Assertions.assertThrows(
@@ -249,7 +249,7 @@ public class SCXMLReaderTest {
         // In strict/silent mode (strict == true && silent == true), it should fail to read the model and catch a model exception
         // without warning logs because of the invalid <baddata> element.
         clearRecordedLogMessages();
-        Configuration configuration4 = new Configuration();
+        final Configuration configuration4 = new Configuration();
         configuration4.setStrict(true);
         configuration4.setSilent(true);
         e = Assertions.assertThrows(
@@ -269,7 +269,7 @@ public class SCXMLReaderTest {
         SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/groovy/groovy-closure.xml");
         Assertions.assertNotNull(scxml);
         Assertions.assertNotNull(scxml.getGlobalScript());
-        String scxmlAsString = serialize(scxml);
+        final String scxmlAsString = serialize(scxml);
         Assertions.assertNotNull(scxmlAsString);
         scxml = SCXMLTestHelper.parse(new StringReader(scxmlAsString), null);
         Assertions.assertNotNull(scxml);
@@ -278,7 +278,7 @@ public class SCXMLReaderTest {
 
     @Test
     public void dataWithSrcAndExprIsRejectedInStrictConfiguration() {
-        Configuration configuration = new Configuration();
+        final Configuration configuration = new Configuration();
         configuration.setStrict(true);
         configuration.setSilent(true);
         Assertions.assertThrows(org.apache.commons.scxml2.model.ModelException.class,
@@ -287,45 +287,45 @@ public class SCXMLReaderTest {
 
     @Test
     public void dataWithSrcAndExprUsesExprInNonStrictConfiguration() throws Exception {
-        Configuration configuration = new Configuration();
+        final Configuration configuration = new Configuration();
         configuration.setStrict(false);
         configuration.setSilent(true);
-        SCXML scxml = SCXMLReader.read(getClass().getResourceAsStream("data-with-src-and-expr.xml"), configuration);
+        final SCXML scxml = SCXMLReader.read(getClass().getResourceAsStream("data-with-src-and-expr.xml"), configuration);
         Assertions.assertNotNull(scxml);
         Assertions.assertNotNull(scxml.getDatamodel());
         Assertions.assertNotNull(scxml.getDatamodel().getData());
         Assertions.assertEquals(1, scxml.getDatamodel().getData().size(), "Exactly one data element parsed.");
-        Data data = scxml.getDatamodel().getData().get(0);
+        final Data data = scxml.getDatamodel().getData().get(0);
         Assertions.assertNotNull(data);
         Assertions.assertEquals("'an expression'", data.getExpr());
     }
 
     @Test
     public void srcAttributeOfDataIsParsed() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/io/data-with-src.xml");
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/io/data-with-src.xml");
         Assertions.assertNotNull(scxml);
         Assertions.assertNotNull(scxml.getDatamodel());
         Assertions.assertNotNull(scxml.getDatamodel().getData());
         Assertions.assertEquals(1, scxml.getDatamodel().getData().size(), "Exactly one data element parsed.");
-        Data data = scxml.getDatamodel().getData().get(0);
+        final Data data = scxml.getDatamodel().getData().get(0);
         Assertions.assertNotNull(data);
         Assertions.assertEquals("http://www.w3.org/TR/sxcml", data.getSrc());
     }
 
     @Test
     public void exprAttributeOfDataIsParsed() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/io/data-with-expr.xml");
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/io/data-with-expr.xml");
         Assertions.assertNotNull(scxml);
         Assertions.assertNotNull(scxml.getDatamodel());
         Assertions.assertNotNull(scxml.getDatamodel().getData());
         Assertions.assertEquals(1, scxml.getDatamodel().getData().size(), "Exactly one data element parsed.");
-        Data data = scxml.getDatamodel().getData().get(0);
+        final Data data = scxml.getDatamodel().getData().get(0);
         Assertions.assertNotNull(data);
         Assertions.assertEquals("'an expression'", data.getExpr());
     }
 
     private String serialize(final SCXML scxml) throws IOException, XMLStreamException {
-        String scxmlAsString = SCXMLWriter.write(scxml);
+        final String scxmlAsString = SCXMLWriter.write(scxml);
         Assertions.assertNotNull(scxmlAsString);
         return scxmlAsString;
     }
@@ -353,7 +353,7 @@ public class SCXMLReaderTest {
         private ParsedValue parsedValue;
 
         @Override
-        public void execute(ActionExecutionContext exctx) {
+        public void execute(final ActionExecutionContext exctx) {
             // Not relevant to test
         }
 
@@ -373,7 +373,7 @@ public class SCXMLReaderTest {
      */
     public static class RecordingLogFactory extends LogFactoryImpl {
         @Override
-        protected Log newInstance(String name) throws LogConfigurationException {
+        protected Log newInstance(final String name) throws LogConfigurationException {
             return new RecordingSimpleLog(name);
         }
     }
@@ -385,7 +385,7 @@ public class SCXMLReaderTest {
 
         private final List<String> messages = new LinkedList<>();
 
-        RecordingSimpleLog(String name) {
+        RecordingSimpleLog(final String name) {
             super(name);
         }
 
@@ -402,7 +402,7 @@ public class SCXMLReaderTest {
          * @return
          */
         boolean containsMessage(final String msg) {
-            for (String message : messages) {
+            for (final String message : messages) {
                 if (message.contains(msg)) {
                     return true;
                 }
@@ -411,12 +411,12 @@ public class SCXMLReaderTest {
         }
 
         @Override
-        protected boolean isLevelEnabled(int logLevel) {
+        protected boolean isLevelEnabled(final int logLevel) {
             return (logLevel >= LOG_LEVEL_INFO);
         }
 
         @Override
-        protected void log(int type, Object message, Throwable t) {
+        protected void log(final int type, final Object message, final Throwable t) {
             messages.add(message.toString());
         }
     }
diff --git a/src/test/java/org/apache/commons/scxml2/io/SCXMLRequiredAttributesTest.java b/src/test/java/org/apache/commons/scxml2/io/SCXMLRequiredAttributesTest.java
index f9a2f62..adb4908 100644
--- a/src/test/java/org/apache/commons/scxml2/io/SCXMLRequiredAttributesTest.java
+++ b/src/test/java/org/apache/commons/scxml2/io/SCXMLRequiredAttributesTest.java
@@ -147,15 +147,15 @@ public class SCXMLRequiredAttributesTest {
 
     @Test
     public void testValidSCXML() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse(new StringReader(VALID_SCXML), null);
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
+        final SCXML scxml = SCXMLTestHelper.parse(new StringReader(VALID_SCXML), null);
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
         exec.go();
         assertTrue(exec.getStatus().isFinal());
     }
 
     @Test
     public void testSCXMLMissingVersion() {
-        ModelException e = assertThrows(
+        final ModelException e = assertThrows(
                 ModelException.class,
                 () -> SCXMLTestHelper.parse(new StringReader(SCXML_WITH_MISSING_VERSION), null),
                 "SCXML reading should have failed due to missing version in SCXML");
@@ -164,7 +164,7 @@ public class SCXMLRequiredAttributesTest {
 
     @Test
     public void testSCXMLInvalidVersion() {
-        ModelException e = assertThrows(
+        final ModelException e = assertThrows(
                 ModelException.class,
                 () -> SCXMLTestHelper.parse(new StringReader(SCXML_WITH_INVALID_VERSION), null),
                 "SCXML reading should have failed due to missing version in SCXML");
@@ -173,7 +173,7 @@ public class SCXMLRequiredAttributesTest {
 
     @Test
     public void testSCXMLMissingIfCond() {
-        ModelException e = assertThrows(
+        final ModelException e = assertThrows(
                 ModelException.class,
                 () -> SCXMLTestHelper.parse(new StringReader(SCXML_WITH_MISSING_IF_COND), null),
                 "SCXML reading should have failed due to missing if condition in SCXML");
@@ -182,7 +182,7 @@ public class SCXMLRequiredAttributesTest {
 
     @Test
     public void testSCXMLMissingElseIfCond() {
-        ModelException e = assertThrows(
+        final ModelException e = assertThrows(
                 ModelException.class,
                 () -> SCXMLTestHelper.parse(new StringReader(SCXML_WITH_MISSING_ELSEIF_COND), null),
                 "SCXML reading should have failed due to missing elseif condition in SCXML");
@@ -191,7 +191,7 @@ public class SCXMLRequiredAttributesTest {
 
     @Test
     public void testSCXMLMissingDataId() {
-        ModelException e = assertThrows(
+        final ModelException e = assertThrows(
                 ModelException.class,
                 () -> SCXMLTestHelper.parse(new StringReader(SCXML_WITH_MISSING_DATA_ID), null),
                 "SCXML reading should have failed due to missing data id in SCXML");
@@ -200,7 +200,7 @@ public class SCXMLRequiredAttributesTest {
 
     @Test
     public void testSCXMLMissingAssignLocation() {
-        ModelException e = assertThrows(
+        final ModelException e = assertThrows(
                 ModelException.class,
                 () -> SCXMLTestHelper.parse(new StringReader(SCXML_WITH_MISSING_ASSIGN_LOCATION), null),
                 "SCXML reading should have failed due to missing assign location in SCXML");
@@ -209,7 +209,7 @@ public class SCXMLRequiredAttributesTest {
 
     @Test
     public void testSCXMLMissingParamName() {
-        ModelException e = assertThrows(
+        final ModelException e = assertThrows(
                 ModelException.class,
                 () -> SCXMLTestHelper.parse(new StringReader(SCXML_WITH_MISSING_PARAM_NAME), null),
                 "SCXML reading should have failed due to missing param name in SCXML");
@@ -224,7 +224,7 @@ public class SCXMLRequiredAttributesTest {
 
     @Test
     public void testSCXMLMissingForeachArray() {
-        ModelException e = assertThrows(
+        final ModelException e = assertThrows(
                 ModelException.class,
                 () -> SCXMLTestHelper.parse(new StringReader(SCXML_WITH_MISSING_FOREACH_ARRAY), null),
                 "SCXML reading should have failed due to missing foreach array in SCXML");
@@ -233,7 +233,7 @@ public class SCXMLRequiredAttributesTest {
 
     @Test
     public void testSCXMLMissingForeachItem() {
-        ModelException e = assertThrows(
+        final ModelException e = assertThrows(
                 ModelException.class,
                 () -> SCXMLTestHelper.parse(new StringReader(SCXML_WITH_MISSING_FOREACH_ITEM), null),
                 "SCXML reading should have failed due to missing foreach item in SCXML");
@@ -242,8 +242,8 @@ public class SCXMLRequiredAttributesTest {
 
     @Test
     public void testSCXMLWithForEach() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse(new StringReader(SCXML_WITH_FOREACH), null);
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
+        final SCXML scxml = SCXMLTestHelper.parse(new StringReader(SCXML_WITH_FOREACH), null);
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
         exec.go();
         assertTrue(exec.getStatus().isFinal());
     }
diff --git a/src/test/java/org/apache/commons/scxml2/io/SCXMLWriterTest.java b/src/test/java/org/apache/commons/scxml2/io/SCXMLWriterTest.java
index 7e0f59b..d1eb442 100644
--- a/src/test/java/org/apache/commons/scxml2/io/SCXMLWriterTest.java
+++ b/src/test/java/org/apache/commons/scxml2/io/SCXMLWriterTest.java
@@ -34,19 +34,19 @@ public class SCXMLWriterTest {
 
     @Test
     public void testSerializeSCXMLNoStates() throws IOException, XMLStreamException {
-        SCXML scxml = new CommonsSCXML();
+        final SCXML scxml = new CommonsSCXML();
         // ensure namespaces are stored in insertion order for write->read comparision below
-        LinkedHashMap<String, String> namespaces = new LinkedHashMap<>(scxml.getNamespaces());
+        final LinkedHashMap<String, String> namespaces = new LinkedHashMap<>(scxml.getNamespaces());
         namespaces.put("foo", "http://f.o.o");
         namespaces.put("bar", "http://b.a.r");
         scxml.setNamespaces(namespaces);
         scxml.setVersion("version1");
         scxml.setInitial("off");
-        State s = new State();
+        final State s = new State();
         s.setId(scxml.generateTransitionTargetId());
         scxml.addChild(s);
         
-        String assertValue = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+        final String assertValue = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
             + "<scxml xmlns=\"http://www.w3.org/2005/07/scxml\" xmlns:cs=\"https://commons.apache.org/scxml\" "
             + "xmlns:foo=\"http://f.o.o\" xmlns:bar=\"http://b.a.r\" "
             + "version=\"version1\" initial=\"off\"><!--https://commons.apache.org/scxml--><state></state>"
@@ -57,16 +57,16 @@ public class SCXMLWriterTest {
     
     @Test
     public void testSerializeSCXMLState() throws IOException, XMLStreamException {
-        SCXML scxml = new CommonsSCXML();
+        final SCXML scxml = new CommonsSCXML();
         scxml.setVersion("1.0");
         scxml.setInitial("S1");
 
-        State s1 = new State();
+        final State s1 = new State();
         s1.setId("S1");
 
         scxml.addChild(s1);
 
-        String assertValue = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+        final String assertValue = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
             + "<scxml xmlns=\"http://www.w3.org/2005/07/scxml\" "
             + "xmlns:cs=\"https://commons.apache.org/scxml\" version=\"1.0\" initial=\"S1\">"
             + "<!--https://commons.apache.org/scxml--><state id=\"S1\"></state></scxml>";
@@ -77,25 +77,25 @@ public class SCXMLWriterTest {
     @Test
     public void testSerializeParallel() throws IOException, XMLStreamException {
 
-        SCXML scxml = new CommonsSCXML();
+        final SCXML scxml = new CommonsSCXML();
         scxml.setVersion("1.0");
         scxml.setInitial("par");
 
-        Parallel par = new Parallel();
+        final Parallel par = new Parallel();
         par.setId("par");
 
-        State s1 = new State();
+        final State s1 = new State();
         s1.setId("S1");
 
-        State s11 = new State();
+        final State s11 = new State();
         s11.setId("S11");
 
         s1.addChild(s11);
 
-        State s2 = new State();
+        final State s2 = new State();
         s2.setId("S2");
 
-        State s21 = new State();
+        final State s21 = new State();
         s21.setId("S21");
 
         s2.addChild(s21);
@@ -105,7 +105,7 @@ public class SCXMLWriterTest {
 
         scxml.addChild(par);
 
-        String assertValue = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+        final String assertValue = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
             + "<scxml xmlns=\"http://www.w3.org/2005/07/scxml\" xmlns:cs=\"https://commons.apache.org/scxml\" "
             + "version=\"1.0\" initial=\"par\">"
             + "<!--https://commons.apache.org/scxml-->"
@@ -124,21 +124,21 @@ public class SCXMLWriterTest {
 
     @Test
     public void testSerializeGlobalScript() throws IOException, XMLStreamException {
-        SCXML scxml = new CommonsSCXML();
+        final SCXML scxml = new CommonsSCXML();
         scxml.setVersion("1.0");
         scxml.setInitial("S1");
 
-        Script script = new Script();
+        final Script script = new Script();
         script.setGlobalScript(true);
         script.setScript("foo=\"abc\"");
         scxml.setGlobalScript(script);
 
-        State s1 = new State();
+        final State s1 = new State();
         s1.setId("S1");
 
         scxml.addChild(s1);
 
-        String assertValue = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+        final String assertValue = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
                 + "<scxml xmlns=\"http://www.w3.org/2005/07/scxml\" "
                 + "xmlns:cs=\"https://commons.apache.org/scxml\" version=\"1.0\" initial=\"S1\">"
                 + "<!--https://commons.apache.org/scxml--><script><![CDATA[foo=\"abc\"]]></script><state id=\"S1\"></state></scxml>";
diff --git a/src/test/java/org/apache/commons/scxml2/io/StateSrcTest.java b/src/test/java/org/apache/commons/scxml2/io/StateSrcTest.java
index ec2e4bc..3891547 100644
--- a/src/test/java/org/apache/commons/scxml2/io/StateSrcTest.java
+++ b/src/test/java/org/apache/commons/scxml2/io/StateSrcTest.java
@@ -31,7 +31,7 @@ public class StateSrcTest {
 
     @Test
     public void testRecursiveSrcInclude() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/io/src-test-1.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/io/src-test-1.xml");
         exec.go();
         Set<EnterableState> states = exec.getStatus().getStates();
         Assertions.assertEquals(1, states.size());
@@ -44,7 +44,7 @@ public class StateSrcTest {
     
     @Test
     public void testBadSrcInclude() {
-        ModelException me = Assertions.assertThrows(
+        final ModelException me = Assertions.assertThrows(
                 ModelException.class,
                 () -> SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/io/src-test-4.xml")),
                 "Document with bad <state> src attribute shouldn't be parsed!");
@@ -54,7 +54,7 @@ public class StateSrcTest {
     
     @Test
     public void testBadSrcFragmentInclude() {
-        ModelException me = Assertions.assertThrows(
+        final ModelException me = Assertions.assertThrows(
                 ModelException.class,
                 () -> SCXMLReader.read(SCXMLTestHelper.getResource("org/apache/commons/scxml2/io/src-test-5.xml")),
                 "Document with bad <state> src attribute shouldn't be parsed!");
diff --git a/src/test/java/org/apache/commons/scxml2/issues/Issue112Test.java b/src/test/java/org/apache/commons/scxml2/issues/Issue112Test.java
index a026049..6ddd114 100644
--- a/src/test/java/org/apache/commons/scxml2/issues/Issue112Test.java
+++ b/src/test/java/org/apache/commons/scxml2/issues/Issue112Test.java
@@ -52,13 +52,13 @@ public class Issue112Test {
     @Test
     public void test01issue112() throws Exception {
 
-        CustomAction ca1 =
+        final CustomAction ca1 =
             new CustomAction("http://my.custom-actions.domain/CUSTOM", "enqueue", Enqueue.class);
-        List<CustomAction> customActions = new ArrayList<>();
+        final List<CustomAction> customActions = new ArrayList<>();
         customActions.add(ca1);
 
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/issues/queue-01.xml", customActions);
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/issues/queue-01.xml", customActions);
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
         exec.go();
         Assertions.assertEquals("init", exec.getStatus().getStates().
                 iterator().next().getId());
@@ -89,12 +89,12 @@ public class Issue112Test {
             return event;
         }
 
-        public void setEvent(String event) {
+        public void setEvent(final String event) {
             this.event = event;
         }
 
         @Override
-        public void execute(ActionExecutionContext exctx) {
+        public void execute(final ActionExecutionContext exctx) {
 
             Application.QUEUE.add(event);
 
diff --git a/src/test/java/org/apache/commons/scxml2/issues/Issue62Test.java b/src/test/java/org/apache/commons/scxml2/issues/Issue62Test.java
index 063b4b8..45c2d93 100644
--- a/src/test/java/org/apache/commons/scxml2/issues/Issue62Test.java
+++ b/src/test/java/org/apache/commons/scxml2/issues/Issue62Test.java
@@ -33,9 +33,9 @@ public class Issue62Test {
 
     @Test
     public void test01issue62() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/issues/issue62-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/issues/issue62-01.xml");
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("s1.1", currentStates.iterator().next().getId());
         SCXMLTestHelper.assertPostTriggerState(exec, "foo", "s1.1");
@@ -43,20 +43,20 @@ public class Issue62Test {
     
     @Test
     public void test02issue62() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/issues/issue62-02.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/issues/issue62-02.xml");
         exec.go();
         fragmenttest(exec);
     }
     
     @Test
     public void test03issue62() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/issues/issue62-03.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/issues/issue62-03.xml");
         exec.go();
         fragmenttest(exec);
     }
 
-    private void fragmenttest(SCXMLExecutor exec) throws Exception {
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+    private void fragmenttest(final SCXMLExecutor exec) throws Exception {
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("s1", currentStates.iterator().next().getId());
         SCXMLTestHelper.assertPostTriggerState(exec, "foo", "e1.1.1");
diff --git a/src/test/java/org/apache/commons/scxml2/issues/Issue64Test.java b/src/test/java/org/apache/commons/scxml2/issues/Issue64Test.java
index 418ca71..01b48c3 100644
--- a/src/test/java/org/apache/commons/scxml2/issues/Issue64Test.java
+++ b/src/test/java/org/apache/commons/scxml2/issues/Issue64Test.java
@@ -28,14 +28,14 @@ public class Issue64Test {
 
     @Test
     public void test01issue64() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/issues/issue64-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/issues/issue64-01.xml");
         exec.go();
         SCXMLTestHelper.assertPostTriggerState(exec, "show.bug", "end");
     }
     
     @Test
     public void test02issue64() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/issues/issue64-02.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/issues/issue64-02.xml");
         exec.go();
         SCXMLTestHelper.assertPostTriggerState(exec, "show.bug", "end");
     }
diff --git a/src/test/java/org/apache/commons/scxml2/model/ActionTest.java b/src/test/java/org/apache/commons/scxml2/model/ActionTest.java
index 7c91feb..be818b2 100644
--- a/src/test/java/org/apache/commons/scxml2/model/ActionTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/ActionTest.java
@@ -30,27 +30,27 @@ public class ActionTest {
     }
     @Test
     public void testGetParentStateIsState() throws Exception {
-        Transition transition = new Transition();
+        final Transition transition = new Transition();
         
-        State state = new State();
+        final State state = new State();
         state.setId("on");
         
         transition.setParent(state);
         action.setParent(transition);
 
-        TransitionTarget returnValue = action.getParentEnterableState();
+        final TransitionTarget returnValue = action.getParentEnterableState();
         
         Assertions.assertEquals("on", returnValue.getId());
     }
     
     @Test
     public void testGetParentStateIsParallel() throws Exception {
-        Transition transition = new Transition();
+        final Transition transition = new Transition();
         
-        Parallel parallel = new Parallel();
+        final Parallel parallel = new Parallel();
         parallel.setId("on");
  
-        State state = new State();
+        final State state = new State();
         state.setId("off");
         
         parallel.setParent(state);
@@ -58,19 +58,19 @@ public class ActionTest {
         transition.setParent(parallel);
         action.setParent(transition);
 
-        TransitionTarget returnValue = action.getParentEnterableState();
+        final TransitionTarget returnValue = action.getParentEnterableState();
         
         Assertions.assertEquals("on", returnValue.getId());
     }
     
     @Test
     public void testGetParentStateIsHistory() throws Exception {
-        Transition transition = new Transition();
+        final Transition transition = new Transition();
         
-        History history = new History();
+        final History history = new History();
         history.setId("on");
  
-        State state = new State();
+        final State state = new State();
         state.setId("off");
         
         history.setParent(state);
@@ -78,18 +78,18 @@ public class ActionTest {
         transition.setParent(history.getParent());
         action.setParent(transition);
 
-        TransitionTarget returnValue = action.getParentEnterableState();
+        final TransitionTarget returnValue = action.getParentEnterableState();
         
         Assertions.assertEquals("off", returnValue.getId());
     }
     
     @Test
     public void testGetParentStateIsInitial() throws Exception {
-        SimpleTransition transition = new SimpleTransition();
+        final SimpleTransition transition = new SimpleTransition();
         
-        Initial initial = new Initial();
+        final Initial initial = new Initial();
 
-        State state = new State();
+        final State state = new State();
         state.setId("off");
 
         initial.setParent(state);
@@ -97,7 +97,7 @@ public class ActionTest {
         initial.setTransition(transition);
         action.setParent(transition);
 
-        TransitionTarget returnValue = action.getParentEnterableState();
+        final TransitionTarget returnValue = action.getParentEnterableState();
 
         Assertions.assertEquals("off", returnValue.getId());
     }
diff --git a/src/test/java/org/apache/commons/scxml2/model/ActionsTest.java b/src/test/java/org/apache/commons/scxml2/model/ActionsTest.java
index 310697e..8bfd789 100644
--- a/src/test/java/org/apache/commons/scxml2/model/ActionsTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/ActionsTest.java
@@ -35,27 +35,27 @@ public class ActionsTest {
 
     @Test
     public void testStateActions() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/actions-state-test.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/actions-state-test.xml");
         exec.go();
         runTest(exec);
     }
     
     @Test
     public void testParallelActions() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/actions-parallel-test.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/actions-parallel-test.xml");
         exec.go();
         runTest(exec);
     }
     
     @Test
     public void testInitialActions() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/actions-initial-test.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/actions-initial-test.xml");
         exec.go();
         runTest(exec);
     }
 
-    private void runTest(SCXMLExecutor exec) {
-        Context ctx = SCXMLTestHelper.lookupContext(exec, "actionsTest");
+    private void runTest(final SCXMLExecutor exec) {
+        final Context ctx = SCXMLTestHelper.lookupContext(exec, "actionsTest");
         Assertions.assertEquals(ctx.get("foo"), "foobar");
         Assertions.assertEquals(true, ctx.get("eventsent"), "Missed event transition");
     }
diff --git a/src/test/java/org/apache/commons/scxml2/model/AssignTest.java b/src/test/java/org/apache/commons/scxml2/model/AssignTest.java
index b2b6605..16281c8 100644
--- a/src/test/java/org/apache/commons/scxml2/model/AssignTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/AssignTest.java
@@ -29,9 +29,9 @@ public class AssignTest {
 
     @Test
     public void testAssignSrc() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/assign-test-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/assign-test-01.xml");
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("assign3", currentStates.iterator().next().getId());
         Assertions.assertTrue(exec.getStatus().isFinal());
@@ -39,9 +39,9 @@ public class AssignTest {
     
     @Test
     public void testAssignDeep() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/assign-test-02.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/assign-test-02.xml");
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("assign3", currentStates.iterator().next().getId());
         Assertions.assertTrue(exec.getStatus().isFinal());
diff --git a/src/test/java/org/apache/commons/scxml2/model/CancelTest.java b/src/test/java/org/apache/commons/scxml2/model/CancelTest.java
index 12323f8..cae73d3 100644
--- a/src/test/java/org/apache/commons/scxml2/model/CancelTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/CancelTest.java
@@ -30,7 +30,7 @@ public class CancelTest {
         final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/model/cancel-test-01.xml");
         final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml, null, new SimpleDispatcher());
         exec.go();
-        TriggerEvent te = new EventBuilder("event.foo", TriggerEvent.SIGNAL_EVENT).build();
+        final TriggerEvent te = new EventBuilder("event.foo", TriggerEvent.SIGNAL_EVENT).build();
         SCXMLTestHelper.fireEvent(exec, te);
         Thread.sleep(3000);
         exec.triggerEvents();
@@ -42,7 +42,7 @@ public class CancelTest {
         final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/model/cancel-test-02.xml");
         final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml, null, new SimpleDispatcher());
         exec.go();
-        TriggerEvent te = new EventBuilder("event.foo", TriggerEvent.SIGNAL_EVENT).build();
+        final TriggerEvent te = new EventBuilder("event.foo", TriggerEvent.SIGNAL_EVENT).build();
         SCXMLTestHelper.fireEvent(exec, te);
         Thread.sleep(3000);
         exec.triggerEvents();
diff --git a/src/test/java/org/apache/commons/scxml2/model/CustomActionTest.java b/src/test/java/org/apache/commons/scxml2/model/CustomActionTest.java
index e0a2fe8..a692a82 100644
--- a/src/test/java/org/apache/commons/scxml2/model/CustomActionTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/CustomActionTest.java
@@ -85,7 +85,7 @@ public class CustomActionTest {
     @Test
     public void testHelloWorld() throws Exception {
         // (1) Get a SCXMLExecutor
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/hello-world.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/hello-world.xml");
         exec.go();
         // (2) Single, final state
         Assertions.assertEquals("hello", (exec.getStatus().getStates().
@@ -98,21 +98,21 @@ public class CustomActionTest {
     public void testCustomActionHelloWorld() throws Exception {
         // (1) Form a list of custom actions defined in the SCXML
         //     document (and any included documents via "src" attributes)
-        CustomAction ca1 =
+        final CustomAction ca1 =
             new CustomAction("http://my.custom-actions.domain/CUSTOM1",
                              "hello", Hello.class);
         // Register the same action under a different name, just to test
         // multiple custom actions
-        CustomAction ca2 =
+        final CustomAction ca2 =
             new CustomAction("http://my.custom-actions.domain/CUSTOM2",
                              "bar", Hello.class);
-        List<CustomAction> customActions = new ArrayList<>();
+        final List<CustomAction> customActions = new ArrayList<>();
         customActions.add(ca1);
         customActions.add(ca2);
         // (2) Parse the document
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/custom-hello-world-01.xml", customActions);
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/custom-hello-world-01.xml", customActions);
         // (3) Get a SCXMLExecutor
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
         exec.go();
         // (4) Single, final state
         Assertions.assertEquals("custom", (exec.getStatus().getStates().
@@ -130,15 +130,15 @@ public class CustomActionTest {
     public void testCustomActionExternalSrcHelloWorld() throws Exception {
         // (1) Form a list of custom actions defined in the SCXML
         //     document (and any included documents via "src" attributes)
-        CustomAction ca =
+        final CustomAction ca =
             new CustomAction("http://my.custom-actions.domain/CUSTOM",
                              "hello", Hello.class);
-        List<CustomAction> customActions = new ArrayList<>();
+        final List<CustomAction> customActions = new ArrayList<>();
         customActions.add(ca);
         // (2) Parse the document
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/external-hello-world.xml", customActions);
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/external-hello-world.xml", customActions);
         // (3) Get a SCXMLExecutor
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
         exec.go();
         // (4) Single, final state
         Assertions.assertEquals("custom", (exec.getStatus().getStates().
@@ -154,15 +154,15 @@ public class CustomActionTest {
     @Test
     public void testCustomActionOverrideLocalName() throws Exception {
         // (1) List of custom actions, use same local name as SCXML action
-        CustomAction ca =
+        final CustomAction ca =
             new CustomAction("http://my.custom-actions.domain/CUSTOM",
                              "send", Hello.class);
-        List<CustomAction> customActions = new ArrayList<>();
+        final List<CustomAction> customActions = new ArrayList<>();
         customActions.add(ca);
         // (2) Parse the document
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/custom-hello-world-03.xml", customActions);
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/custom-hello-world-03.xml", customActions);
         // (3) Get a SCXMLExecutor
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
         exec.go();
         // (4) Single, final state
         Assertions.assertEquals("custom", (exec.getStatus().getStates().
@@ -179,15 +179,15 @@ public class CustomActionTest {
     public void testCustomActionEventPayloadHelloWorldJexl() throws Exception {
         // (1) Form a list of custom actions defined in the SCXML
         //     document (and any included documents via "src" attributes)
-        CustomAction ca =
+        final CustomAction ca =
             new CustomAction("http://my.custom-actions.domain/CUSTOM",
                              "hello", Hello.class);
-        List<CustomAction> customActions = new ArrayList<>();
+        final List<CustomAction> customActions = new ArrayList<>();
         customActions.add(ca);
         // (2) Parse the document
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/custom-hello-world-04-jexl.xml", customActions);
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/custom-hello-world-04-jexl.xml", customActions);
         // (3) Get a SCXMLExecutor
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
         exec.go();
         // (4) Single, final state
         Assertions.assertEquals("custom1", exec.getStatus().getStates().iterator().next().getId(),
diff --git a/src/test/java/org/apache/commons/scxml2/model/DatamodelTest.java b/src/test/java/org/apache/commons/scxml2/model/DatamodelTest.java
index 71721dd..120d46f 100644
--- a/src/test/java/org/apache/commons/scxml2/model/DatamodelTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/DatamodelTest.java
@@ -34,9 +34,9 @@ public class DatamodelTest {
      */    
     @Test
     public void testDatamodelSimultaneousJexl() throws Exception {
-        SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-01.xml");
+        final SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-01.xml");
         exec01.go();
-        SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-01.xml");
+        final SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-01.xml");
         exec02.go();
         Assertions.assertFalse(exec01 == exec02);
         runtest(exec01, exec02);
@@ -47,9 +47,9 @@ public class DatamodelTest {
      */
     @Test
     public void testDatamodelSimultaneousGroovy() throws Exception {
-        SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/datamodel-01.xml");
+        final SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/datamodel-01.xml");
         exec01.go();
-        SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/datamodel-01.xml");
+        final SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/datamodel-01.xml");
         exec02.go();
         Assertions.assertFalse(exec01 == exec02);
         runtest(exec01, exec02);
@@ -60,9 +60,9 @@ public class DatamodelTest {
      */
     @Test
     public void testDatamodelSimultaneousJavascript() throws Exception {
-        SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/javascript/datamodel-01.xml");
+        final SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/javascript/datamodel-01.xml");
         exec01.go();
-        SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/javascript/datamodel-01.xml");
+        final SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/javascript/datamodel-01.xml");
         exec02.go();
         Assertions.assertFalse(exec01 == exec02);
         runtest(exec01, exec02);
@@ -70,21 +70,21 @@ public class DatamodelTest {
 
     @Test
     public void testDatamodel05Jexl() throws Exception {
-        SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-05.xml");
+        final SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/datamodel-05.xml");
         exec01.go();
         SCXMLTestHelper.assertState(exec01, "end");
     }
 
     @Test
     public void testDatamodel05Groovy() throws Exception {
-        SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/datamodel-05.xml");
+        final SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/groovy/datamodel-05.xml");
         exec01.go();
         SCXMLTestHelper.assertState(exec01, "end");
     }
 
     @Test
     public void testDatamodel05Javascript() throws Exception {
-        SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/javascript/datamodel-05.xml");
+        final SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/javascript/datamodel-05.xml");
         exec01.go();
         SCXMLTestHelper.assertState(exec01, "end");
     }
@@ -125,8 +125,8 @@ public class DatamodelTest {
         Assertions.assertEquals("forty", currentStates.iterator().next().getId());
     }
 
-    private Set<EnterableState> fireEvent(String name, SCXMLExecutor exec) throws Exception {
-        TriggerEvent[] evts = {new EventBuilder(name, TriggerEvent.SIGNAL_EVENT).build()};
+    private Set<EnterableState> fireEvent(final String name, final SCXMLExecutor exec) throws Exception {
+        final TriggerEvent[] evts = {new EventBuilder(name, TriggerEvent.SIGNAL_EVENT).build()};
         exec.triggerEvents(evts);
         return exec.getStatus().getStates();
     }
diff --git a/src/test/java/org/apache/commons/scxml2/model/Hello.java b/src/test/java/org/apache/commons/scxml2/model/Hello.java
index bcdfb19..32e00a3 100644
--- a/src/test/java/org/apache/commons/scxml2/model/Hello.java
+++ b/src/test/java/org/apache/commons/scxml2/model/Hello.java
@@ -49,17 +49,17 @@ public class Hello extends Action {
      *
      * @param name The name to set.
      */
-    public void setName(String name) {
+    public void setName(final String name) {
         this.name = name;
     }
 
     @Override
-    public void execute(ActionExecutionContext exctx) {
+    public void execute(final ActionExecutionContext exctx) {
         if (exctx.getAppLog().isInfoEnabled()) {
             exctx.getAppLog().info("Hello " + name);
         }
         // For derived events payload testing
-        TriggerEvent event = new EventBuilder("helloevent", TriggerEvent.SIGNAL_EVENT).data(name).build();
+        final TriggerEvent event = new EventBuilder("helloevent", TriggerEvent.SIGNAL_EVENT).data(name).build();
         exctx.getInternalIOProcessor().addEvent(event);
         callbacks++;
     }
diff --git a/src/test/java/org/apache/commons/scxml2/model/HistoryTest.java b/src/test/java/org/apache/commons/scxml2/model/HistoryTest.java
index e553388..0eb22e5 100644
--- a/src/test/java/org/apache/commons/scxml2/model/HistoryTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/HistoryTest.java
@@ -27,7 +27,7 @@ public class HistoryTest {
 
     @Test
     public void testSetTypeDeep() {
-        History history = new History();
+        final History history = new History();
         history.setType("deep");
         
         Assertions.assertTrue(history.isDeep());
@@ -35,7 +35,7 @@ public class HistoryTest {
         
     @Test
     public void testSetTypeNotDeep() {
-        History history = new History();
+        final History history = new History();
         history.setType("shallow");
         
         Assertions.assertFalse(history.isDeep());
@@ -43,21 +43,21 @@ public class HistoryTest {
     
     @Test
     public void testShallowHistory01() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/history-shallow-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/history-shallow-01.xml");
         exec.go();
         runHistoryFlow(exec);
     }
     
     @Test
     public void testDeepHistory01() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/history-deep-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/history-deep-01.xml");
         exec.go();
         runHistoryFlow(exec);
     }
     
     @Test
     public void testHistoryDefaults01() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/history-default-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/history-default-01.xml");
         exec.go();
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
@@ -72,9 +72,9 @@ public class HistoryTest {
     
     @Test
     public void testHistoryParallel01() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/history-parallel-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/history-parallel-01.xml");
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         SCXMLTestHelper.assertState(exec, "off_call");
         SCXMLTestHelper.assertPostTriggerStates(exec, "dial", new String[] { "talking", "on_call" });
@@ -88,7 +88,7 @@ public class HistoryTest {
         SCXMLTestHelper.assertPostTriggerStates(exec, "alternate", new String[] { "held", "on_call" });
     }
 
-    private void runHistoryFlow(SCXMLExecutor exec) throws Exception {
+    private void runHistoryFlow(final SCXMLExecutor exec) throws Exception {
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("phase1", currentStates.iterator().next().getId());
@@ -116,8 +116,8 @@ public class HistoryTest {
         return currentStates.iterator().next().getId();
     }
 
-    private String nextPhase(SCXMLExecutor exec) throws Exception {
-        Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "done.state.phase");
+    private String nextPhase(final SCXMLExecutor exec) throws Exception {
+        final Set<EnterableState> currentStates = SCXMLTestHelper.fireEvent(exec, "done.state.phase");
         Assertions.assertEquals(1, currentStates.size());
         return currentStates.iterator().next().getId();
     }
diff --git a/src/test/java/org/apache/commons/scxml2/model/ParallelTest.java b/src/test/java/org/apache/commons/scxml2/model/ParallelTest.java
index deaac5d..fee9798 100644
--- a/src/test/java/org/apache/commons/scxml2/model/ParallelTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/ParallelTest.java
@@ -25,14 +25,14 @@ public class ParallelTest {
 
     @Test
     public void testParallel01() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/parallel-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/parallel-01.xml");
         exec.go();
         SCXMLTestHelper.assertPostTriggerState(exec, "foo", "end");
     }
     
     @Test
     public void testParallel02() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/parallel-02.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/parallel-02.xml");
         exec.go();
         SCXMLTestHelper.assertPostTriggerStates(exec, "dummy.event", new String[] { "state01", "state02" });
         SCXMLTestHelper.assertPostTriggerState(exec, "event1", "state1");
@@ -40,7 +40,7 @@ public class ParallelTest {
     
     @Test
     public void testParallel03() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/parallel-03.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/parallel-03.xml");
         exec.go();
         SCXMLTestHelper.assertPostTriggerStates(exec, "dummy.event", new String[] { "para11", "para21" });
         Object count = exec.getEvaluator().eval(exec.getGlobalContext(),"root.root.count");
diff --git a/src/test/java/org/apache/commons/scxml2/model/ScriptTest.java b/src/test/java/org/apache/commons/scxml2/model/ScriptTest.java
index 65e5f09..b8ca407 100644
--- a/src/test/java/org/apache/commons/scxml2/model/ScriptTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/ScriptTest.java
@@ -30,9 +30,9 @@ public class ScriptTest {
      */    
     @Test
     public void testJexlScriptExecution() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/script-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/jexl/script-01.xml");
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("end", currentStates.iterator().next().getId());
     }
@@ -42,9 +42,9 @@ public class ScriptTest {
      */
     @Test
     public void testJavaScriptExecution() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/javascript/script-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/env/javascript/script-01.xml");
         exec.go();
-        Set<EnterableState> currentStates = exec.getStatus().getStates();
+        final Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("end", currentStates.iterator().next().getId());
     }
diff --git a/src/test/java/org/apache/commons/scxml2/model/ScxmlInitialAttributeTest.java b/src/test/java/org/apache/commons/scxml2/model/ScxmlInitialAttributeTest.java
index 888b198..3b79830 100644
--- a/src/test/java/org/apache/commons/scxml2/model/ScxmlInitialAttributeTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/ScxmlInitialAttributeTest.java
@@ -54,22 +54,22 @@ public class ScxmlInitialAttributeTest {
 
     @Test
     public void testInitial() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse(new StringReader(SCXML_WITH_LEGAL_INITIAL), null);
+        final SCXML scxml = SCXMLTestHelper.parse(new StringReader(SCXML_WITH_LEGAL_INITIAL), null);
         assertEquals("s1", scxml.getInitial(), "The initial state ID reading was wrong.");
-        TransitionTarget tt = scxml.getInitialTransition().getTargets().iterator().next();
+        final TransitionTarget tt = scxml.getInitialTransition().getTargets().iterator().next();
         assertEquals("s1", tt.getId(), "The initial state resolution was wrong.");
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
         exec.go();
         assertEquals(scxml.getTargets().get("s1"), exec.getStatus().getStates().iterator().next());
     }
 
     @Test
     public void testNoInitial() throws Exception {
-        SCXML scxml = SCXMLTestHelper.parse(new StringReader(SCXML_WITH_NO_INITIAL), null);
+        final SCXML scxml = SCXMLTestHelper.parse(new StringReader(SCXML_WITH_NO_INITIAL), null);
         assertNull(scxml.getInitial());
-        TransitionTarget tt = scxml.getInitialTransition().getTargets().iterator().next();
+        final TransitionTarget tt = scxml.getInitialTransition().getTargets().iterator().next();
         assertEquals("s1", tt.getId(), "The initial state resolution was wrong.");
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor(scxml);
         exec.go();
         assertEquals(scxml.getTargets().get("s1"), exec.getStatus().getStates().iterator().next());
     }
diff --git a/src/test/java/org/apache/commons/scxml2/model/SendTest.java b/src/test/java/org/apache/commons/scxml2/model/SendTest.java
index 78c7632..7ef5bc2 100644
--- a/src/test/java/org/apache/commons/scxml2/model/SendTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/SendTest.java
@@ -47,12 +47,12 @@ public class SendTest {
             }
         });
         exec.go();
-        TriggerEvent te = new EventBuilder("event.foo", TriggerEvent.SIGNAL_EVENT).data(3).build();
+        final TriggerEvent te = new EventBuilder("event.foo", TriggerEvent.SIGNAL_EVENT).data(3).build();
         SCXMLTestHelper.fireEvent(exec, te);
 
         Assertions.assertFalse(payloads.isEmpty(), "Payloads empty.");
         Assertions.assertTrue(payloads.get(0) instanceof Map, "Payload is not a map.");
-        Map<String, Object> firstPayload = (Map<String, Object>) payloads.get(0);
+        final Map<String, Object> firstPayload = (Map<String, Object>) payloads.get(0);
         Assertions.assertEquals(2, firstPayload.size(), "Only two in the namelist data expected.");
 
         Assertions.assertEquals(1, firstPayload.get("one"), "Unexpected value for 'one'.");
@@ -65,7 +65,7 @@ public class SendTest {
         Assertions.assertEquals("two", it.next(), "The first one in the namelist must be 'two'.");
     }
 
-    private long parseDelay(String delayString) throws SCXMLExpressionException {
+    private long parseDelay(final String delayString) throws SCXMLExpressionException {
         return Send.parseDelay(delayString, true, delayString);
     }
 
diff --git a/src/test/java/org/apache/commons/scxml2/model/StateTest.java b/src/test/java/org/apache/commons/scxml2/model/StateTest.java
index ac802fa..9390549 100644
--- a/src/test/java/org/apache/commons/scxml2/model/StateTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/StateTest.java
@@ -27,26 +27,26 @@ public class StateTest {
 
     @Test
     public void testGetTransitionsListNull() {
-        State state = new State();
+        final State state = new State();
         Assertions.assertNull(state.getTransitionsList("event"));
     }
         
     @Test
     public void testGetTransitionsList() {
-        State state = new State();
+        final State state = new State();
         state.getTransitionsList().add(new Transition());
         Assertions.assertNotNull(state.getTransitionsList(null));
     }
         
     @Test
     public void testAddTransitionDoesNotContainKey() {
-        Transition transition = new Transition();
+        final Transition transition = new Transition();
         transition.setEvent("event");
 
-        State state = new State();
+        final State state = new State();
         state.addTransition(transition);
         
-        List<Transition> events = state.getTransitionsList("event");
+        final List<Transition> events = state.getTransitionsList("event");
         
         Assertions.assertEquals(1, events.size());
         Assertions.assertEquals("event", events.get(0).getEvent());
@@ -54,49 +54,49 @@ public class StateTest {
         
     @Test
     public void testAddTransitionContainKey() {
-        Transition transition1 = new Transition();
+        final Transition transition1 = new Transition();
         transition1.setEvent("event");
 
-        Transition transition2 = new Transition();
+        final Transition transition2 = new Transition();
         transition2.setEvent("event");
 
-        State state = new State();
+        final State state = new State();
         state.addTransition(transition1);
         state.addTransition(transition2);
         
-        List<Transition> events = state.getTransitionsList("event");
+        final List<Transition> events = state.getTransitionsList("event");
         
         Assertions.assertEquals(2, events.size());
     }
         
     @Test
     public void testGetTransitionList() {
-        Transition transition1 = new Transition();
+        final Transition transition1 = new Transition();
         transition1.setEvent("event");
 
-        Transition transition2 = new Transition();
+        final Transition transition2 = new Transition();
         transition2.setEvent("event");
 
-        State state = new State();
+        final State state = new State();
         state.addTransition(transition1);
         state.addTransition(transition2);
         
-        List<Transition> events = state.getTransitionsList();
+        final List<Transition> events = state.getTransitionsList();
         
         Assertions.assertEquals(2, events.size());
     }
         
     @Test
     public void testHasHistoryEmpty() {
-        State state = new State();
+        final State state = new State();
         Assertions.assertFalse(state.hasHistory());
     }
     
     @Test
     public void testHasHistory() {
-        History history = new History();
+        final History history = new History();
 
-        State state = new State();
+        final State state = new State();
         state.addHistory(history);
         
         Assertions.assertTrue(state.hasHistory());
@@ -104,15 +104,15 @@ public class StateTest {
         
     @Test
     public void testIsSimple() {
-        State state = new State();
+        final State state = new State();
         Assertions.assertTrue(state.isSimple());
     }
         
     @Test
     public void testIsSimpleHasChildren() {
-        State state1 = new State();
+        final State state1 = new State();
         
-        State state = new State();
+        final State state = new State();
         state.addChild(state1);
         
         Assertions.assertFalse(state.isSimple());
@@ -120,15 +120,15 @@ public class StateTest {
         
     @Test
     public void testIsCompositeFalse() {
-        State state = new State();
+        final State state = new State();
         Assertions.assertFalse(state.isComposite());
     }
         
     @Test
     public void testIsCompositeParallel() {
-        State child = new State();
+        final State child = new State();
 
-        State state = new State();
+        final State state = new State();
         state.addChild(child);
         
         Assertions.assertTrue(state.isComposite());
@@ -136,9 +136,9 @@ public class StateTest {
         
     @Test
     public void testIsCompositeHasChildren() {
-        State state1 = new State();
+        final State state1 = new State();
 
-        State state = new State();
+        final State state = new State();
         state.addChild(state1);
         
         Assertions.assertTrue(state.isComposite());
@@ -146,7 +146,7 @@ public class StateTest {
         
     @Test
     public void testIsRegion() {
-        State state = new State();
+        final State state = new State();
         state.setParent(new Parallel());
         
         Assertions.assertTrue(state.isRegion());
@@ -154,7 +154,7 @@ public class StateTest {
         
     @Test
     public void testIsRegionNotParallel() {
-        State state = new State();
+        final State state = new State();
         state.setParent(new State());
         
         Assertions.assertFalse(state.isRegion());
@@ -162,7 +162,7 @@ public class StateTest {
     
     @Test
     public void testInitialAttribute() throws Exception {
-        SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/state-01.xml");
+        final SCXMLExecutor exec = SCXMLTestHelper.getExecutor("org/apache/commons/scxml2/model/state-01.xml");
         exec.go();
         Assertions.assertEquals("s11", exec.getStatus().getStates().iterator().next().getId());
     }
diff --git a/src/test/java/org/apache/commons/scxml2/model/StatelessModelTest.java b/src/test/java/org/apache/commons/scxml2/model/StatelessModelTest.java
index 7f86707..ce1d63c 100644
--- a/src/test/java/org/apache/commons/scxml2/model/StatelessModelTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/StatelessModelTest.java
@@ -36,10 +36,10 @@ public class StatelessModelTest {
     @Test
     public void testStatelessModelSimultaneousJexl() throws Exception {
     	// parse once, use many times
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/jexl/stateless-01.xml");
-        SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor(scxml);
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/jexl/stateless-01.xml");
+        final SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor(scxml);
         exec01.go();
-        SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor(scxml);
+        final SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor(scxml);
         exec02.go();
         Assertions.assertFalse(exec01 == exec02);
         runSimultaneousTest(exec01, exec02);
@@ -51,9 +51,9 @@ public class StatelessModelTest {
     @Test
     public void testStatelessModelSequentialJexl() throws Exception {
         // rinse and repeat
-        SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/jexl/stateless-01.xml");
+        final SCXML scxml = SCXMLTestHelper.parse("org/apache/commons/scxml2/env/jexl/stateless-01.xml");
         for (int i = 0; i < 3; i++) {
-            SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor(scxml);
+            final SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor(scxml);
             exec01.go();
             runSequentialTest(exec01);
         }
@@ -64,10 +64,10 @@ public class StatelessModelTest {
      */    
     @Test
     public void testStatelessModelParallelSharedSCXML() throws Exception {
-        SCXML scxml01par = SCXMLTestHelper.parse("org/apache/commons/scxml2/model/stateless-parallel-01.xml");
-        SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor(scxml01par);
+        final SCXML scxml01par = SCXMLTestHelper.parse("org/apache/commons/scxml2/model/stateless-parallel-01.xml");
+        final SCXMLExecutor exec01 = SCXMLTestHelper.getExecutor(scxml01par);
         exec01.go();
-        SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor(scxml01par);
+        final SCXMLExecutor exec02 = SCXMLTestHelper.getExecutor(scxml01par);
         exec02.go();
         Assertions.assertFalse(exec01 == exec02);
 
@@ -113,11 +113,11 @@ public class StatelessModelTest {
     }
      */
 
-    private void checkParallelStates(Set<EnterableState> currentStates,
-            String s1, String s2, String label) {
-        Iterator<EnterableState> i = currentStates.iterator();
+    private void checkParallelStates(final Set<EnterableState> currentStates,
+            final String s1, final String s2, final String label) {
+        final Iterator<EnterableState> i = currentStates.iterator();
         Assertions.assertTrue(i.hasNext(), "Not enough states");
-        String cs1 = i.next().getId();
+        final String cs1 = i.next().getId();
         String cs2;
         if (s2 != null) {
             Assertions.assertTrue(i.hasNext(), "Not enough states, found one state: " + cs1);
@@ -142,7 +142,7 @@ public class StatelessModelTest {
         Assertions.fail(label + " in unexpected state " + cs1);
     }
 
-    private void runSimultaneousTest(SCXMLExecutor exec01, SCXMLExecutor exec02) throws Exception {
+    private void runSimultaneousTest(final SCXMLExecutor exec01, final SCXMLExecutor exec02) throws Exception {
         //// Interleaved
         // exec01
         Set<EnterableState> currentStates = exec01.getStatus().getStates();
@@ -168,7 +168,7 @@ public class StatelessModelTest {
         Assertions.assertEquals("thirty", currentStates.iterator().next().getId());
     }
 
-    private void runSequentialTest(SCXMLExecutor exec) throws Exception {
+    private void runSequentialTest(final SCXMLExecutor exec) throws Exception {
         Set<EnterableState> currentStates = exec.getStatus().getStates();
         Assertions.assertEquals(1, currentStates.size());
         Assertions.assertEquals("ten", (currentStates.iterator().
@@ -183,8 +183,8 @@ public class StatelessModelTest {
             next()).getId());
     }
 
-    private Set<EnterableState> fireEvent(String name, SCXMLExecutor exec) throws Exception {
-        TriggerEvent[] evts = {new EventBuilder(name, TriggerEvent.SIGNAL_EVENT).build()};
+    private Set<EnterableState> fireEvent(final String name, final SCXMLExecutor exec) throws Exception {
+        final TriggerEvent[] evts = {new EventBuilder(name, TriggerEvent.SIGNAL_EVENT).build()};
         exec.triggerEvents(evts);
         return exec.getStatus().getStates();
     }
diff --git a/src/test/java/org/apache/commons/scxml2/model/TransitionTargetTest.java b/src/test/java/org/apache/commons/scxml2/model/TransitionTargetTest.java
index e9619e7..14a46ff 100644
--- a/src/test/java/org/apache/commons/scxml2/model/TransitionTargetTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/TransitionTargetTest.java
@@ -23,25 +23,25 @@ public class TransitionTargetTest {
 
     @Test
     public void testIsDescendantNullParent() {
-        State state = new State();
-        State context = new State();
+        final State state = new State();
+        final State context = new State();
 
         Assertions.assertFalse(state.isDescendantOf(context));
     }
 
     @Test
     public void testIsDescendantNotEqual() {
-        State state = new State();
+        final State state = new State();
         state.setParent(new State());
-        State context = new State();
+        final State context = new State();
 
         Assertions.assertFalse(state.isDescendantOf(context));
     }
 
     @Test
     public void testIsDescendantEqual() {
-        State state = new State();
-        State context = new State();
+        final State state = new State();
+        final State context = new State();
         state.setParent(context);
 
         Assertions.assertTrue(state.isDescendantOf(context));
@@ -49,9 +49,9 @@ public class TransitionTargetTest {
 
     @Test
     public void testIsDescendantParentEqual() {
-        State state = new State();
-        State context = new State();
-        State parent = new State();
+        final State state = new State();
+        final State context = new State();
+        final State parent = new State();
 
         parent.setParent(context);
         state.setParent(parent);
diff --git a/src/test/java/org/apache/commons/scxml2/model/TransitionTest.java b/src/test/java/org/apache/commons/scxml2/model/TransitionTest.java
index d7cebe3..12bd26c 100644
--- a/src/test/java/org/apache/commons/scxml2/model/TransitionTest.java
+++ b/src/test/java/org/apache/commons/scxml2/model/TransitionTest.java
@@ -33,7 +33,7 @@ public class TransitionTest {
     public void testGetTargets() {
         Assertions.assertEquals(0, transition.getTargets().size());
 
-        State state = new State();
+        final State state = new State();
         state.setId("1");
 
         transition.getTargets().add(state);
diff --git a/src/test/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImplTest.java b/src/test/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImplTest.java
index 7a90ac9..550f8a2 100644
--- a/src/test/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImplTest.java
+++ b/src/test/java/org/apache/commons/scxml2/semantics/SCXMLSemanticsImplTest.java
@@ -31,22 +31,22 @@ public class SCXMLSemanticsImplTest {
 
     @Test
     public void testIsLegalConfigNoStates() {
-        Set<EnterableState> states = new HashSet<>();
+        final Set<EnterableState> states = new HashSet<>();
 
         Assertions.assertTrue(new SCXMLSemanticsImpl().isLegalConfiguration(states, new SimpleErrorReporter()));
     }
 
     @Test
     public void testIsLegalConfigInvalidParallel() {
-        Set<EnterableState> states = new HashSet<>();
-        Parallel parallel = new Parallel();
+        final Set<EnterableState> states = new HashSet<>();
+        final Parallel parallel = new Parallel();
 
-        Parallel parent = new Parallel();
+        final Parallel parent = new Parallel();
         parent.setId("4");
 
-        State state1 = new State();
+        final State state1 = new State();
         state1.setId("1");
-        State state2 = new State();
+        final State state2 = new State();
         state2.setId("2");
 
         parent.addChild(state1);
@@ -56,7 +56,7 @@ public class SCXMLSemanticsImplTest {
 
         states.add(parallel);
 
-        MockErrorReporter errorReporter = new MockErrorReporter();
+        final MockErrorReporter errorReporter = new MockErrorReporter();
 
         Assertions.assertFalse(new SCXMLSemanticsImpl().isLegalConfiguration(states, errorReporter));
         Assertions.assertEquals(ErrorConstants.ILLEGAL_CONFIG, errorReporter.getErrCode());
@@ -65,17 +65,17 @@ public class SCXMLSemanticsImplTest {
 
     @Test
     public void testIsLegalConfigMultipleTopLevel() {
-        Set<EnterableState> states = new HashSet<>();
+        final Set<EnterableState> states = new HashSet<>();
 
-        State state1 = new State();
+        final State state1 = new State();
         state1.setId("1");
-        State state2 = new State();
+        final State state2 = new State();
         state2.setId("2");
 
         states.add(state1);
         states.add(state2);
 
-        MockErrorReporter errorReporter = new MockErrorReporter();
+        final MockErrorReporter errorReporter = new MockErrorReporter();
 
         Assertions.assertFalse(new SCXMLSemanticsImpl().isLegalConfiguration(states, errorReporter));
         Assertions.assertEquals(ErrorConstants.ILLEGAL_CONFIG, errorReporter.getErrCode());
@@ -84,15 +84,15 @@ public class SCXMLSemanticsImplTest {
 
     @Test
     public void testIsLegalConfigMultipleStatesActive() {
-        Set<EnterableState> states = new HashSet<>();
+        final Set<EnterableState> states = new HashSet<>();
 
-        State state1 = new State();
+        final State state1 = new State();
         state1.setId("1");
 
-        State state2 = new State();
+        final State state2 = new State();
         state2.setId("2");
 
-        State parent = new State();
+        final State parent = new State();
         parent.setId("parentid");
 
         state2.setParent(parent);
@@ -101,7 +101,7 @@ public class SCXMLSemanticsImplTest {
         states.add(state1);
         states.add(state2);
 
-        MockErrorReporter errorReporter = new MockErrorReporter();
+        final MockErrorReporter errorReporter = new MockErrorReporter();
 
         Assertions.assertFalse(new SCXMLSemanticsImpl().isLegalConfiguration(states, errorReporter));
         Assertions.assertEquals(ErrorConstants.ILLEGAL_CONFIG, errorReporter.getErrCode());
diff --git a/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java b/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
index f1c45ec..9b08420 100644
--- a/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
+++ b/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java
@@ -124,7 +124,7 @@ public class W3CTests {
         }
 
         public static Datamodel fromValue(final String value) {
-            for (Datamodel datamodel : Datamodel.values()) {
+            for (final Datamodel datamodel : Datamodel.values()) {
                 if (datamodel.value().equals(value)) {
                     return datamodel;
                 }
@@ -214,7 +214,7 @@ public class W3CTests {
             if (testsMap == null) {
                 testsMap = new LinkedHashMap<>();
                 if (tests != null) {
-                    for (Test t : tests) {
+                    for (final Test t : tests) {
                         testsMap.put(t.getId(), t);
                     }
                 }
@@ -361,7 +361,7 @@ public class W3CTests {
             if (assertionsMap == null) {
                 assertionsMap = new LinkedHashMap<>();
                 if (assertions != null) {
-                    for (Assertion a : assertions) {
+                    for (final Assertion a : assertions) {
                         assertionsMap.put(a.getId(), a);
                     }
                 }
@@ -419,8 +419,8 @@ public class W3CTests {
                 return;
             }
             else if ("run".equals(args[0])) {
-                Datamodel datamodel = Datamodel.fromValue(System.getProperty("datamodel"));
-                String testId = System.getProperty("test");
+                final Datamodel datamodel = Datamodel.fromValue(System.getProperty("datamodel"));
+                final String testId = System.getProperty("test");
                 new W3CTests().runTests(testId, datamodel);
                 return;
             }
@@ -460,10 +460,10 @@ public class W3CTests {
         FileUtils.copyURLToFile(new URL(SCXML_IRP_BASE_URL + SCXML_IRP_MANIFEST_URI), new File(testsSrcDir, SCXML_IRP_MANIFEST_URI));
         System.out.println("Downloading ecma stylesheet: " + SCXML_IRP_BASE_URL + SCXML_IRP_ECMA_XSL_URI);
         FileUtils.copyURLToFile(new URL(SCXML_IRP_BASE_URL + SCXML_IRP_ECMA_XSL_URI), new File(testsSrcDir, SCXML_IRP_ECMA_XSL_URI));
-        Assertions assertions = loadAssertions();
-        for (Assertions.Assertion entry : assertions.getAssertions().values()) {
-            for (Assertions.TestCase test : entry.getTestCases()) {
-                for (Assertions.Resource resource : test.getResources()) {
+        final Assertions assertions = loadAssertions();
+        for (final Assertions.Assertion entry : assertions.getAssertions().values()) {
+            for (final Assertions.TestCase test : entry.getTestCases()) {
+                for (final Assertions.Resource resource : test.getResources()) {
                     System.out.println("Downloading IRP test file: " + SCXML_IRP_BASE_URL + resource.getUri());
                     FileUtils.copyURLToFile(new URL(SCXML_IRP_BASE_URL + resource.getUri()), new File(TXML_TESTS_DIR + resource.getFilename()));
                 }
@@ -481,17 +481,17 @@ public class W3CTests {
     protected void makeTests() throws Exception {
         final File testsSrcDir = new File(TESTS_SRC_DIR);
 
-        TransformerFactory factory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl",null);
+        final TransformerFactory factory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl",null);
         factory.setFeature("http://saxon.sf.net/feature/suppressXsltNamespaceCheck", true);
         final Map<Datamodel, Transformer> transformers = new HashMap<>();
         transformers.put(Datamodel.ECMA, factory.newTransformer(new StreamSource(new FileInputStream(new File(testsSrcDir, SCXML_IRP_ECMA_XSL_URI)))));
         transformers.put(Datamodel.MINIMAL, factory.newTransformer(new StreamSource(getClass().getResourceAsStream(SCXML_IRP_MINIMAL_XSL_FILENAME))));
         transformers.put(Datamodel.JEXL, factory.newTransformer(new StreamSource(getClass().getResourceAsStream(SCXML_IRP_JEXL_XSL_FILENAME))));
         transformers.put(Datamodel.GROOVY, factory.newTransformer(new StreamSource(getClass().getResourceAsStream(SCXML_IRP_GROOVY_XSL_FILENAME))));
-        Assertions assertions = loadAssertions();
-        for (Assertions.Assertion entry : assertions.getAssertions().values()) {
-            for (Assertions.TestCase test : entry.getTestCases()) {
-                for (Assertions.Resource resource : test.getResources()) {
+        final Assertions assertions = loadAssertions();
+        for (final Assertions.Assertion entry : assertions.getAssertions().values()) {
+            for (final Assertions.TestCase test : entry.getTestCases()) {
+                for (final Assertions.Resource resource : test.getResources()) {
                     processResource(entry.getSpecId(), resource, transformers);
                 }
             }
@@ -518,7 +518,7 @@ public class W3CTests {
                 transformResource(resource, transformers.get(Datamodel.ECMA), Datamodel.ECMA.testDir());
                 break;
             default:
-                for (Datamodel dm : transformers.keySet()) {
+                for (final Datamodel dm : transformers.keySet()) {
                     if (dm != Datamodel.MINIMAL) {
                         transformResource(resource, transformers.get(dm), dm.testDir());
                     }
@@ -538,7 +538,7 @@ public class W3CTests {
     protected void transformResource(final Assertions.Resource resource, final Transformer transformer,
                                      final String targetDir) throws Exception {
         if (resource.getFilename().endsWith(".txml")) {
-            StreamSource txmlSource = new StreamSource(new FileInputStream(new File(TXML_TESTS_DIR, resource.getFilename())));
+            final StreamSource txmlSource = new StreamSource(new FileInputStream(new File(TXML_TESTS_DIR, resource.getFilename())));
             transformer.transform(txmlSource, new StreamResult(new FileOutputStream(new File(targetDir, resource.getName() + ".scxml"))));
         }
         else {
@@ -574,7 +574,7 @@ public class W3CTests {
             }
         }
         else {
-            for (Assertions.Assertion entry : assertions.getAssertions().values()) {
+            for (final Assertions.Assertion entry : assertions.getAssertions().values()) {
                 runAssert(entry, tests, datamodel, enabled, false, results);
             }
         }
@@ -594,7 +594,7 @@ public class W3CTests {
         System.out.print("\n");
         if (testId == null && !results.changedStatusTests.isEmpty()) {
             System.out.println("  "+(enabled? "failed" : "passed")+" tests: ");
-            for (String filename : results.changedStatusTests) {
+            for (final String filename : results.changedStatusTests) {
                 System.out.println("    "+filename);
             }
             System.out.print("\n");
@@ -611,22 +611,22 @@ public class W3CTests {
      * @throws Exception
      */
     protected void runAssert(final Assertions.Assertion assertion, final Tests tests, final Datamodel datamodel,
-                             final boolean status, final boolean singleTest, TestResults results) {
+                             final boolean status, final boolean singleTest, final TestResults results) {
         final Tests.Test test = tests.getTests().get(assertion.getId());
         if (test == null) {
             throw new IllegalStateException("No test configuration found for W3C IRP test with id: "+assertion.getId());
         }
         if (test.isImplemented()) {
-            for (Assertions.TestCase testCase : assertion.getTestCases()) {
+            for (final Assertions.TestCase testCase : assertion.getTestCases()) {
                 for (final Datamodel dm : Datamodel.values()) {
                     if (assertion.getDatamodel() == null && dm != Datamodel.MINIMAL || dm == assertion.getDatamodel()) {
                         boolean skipped = true;
                         if (datamodel == null || datamodel == dm) {
                             if (singleTest || test.getStatus(dm) == null || status == test.getStatus(dm)) {
-                                for (Assertions.Resource scxmlResource : testCase.getScxmlResources()) {
-                                    File scxmlFile = new File(dm.testDir(), scxmlResource.getName()+".scxml");
+                                for (final Assertions.Resource scxmlResource : testCase.getScxmlResources()) {
+                                    final File scxmlFile = new File(dm.testDir(), scxmlResource.getName()+".scxml");
                                     skipped = false;
-                                    boolean success = runTest(testCase, test, scxmlFile);
+                                    final boolean success = runTest(testCase, test, scxmlFile);
                                     if (!success) {
                                         results.failed.put(dm, results.failed(dm)+1);
                                     } else {
@@ -672,7 +672,7 @@ public class W3CTests {
             exec.registerInvokerClass("scxml", SimpleSCXMLInvoker.class);
             exec.registerInvokerClass("http://www.w3.org/TR/scxml/", SimpleSCXMLInvoker.class);
             exec.run().join();
-            Final end = exec.getStatus().getFinalState();
+            final Final end = exec.getStatus().getFinalState();
             System.out.println("                final state: "+end.getId());
             if (!testCase.isManual()) {
                 return end.getId().equals("pass");
@@ -685,7 +685,7 @@ public class W3CTests {
                 return false;
             }
         }
-        catch (Exception e) {
+        catch (final Exception e) {
             if (test.isManual() && e.getMessage() != null && e.getMessage().equals(test.getFinalState())) {
                 System.out.println("                PASS: "+e.getMessage());
                 return true;