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-jexl.git


The following commit(s) were added to refs/heads/master by this push:
     new ecf76add Clean ups
ecf76add is described below

commit ecf76addd672065586d8e560a7e8592a6b42d586
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Tue Jan 17 11:51:38 2023 -0500

    Clean ups
    
    - Use final where missing
    - No need to call super() in ctor
    - Use short array declaration syntax
    - Use lambdas
    - Fix some formatting
    - Collapse nested ifs
    - Remove redundant keywords in interface methods
    - Use a switch instead of cascade of ifs
---
 .../org/apache/commons/jexl3/JexlArithmetic.java   |  46 +++++-----
 .../java/org/apache/commons/jexl3/JexlBuilder.java |   2 +-
 .../java/org/apache/commons/jexl3/JexlContext.java |   2 +-
 .../org/apache/commons/jexl3/JexlException.java    |   8 +-
 .../java/org/apache/commons/jexl3/JexlOptions.java |   8 +-
 .../org/apache/commons/jexl3/internal/Closure.java |   2 +-
 .../apache/commons/jexl3/internal/Debugger.java    |  74 +++++++--------
 .../org/apache/commons/jexl3/internal/Engine.java  |  14 +--
 .../apache/commons/jexl3/internal/Engine32.java    |  29 +++---
 .../commons/jexl3/internal/FqcnResolver.java       |  20 ++--
 .../apache/commons/jexl3/internal/Interpreter.java |  24 ++---
 .../commons/jexl3/internal/InterpreterBase.java    |  20 ++--
 .../commons/jexl3/internal/LexicalScope.java       |   4 +-
 .../apache/commons/jexl3/internal/Operators.java   |  10 +-
 .../org/apache/commons/jexl3/internal/Scope.java   |   6 +-
 .../commons/jexl3/internal/ScriptVisitor.java      |   8 +-
 .../commons/jexl3/internal/TemplateEngine.java     | 102 +++++++++++----------
 .../jexl3/internal/TemplateInterpreter.java        |   6 +-
 .../commons/jexl3/internal/TemplateScript.java     |   2 +-
 .../jexl3/internal/introspection/ClassMap.java     |   4 +-
 .../jexl3/internal/introspection/ClassTool.java    |  18 ++--
 .../jexl3/internal/introspection/Introspector.java |   4 +-
 .../internal/introspection/MethodExecutor.java     |   2 +-
 .../jexl3/internal/introspection/MethodKey.java    |   4 +-
 .../jexl3/internal/introspection/Permissions.java  |  70 +++++++-------
 .../internal/introspection/PermissionsParser.java  |  77 ++++++++--------
 .../internal/introspection/SandboxUberspect.java   |   2 +-
 .../jexl3/introspection/JexlPermissions.java       |   6 +-
 .../commons/jexl3/introspection/JexlSandbox.java   |   2 +-
 .../commons/jexl3/introspection/JexlUberspect.java |   2 +-
 .../apache/commons/jexl3/parser/ASTAmbiguous.java  |   2 +-
 .../apache/commons/jexl3/parser/ASTAnnotation.java |   2 +-
 .../commons/jexl3/parser/ASTArrayLiteral.java      |   2 +-
 .../org/apache/commons/jexl3/parser/ASTBlock.java  |   2 +-
 .../commons/jexl3/parser/ASTForeachStatement.java  |   4 +-
 .../apache/commons/jexl3/parser/ASTIdentifier.java |   2 +-
 .../commons/jexl3/parser/ASTIdentifierAccess.java  |   2 +-
 .../jexl3/parser/ASTIdentifierAccessJxlt.java      |   2 +-
 .../jexl3/parser/ASTIdentifierAccessSafe.java      |   2 +-
 .../jexl3/parser/ASTIdentifierAccessSafeJxlt.java  |   2 +-
 .../apache/commons/jexl3/parser/ASTJexlLambda.java |   2 +-
 .../commons/jexl3/parser/ASTJxltLiteral.java       |   2 +-
 .../apache/commons/jexl3/parser/ASTMapLiteral.java |   2 +-
 .../jexl3/parser/ASTNamespaceIdentifier.java       |   2 +-
 .../commons/jexl3/parser/ASTNumberLiteral.java     |   2 +-
 .../jexl3/parser/ASTQualifiedIdentifier.java       |   4 +-
 .../jexl3/parser/ASTReferenceExpression.java       |   2 +-
 .../commons/jexl3/parser/ASTRegexLiteral.java      |   2 +-
 .../apache/commons/jexl3/parser/ASTSetLiteral.java |   2 +-
 .../commons/jexl3/parser/ASTStringLiteral.java     |   2 +-
 .../org/apache/commons/jexl3/parser/ASTVar.java    |   2 +-
 .../commons/jexl3/parser/FeatureController.java    |   8 +-
 .../commons/jexl3/parser/JexlLexicalNode.java      |   4 +-
 .../org/apache/commons/jexl3/parser/JexlNode.java  |  11 +--
 .../apache/commons/jexl3/parser/JexlParser.java    |  36 ++++----
 .../apache/commons/jexl3/parser/NumberParser.java  |  32 +++----
 .../commons/jexl3/parser/OperatorController.java   |   6 +-
 .../apache/commons/jexl3/parser/SimpleNode.java    |   4 +-
 .../commons/jexl3/scripting/JexlScriptEngine.java  |   8 +-
 59 files changed, 360 insertions(+), 373 deletions(-)

diff --git a/src/main/java/org/apache/commons/jexl3/JexlArithmetic.java 
b/src/main/java/org/apache/commons/jexl3/JexlArithmetic.java
index a90204cb..8693671b 100644
--- a/src/main/java/org/apache/commons/jexl3/JexlArithmetic.java
+++ b/src/main/java/org/apache/commons/jexl3/JexlArithmetic.java
@@ -371,7 +371,7 @@ public class JexlArithmetic {
      * @param value the operand
      * @return true if operand is considered null
      */
-    protected boolean isNullOperand(Object value) {
+    protected boolean isNullOperand(final Object value) {
         return value == null;
     }
 
@@ -388,7 +388,7 @@ public class JexlArithmetic {
      * @throws JexlArithmetic.NullOperand if strict-cast
      * @since 3.3
      */
-    protected <T> T controlNullOperand(boolean strictCast, T defaultValue) {
+    protected <T> T controlNullOperand(final boolean strictCast, final T 
defaultValue) {
         if (strictCast) {
             throw new NullOperand();
         }
@@ -402,7 +402,7 @@ public class JexlArithmetic {
      * @throws  JexlArithmetic.NullOperand if strict-cast
      * @since 3.3
      */
-    protected Object controlNullNullOperands(JexlOperator operator) {
+    protected Object controlNullNullOperands(final JexlOperator operator) {
         if (isStrict(operator)) {
             throw new NullOperand();
         }
@@ -782,7 +782,7 @@ public class JexlArithmetic {
      * @return true if operator considers null arguments as errors, false if 
operator has appropriate semantics
      * for null argument(s)
      */
-    public boolean isStrict(JexlOperator operator) {
+    public boolean isStrict(final JexlOperator operator) {
         if (operator != null) {
             switch (operator) {
                 case EQ:
@@ -918,7 +918,7 @@ public class JexlArithmetic {
      * @param returned the returned value
      * @return the controlled returned value
      */
-    public Object controlReturn(Object returned) {
+    public Object controlReturn(final Object returned) {
         return returned;
     }
 
@@ -1136,7 +1136,7 @@ public class JexlArithmetic {
      * @param val the argument
      * @return val + 1
      */
-    public Object increment(Object val) {
+    public Object increment(final Object val) {
         return increment(val, 1);
     }
 
@@ -1145,7 +1145,7 @@ public class JexlArithmetic {
      * @param val the argument
      * @return val - 1
      */
-    public Object decrement(Object val) {
+    public Object decrement(final Object val) {
         return increment(val, -1);
     }
 
@@ -1155,7 +1155,7 @@ public class JexlArithmetic {
      * @param incr the value to add
      * @return val + incr
      */
-    protected Object increment(Object val, int incr) {
+    protected Object increment(final Object val, final int incr) {
         if (val == null) {
             return incr;
         }
@@ -1169,11 +1169,11 @@ public class JexlArithmetic {
             return ((Long) val) + incr;
         }
         if (val instanceof BigDecimal) {
-            BigDecimal bd = (BigDecimal) val;
+            final BigDecimal bd = (BigDecimal) val;
             return bd.add(BigDecimal.valueOf(incr), this.mathContext);
         }
         if (val instanceof BigInteger) {
-            BigInteger bi = (BigInteger) val;
+            final BigInteger bi = (BigInteger) val;
             return bi.add(BigInteger.valueOf(incr));
         }
         if (val instanceof Float) {
@@ -1840,7 +1840,7 @@ public class JexlArithmetic {
      * @param right  right argument
      * @return left &lt;&lt; right.
      */
-    public Object shiftLeft(Object left, Object right) {
+    public Object shiftLeft(final Object left, final Object right) {
         final long l = toLong(left);
         final int r = toInteger(right);
         return l << r;
@@ -1853,7 +1853,7 @@ public class JexlArithmetic {
      * @param right  right argument
      * @return left &gt;&gt; right.
      */
-    public Object shiftRight(Object left, Object right) {
+    public Object shiftRight(final Object left, final Object right) {
         final long l = toLong(left);
         final long r = toInteger(right);
         return l >> r;
@@ -1866,7 +1866,7 @@ public class JexlArithmetic {
      * @param right  right argument
      * @return left &gt;&gt;&gt; right.
      */
-    public Object shiftRightUnsigned(Object left, Object right) {
+    public Object shiftRightUnsigned(final Object left, final Object right) {
         final long l = toLong(left);
         final long r = toInteger(right);
         return l >>> r;
@@ -1880,7 +1880,7 @@ public class JexlArithmetic {
         JexlOperator operator;
         try {
             operator = JexlOperator.valueOf(symbol);
-        } catch(IllegalArgumentException xill) {
+        } catch (final IllegalArgumentException xill) {
             // ignore
             operator = JexlOperator.EQ;
         }
@@ -1909,7 +1909,7 @@ public class JexlArithmetic {
                     final BigInteger l = toBigInteger(strictCast, left);
                     final BigInteger r = toBigInteger(strictCast, right);
                     return l.compareTo(r);
-                } catch(ArithmeticException xconvert) {
+                } catch (final ArithmeticException xconvert) {
                     // ignore it, continue in sequence
                 }
             }
@@ -1933,7 +1933,7 @@ public class JexlArithmetic {
                     final long lhs = toLong(strictCast, left);
                     final long rhs = toLong(strictCast, right);
                     return Long.compare(lhs, rhs);
-                } catch(ArithmeticException xconvert) {
+                } catch (final ArithmeticException xconvert) {
                     // ignore it, continue in sequence
                 }
             }
@@ -2043,10 +2043,10 @@ public class JexlArithmetic {
      * @return a double
      * @throws ArithmeticException if the string can not be coerced into a 
double
      */
-    private double parseDouble(String arg) throws ArithmeticException {
+    private double parseDouble(final String arg) throws ArithmeticException {
         try {
             return arg.isEmpty()? Double.NaN : Double.parseDouble(arg);
-        } catch (NumberFormatException e) {
+        } catch (final NumberFormatException e) {
             final ArithmeticException arithmeticException = new 
ArithmeticException("Double coercion: ("+ arg +")");
             arithmeticException.initCause(e);
             throw arithmeticException;
@@ -2060,7 +2060,7 @@ public class JexlArithmetic {
      * @return a long
      * @throws ArithmeticException if the string can not be coerced into a long
      */
-    private long parseLong(String arg) throws ArithmeticException {
+    private long parseLong(final String arg) throws ArithmeticException {
         final double d = parseDouble(arg);
         if (Double.isNaN(d)) {
             return 0L;
@@ -2079,10 +2079,10 @@ public class JexlArithmetic {
      * @return an int
      * @throws ArithmeticException if the string can not be coerced into a long
      */
-    private int parseInteger(String arg) throws ArithmeticException {
+    private int parseInteger(final String arg) throws ArithmeticException {
         final long l = parseLong(arg);
         final int i = (int) l;
-        if ((long) i == l) {
+        if (i == l) {
             return i;
         }
         throw new ArithmeticException("Int coercion: ("+ arg +")");
@@ -2095,13 +2095,13 @@ public class JexlArithmetic {
      * @return a big integer
      * @throws ArithmeticException if the string can not be coerced into a big 
integer
      */
-    private BigInteger parseBigInteger(String arg) throws ArithmeticException {
+    private BigInteger parseBigInteger(final String arg) throws 
ArithmeticException {
         if (arg.isEmpty()) {
             return BigInteger.ZERO;
         }
         try {
             return new BigInteger(arg);
-        } catch(NumberFormatException xformat) {
+        } catch (final NumberFormatException xformat) {
             // ignore, try harder
         }
         return BigInteger.valueOf(parseLong(arg));
diff --git a/src/main/java/org/apache/commons/jexl3/JexlBuilder.java 
b/src/main/java/org/apache/commons/jexl3/JexlBuilder.java
index a183d402..165ca210 100644
--- a/src/main/java/org/apache/commons/jexl3/JexlBuilder.java
+++ b/src/main/java/org/apache/commons/jexl3/JexlBuilder.java
@@ -93,7 +93,7 @@ public class JexlBuilder {
      * Sets the default permissions.
      * @param permissions the permissions
      */
-    public static void setDefaultPermissions(JexlPermissions permissions) {
+    public static void setDefaultPermissions(final JexlPermissions 
permissions) {
         PERMISSIONS = permissions == null? JexlPermissions.RESTRICTED : 
permissions;
     }
 
diff --git a/src/main/java/org/apache/commons/jexl3/JexlContext.java 
b/src/main/java/org/apache/commons/jexl3/JexlContext.java
index 91648421..4eb810cb 100644
--- a/src/main/java/org/apache/commons/jexl3/JexlContext.java
+++ b/src/main/java/org/apache/commons/jexl3/JexlContext.java
@@ -207,7 +207,7 @@ public interface JexlContext {
          * @param value the value
          * @since 3.3
          */
-        default void processPragma(JexlOptions opts, String key, Object value) 
{
+        default void processPragma(final JexlOptions opts, final String key, 
final Object value) {
             processPragma(key, value);
         }
     }
diff --git a/src/main/java/org/apache/commons/jexl3/JexlException.java 
b/src/main/java/org/apache/commons/jexl3/JexlException.java
index 0bf9ef60..c0c69e7c 100644
--- a/src/main/java/org/apache/commons/jexl3/JexlException.java
+++ b/src/main/java/org/apache/commons/jexl3/JexlException.java
@@ -81,7 +81,7 @@ public class JexlException extends RuntimeException {
      * @param cause the exception causing the error
      * @param trace whether this exception has a stacktrace and can 
<em>not</em> be suppressed
      */
-    protected JexlException(final JexlNode node, final String msg, final 
Throwable cause, boolean trace) {
+    protected JexlException(final JexlNode node, final String msg, final 
Throwable cause, final boolean trace) {
         super(msg != null ? msg : "", unwrap(cause), !trace, trace);
         if (node != null) {
             mark = node;
@@ -236,8 +236,8 @@ public class JexlException extends RuntimeException {
      * @return the message
      */
     protected String detailedMessage() {
-        Class<? extends JexlException> clazz = getClass();
-        String name = clazz == JexlException.class? "JEXL" : 
clazz.getSimpleName().toLowerCase();
+        final Class<? extends JexlException> clazz = getClass();
+        final String name = clazz == JexlException.class? "JEXL" : 
clazz.getSimpleName().toLowerCase();
         return name + " error : " + getDetail();
     }
 
@@ -990,7 +990,7 @@ public class JexlException extends RuntimeException {
      */
     public static class Cancel extends JexlException {
         /**
-         * 
+         *
          */
         private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/org/apache/commons/jexl3/JexlOptions.java 
b/src/main/java/org/apache/commons/jexl3/JexlOptions.java
index 009bb2e3..c889e468 100644
--- a/src/main/java/org/apache/commons/jexl3/JexlOptions.java
+++ b/src/main/java/org/apache/commons/jexl3/JexlOptions.java
@@ -130,9 +130,9 @@ public final class JexlOptions {
      * @param flags the flags to set
      * @return the flag mask updated
      */
-    public static int parseFlags(int initial, final String...flags) {
+    public static int parseFlags(final int initial, final String... flags) {
         int mask = initial;
-        for(String flag : flags) {
+        for (final String flag : flags) {
             boolean b = true;
             final String name;
             if (flag.charAt(0) == '+') {
@@ -143,7 +143,7 @@ public final class JexlOptions {
             } else {
                 name = flag;
             }
-            for(int f = 0; f < NAMES.length; ++f) {
+            for (int f = 0; f < NAMES.length; ++f) {
                 if (NAMES[f].equals(name)) {
                     if (b) {
                         mask |= (1 << f);
@@ -439,7 +439,7 @@ public final class JexlOptions {
     }
 
     @Override public String toString() {
-        StringBuilder strb = new StringBuilder();
+        final StringBuilder strb = new StringBuilder();
         for(int i = 0; i < NAMES.length; ++i) {
             if (i > 0) {
                 strb.append(' ');
diff --git a/src/main/java/org/apache/commons/jexl3/internal/Closure.java 
b/src/main/java/org/apache/commons/jexl3/internal/Closure.java
index ced91c16..0c6a2376 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/Closure.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/Closure.java
@@ -39,7 +39,7 @@ public class Closure extends Script {
     protected Closure(final Interpreter theCaller, final ASTJexlLambda lambda) 
{
         super(theCaller.jexl, null, lambda);
         frame = lambda.createFrame(theCaller.frame);
-        JexlOptions callerOptions = theCaller.options;
+        final JexlOptions callerOptions = theCaller.options;
         options = callerOptions != null ? callerOptions.copy() :  null;
     }
 
diff --git a/src/main/java/org/apache/commons/jexl3/internal/Debugger.java 
b/src/main/java/org/apache/commons/jexl3/internal/Debugger.java
index b8892a9b..80b56699 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/Debugger.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/Debugger.java
@@ -83,11 +83,11 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
      * @param node the node
      * @return the features or null
      */
-    protected JexlFeatures getFeatures(JexlNode node) {
+    protected JexlFeatures getFeatures(final JexlNode node) {
         JexlNode walk = node;
         while(walk != null) {
             if (walk instanceof ASTJexlScript) {
-                ASTJexlScript script = (ASTJexlScript) walk;
+                final ASTJexlScript script = (ASTJexlScript) walk;
                 return script.getFeatures();
             }
             walk = walk.jjtGetParent();
@@ -99,8 +99,8 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
      * Sets the arrow style (fat or thin) depending on features.
      * @param node the node to start seeking features from.
      */
-    protected void setArrowSymbol(JexlNode node) {
-        JexlFeatures features = getFeatures(node);
+    protected void setArrowSymbol(final JexlNode node) {
+        final JexlFeatures features = getFeatures(node);
         if (features != null && features.supportsFatArrow() && 
!features.supportsThinArrow()) {
             arrow = "=>";
         } else {
@@ -115,7 +115,7 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
      */
     public boolean debug(final JexlExpression jscript) {
         if (jscript instanceof Script) {
-            Script script = (Script) jscript;
+            final Script script = (Script) jscript;
             return debug(script.script);
         }
         return false;
@@ -128,7 +128,7 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
      */
     public boolean debug(final JexlScript jscript) {
         if (jscript instanceof Script) {
-            Script script = (Script) jscript;
+            final Script script = (Script) jscript;
             return debug(script.script);
         }
         return false;
@@ -217,7 +217,7 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
      * @param flag turn on or off
      * @return this debugger instance
      */
-    public Debugger outputPragmas(boolean flag) {
+    public Debugger outputPragmas(final boolean flag) {
         this.outputPragmas = flag;
         return this;
     }
@@ -289,7 +289,7 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
      * @param child the node
      * @return true if node is a statement
      */
-    private static boolean isStatement(JexlNode child) {
+    private static boolean isStatement(final JexlNode child) {
         return child instanceof ASTJexlScript
                 || child instanceof ASTBlock
                 || child instanceof ASTIfStatement
@@ -304,9 +304,9 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
      * @param cs the string
      * @return true if a semicolumn is the last non-whitespace character
      */
-    private static boolean semicolTerminated(CharSequence cs) {
+    private static boolean semicolTerminated(final CharSequence cs) {
         for(int i = cs.length() - 1; i >= 0; --i) {
-            char c = cs.charAt(i);
+            final char c = cs.charAt(i);
             if (c == ';') {
                 return true;
             }
@@ -784,7 +784,7 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
         return p;
     }
 
-    private static  boolean isLambdaExpr(ASTJexlLambda lambda) {
+    private static  boolean isLambdaExpr(final ASTJexlLambda lambda) {
         return lambda.jjtGetNumChildren() == 1 && 
!isStatement(lambda.jjtGetChild(0));
     }
 
@@ -793,13 +793,13 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
      * @param builder where to stringify
      * @param pragmas the pragmas, may be null
      */
-    private static void writePragmas(StringBuilder builder, Map<String, 
Object> pragmas) {
+    private static void writePragmas(final StringBuilder builder, final 
Map<String, Object> pragmas) {
         if (pragmas != null) {
-            for (Map.Entry<String, Object> pragma : pragmas.entrySet()) {
-                String key = pragma.getKey();
-                Object value = pragma.getValue();
-                Set<Object> values = value instanceof Set ? (Set) value : 
Collections.singleton(value);
-                for (Object pragmaValue : values) {
+            for (final Map.Entry<String, Object> pragma : pragmas.entrySet()) {
+                final String key = pragma.getKey();
+                final Object value = pragma.getValue();
+                final Set<Object> values = value instanceof Set ? (Set) value 
: Collections.singleton(value);
+                for (final Object pragmaValue : values) {
                     builder.append("#pragma ");
                     builder.append(key);
                     builder.append(' ');
@@ -812,7 +812,7 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
     }
 
     @Override
-    protected Object visit(final ASTJexlScript node, Object arg) {
+    protected Object visit(final ASTJexlScript node, final Object arg) {
         if (outputPragmas) {
             writePragmas(builder, node.getPragmas());
         }
@@ -823,13 +823,13 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
             final ASTJexlLambda lambda = (ASTJexlLambda) node;
             final JexlNode parent = node.jjtGetParent();
             // use lambda syntax if not assigned
-            boolean expr = isLambdaExpr(lambda);
+            final boolean expr = isLambdaExpr(lambda);
             named = node.jjtGetChild(0) instanceof ASTVar;
             final boolean assigned = parent instanceof ASTAssignment || named;
             if (assigned && !expr) {
                 builder.append("function");
                 if (named) {
-                    ASTVar avar = (ASTVar) node.jjtGetChild(0);
+                    final ASTVar avar = (ASTVar) node.jjtGetChild(0);
                     builder.append(' ');
                     builder.append(avar.getName());
                 }
@@ -837,14 +837,14 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
             builder.append('(');
             final String[] params = lambda.getParameters();
             if (params != null ) {
-                Scope scope = lambda.getScope();
-                LexicalScope lexicalScope = lambda.getLexicalScope();
+                final Scope scope = lambda.getScope();
+                final LexicalScope lexicalScope = lambda.getLexicalScope();
                 for (int p = 0; p < params.length; ++p) {
                     if (p > 0) {
                         builder.append(", ");
                     }
-                    String param = params[p];
-                    int symbol = scope.getSymbol(param);
+                    final String param = params[p];
+                    final int symbol = scope.getSymbol(param);
                     if (lexicalScope.isConstant(symbol)) {
                         builder.append("const ");
                     } else if (scope.isLexical(symbol)) {
@@ -933,7 +933,7 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
         final int num = node.jjtGetNumChildren();
         builder.append("new");
         if (num > 0) {
-            JexlNode c0 = node.jjtGetChild(0);
+            final JexlNode c0 = node.jjtGetChild(0);
             boolean first = true;
             if (c0 instanceof ASTQualifiedIdentifier) {
                 builder.append(' ');
@@ -1076,26 +1076,26 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
     }
 
     @Override
-    protected Object visit(ASTQualifiedIdentifier node, Object data) {
-        String img = node.getName();
+    protected Object visit(final ASTQualifiedIdentifier node, final Object 
data) {
+        final String img = node.getName();
         return this.check(node, img, data);
     }
 
     @Override
-    protected Object visit(ASTStringLiteral node, Object data) {
-        String img = StringParser.escapeString(node.getLiteral(), '\'');
+    protected Object visit(final ASTStringLiteral node, final Object data) {
+        final String img = StringParser.escapeString(node.getLiteral(), '\'');
         return this.check(node, img, data);
     }
 
     @Override
-    protected Object visit(ASTJxltLiteral node, Object data) {
-        String img = StringParser.escapeString(node.getLiteral(), '`');
+    protected Object visit(final ASTJxltLiteral node, final Object data) {
+        final String img = StringParser.escapeString(node.getLiteral(), '`');
         return this.check(node, img, data);
     }
 
     @Override
     protected Object visit(final ASTRegexLiteral node, final Object data) {
-        String img = StringParser.escapeString(node.toString(), '/');
+        final String img = StringParser.escapeString(node.toString(), '/');
         return check(node, "~" + img, data);
     }
 
@@ -1160,18 +1160,18 @@ public class Debugger extends ParserVisitor implements 
JexlInfo.Detail {
             accept(node.jjtGetChild(0), data);
             for (int i = 1; i < num; ++i) {
                 builder.append(", ");
-                JexlNode child = node.jjtGetChild(i);
+                final JexlNode child = node.jjtGetChild(i);
                 if (child instanceof ASTAssignment) {
-                    ASTAssignment assign = (ASTAssignment) child;
-                    int nc = assign.jjtGetNumChildren();
-                    ASTVar var = (ASTVar) assign.jjtGetChild(0);
+                    final ASTAssignment assign = (ASTAssignment) child;
+                    final int nc = assign.jjtGetNumChildren();
+                    final ASTVar var = (ASTVar) assign.jjtGetChild(0);
                     builder.append(var.getName());
                     if (nc > 1) {
                         builder.append(" = ");
                         accept(assign.jjtGetChild(1), data);
                     }
                 } else if (child instanceof ASTVar) {
-                    ASTVar var = (ASTVar) child;
+                    final ASTVar var = (ASTVar) child;
                     builder.append(var.getName());
                 } else {
                     // that's odd
diff --git a/src/main/java/org/apache/commons/jexl3/internal/Engine.java 
b/src/main/java/org/apache/commons/jexl3/internal/Engine.java
index 2e384983..c27d88a6 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/Engine.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/Engine.java
@@ -434,10 +434,10 @@ public class Engine extends JexlEngine {
                     }
                 }  else if (PRAGMA_IMPORT.equals(key)) {
                     // jexl.import, may use a set
-                    Set<?> values = value instanceof Set<?>
+                    final Set<?> values = value instanceof Set<?>
                             ? (Set<?>) value
                             : Collections.singleton(value);
-                    for (Object o : values) {
+                    for (final Object o : values) {
                         if (o instanceof String) {
                             if (is == null) {
                                 is = new LinkedHashSet<>();
@@ -454,7 +454,7 @@ public class Engine extends JexlEngine {
                                 ns = new HashMap<>(functions);
                             }
                             final String nsclass = value.toString();
-                            Class<?> clazz = uberspect.getClassByName(nsclass);
+                            final Class<?> clazz = 
uberspect.getClassByName(nsclass);
                             if (clazz == null) {
                                 logger.warn(key + ": unable to find class " + 
nsclass);
                             } else {
@@ -515,7 +515,7 @@ public class Engine extends JexlEngine {
      * Creates a template interpreter.
      * @param args the template interpreter arguments
      */
-    protected Interpreter 
createTemplateInterpreter(TemplateInterpreter.Arguments args) {
+    protected Interpreter createTemplateInterpreter(final 
TemplateInterpreter.Arguments args) {
         return new TemplateInterpreter(args);
     }
 
@@ -554,7 +554,7 @@ public class Engine extends JexlEngine {
     }
 
     @Override
-    public Object getProperty(JexlContext context, final Object bean, final 
String expr) {
+    public Object getProperty(final JexlContext context, final Object bean, 
final String expr) {
         // synthesize expr using register
         String src = trimSource(expr);
         src = "#0" + (src.charAt(0) == '[' ? "" : ".") + src;
@@ -582,7 +582,7 @@ public class Engine extends JexlEngine {
     }
 
     @Override
-    public void setProperty(JexlContext context, final Object bean, final 
String expr, final Object value) {
+    public void setProperty(final JexlContext context, final Object bean, 
final String expr, final Object value) {
         // synthesize expr using register
         String src = trimSource(expr);
         src = "#0" + (src.charAt(0) == '[' ? "" : ".") + src + "=" + "#1";
@@ -904,7 +904,7 @@ public class Engine extends JexlEngine {
      */
     protected ASTJexlScript parse(final JexlInfo info, final JexlFeatures 
parsingf, final String src, final Scope scope) {
         final boolean cached = src.length() < cacheThreshold && cache != null;
-        JexlFeatures features = parsingf != null? parsingf : DEFAULT_FEATURES;
+        final JexlFeatures features = parsingf != null? parsingf : 
DEFAULT_FEATURES;
        // if (features.getNameSpaces().isEmpty() && !functions.isEmpty()) {
        //     features = new 
JexlFeatures(features).nameSpaces(functions.keySet());
        // }
diff --git a/src/main/java/org/apache/commons/jexl3/internal/Engine32.java 
b/src/main/java/org/apache/commons/jexl3/internal/Engine32.java
index f478c8ec..45a1dff9 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/Engine32.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/Engine32.java
@@ -39,7 +39,6 @@ public class Engine32 extends Engine {
     }
 
     public Engine32() {
-        super();
     }
 
     /**
@@ -48,7 +47,7 @@ public class Engine32 extends Engine {
      * @param node the node
      * @return true if node is navigation-safe, false otherwise
      */
-    static boolean isTernaryProtected(Interpreter ii, JexlNode node) {
+    static boolean isTernaryProtected(final Interpreter ii, JexlNode node) {
         for (JexlNode walk = node.jjtGetParent(); walk != null; walk = 
walk.jjtGetParent()) {
             // protect only the condition part of the ternary
             if (walk instanceof ASTTernaryNode
@@ -73,24 +72,24 @@ public class Engine32 extends Engine {
      * @param identifier the variable identifier
      * @return the variable value
      */
-    static Object getVariable(Interpreter ii, Frame frame, LexicalScope block, 
ASTIdentifier identifier) {
-        int symbol = identifier.getSymbol();
+    static Object getVariable(final Interpreter ii, final Frame frame, final 
LexicalScope block, final ASTIdentifier identifier) {
+        final int symbol = identifier.getSymbol();
         // if we have a symbol, we have a scope thus a frame
         if ((ii.options.isLexicalShade() || identifier.isLexical()) && 
identifier.isShaded()) {
             return ii.undefinedVariable(identifier, identifier.getName());
         }
         if (symbol >= 0) {
             if (frame.has(symbol)) {
-                Object value = frame.get(symbol);
+                final Object value = frame.get(symbol);
                 if (value != Scope.UNDEFINED) {
                     return value;
                 }
             }
         }
-        String name = identifier.getName();
-        Object value = ii.context.get(name);
+        final String name = identifier.getName();
+        final Object value = ii.context.get(name);
         if (value == null && !ii.context.has(name)) {
-            boolean ignore = (ii.isSafe()
+            final boolean ignore = (ii.isSafe()
                     && (symbol >= 0
                     || identifier.jjtGetParent() instanceof ASTAssignment))
                     || (identifier.jjtGetParent() instanceof ASTReference);
@@ -105,37 +104,37 @@ public class Engine32 extends Engine {
     protected Interpreter createInterpreter(final JexlContext context, final 
Frame frame, final JexlOptions opts) {
         return new Interpreter(this, opts, context, frame) {
             @Override
-            protected boolean isStrictOperand(JexlNode node) {
+            protected boolean isStrictOperand(final JexlNode node) {
                 return false;
             }
 
             @Override
-            protected boolean isTernaryProtected( JexlNode node) {
+            protected boolean isTernaryProtected( final JexlNode node) {
                 return Engine32.isTernaryProtected(this, node);
             }
 
             @Override
-            protected Object getVariable(Frame frame, LexicalScope block, 
ASTIdentifier identifier) {
+            protected Object getVariable(final Frame frame, final LexicalScope 
block, final ASTIdentifier identifier) {
                 return Engine32.getVariable(this, frame, block, identifier);
             }
         };
     }
 
     @Override
-    protected Interpreter 
createTemplateInterpreter(TemplateInterpreter.Arguments args) {
+    protected Interpreter createTemplateInterpreter(final 
TemplateInterpreter.Arguments args) {
         return new TemplateInterpreter(args) {
             @Override
-            protected boolean isStrictOperand(JexlNode node) {
+            protected boolean isStrictOperand(final JexlNode node) {
                 return false;
             }
 
             @Override
-            protected boolean isTernaryProtected( JexlNode node) {
+            protected boolean isTernaryProtected( final JexlNode node) {
                 return Engine32.isTernaryProtected(this, node);
             }
 
             @Override
-            protected Object getVariable(Frame frame, LexicalScope block, 
ASTIdentifier identifier) {
+            protected Object getVariable(final Frame frame, final LexicalScope 
block, final ASTIdentifier identifier) {
                 return Engine32.getVariable(this, frame, block, identifier);
             }
         };
diff --git a/src/main/java/org/apache/commons/jexl3/internal/FqcnResolver.java 
b/src/main/java/org/apache/commons/jexl3/internal/FqcnResolver.java
index 10cf0e0c..dd8907a7 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/FqcnResolver.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/FqcnResolver.java
@@ -58,7 +58,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
      * Adds a collection of packages as import root, checks the names are one 
of a package.
      * @param names the package names
      */
-    private void importCheck(Iterable<String> names) {
+    private void importCheck(final Iterable<String> names) {
         if (names != null) {
             names.forEach(this::importCheck);
         }
@@ -68,7 +68,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
      * Adds a package as import root, checks the name if one of a package.
      * @param name the package name
      */
-    private void importCheck(String name) {
+    private void importCheck(final String name) {
         // check the package name actually points to a package to avoid clutter
         if (name != null && Package.getPackage(name) != null) {
             imports.add(name);
@@ -76,7 +76,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
     }
 
     @Override
-    public String resolveClassName(String name) {
+    public String resolveClassName(final String name) {
         return getQualifiedName(name);
     }
 
@@ -86,7 +86,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
      * @param uber   the optional class loader
      * @param packages the optional package names
      */
-    FqcnResolver(JexlUberspect uber, Iterable<String> packages) {
+    FqcnResolver(final JexlUberspect uber, final Iterable<String> packages) {
         this.uberspect = uber;
         this.parent = null;
         importCheck(packages);
@@ -98,7 +98,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
      * @param solver the parent solver
      * @throws NullPointerException if parent solver is null
      */
-    FqcnResolver(FqcnResolver solver) {
+    FqcnResolver(final FqcnResolver solver) {
         if (solver == null) {
             throw new NullPointerException("parent solver can not be null");
         }
@@ -112,7 +112,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
      * @param pkg the package name
      * @return true if an import exists for this package, false otherwise
      */
-    boolean isImporting(String pkg) {
+    boolean isImporting(final String pkg) {
         if (parent != null && parent.isImporting(pkg)) {
             return true;
         }
@@ -130,7 +130,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
      * @param packages the packages
      * @return this solver
      */
-    FqcnResolver importPackages(Iterable<String> packages) {
+    FqcnResolver importPackages(final Iterable<String> packages) {
         if (packages != null) {
             lock.writeLock().lock();
             try {
@@ -152,7 +152,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
      * @param name the simple name
      * @return the fqcn
      */
-    String getQualifiedName(String name) {
+    String getQualifiedName(final String name) {
         String fqcn;
         if (parent != null && (fqcn = parent.getQualifiedName(name)) != null) {
             return  fqcn;
@@ -165,11 +165,11 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
         }
         if (fqcn == null) {
             final ClassLoader loader = uberspect.getClassLoader();
-            for (String pkg : imports) {
+            for (final String pkg : imports) {
                 Class<?> clazz;
                 try {
                     clazz = loader.loadClass(pkg + "." + name);
-                } catch (ClassNotFoundException e) {
+                } catch (final ClassNotFoundException e) {
                     // not in this package
                     continue;
                 }
diff --git a/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java 
b/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java
index ae9cb89d..3487c373 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java
@@ -540,7 +540,7 @@ public class Interpreter extends InterpreterBase {
         }
     }
 
-    private boolean testPredicate(JexlNode node, Object condition) {
+    private boolean testPredicate(final JexlNode node, final Object condition) 
{
         final Object predicate = operators.tryOverload(node, 
JexlOperator.CONDITION, condition);
         return  arithmetic.testPredicate(predicate != JexlEngine.TRY_FAILED? 
predicate : condition);
     }
@@ -665,7 +665,7 @@ public class Interpreter extends InterpreterBase {
                 return null;
             }
             /* last child node is the statement to execute */
-            int numChildren = node.jjtGetNumChildren();
+            final int numChildren = node.jjtGetNumChildren();
             final JexlNode statement = numChildren >= 3 ? 
node.jjtGetChild(numChildren - 1) : null;
             // get an iterator for the collection/array etc via the 
introspector.
             forEach = operators.tryOverload(node, JexlOperator.FOR_EACH, 
iterableValue);
@@ -719,15 +719,15 @@ public class Interpreter extends InterpreterBase {
     private Object forLoop(final ASTForeachStatement node, final Object data) {
         Object result = null;
         int nc;
-        int form = node.getLoopForm();
+        final int form = node.getLoopForm();
         final LexicalFrame locals;
         /* first child node might be the loop variable */
         if ((form & 1) != 0) {
             nc = 1;
-            JexlNode init = node.jjtGetChild(0);
+            final JexlNode init = node.jjtGetChild(0);
             ASTVar loopVariable = null;
             if (init instanceof ASTAssignment) {
-                JexlNode child = init.jjtGetChild(0);
+                final JexlNode child = init.jjtGetChild(0);
                 if (child instanceof ASTVar) {
                     loopVariable = (ASTVar) child;
                 }
@@ -1076,13 +1076,13 @@ public class Interpreter extends InterpreterBase {
     @Override
     protected Object visit(final ASTJexlScript script, final Object data) {
         if (script instanceof ASTJexlLambda && !((ASTJexlLambda) 
script).isTopLevel()) {
-            Closure closure = new Closure(this, (ASTJexlLambda) script);
+            final Closure closure = new Closure(this, (ASTJexlLambda) script);
             // if the function is named, assign in the local frame
-            JexlNode child0 = script.jjtGetChild(0);
+            final JexlNode child0 = script.jjtGetChild(0);
             if (child0 instanceof ASTVar) {
-                ASTVar var = (ASTVar) child0;
+                final ASTVar var = (ASTVar) child0;
                 this.visit(var, data);
-                int symbol = var.getSymbol();
+                final int symbol = var.getSymbol();
                 frame.set(symbol, closure);
                 // make the closure accessible to itself, ie capture the 
currently set variable after frame creation
                 closure.setCaptured(symbol, closure);
@@ -1137,7 +1137,7 @@ public class Interpreter extends InterpreterBase {
 
     @Override
     protected Object visit(final ASTQualifiedIdentifier node, final Object 
data) {
-        String name = node.getName();
+        final String name = node.getName();
         // try with local solver
         String fqcn = fqcnSolver.resolveClassName(name);
         if (fqcn != null) {
@@ -1145,7 +1145,7 @@ public class Interpreter extends InterpreterBase {
         }
         // context may be solving class name ?
         if (context instanceof JexlContext.ClassNameResolver) {
-            JexlContext.ClassNameResolver resolver = 
(JexlContext.ClassNameResolver) context;
+            final JexlContext.ClassNameResolver resolver = 
(JexlContext.ClassNameResolver) context;
             fqcn = resolver.resolveClassName(name);
             if (fqcn != null) {
                 return fqcn;
@@ -1813,7 +1813,7 @@ public class Interpreter extends InterpreterBase {
                 narrow = true;
                 // continue;
             }
-        } catch (JexlException.Method xmethod) {
+        } catch (final JexlException.Method xmethod) {
             // ignore and handle at end; treat as an inner discover that fails
         } catch (final JexlException.TryFailed xany) {
             throw invocationException(node, methodName, xany);
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/InterpreterBase.java 
b/src/main/java/org/apache/commons/jexl3/internal/InterpreterBase.java
index c5f948b5..69f479c0 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/InterpreterBase.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/InterpreterBase.java
@@ -24,6 +24,7 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.commons.jexl3.JexlArithmetic;
 import org.apache.commons.jexl3.JexlContext;
+import org.apache.commons.jexl3.JexlContext.NamespaceFunctor;
 import org.apache.commons.jexl3.JexlEngine;
 import org.apache.commons.jexl3.JexlException;
 import org.apache.commons.jexl3.JexlException.VariableIssue;
@@ -71,7 +72,7 @@ public abstract class InterpreterBase extends ParserVisitor {
     /** Cancellation support. */
     protected final AtomicBoolean cancelled;
     /** Empty parameters for method matching. */
-    protected static final Object[] EMPTY_PARAMS = new Object[0];
+    protected static final Object[] EMPTY_PARAMS = {};
     /** The namespace resolver. */
     protected final JexlContext.NamespaceResolver ns;
     /** The class name resolver. */
@@ -118,7 +119,7 @@ public abstract class InterpreterBase extends ParserVisitor 
{
         this.functors = null;
         this.operators = new Operators(this);
         // the import package facility
-        Collection<String> imports = options.getImports();
+        final Collection<String> imports = options.getImports();
         this.fqcnSolver = imports.isEmpty()
                 ? engine.classNameSolver
                 : new 
FqcnResolver(engine.classNameSolver).importPackages(imports);
@@ -167,7 +168,7 @@ public abstract class InterpreterBase extends ParserVisitor 
{
      * @param node the operand node
      * @return true if this node is an operand of a strict operator, false 
otherwise
      */
-    protected boolean isStrictOperand(JexlNode node) {
+    protected boolean isStrictOperand(final JexlNode node) {
        return node.jjtGetParent().isStrictOperator(arithmetic);
     }
 
@@ -211,7 +212,7 @@ public abstract class InterpreterBase extends ParserVisitor 
{
             }
             // attempt to reuse last cached constructor
             if (cached instanceof JexlContext.NamespaceFunctor) {
-                Object eval = ((JexlContext.NamespaceFunctor) 
cached).createFunctor(context);
+                final Object eval = ((JexlContext.NamespaceFunctor) 
cached).createFunctor(context);
                 if (JexlEngine.TRY_FAILED != eval) {
                     functor = eval;
                     namespace = cached;
@@ -235,14 +236,9 @@ public abstract class InterpreterBase extends 
ParserVisitor {
                                 // number of arguments to call it with.
                                 final Object ns = namespace;
                                 // make it a class (not a lambda!) so 
instanceof (see *2) will catch it
-                                namespace = new JexlContext.NamespaceFunctor() 
{
-                                    @Override
-                                    public Object createFunctor(JexlContext 
context) {
-                                        return withContext
-                                                ? ctor.tryInvoke(null, ns, 
context)
-                                                : ctor.tryInvoke(null, ns);
-                                    }
-                                };
+                                namespace = (NamespaceFunctor) context -> 
withContext
+                                        ? ctor.tryInvoke(null, ns, context)
+                                        : ctor.tryInvoke(null, ns);
                                 if (cacheable && ctor.isCacheable()) {
                                     nsNode.jjtSetValue(namespace);
                                 }
diff --git a/src/main/java/org/apache/commons/jexl3/internal/LexicalScope.java 
b/src/main/java/org/apache/commons/jexl3/internal/LexicalScope.java
index b81bb758..ea5bb31c 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/LexicalScope.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/LexicalScope.java
@@ -64,9 +64,9 @@ public class LexicalScope {
     /**
      * Frame copy ctor base.
      */
-    protected LexicalScope(LexicalScope other) {
+    protected LexicalScope(final LexicalScope other) {
         this.symbols = other.symbols;
-        BitSet otherMoreSymbols = other.moreSymbols;
+        final BitSet otherMoreSymbols = other.moreSymbols;
         this.moreSymbols = otherMoreSymbols != null ? (BitSet) 
otherMoreSymbols.clone() : null;
         this.count = other.count;
     }
diff --git a/src/main/java/org/apache/commons/jexl3/internal/Operators.java 
b/src/main/java/org/apache/commons/jexl3/internal/Operators.java
index 7a66a22a..e4be9e82 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/Operators.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/Operators.java
@@ -95,8 +95,8 @@ public class Operators {
      * @param args the operands
      * @throws JexlArithmetic.NullOperand if operator is strict and an operand 
is null
      */
-    protected void controlNullOperands(JexlArithmetic arithmetic, JexlOperator 
operator, Object...args) {
-        for (Object arg : args) {
+    protected void controlNullOperands(final JexlArithmetic arithmetic, final 
JexlOperator operator, final Object...args) {
+        for (final Object arg : args) {
             // only check operator if necessary
             if (arg == null) {
                 // check operator only once if it is not strict
@@ -121,7 +121,7 @@ public class Operators {
      * @param args     the arguments
      * @return the result of the operator evaluation or TRY_FAILED
      */
-    protected Object tryOverload(final JexlNode node, final JexlOperator 
operator, Object... args) {
+    protected Object tryOverload(final JexlNode node, final JexlOperator 
operator, final Object... args) {
         final JexlArithmetic arithmetic = interpreter.arithmetic;
         controlNullOperands(arithmetic, operator, args);
         if (operators != null && operators.overloads(operator)) {
@@ -158,7 +158,7 @@ public class Operators {
      * @param operator the operator
      * @return true if operator is a postfix operator (x++, y--)
      */
-    private static boolean isPostfix(JexlOperator operator) {
+    private static boolean isPostfix(final JexlOperator operator) {
         return operator == JexlOperator.GET_AND_INCREMENT || operator == 
JexlOperator.GET_AND_DECREMENT;
     }
 
@@ -169,7 +169,7 @@ public class Operators {
      * @param args the arguements (as seen by the interpreter)
      * @return the tidied arguments
      */
-    private Object[] arguments(JexlOperator operator, Object...args) {
+    private Object[] arguments(final JexlOperator operator, final 
Object...args) {
         return operator.getArity() == 1 && args.length > 1 ? new 
Object[]{args[0]} : args;
     }
 
diff --git a/src/main/java/org/apache/commons/jexl3/internal/Scope.java 
b/src/main/java/org/apache/commons/jexl3/internal/Scope.java
index 2951ff60..a82ce321 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/Scope.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/Scope.java
@@ -74,7 +74,7 @@ public final class Scope {
     /**
      * The empty string array.
      */
-    private static final String[] EMPTY_STRS = new String[0];
+    private static final String[] EMPTY_STRS = {};
 
     /**
      * Creates a new scope with a list of parameters.
@@ -158,7 +158,7 @@ public final class Scope {
      * @param s the symbol
      * @return true if the symbol was not already present in the lexical set
      */
-    public boolean addLexical(int s) {
+    public boolean addLexical(final int s) {
         if (lexicalVariables == null) {
             lexicalVariables = new LexicalScope();
         }
@@ -170,7 +170,7 @@ public final class Scope {
      * @param s the symbol
      * @return true if symbol was declared through let or const
      */
-    public boolean isLexical(int s) {
+    public boolean isLexical(final int s) {
         return lexicalVariables != null && s >= 0 && 
lexicalVariables.hasSymbol(s);
     }
 
diff --git a/src/main/java/org/apache/commons/jexl3/internal/ScriptVisitor.java 
b/src/main/java/org/apache/commons/jexl3/internal/ScriptVisitor.java
index 70f26f30..63a4db21 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/ScriptVisitor.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/ScriptVisitor.java
@@ -442,16 +442,16 @@ public class ScriptVisitor extends ParserVisitor {
     }
 
     @Override
-    protected Object visit(ASTGetDecrementNode node, Object data) { return 
visitNode(node, data); }
+    protected Object visit(final ASTGetDecrementNode node, final Object data) 
{ return visitNode(node, data); }
 
     @Override
-    protected Object visit(ASTGetIncrementNode node, Object data) { return 
visitNode(node, data); }
+    protected Object visit(final ASTGetIncrementNode node, final Object data) 
{ return visitNode(node, data); }
 
     @Override
-    protected Object visit(ASTDecrementGetNode node, Object data) { return 
visitNode(node, data); }
+    protected Object visit(final ASTDecrementGetNode node, final Object data) 
{ return visitNode(node, data); }
 
     @Override
-    protected Object visit(ASTIncrementGetNode node, Object data) { return 
visitNode(node, data); }
+    protected Object visit(final ASTIncrementGetNode node, final Object data) 
{ return visitNode(node, data); }
 
     @Override
     protected Object visit(final ASTSetShiftRightNode node, final Object data) 
{
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java 
b/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java
index 809bd62a..ebed2e41 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java
@@ -399,7 +399,7 @@ public final class TemplateEngine extends JxltEngine {
          * @param val    the constant value
          * @param source the source TemplateExpression if any
          */
-        ConstantExpression(Object val, final TemplateExpression source) {
+        ConstantExpression(final Object val, final TemplateExpression source) {
             super(source);
             if (val == null) {
                 throw new NullPointerException("constant can not be null");
@@ -690,8 +690,8 @@ public final class TemplateEngine extends JxltEngine {
 
 
     @Override
-    public JxltEngine.Expression createExpression(JexlInfo jexlInfo, final 
String expression) {
-        JexlInfo info = jexlInfo == null?  jexl.createInfo() : jexlInfo;
+    public JxltEngine.Expression createExpression(final JexlInfo jexlInfo, 
final String expression) {
+        final JexlInfo info = jexlInfo == null?  jexl.createInfo() : jexlInfo;
         Exception xuel = null;
         TemplateExpression stmt = null;
         try {
@@ -885,56 +885,60 @@ public final class TemplateEngine extends JxltEngine {
                     break;
                 case DEFERRED1: // #{...
                     // skip inner strings (for '}')
-                    if (c == '"' || c == '\'') {
+
+                    // nested immediate in deferred; need to balance count of 
'{' & '}'
+
+                    // closing '}'
+                    switch (c) {
+                case '"':
+                case '\'':
+                    strb.append(c);
+                    column = StringParser.readString(strb, expr, column + 1, 
c);
+                    continue;
+                case '{':
+                    if (expr.charAt(column - 1) == immediateChar) {
+                        inner1 += 1;
+                        strb.deleteCharAt(strb.length() - 1);
+                        nested = true;
+                    } else {
+                        deferred1 += 1;
                         strb.append(c);
-                        column = StringParser.readString(strb, expr, column + 
1, c);
-                        continue;
                     }
-                    // nested immediate in deferred; need to balance count of 
'{' & '}'
-                    if (c == '{') {
-                        if (expr.charAt(column - 1) == immediateChar) {
-                            inner1 += 1;
-                            strb.deleteCharAt(strb.length() - 1);
-                            nested = true;
+                    continue;
+                case '}':
+                    // balance nested immediate
+                    if (deferred1 > 0) {
+                        deferred1 -= 1;
+                        strb.append(c);
+                    } else if (inner1 > 0) {
+                        inner1 -= 1;
+                    } else  {
+                        // materialize the nested/deferred expr
+                        final String src = strb.toString();
+                        TemplateExpression dexpr;
+                        if (nested) {
+                            dexpr = new NestedExpression(
+                                    expr.substring(inested, column + 1),
+                                    jexl.parse(info.at(lineno, column), 
noscript, src, scope),
+                                    null);
                         } else {
-                            deferred1 += 1;
-                            strb.append(c);
-                        }
-                        continue;
-                    }
-                    // closing '}'
-                    if (c == '}') {
-                        // balance nested immediate
-                        if (deferred1 > 0) {
-                            deferred1 -= 1;
-                            strb.append(c);
-                        } else if (inner1 > 0) {
-                            inner1 -= 1;
-                        } else  {
-                            // materialize the nested/deferred expr
-                            final String src = strb.toString();
-                            TemplateExpression dexpr;
-                            if (nested) {
-                                dexpr = new NestedExpression(
-                                        expr.substring(inested, column + 1),
-                                        jexl.parse(info.at(lineno, column), 
noscript, src, scope),
-                                        null);
-                            } else {
-                                dexpr = new DeferredExpression(
-                                        strb.toString(),
-                                        jexl.parse(info.at(lineno, column), 
noscript, src, scope),
-                                        null);
-                            }
-                            builder.add(dexpr);
-                            strb.delete(0, Integer.MAX_VALUE);
-                            nested = false;
-                            state = ParseState.CONST;
+                            dexpr = new DeferredExpression(
+                                    strb.toString(),
+                                    jexl.parse(info.at(lineno, column), 
noscript, src, scope),
+                                    null);
                         }
-                    } else {
-                        // do buildup expr
-                        column = append(strb, expr, column, c);
+                        builder.add(dexpr);
+                        strb.delete(0, Integer.MAX_VALUE);
+                        nested = false;
+                        state = ParseState.CONST;
                     }
                     break;
+                default:
+                    // do buildup expr
+                    column = append(strb, expr, column, c);
+                    break;
+                }
+                    break;
                 case ESCAPE:
                     if (c == deferredChar) {
                         strb.append(deferredChar);
@@ -1072,14 +1076,14 @@ public final class TemplateEngine extends JxltEngine {
      * @param pattern  the pattern to match at start of sequence
      * @return the first position after end of pattern if it matches, -1 
otherwise
      */
-    protected int startsWith(CharSequence sequence, final CharSequence 
pattern) {
+    protected int startsWith(final CharSequence sequence, final CharSequence 
pattern) {
         final int length = sequence.length();
         int s = 0;
         while (s < length && Character.isSpaceChar(sequence.charAt(s))) {
             s += 1;
         }
         if (s < length && pattern.length() <= (length - s)) {
-            CharSequence subSequence = sequence.subSequence(s, length);
+            final CharSequence subSequence = sequence.subSequence(s, length);
             if (subSequence.subSequence(0, pattern.length()).equals(pattern)) {
                 return s + pattern.length();
             }
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/TemplateInterpreter.java 
b/src/main/java/org/apache/commons/jexl3/internal/TemplateInterpreter.java
index 4c15a517..11bab2fc 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/TemplateInterpreter.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/TemplateInterpreter.java
@@ -225,7 +225,7 @@ public class TemplateInterpreter extends Interpreter {
      * @return the function evaluation result.
      */
     @Override
-    protected Object visit(final ASTFunctionNode node, Object data) {
+    protected Object visit(final ASTFunctionNode node, final Object data) {
         final int argc = node.jjtGetNumChildren();
         if (argc == 2) {
             final ASTIdentifier functionNode = (ASTIdentifier) 
node.jjtGetChild(0);
@@ -234,7 +234,7 @@ public class TemplateInterpreter extends Interpreter {
                 final ASTArguments argNode = (ASTArguments) 
node.jjtGetChild(1);
                 if ("print".equals(functionName)) {
                     // evaluate the arguments
-                    Object[] argv = visit(argNode, null);
+                    final Object[] argv = visit(argNode, null);
                     if (argv != null && argv.length > 0 && argv[0] instanceof 
Number) {
                         print(((Number) argv[0]).intValue());
                         return null;
@@ -245,7 +245,7 @@ public class TemplateInterpreter extends Interpreter {
                     Object[] argv = visit(argNode, null);
                     if (argv != null && argv.length > 0) {
                         if (argv[0] instanceof TemplateScript) {
-                            TemplateScript script = (TemplateScript) argv[0];
+                            final TemplateScript script = (TemplateScript) 
argv[0];
                             if (argv.length > 1) {
                                 argv = Arrays.copyOfRange(argv, 1, 
argv.length);
                             } else {
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/TemplateScript.java 
b/src/main/java/org/apache/commons/jexl3/internal/TemplateScript.java
index 9c8b9ea3..537dc555 100644
--- a/src/main/java/org/apache/commons/jexl3/internal/TemplateScript.java
+++ b/src/main/java/org/apache/commons/jexl3/internal/TemplateScript.java
@@ -66,7 +66,7 @@ public final class TemplateScript implements 
JxltEngine.Template {
      * @throws IllegalArgumentException if the directive prefix is invalid
      */
     public TemplateScript(final TemplateEngine engine,
-                          JexlInfo jexlInfo,
+                          final JexlInfo jexlInfo,
                           final String directive,
                           final Reader reader,
                           final String... parms) {
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/ClassMap.java 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/ClassMap.java
index ba68aaf0..78f0dd76 100644
--- 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/ClassMap.java
+++ 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/ClassMap.java
@@ -112,7 +112,7 @@ final class ClassMap {
             public Set<Entry<MethodKey, Method>> entrySet() {
                 return Collections.emptySet();
             }
-            @Override public Method get(Object name) {
+            @Override public Method get(final Object name) {
                 return CACHE_MISS;
             }
         });
@@ -242,7 +242,7 @@ final class ClassMap {
      * @param clazz          the class to cache
      * @param log            the Log
      */
-    private static void create(final ClassMap cache, final JexlPermissions 
permissions, Class<?> clazz, final Log log) {
+    private static void create(final ClassMap cache, final JexlPermissions 
permissions, final Class<?> clazz, final Log log) {
         //
         // Build a list of all elements in the class hierarchy. This one is 
bottom-first; we start
         // with the actual declaring class and its interfaces and then move up 
(superclass etc.) until we
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/ClassTool.java 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/ClassTool.java
index b4f93233..e3613005 100644
--- 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/ClassTool.java
+++ 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/ClassTool.java
@@ -37,7 +37,7 @@ class ClassTool {
         MethodHandle getPackageName = null;
         MethodHandle isExported = null;
         try {
-            Class<?> modulec = 
ClassTool.class.getClassLoader().loadClass("java.lang.Module");
+            final Class<?> modulec = 
ClassTool.class.getClassLoader().loadClass("java.lang.Module");
             if (modulec != null) {
                 getModule = LOOKUP.findVirtual(Class.class, "getModule", 
MethodType.methodType(modulec));
                 if (getModule != null) {
@@ -47,7 +47,7 @@ class ClassTool {
                     }
                 }
             }
-        } catch (Exception e) {
+        } catch (final Exception e) {
             // ignore all
         }
         GET_MODULE = getModule;
@@ -69,7 +69,7 @@ class ClassTool {
      * @param declarator the class
      * @return true if class is exported or no module support exists
      */
-    static boolean isExported(Class<?> declarator) {
+    static boolean isExported(final Class<?> declarator) {
         if (IS_EXPORTED != null) {
             try {
                 final Object module = GET_MODULE.invoke(declarator);
@@ -77,7 +77,7 @@ class ClassTool {
                     final String pkgName = (String) 
GET_PKGNAME.invoke(declarator);
                     return (Boolean) IS_EXPORTED.invoke(module, pkgName);
                 }
-            } catch (Throwable e) {
+            } catch (final Throwable e) {
                 // ignore
             }
         }
@@ -90,14 +90,14 @@ class ClassTool {
      * @param clz the class
      * @return the class package name
      */
-    static String getPackageName(Class<?> clz) {
+    static String getPackageName(final Class<?> clz) {
         String pkgName = "";
         if (clz != null) {
             // use native if we can
             if (GET_PKGNAME != null) {
                 try {
                     return (String) GET_PKGNAME.invoke(clz);
-                } catch (Throwable xany) {
+                } catch (final Throwable xany) {
                     return "";
                 }
             }
@@ -116,11 +116,11 @@ class ClassTool {
                 clazz = walk;
                 walk = walk.getEnclosingClass();
             }
-            Package pkg = clazz.getPackage();
+            final Package pkg = clazz.getPackage();
             // pkg may be null for unobvious reasons
             if (pkg == null) {
-                String name = clazz.getName();
-                int dot = name.lastIndexOf('.');
+                final String name = clazz.getName();
+                final int dot = name.lastIndexOf('.');
                 if (dot > 0) {
                     pkgName = name.substring(0, dot);
                 }
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/Introspector.java
 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/Introspector.java
index 0c029968..82945c47 100644
--- 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/Introspector.java
+++ 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/Introspector.java
@@ -116,7 +116,7 @@ public final class Introspector {
      */
     public Class<?> getClassByName(final String className) {
         try {
-            Class<?> clazz = Class.forName(className, false, loader);
+            final Class<?> clazz = Class.forName(className, false, loader);
             return permissions.allow(clazz)? clazz : null;
         } catch (final ClassNotFoundException xignore) {
             return null;
@@ -331,7 +331,7 @@ public final class Introspector {
      * <p>Also cleans the constructors and methods caches.</p>
      * @param classLoader the class loader; if null, use this instance class 
loader
      */
-    public void setLoader(ClassLoader classLoader) {
+    public void setLoader(final ClassLoader classLoader) {
         final ClassLoader previous = loader;
         final ClassLoader current = classLoader == null? 
getClass().getClassLoader() : classLoader;
         if (!current.equals(loader)) {
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/MethodExecutor.java
 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/MethodExecutor.java
index 0ecab6d3..61b80775 100644
--- 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/MethodExecutor.java
+++ 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/MethodExecutor.java
@@ -117,7 +117,7 @@ public final class MethodExecutor extends 
AbstractExecutor.Method {
      * to fit the method declaration.
      */
     @SuppressWarnings("SuspiciousSystemArraycopy")
-    private Object[] handleVarArg(Object[] args) {
+    private Object[] handleVarArg(final Object[] args) {
         final Class<?> vaclass = vaClass;
         final int vastart = vaStart;
         // variable arguments count
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/MethodKey.java 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/MethodKey.java
index 8abf9fa4..6695c5cf 100644
--- 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/MethodKey.java
+++ 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/MethodKey.java
@@ -55,7 +55,7 @@ public final class MethodKey {
     /** The parameters. */
     private final Class<?>[] params;
     /** A marker for empty parameter list. */
-    private static final Class<?>[] NOARGS = new Class<?>[0];
+    private static final Class<?>[] NOARGS = {};
     /** The hash code constants. */
     private static final int HASH = 37;
 
@@ -369,7 +369,7 @@ public final class MethodKey {
      * @return true if compatible, false otherwise
      */
     private static boolean isInvocationConvertible(
-            final Class<?> formal, Class<?> type, final boolean strict, final 
boolean possibleVarArg) {
+            final Class<?> formal, final Class<?> type, final boolean strict, 
final boolean possibleVarArg) {
         Class<?> actual = type;
         /* if it is a null, it means the arg was null */
         if (actual == null && !formal.isPrimitive()) {
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/Permissions.java
 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/Permissions.java
index d584d246..ff7e3eea 100644
--- 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/Permissions.java
+++ 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/Permissions.java
@@ -61,7 +61,7 @@ public class Permissions implements JexlPermissions {
          * Ctor.
          * @param map the map of NoJexl classes
          */
-        NoJexlPackage(Map<String, NoJexlClass> map) {
+        NoJexlPackage(final Map<String, NoJexlClass> map) {
             this.nojexl = map;
         }
 
@@ -75,15 +75,15 @@ public class Permissions implements JexlPermissions {
         boolean isEmpty() { return nojexl.isEmpty(); }
 
         @Override
-        public boolean equals(Object o) {
+        public boolean equals(final Object o) {
             return o == this;
         }
 
-        NoJexlClass getNoJexl(Class<?> clazz) {
+        NoJexlClass getNoJexl(final Class<?> clazz) {
             return nojexl.get(classKey(clazz));
         }
 
-        void addNoJexl(String key, NoJexlClass njc) {
+        void addNoJexl(final String key, final NoJexlClass njc) {
             nojexl.put(key, njc);
         }
     }
@@ -107,7 +107,7 @@ public class Permissions implements JexlPermissions {
      */
     static String classKey(final Class<?> clazz, final StringBuilder strb) {
         StringBuilder keyb = strb;
-        Class<?> outer = clazz.getEnclosingClass();
+        final Class<?> outer = clazz.getEnclosingClass();
         if (outer != null) {
             if (keyb == null) {
                 keyb = new StringBuilder();
@@ -131,7 +131,7 @@ public class Permissions implements JexlPermissions {
         // the NoJexl field names
         protected Set<String> fieldNames;
 
-        NoJexlClass(Set<String> methods, Set<String> fields) {
+        NoJexlClass(final Set<String> methods, final Set<String> fields) {
             methodNames = methods;
             fieldNames = fields;
         }
@@ -142,59 +142,59 @@ public class Permissions implements JexlPermissions {
             this(new HashSet<>(), new HashSet<>());
         }
 
-        boolean deny(Field field) {
+        boolean deny(final Field field) {
             return fieldNames.contains(field.getName());
         }
 
-        boolean deny(Method method) {
+        boolean deny(final Method method) {
             return methodNames.contains(method.getName());
         }
 
-        boolean deny(Constructor<?> method) {
+        boolean deny(final Constructor<?> method) {
             return 
methodNames.contains(method.getDeclaringClass().getSimpleName());
         }
     }
 
     /** Marker for whole NoJexl class. */
     static final NoJexlClass NOJEXL_CLASS = new 
NoJexlClass(Collections.emptySet(), Collections.emptySet()) {
-        @Override boolean deny(Field field) {
+        @Override boolean deny(final Field field) {
             return true;
         }
 
-        @Override boolean deny(Method method) {
+        @Override boolean deny(final Method method) {
             return true;
         }
 
-        @Override boolean deny(Constructor<?> method) {
+        @Override boolean deny(final Constructor<?> method) {
             return true;
         }
     };
 
     /** Marker for allowed class. */
     static final NoJexlClass JEXL_CLASS = new 
NoJexlClass(Collections.emptySet(), Collections.emptySet()) {
-        @Override boolean deny(Field field) {
+        @Override boolean deny(final Field field) {
             return false;
         }
 
-        @Override  boolean deny(Method method) {
+        @Override  boolean deny(final Method method) {
             return false;
         }
 
-        @Override boolean deny(Constructor<?> method) {
+        @Override boolean deny(final Constructor<?> method) {
             return false;
         }
     };
 
     /** Marker for @NoJexl package. */
     static final NoJexlPackage NOJEXL_PACKAGE = new 
NoJexlPackage(Collections.emptyMap()) {
-        @Override NoJexlClass getNoJexl(Class<?> clazz) {
+        @Override NoJexlClass getNoJexl(final Class<?> clazz) {
             return NOJEXL_CLASS;
         }
     };
 
     /** Marker for fully allowed package. */
     static final NoJexlPackage JEXL_PACKAGE = new 
NoJexlPackage(Collections.emptyMap()) {
-        @Override NoJexlClass getNoJexl(Class<?> clazz) {
+        @Override NoJexlClass getNoJexl(final Class<?> clazz) {
             return JEXL_CLASS;
         }
     };
@@ -218,7 +218,7 @@ public class Permissions implements JexlPermissions {
      * @param perimeter the allowed wildcard set of packages
      * @param nojexl the NoJexl external map
      */
-    protected Permissions(Set<String> perimeter, Map<String, NoJexlPackage> 
nojexl) {
+    protected Permissions(final Set<String> perimeter, final Map<String, 
NoJexlPackage> nojexl) {
         this.allowed = perimeter;
         this.packages = nojexl;
     }
@@ -247,8 +247,8 @@ public class Permissions implements JexlPermissions {
      * @param packageName the package name
      * @return the package constraints instance, not-null.
      */
-    private NoJexlPackage getNoJexlPackage(String packageName) {
-        NoJexlPackage njp = packages.get(packageName);
+    private NoJexlPackage getNoJexlPackage(final String packageName) {
+        final NoJexlPackage njp = packages.get(packageName);
         return njp != null? njp : JEXL_PACKAGE;
     }
 
@@ -258,11 +258,11 @@ public class Permissions implements JexlPermissions {
      * @param clazz the class
      * @return the class constraints instance, not-null.
      */
-    private NoJexlClass getNoJexl(Class<?> clazz) {
-        String pkgName = ClassTool.getPackageName(clazz);
-        NoJexlPackage njp = getNoJexlPackage(pkgName);
+    private NoJexlClass getNoJexl(final Class<?> clazz) {
+        final String pkgName = ClassTool.getPackageName(clazz);
+        final NoJexlPackage njp = getNoJexlPackage(pkgName);
         if (njp != null) {
-            NoJexlClass njc = njp.getNoJexl(clazz);
+            final NoJexlClass njc = njp.getNoJexl(clazz);
             if (njc != null) {
                 return njc;
             }
@@ -275,7 +275,7 @@ public class Permissions implements JexlPermissions {
      * @param clazz the package name (not null)
      * @return true if allowed, false otherwise
      */
-    private boolean wildcardAllow(Class<?> clazz) {
+    private boolean wildcardAllow(final Class<?> clazz) {
         return wildcardAllow(allowed, ClassTool.getPackageName(clazz));
     }
 
@@ -285,7 +285,7 @@ public class Permissions implements JexlPermissions {
      * @param name the package name (not null)
      * @return true if allowed, false otherwise
      */
-    static boolean wildcardAllow(Set<String> allowed, String name) {
+    static boolean wildcardAllow(final Set<String> allowed, final String name) 
{
         // allowed packages are explicit in this case
         boolean found = allowed == null || allowed.isEmpty() || 
allowed.contains(name);
         if (!found) {
@@ -303,7 +303,7 @@ public class Permissions implements JexlPermissions {
      * @param pack the package
      * @return true if denied, false otherwise
      */
-    private boolean deny(Package pack) {
+    private boolean deny(final Package pack) {
         // is package annotated with nojexl ?
         final NoJexl nojexl = pack.getAnnotation(NoJexl.class);
         if (nojexl != null) {
@@ -318,7 +318,7 @@ public class Permissions implements JexlPermissions {
      * @param clazz the class
      * @return true if denied, false otherwise
      */
-    private boolean deny(Class<?> clazz) {
+    private boolean deny(final Class<?> clazz) {
         // Don't deny arrays
         if (clazz.isArray()) {
             return false;
@@ -328,7 +328,7 @@ public class Permissions implements JexlPermissions {
         if (nojexl != null) {
             return true;
         }
-        NoJexlPackage njp = packages.get(ClassTool.getPackageName(clazz));
+        final NoJexlPackage njp = 
packages.get(ClassTool.getPackageName(clazz));
         return njp != null && Objects.equals(NOJEXL_CLASS, 
njp.getNoJexl(clazz));
     }
 
@@ -337,7 +337,7 @@ public class Permissions implements JexlPermissions {
      * @param ctor the constructor
      * @return true if denied, false otherwise
      */
-    private boolean deny(Constructor<?> ctor) {
+    private boolean deny(final Constructor<?> ctor) {
         // is ctor annotated with nojexl ?
         final NoJexl nojexl = ctor.getAnnotation(NoJexl.class);
         if (nojexl != null) {
@@ -351,7 +351,7 @@ public class Permissions implements JexlPermissions {
      * @param field the field
      * @return true if denied, false otherwise
      */
-    private boolean deny(Field field) {
+    private boolean deny(final Field field) {
         // is field annotated with nojexl ?
         final NoJexl nojexl = field.getAnnotation(NoJexl.class);
         if (nojexl != null) {
@@ -365,7 +365,7 @@ public class Permissions implements JexlPermissions {
      * @param method the method
      * @return true if denied, false otherwise
      */
-    private boolean deny(Method method) {
+    private boolean deny(final Method method) {
         // is method annotated with nojexl ?
         final NoJexl nojexl = method.getAnnotation(NoJexl.class);
         if (nojexl != null) {
@@ -486,7 +486,7 @@ public class Permissions implements JexlPermissions {
         }
         Class<?> clazz = method.getDeclaringClass();
         // gather if any implementation of the method is explicitly allowed by 
the packages
-        boolean[] explicit = new boolean[]{wildcardAllow(clazz)};
+        final boolean[] explicit = {wildcardAllow(clazz)};
         // lets walk all interfaces
         for (final Class<?> inter : clazz.getInterfaces()) {
             if (!allow(inter, method, explicit)) {
@@ -515,7 +515,7 @@ public class Permissions implements JexlPermissions {
         if (deny(method)) {
             return false;
         }
-        Class<?> clazz = method.getDeclaringClass();
+        final Class<?> clazz = method.getDeclaringClass();
         // class must not be denied
         return !deny(clazz);
     }
@@ -527,7 +527,7 @@ public class Permissions implements JexlPermissions {
      * @param explicit carries whether the package holding the method is 
explicitly allowed
      * @return true if JEXL is allowed to introspect, false otherwise
      */
-    private boolean allow(final Class<?> clazz, final Method method, boolean[] 
explicit) {
+    private boolean allow(final Class<?> clazz, final Method method, final 
boolean[] explicit) {
         try {
             // check if method in that class is declared ie overrides
             final Method override = clazz.getDeclaredMethod(method.getName(), 
method.getParameterTypes());
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/PermissionsParser.java
 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/PermissionsParser.java
index 317030ae..0ed25da8 100644
--- 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/PermissionsParser.java
+++ 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/PermissionsParser.java
@@ -74,18 +74,18 @@ public class PermissionsParser {
      * @param srcs the sources
      * @return the permissions map
      */
-    public Permissions parse(String... srcs) {
+    public Permissions parse(final String... srcs) {
         if (srcs == null || srcs.length == 0) {
             return Permissions.UNRESTRICTED;
         }
         packages = new ConcurrentHashMap<>();
         wildcards = new LinkedHashSet<>();
-        for(String src : srcs) {
+        for(final String src : srcs) {
             this.src = src;
             this.size = src.length();
             readPackages();
         }
-        Permissions permissions = new Permissions(wildcards, packages);
+        final Permissions permissions = new Permissions(wildcards, packages);
         clear();
         return permissions;
     }
@@ -96,7 +96,7 @@ public class PermissionsParser {
      * @param i the offset position
      * @return the error message
      */
-    private String unexpected(char c, int i) {
+    private String unexpected(final char c, final int i) {
         return "unexpected '" + c + "'" + "@" + i;
     }
 
@@ -105,10 +105,10 @@ public class PermissionsParser {
      * @param offset initial position
      * @return position after comment
      */
-    private int readEol(int offset) {
+    private int readEol(final int offset) {
         int i = offset;
         while (i < size) {
-            char c = src.charAt(i);
+            final char c = src.charAt(i);
             if (c == '\n') {
                 break;
             }
@@ -122,10 +122,10 @@ public class PermissionsParser {
      * @param offset initial position
      * @return position after spaces
      */
-    private int readSpaces(int offset) {
+    private int readSpaces(final int offset) {
         int i = offset;
         while (i < size) {
-            char c = src.charAt(i);
+            final char c = src.charAt(i);
             if (!Character.isWhitespace(c)) {
                 break;
             }
@@ -140,7 +140,7 @@ public class PermissionsParser {
      * @param offset the initial reading position
      * @return the position after the identifier
      */
-    private int readIdentifier(StringBuilder id, int offset) {
+    private int readIdentifier(final StringBuilder id, final int offset) {
         return readIdentifier(id, offset, false, false);
     }
 
@@ -152,7 +152,7 @@ public class PermissionsParser {
      * @param star whether stars (*) are allowed
      * @return the position after the identifier
      */
-    private int readIdentifier(StringBuilder id, int offset, boolean dot, 
boolean star) {
+    private int readIdentifier(final StringBuilder id, final int offset, final 
boolean dot, final boolean star) {
         int begin = -1;
         boolean starf = star;
         int i = offset;
@@ -190,19 +190,18 @@ public class PermissionsParser {
      * Reads a package permission.
      */
     private void readPackages() {
-        StringBuilder temp = new StringBuilder();
+        final StringBuilder temp = new StringBuilder();
         Permissions.NoJexlPackage njpackage = null;
         int i = 0;
         int j = -1;
         String pname = null;
         while (i < size) {
-            char c = src.charAt(i);
+            final char c = src.charAt(i);
             // if no parsing progress can be made, we are in error
-            if (j < i) {
-                j = i;
-            } else {
+            if (j >= i) {
                 throw new IllegalStateException(unexpected(c, i));
             }
+            j = i;
             // get rid of space
             if (Character.isWhitespace(c)) {
                 i = readSpaces(i + 1);
@@ -215,7 +214,7 @@ public class PermissionsParser {
             }
             // read the package qualified name
             if (pname == null) {
-                int next = readIdentifier(temp, i, true, true);
+                final int next = readIdentifier(temp, i, true, true);
                 if (i != next) {
                     pname = temp.toString();
                     temp.setLength(0);
@@ -235,18 +234,16 @@ public class PermissionsParser {
                     packages.put(pname, njpackage);
                     i += 1;
                 }
-            } else {
-                if (c == '}') {
-                    // empty means whole package
-                    if (njpackage.isEmpty()) {
-                        packages.put(pname, Permissions.NOJEXL_PACKAGE);
-                    }
-                    njpackage = null; // can restart anew
-                    pname = null;
-                    i += 1;
-                } else {
-                    i = readClass(njpackage, null, null, i);
+            } else if (c == '}') {
+                // empty means whole package
+                if (njpackage.isEmpty()) {
+                    packages.put(pname, Permissions.NOJEXL_PACKAGE);
                 }
+                njpackage = null; // can restart anew
+                pname = null;
+                i += 1;
+            } else {
+                i = readClass(njpackage, null, null, i);
             }
         }
     }
@@ -259,8 +256,8 @@ public class PermissionsParser {
      * @param offset the initial parsing position in the source
      * @return the new parsing position
      */
-    private int readClass(Permissions.NoJexlPackage njpackage, String outer, 
String inner, int offset) {
-        StringBuilder temp = new StringBuilder();
+    private int readClass(final Permissions.NoJexlPackage njpackage, final 
String outer, final String inner, final int offset) {
+        final StringBuilder temp = new StringBuilder();
         Permissions.NoJexlClass njclass = null;
         String njname = null;
         String identifier = inner;
@@ -268,13 +265,12 @@ public class PermissionsParser {
         int j = -1;
         boolean isMethod = false;
         while(i < size) {
-            char c = src.charAt(i);
+            final char c = src.charAt(i);
             // if no parsing progress can be made, we are in error
-            if (j < i) {
-                j = i;
-            } else {
+            if (j >= i) {
                 throw new IllegalStateException(unexpected(c, i));
             }
+            j = i;
             // get rid of space
             if (Character.isWhitespace(c)) {
                 i = readSpaces(i + 1);
@@ -296,7 +292,7 @@ public class PermissionsParser {
             }
             // read an identifier, the class name
             if (identifier == null) {
-                int next = readIdentifier(temp, i);
+                final int next = readIdentifier(temp, i);
                 if (i != next) {
                     identifier = temp.toString();
                     temp.setLength(0);
@@ -307,15 +303,14 @@ public class PermissionsParser {
             // parse a class:
             if (njclass == null) {
                 // we must have read the class ('identifier {'...)
-                if (identifier != null && c == '{') {
-                    // if we have a class, it has a name
-                    njclass = new Permissions.NoJexlClass();
-                    njname = outer != null ? outer + "$" + identifier : 
identifier;
-                    njpackage.addNoJexl(njname, njclass);
-                    identifier = null;
-                } else {
+                if ((identifier == null) || (c != '{')) {
                     throw new IllegalStateException(unexpected(c, i));
                 }
+                // if we have a class, it has a name
+                njclass = new Permissions.NoJexlClass();
+                njname = outer != null ? outer + "$" + identifier : identifier;
+                njpackage.addNoJexl(njname, njclass);
+                identifier = null;
             } else if (identifier != null)  {
                 // class member mode
                 if (c == '{') {
diff --git 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/SandboxUberspect.java
 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/SandboxUberspect.java
index 314b8acb..5a9754f1 100644
--- 
a/src/main/java/org/apache/commons/jexl3/internal/introspection/SandboxUberspect.java
+++ 
b/src/main/java/org/apache/commons/jexl3/internal/introspection/SandboxUberspect.java
@@ -115,7 +115,7 @@ public final class SandboxUberspect implements 
JexlUberspect {
      * @param rhs right hand side
      * @return true if left is identical to right
      */
-    private static boolean eq(Object lhs, Object rhs) {
+    private static boolean eq(final Object lhs, final Object rhs) {
         return lhs == rhs;
     }
 
diff --git 
a/src/main/java/org/apache/commons/jexl3/introspection/JexlPermissions.java 
b/src/main/java/org/apache/commons/jexl3/introspection/JexlPermissions.java
index ce9b95db..0ab4d64f 100644
--- a/src/main/java/org/apache/commons/jexl3/introspection/JexlPermissions.java
+++ b/src/main/java/org/apache/commons/jexl3/introspection/JexlPermissions.java
@@ -164,7 +164,7 @@ public interface JexlPermissions {
      * @return the permissions instance
      * @since 3.3
      */
-    static JexlPermissions parse(String... src) {
+    static JexlPermissions parse(final String... src) {
         return new PermissionsParser().parse(src);
     }
 
@@ -173,7 +173,7 @@ public interface JexlPermissions {
      * <p>This enables any public class, method, constructor or field to be 
visible to JEXL and used in scripts.</p>
      * @since 3.3
      */
-    public static final JexlPermissions UNRESTRICTED = 
JexlPermissions.parse(null);
+    JexlPermissions UNRESTRICTED = JexlPermissions.parse(null);
     /**
      * A restricted singleton.
      * <p>The RESTRICTED set is built using the following allowed packages and 
denied packages/classes.</p>
@@ -211,7 +211,7 @@ public interface JexlPermissions {
      * <li>java.rmi {}</li>
      * </ul>
      */
-    public static final JexlPermissions RESTRICTED = JexlPermissions.parse(
+    JexlPermissions RESTRICTED = JexlPermissions.parse(
             "# Restricted Uberspect Permissions",
             "java.nio.*",
             "java.io.*",
diff --git 
a/src/main/java/org/apache/commons/jexl3/introspection/JexlSandbox.java 
b/src/main/java/org/apache/commons/jexl3/introspection/JexlSandbox.java
index e1a9b1d1..67b8afe6 100644
--- a/src/main/java/org/apache/commons/jexl3/introspection/JexlSandbox.java
+++ b/src/main/java/org/apache/commons/jexl3/introspection/JexlSandbox.java
@@ -356,7 +356,7 @@ public final class JexlSandbox {
             if (names == null) {
                 return name;
             }
-            String actual = names.get(name);
+            final String actual = names.get(name);
             // if null is not explicitly allowed, explicit null aka NULL
             if (name == null && actual == null && !names.containsKey(null)) {
                 return JexlSandbox.NULL;
diff --git 
a/src/main/java/org/apache/commons/jexl3/introspection/JexlUberspect.java 
b/src/main/java/org/apache/commons/jexl3/introspection/JexlUberspect.java
index 009e8149..efe00f54 100644
--- a/src/main/java/org/apache/commons/jexl3/introspection/JexlUberspect.java
+++ b/src/main/java/org/apache/commons/jexl3/introspection/JexlUberspect.java
@@ -237,7 +237,7 @@ public interface JexlUberspect {
     default Class<?> getClassByName(final String className) {
         try {
             return Class.forName(className, false, getClassLoader());
-        } catch (ClassNotFoundException xignore) {
+        } catch (final ClassNotFoundException xignore) {
             return null;
         }
     }
diff --git a/src/main/java/org/apache/commons/jexl3/parser/ASTAmbiguous.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTAmbiguous.java
index cfc47d0d..6a896ad8 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTAmbiguous.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTAmbiguous.java
@@ -19,7 +19,7 @@ package org.apache.commons.jexl3.parser;
 public final class ASTAmbiguous extends JexlNode {
 
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/org/apache/commons/jexl3/parser/ASTAnnotation.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTAnnotation.java
index 02ecf2a5..1a357310 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTAnnotation.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTAnnotation.java
@@ -21,7 +21,7 @@ package org.apache.commons.jexl3.parser;
  */
 public class ASTAnnotation extends JexlNode {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     private String name = null;
diff --git a/src/main/java/org/apache/commons/jexl3/parser/ASTArrayLiteral.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTArrayLiteral.java
index febbbc4a..e17b6146 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTArrayLiteral.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTArrayLiteral.java
@@ -23,7 +23,7 @@ import org.apache.commons.jexl3.internal.Debugger;
  */
 public final class ASTArrayLiteral extends JexlNode {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     /** Whether this array is constant or not. */
diff --git a/src/main/java/org/apache/commons/jexl3/parser/ASTBlock.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTBlock.java
index 83e54898..d0d82a71 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTBlock.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTBlock.java
@@ -22,7 +22,7 @@ package org.apache.commons.jexl3.parser;
 public class ASTBlock extends JexlLexicalNode {
 
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/ASTForeachStatement.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTForeachStatement.java
index b9afbc01..cc8880fb 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTForeachStatement.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTForeachStatement.java
@@ -21,12 +21,12 @@ package org.apache.commons.jexl3.parser;
  */
 public class ASTForeachStatement extends JexlLexicalNode {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     private int loopForm;
 
-    void setLoopForm(int form) {
+    void setLoopForm(final int form) {
         loopForm = form;
     }
 
diff --git a/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifier.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifier.java
index acb46c6d..acd85150 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifier.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifier.java
@@ -21,7 +21,7 @@ package org.apache.commons.jexl3.parser;
  */
 public class ASTIdentifier extends JexlNode {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     protected String name = null;
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccess.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccess.java
index 0beb6262..ed12f035 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccess.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccess.java
@@ -22,7 +22,7 @@ package org.apache.commons.jexl3.parser;
  */
 public class ASTIdentifierAccess extends JexlNode {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     private String name = null;
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessJxlt.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessJxlt.java
index bca98709..240bb475 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessJxlt.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessJxlt.java
@@ -24,7 +24,7 @@ import org.apache.commons.jexl3.JxltEngine;
  */
 public class ASTIdentifierAccessJxlt extends ASTIdentifierAccess {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     protected JxltEngine.Expression jxltExpr;
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessSafe.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessSafe.java
index 137bbb97..3e345561 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessSafe.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessSafe.java
@@ -22,7 +22,7 @@ package org.apache.commons.jexl3.parser;
  */
 public class ASTIdentifierAccessSafe extends ASTIdentifierAccess {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessSafeJxlt.java
 
b/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessSafeJxlt.java
index bc453c6a..c8f15324 100644
--- 
a/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessSafeJxlt.java
+++ 
b/src/main/java/org/apache/commons/jexl3/parser/ASTIdentifierAccessSafeJxlt.java
@@ -22,7 +22,7 @@ package org.apache.commons.jexl3.parser;
  */
 public class ASTIdentifierAccessSafeJxlt extends ASTIdentifierAccessJxlt {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/org/apache/commons/jexl3/parser/ASTJexlLambda.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTJexlLambda.java
index 1451fe35..57738835 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTJexlLambda.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTJexlLambda.java
@@ -21,7 +21,7 @@ package org.apache.commons.jexl3.parser;
  */
 public final class ASTJexlLambda extends ASTJexlScript {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/org/apache/commons/jexl3/parser/ASTJxltLiteral.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTJxltLiteral.java
index 5dcbe8e3..66c6292d 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTJxltLiteral.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTJxltLiteral.java
@@ -18,7 +18,7 @@ package org.apache.commons.jexl3.parser;
 
 public final class ASTJxltLiteral extends JexlNode {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     /** The actual literal value; the inherited 'value' member may host a 
cached template expression. */
diff --git a/src/main/java/org/apache/commons/jexl3/parser/ASTMapLiteral.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTMapLiteral.java
index c8b82337..696c6cc8 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTMapLiteral.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTMapLiteral.java
@@ -20,7 +20,7 @@ import org.apache.commons.jexl3.internal.Debugger;
 
 public final class ASTMapLiteral extends JexlNode {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     /** Whether this array is constant or not. */
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/ASTNamespaceIdentifier.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTNamespaceIdentifier.java
index 5aa7669a..9d326b76 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTNamespaceIdentifier.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTNamespaceIdentifier.java
@@ -21,7 +21,7 @@ package org.apache.commons.jexl3.parser;
  */
 public class ASTNamespaceIdentifier extends ASTIdentifier {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     private String namespace;
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/ASTNumberLiteral.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTNumberLiteral.java
index e1f46ff1..ca8b97c2 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTNumberLiteral.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTNumberLiteral.java
@@ -18,7 +18,7 @@ package org.apache.commons.jexl3.parser;
 
 public final class ASTNumberLiteral extends JexlNode implements 
JexlNode.Constant<Number> {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     /** The number parser. */
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/ASTQualifiedIdentifier.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTQualifiedIdentifier.java
index 016b5949..95667774 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTQualifiedIdentifier.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTQualifiedIdentifier.java
@@ -21,7 +21,7 @@ package org.apache.commons.jexl3.parser;
  */
 public class ASTQualifiedIdentifier extends JexlNode {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     protected String name = null;
@@ -39,7 +39,7 @@ public class ASTQualifiedIdentifier extends JexlNode {
         return name;
     }
 
-    public void setName(String qualified) {
+    public void setName(final String qualified) {
         this.name = qualified;
     }
 
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/ASTReferenceExpression.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTReferenceExpression.java
index 40be08c9..d4a479e6 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTReferenceExpression.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTReferenceExpression.java
@@ -18,7 +18,7 @@ package org.apache.commons.jexl3.parser;
 
 public final class ASTReferenceExpression extends JexlNode {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/org/apache/commons/jexl3/parser/ASTRegexLiteral.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTRegexLiteral.java
index d41d5c21..99d82c5e 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTRegexLiteral.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTRegexLiteral.java
@@ -21,7 +21,7 @@ import java.util.regex.Pattern;
 public final class ASTRegexLiteral extends JexlNode implements 
JexlNode.Constant<Pattern> {
 
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     /** The actual literal value; the inherited 'value' member may host a 
cached getter. */
diff --git a/src/main/java/org/apache/commons/jexl3/parser/ASTSetLiteral.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTSetLiteral.java
index f10dc7a7..59177c70 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTSetLiteral.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTSetLiteral.java
@@ -20,7 +20,7 @@ import org.apache.commons.jexl3.internal.Debugger;
 
 public final class ASTSetLiteral extends JexlNode {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     /** Whether this set is constant or not. */
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/ASTStringLiteral.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTStringLiteral.java
index e3338093..141a280e 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTStringLiteral.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTStringLiteral.java
@@ -18,7 +18,7 @@ package org.apache.commons.jexl3.parser;
 
 public final class ASTStringLiteral extends JexlNode implements 
JexlNode.Constant<String> {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     /** The actual literal value; the inherited 'value' member may host a 
cached getter. */
diff --git a/src/main/java/org/apache/commons/jexl3/parser/ASTVar.java 
b/src/main/java/org/apache/commons/jexl3/parser/ASTVar.java
index a5b400ec..6ceba0bb 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/ASTVar.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/ASTVar.java
@@ -21,7 +21,7 @@ package org.apache.commons.jexl3.parser;
  */
 public class ASTVar extends ASTIdentifier {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/FeatureController.java 
b/src/main/java/org/apache/commons/jexl3/parser/FeatureController.java
index dc11a22e..3a9d81b0 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/FeatureController.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/FeatureController.java
@@ -256,22 +256,22 @@ public class FeatureController extends ScriptVisitor {
     }
 
     @Override
-    protected Object visit(ASTGetDecrementNode node, Object data) {
+    protected Object visit(final ASTGetDecrementNode node, final Object data) {
         return controlSideEffect(node, data);
     }
 
     @Override
-    protected Object visit(ASTGetIncrementNode node, Object data) {
+    protected Object visit(final ASTGetIncrementNode node, final Object data) {
         return controlSideEffect(node, data);
     }
 
     @Override
-    protected Object visit(ASTDecrementGetNode node, Object data) {
+    protected Object visit(final ASTDecrementGetNode node, final Object data) {
         return controlSideEffect(node, data);
     }
 
     @Override
-    protected Object visit(ASTIncrementGetNode node, Object data) {
+    protected Object visit(final ASTIncrementGetNode node, final Object data) {
         return controlSideEffect(node, data);
     }
 }
diff --git a/src/main/java/org/apache/commons/jexl3/parser/JexlLexicalNode.java 
b/src/main/java/org/apache/commons/jexl3/parser/JexlLexicalNode.java
index b5c875b7..0ba3e2e1 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/JexlLexicalNode.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/JexlLexicalNode.java
@@ -24,7 +24,7 @@ import org.apache.commons.jexl3.internal.LexicalScope;
  */
 public class JexlLexicalNode extends JexlNode implements 
JexlParser.LexicalUnit {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     private LexicalScope lexicalScope = null;
@@ -51,7 +51,7 @@ public class JexlLexicalNode extends JexlNode implements 
JexlParser.LexicalUnit
     }
 
     @Override
-    public void setConstant(int symbol) {
+    public void setConstant(final int symbol) {
         lexicalScope.addConstant(symbol);
     }
 
diff --git a/src/main/java/org/apache/commons/jexl3/parser/JexlNode.java 
b/src/main/java/org/apache/commons/jexl3/parser/JexlNode.java
index d2f88a9e..9a00abd4 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/JexlNode.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/JexlNode.java
@@ -29,7 +29,7 @@ import org.apache.commons.jexl3.introspection.JexlPropertySet;
  */
 public abstract class JexlNode extends SimpleNode {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     // line + column encoded: up to 4096 columns (ie 20 bits for line + 12 
bits for column)
@@ -125,7 +125,7 @@ public abstract class JexlNode extends SimpleNode {
      *
      * @return true if node accepts null arguments, false otherwise
      */
-    public boolean isStrictOperator(JexlArithmetic arithmetic) {
+    public boolean isStrictOperator(final JexlArithmetic arithmetic) {
         return OperatorController.INSTANCE.isStrict(arithmetic, this);
     }
 
@@ -144,12 +144,7 @@ public abstract class JexlNode extends SimpleNode {
         if (literal) {
             for (int n = 0; n < jjtGetNumChildren(); ++n) {
                 final JexlNode child = jjtGetChild(n);
-                if (child instanceof ASTReference) {
-                    final boolean is = child.isConstant(true);
-                    if (!is) {
-                        return false;
-                    }
-                } else if (child instanceof ASTMapEntry) {
+                if ((child instanceof ASTReference) || (child instanceof 
ASTMapEntry)) {
                     final boolean is = child.isConstant(true);
                     if (!is) {
                         return false;
diff --git a/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java 
b/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
index 54141d18..00b470a4 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
@@ -205,7 +205,7 @@ public abstract class JexlParser extends StringParser {
      * Disables pragma feature is pragma-anywhere feature is disabled.
      */
     protected void controlPragmaAnywhere() {
-        JexlFeatures features = getFeatures();
+        final JexlFeatures features = getFeatures();
         if (features.supportsPragma() && !features.supportsPragmaAnywhere()) {
             featureController.setFeatures(new 
JexlFeatures(featureController.getFeatures()).pragma(false));
         }
@@ -310,7 +310,7 @@ public abstract class JexlParser extends StringParser {
      * @param name the variable name
      * @return true if a variable with that name was declared
      */
-    protected boolean isVariable(String name) {
+    protected boolean isVariable(final String name) {
         return scope != null && scope.getSymbol(name) != null;
     }
 
@@ -436,7 +436,7 @@ public abstract class JexlParser extends StringParser {
      * @param constant whether the symbol is constant
      * @param token      the variable name toekn
      */
-    protected void declareVariable(final ASTVar variable, final Token token, 
boolean lexical, boolean constant) {
+    protected void declareVariable(final ASTVar variable, final Token token, 
final boolean lexical, final boolean constant) {
         final String name = token.image;
         if (!allowVariable(name)) {
             throwFeatureException(JexlFeatures.LOCAL_VAR, token);
@@ -458,12 +458,10 @@ public abstract class JexlParser extends StringParser {
             }
             // not lexical, redefined nevertheless
             variable.setRedefined(true);
-        } else {
-            if (lexical) {
-                scope.addLexical(symbol);
-                if (constant) {
-                    block.setConstant(symbol);
-                }
+        } else if (lexical) {
+            scope.addLexical(symbol);
+            if (constant) {
+                block.setConstant(symbol);
             }
         }
     }
@@ -475,7 +473,7 @@ public abstract class JexlParser extends StringParser {
      * @param lexical whether the parameter is lexical or not
      * @param constant whether the parameter is constant or not
      */
-    protected void declareParameter(final Token token, boolean lexical, 
boolean constant) {
+    protected void declareParameter(final Token token, final boolean lexical, 
final boolean constant) {
         final String identifier =  token.image;
         if (!allowVariable(identifier)) {
             throwFeatureException(JexlFeatures.LOCAL_VAR, token);
@@ -518,7 +516,7 @@ public abstract class JexlParser extends StringParser {
      * @param value the pragma value
      */
     protected void declarePragma(final String key, final Object value) {
-        JexlFeatures features = getFeatures();
+        final JexlFeatures features = getFeatures();
         if (!features.supportsPragma()) {
             throwFeatureException(JexlFeatures.PRAGMA, getToken(0));
         }
@@ -529,7 +527,7 @@ public abstract class JexlParser extends StringParser {
             pragmas = new TreeMap<>();
         }
         // declaring a namespace
-        Predicate<String> ns = features.namespaceTest();
+        final Predicate<String> ns = features.namespaceTest();
         if (ns != null && key.startsWith(PRAGMA_JEXLNS)) {
             if (!features.supportsNamespacePragma()) {
                 throwFeatureException(JexlFeatures.NS_PRAGMA, getToken(0));
@@ -549,7 +547,7 @@ public abstract class JexlParser extends StringParser {
                 ((Set<Object>) previous).add(newValue);
                 return previous;
             }
-            Set<Object> values = new LinkedHashSet<>();
+            final Set<Object> values = new LinkedHashSet<>();
             values.add(previous);
             values.add(newValue);
             return values;
@@ -567,7 +565,7 @@ public abstract class JexlParser extends StringParser {
             return true;
         }
         // if name is shared with a variable name, use syntactic hint
-        String name = token.image;
+        final String name = token.image;
         if (!isVariable(name)) {
             final Set<String> ns = namespaces;
             // declared through local pragma ?
@@ -659,9 +657,9 @@ public abstract class JexlParser extends StringParser {
                 throw new JexlException.Assignment(xinfo, msg).clean();
             }
             if (lv instanceof ASTIdentifier && !(lv instanceof ASTVar)) {
-                ASTIdentifier var = (ASTIdentifier) lv;
-                int symbol = var.getSymbol();
-                boolean isconst = symbol >= 0 && block != null && 
block.isConstant(symbol);
+                final ASTIdentifier var = (ASTIdentifier) lv;
+                final int symbol = var.getSymbol();
+                final boolean isconst = symbol >= 0 && block != null && 
block.isConstant(symbol);
                 if (isconst) { // if constant, fail...
                     JexlInfo xinfo = lv.jexlInfo();
                     xinfo = info.at(xinfo.getLine(), xinfo.getColumn());
@@ -677,7 +675,7 @@ public abstract class JexlParser extends StringParser {
      * Check fat vs thin arrow syntax feature.
      * @param token the arrow token
      */
-    protected void checkLambda(Token token) {
+    protected void checkLambda(final Token token) {
         final String arrow = token.image;
         if ("->".equals(arrow)) {
             if (!getFeatures().supportsThinArrow()) {
@@ -722,7 +720,7 @@ public abstract class JexlParser extends StringParser {
      * @throws JexlException.Parsing if actual error token can not be found
      * @throws JexlException.Feature in all other cases
      */
-    protected void throwFeatureException(final int feature, Token trigger) {
+    protected void throwFeatureException(final int feature, final Token 
trigger) {
         Token token = trigger;
         if (token == null) {
             token = this.getToken(0);
diff --git a/src/main/java/org/apache/commons/jexl3/parser/NumberParser.java 
b/src/main/java/org/apache/commons/jexl3/parser/NumberParser.java
index bbf678ca..5a915143 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/NumberParser.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/NumberParser.java
@@ -28,7 +28,7 @@ import java.util.Locale;
  */
 public final class NumberParser implements Serializable {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     /** The type literal value. */
@@ -74,11 +74,11 @@ public final class NumberParser implements Serializable {
         return literal;
     }
 
-    private static boolean isNegative(Token token) {
+    private static boolean isNegative(final Token token) {
         return token != null && "-".equals(token.image);
     }
 
-    static Number parseInteger(Token negative, final Token s) {
+    static Number parseInteger(final Token negative, final Token s) {
         return new NumberParser().assignNatural(isNegative(negative), 
s.image).getLiteralValue();
     }
 
@@ -92,7 +92,7 @@ public final class NumberParser implements Serializable {
      * @param str the natural as string
      * @return this parser instance
      */
-    NumberParser assignNatural(String str) {
+    NumberParser assignNatural(final String str) {
         String s;
         // determine negative sign if any, ignore +
         final boolean negative;
@@ -119,7 +119,7 @@ public final class NumberParser implements Serializable {
      * @param natural the natural as string
      * @return this parser instance
      */
-    NumberParser assignNatural(boolean negative, String natural) {
+    NumberParser assignNatural(final boolean negative, final String natural) {
         String s = natural;
         Number result;
         Class<? extends Number> rclass;
@@ -141,14 +141,14 @@ public final class NumberParser implements Serializable {
             case 'l':
             case 'L': {
                 rclass = Long.class;
-                long l = Long.parseLong(s.substring(0, last), base);
+                final long l = Long.parseLong(s.substring(0, last), base);
                 result = negative? -l : l;
                 break;
             }
             case 'h':
             case 'H': {
                 rclass = BigInteger.class;
-                BigInteger bi = new BigInteger(s.substring(0, last), base);
+                final BigInteger bi = new BigInteger(s.substring(0, last), 
base);
                 result = negative? bi.negate() : bi;
                 break;
             }
@@ -156,14 +156,14 @@ public final class NumberParser implements Serializable {
                 // preferred literal class is integer
                 rclass = Integer.class;
                 try {
-                    int i = Integer.parseInt(s, base);
+                    final int i = Integer.parseInt(s, base);
                     result = negative? -i : i;
                 } catch (final NumberFormatException take2) {
                     try {
-                        long l = Long.parseLong(s, base);
+                        final long l = Long.parseLong(s, base);
                         result = negative? -l : l;
                     } catch (final NumberFormatException take3) {
-                        BigInteger bi = new BigInteger(s, base);
+                        final BigInteger bi = new BigInteger(s, base);
                         result = negative? bi.negate() : bi;
                     }
                 }
@@ -207,7 +207,7 @@ public final class NumberParser implements Serializable {
      * @param s the real as string
      * @return this parser instance
      */
-    NumberParser assignReal(boolean negative, String s) {
+    NumberParser assignReal(final boolean negative, final String s) {
         Number result;
         Class<? extends Number> rclass;
         if ("#NaN".equals(s) || "NaN".equals(s)) {
@@ -219,31 +219,31 @@ public final class NumberParser implements Serializable {
                 case 'b':
                 case 'B': {
                     rclass = BigDecimal.class;
-                    BigDecimal bd = new BigDecimal(s.substring(0, last));
+                    final BigDecimal bd = new BigDecimal(s.substring(0, last));
                     result = negative? bd.negate() : bd;
                     break;
                 }
                 case 'f':
                 case 'F': {
                     rclass = Float.class;
-                    float f4 = Float.parseFloat(s.substring(0, last));
+                    final float f4 = Float.parseFloat(s.substring(0, last));
                     result = negative? -f4 : f4;
                     break;
                 }
                 case 'd':
                 case 'D':
                     rclass = Double.class;
-                    double f8 = Double.parseDouble(s.substring(0, last));
+                    final double f8 = Double.parseDouble(s.substring(0, last));
                     result = negative? -f8 : f8;
                     break;
                 default: {
                     // preferred literal class is double
                     rclass = Double.class;
                     try {
-                        double d = Double.parseDouble(s);
+                        final double d = Double.parseDouble(s);
                         result = negative? -d : d;
                     } catch (final NumberFormatException take3) {
-                        BigDecimal bd = new BigDecimal(s);
+                        final BigDecimal bd = new BigDecimal(s);
                         result = negative? bd.negate() : bd;
                     }
                     break;
diff --git 
a/src/main/java/org/apache/commons/jexl3/parser/OperatorController.java 
b/src/main/java/org/apache/commons/jexl3/parser/OperatorController.java
index ffe70176..bef4be05 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/OperatorController.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/OperatorController.java
@@ -31,11 +31,11 @@ class OperatorController extends ScriptVisitor {
      * @param node the node which should delegate to an operator
      * @return true if node points to a (null-unsafe) operator
      */
-    boolean isStrict(JexlArithmetic arithmetic, final JexlNode node) {
+    boolean isStrict(final JexlArithmetic arithmetic, final JexlNode node) {
         if (arithmetic.isStrict()) {
-            Object ctl = node.jjtAccept(this, arithmetic);
+            final Object ctl = node.jjtAccept(this, arithmetic);
             if (ctl instanceof JexlOperator) {
-                JexlOperator operator = (JexlOperator) ctl;
+                final JexlOperator operator = (JexlOperator) ctl;
                 return arithmetic.isStrict(operator);
             }
         }
diff --git a/src/main/java/org/apache/commons/jexl3/parser/SimpleNode.java 
b/src/main/java/org/apache/commons/jexl3/parser/SimpleNode.java
index 23d1b01a..beed79a3 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/SimpleNode.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/SimpleNode.java
@@ -33,7 +33,7 @@ package org.apache.commons.jexl3.parser;
  */
 public class SimpleNode implements Node {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     /** The parent node. */
@@ -199,7 +199,7 @@ public class SimpleNode implements Node {
      * Override to dump output somewhere.
      * @param str the string to output
      */
-    protected void dumpOut(String str) {
+    protected void dumpOut(final String str) {
         // override to obtain an output
     }
 
diff --git 
a/src/main/java/org/apache/commons/jexl3/scripting/JexlScriptEngine.java 
b/src/main/java/org/apache/commons/jexl3/scripting/JexlScriptEngine.java
index 3611afa5..56642fd4 100644
--- a/src/main/java/org/apache/commons/jexl3/scripting/JexlScriptEngine.java
+++ b/src/main/java/org/apache/commons/jexl3/scripting/JexlScriptEngine.java
@@ -93,7 +93,7 @@ public class JexlScriptEngine extends AbstractScriptEngine 
implements Compilable
      * @param engine the JexlEngine instance to use
      * @since 3.3
      */
-    public static void setInstance(JexlEngine engine) {
+    public static void setInstance(final JexlEngine engine) {
         ENGINE = new SoftReference<>(engine);
     }
 
@@ -106,7 +106,7 @@ public class JexlScriptEngine extends AbstractScriptEngine 
implements Compilable
             synchronized (JexlScriptEngineFactory.class) {
                 engine = ENGINE != null? ENGINE.get() : null;
                 if (engine == null) {
-                    JexlBuilder builder = new JexlBuilder()
+                    final JexlBuilder builder = new JexlBuilder()
                             .strict(true)
                             .safe(false)
                             .logger(JexlScriptEngine.LOG)
@@ -307,11 +307,11 @@ public class JexlScriptEngine extends 
AbstractScriptEngine implements Compilable
         }
     }
 
-    static ScriptException scriptException(Exception e) {
+    static ScriptException scriptException(final Exception e) {
         Exception xany = e;
         // unwrap a jexl exception
         if (xany instanceof JexlException) {
-            Throwable cause = xany.getCause();
+            final Throwable cause = xany.getCause();
             if (cause instanceof Exception) {
                 xany = (Exception) cause;
             }

Reply via email to