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 << 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 >> 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 >>> 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; }