Class JexlFeatures
These control syntactical constructs that will throw JexlException.Feature exceptions (a subclass of JexlException.Parsing) when disabled.
It is recommended to be explicit in choosing the features you need rather than rely on the default
constructor: the 2 convenience methods createNone()
and createAll()
are the recommended starting points to selectively enable or disable chosen features.
- Registers: register syntax (#number), used internally for {g,s}etProperty
- Reserved Names: a set of reserved variable names that can not be used as local variable (or parameter) names
- Global Side Effect : assigning/modifying values on global variables (=, += , -=, ...)
- Lexical: lexical scope, prevents redefining local variables
- Lexical Shade: local variables shade globals, prevents confusing a global variable with a local one
- Side Effect : assigning/modifying values on any variables or left-value
- Constant Array Reference: ensures array references only use constants;they should be statically solvable.
- New Instance: creating an instance using new(...)
- Loops: loop constructs (while(true), for(...))
- Lambda: function definitions (()->{...}, function(...) ).
- Method calls: calling methods (obj.method(...) or obj['method'](...)); when disabled, leaves function calls - including namespace prefixes - available
- Structured literals: arrays, lists, maps, sets, ranges
- Pragma: pragma construct as in
#pragma x y
- Annotation: @annotation statement;
- Thin-arrow: use the thin-arrow, ie
->
for lambdas as inx -> x + x
- Fat-arrow: use the fat-arrow, ie
=>
for lambdas as inx => x + x
- Namespace pragma: whether the
#pragma jexl.namespace.ns namespace
syntax is allowed - Import pragma: whether the
#pragma jexl.import fully.qualified.class.name
syntax is allowed - Comparator names: whether the comparator operator names can be used (as in
gt
for >,lt
for <, ...) - Pragma anywhere: whether pragma, that are not statements and handled before execution begins, can appear anywhere in the source or before any statements - ie at the beginning of a script.
- Const Capture: whether variables captured by lambdas are read-only (aka const, same as Java) or read-write.
- Since:
- 3.2
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
Annotation feature ordinal.static final int
Expressions allowed in array reference ordinal.static final int
Comparator names (legacy) syntax.static final int
Captured variables are const.static final int
Fat-arrow lambda syntax.static final int
Import pragma feature ordinal.static final int
Lambda feature ordinal.static final int
Lexical feature ordinal.static final int
Lexical shade feature ordinal.static final int
Locals feature ordinal.static final int
Loops feature ordinal.static final int
Lambda feature ordinal.static final int
New-instance feature ordinal.static final int
Namespace pragma feature ordinal.static final int
Pragma feature ordinal.static final int
The pragma anywhere feature ordinal.static final int
Reserved future feature ordinal (unused as of 3.3.1).static final int
Script feature ordinal.static final int
Side effects feature ordinal.static final int
Global side effects feature ordinal.static final int
Structured literal feature ordinal.The false predicate.static final int
Thin-arrow lambda syntax. -
Constructor Summary
ModifierConstructorDescriptionCreates default instance, equivalent to the result of calling the preferred alternativecreateDefault()
protected
JexlFeatures
(long f, Set<String> r, Predicate<String> n) An all member constructor for derivation.JexlFeatures
(JexlFeatures features) Copy constructor. -
Method Summary
Modifier and TypeMethodDescriptionannotation
(boolean flag) Sets whether annotation constructs are enabled.arrayReferenceExpr
(boolean flag) Sets whether array references expressions are enabled.comparatorNames
(boolean flag) Sets whether the legacy comparison operator names syntax is enabled.constCapture
(boolean flag) Sets whether lambda captured-variables are const or not.static JexlFeatures
Creates an all features enabled set.static JexlFeatures
Creates a default features set suitable for basic but complete scripting needs.static JexlFeatures
Creates an empty feature set.static JexlFeatures
The modern scripting features set.boolean
fatArrow
(boolean flag) Sets whether fat-arrow lambda syntax is enabled.long
getFlags()
int
hashCode()
importPragma
(boolean flag) Sets whether import pragma constructs are enabled.boolean
boolean
boolean
isReservedName
(String name) Checks whether a name is reserved.lambda
(boolean flag) Sets whether lambda/function constructs are enabled.lexical
(boolean flag) Sets whether syntactic lexical mode is enabled.lexicalShade
(boolean flag) Sets whether syntactic lexical shade is enabled.localVar
(boolean flag) Sets whether local variables are enabled.loops
(boolean flag) Sets whether looping constructs are enabled.methodCall
(boolean flag) Sets whether method calls expressions are enabled.namespacePragma
(boolean flag) Sets whether namespace pragma constructs are enabled.namespaceTest
(Predicate<String> names) Sets a test to determine namespace declaration.newInstance
(boolean flag) Sets whether creating new instances is enabled.pragma
(boolean flag) Sets whether pragma constructs are enabled.pragmaAnywhere
(boolean flag) Sets whether pragma constructs can appear anywhere in the code.register
(boolean flag) Sets whether register are enabled.reservedNames
(Collection<String> names) Sets a collection of reserved r precluding those to be used as local variables or parameter r.script
(boolean flag) Sets whether scripts constructs are enabled.sideEffect
(boolean flag) Sets whether side effect expressions are enabled.sideEffectGlobal
(boolean flag) Sets whether side effect expressions on global variables (aka non-local) are enabled.static String
stringify
(int feature) The text corresponding to a feature code.structuredLiteral
(boolean flag) Sets whether array/map/set literal expressions are enabled.boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
thinArrow
(boolean flag) Sets whether thin-arrow lambda syntax is enabled.
-
Field Details
-
TEST_STR_FALSE
The false predicate. -
RESERVED
Reserved future feature ordinal (unused as of 3.3.1).- See Also:
-
LOCAL_VAR
Locals feature ordinal.- See Also:
-
SIDE_EFFECT
Side effects feature ordinal.- See Also:
-
SIDE_EFFECT_GLOBAL
Global side effects feature ordinal.- See Also:
-
ARRAY_REF_EXPR
Expressions allowed in array reference ordinal.- See Also:
-
NEW_INSTANCE
New-instance feature ordinal.- See Also:
-
LOOP
Loops feature ordinal.- See Also:
-
LAMBDA
Lambda feature ordinal.- See Also:
-
METHOD_CALL
Lambda feature ordinal.- See Also:
-
STRUCTURED_LITERAL
Structured literal feature ordinal.- See Also:
-
PRAGMA
Pragma feature ordinal.- See Also:
-
ANNOTATION
Annotation feature ordinal.- See Also:
-
SCRIPT
Script feature ordinal.- See Also:
-
LEXICAL
Lexical feature ordinal.- See Also:
-
LEXICAL_SHADE
Lexical shade feature ordinal.- See Also:
-
THIN_ARROW
Thin-arrow lambda syntax.- See Also:
-
FAT_ARROW
Fat-arrow lambda syntax.- See Also:
-
NS_PRAGMA
Namespace pragma feature ordinal.- See Also:
-
IMPORT_PRAGMA
Import pragma feature ordinal.- See Also:
-
COMPARATOR_NAMES
Comparator names (legacy) syntax.- See Also:
-
PRAGMA_ANYWHERE
The pragma anywhere feature ordinal.- See Also:
-
CONST_CAPTURE
Captured variables are const.- See Also:
-
-
Constructor Details
-
JexlFeatures
public JexlFeatures()Creates default instance, equivalent to the result of calling the preferred alternativecreateDefault()
-
JexlFeatures
Copy constructor.- Parameters:
features
- the feature to copy from
-
JexlFeatures
An all member constructor for derivation.Not respecting immutability or thread-safety constraints for this class constructor arguments will likely result in unexpected behavior.
- Parameters:
f
- flagr
- reserved variable names; must be an immutable Set or thread-safe (concurrent or synchronized set)n
- namespace predicate; must be stateless or thread-safe
-
-
Method Details
-
createAll
Creates an all features enabled set.- Returns:
- a new instance of all features set
- Since:
- 3.3.1
-
createDefault
Creates a default features set suitable for basic but complete scripting needs.Maximizes compatibility with older version scripts (before 3.3), new projects should use
createScript()
or equivalent features as a base.The following scripting features are enabled:
- local variable,
supportsLocalVar()
- side effect,
supportsSideEffect()
- global side effect,
supportsSideEffectGlobal()
- array reference expression,
supportsStructuredLiteral()
- new instance,
supportsNewInstance()
- loop,
supportsLoops()
- lambda,
supportsLambda()
- method call,
supportsMethodCall()
- structured literal,
supportsStructuredLiteral()
- pragma,
supportsPragma()
- annotation,
supportsAnnotation()
- script,
supportsScript()
- comparator names,
supportsComparatorNames()
- namespace pragma,
supportsNamespacePragma()
- import pragma,
supportsImportPragma()
- pragma anywhere,
supportsPragmaAnywhere()
- Returns:
- a new instance of a default scripting features set
- Since:
- 3.3.1
- local variable,
-
createNone
Creates an empty feature set.This is the strictest base-set since no feature is allowed, suitable as-is only for the simplest expressions.
- Returns:
- a new instance of an empty features set
- Since:
- 3.3.1
-
createScript
The modern scripting features set.This is the recommended set for new projects.
All default features with the following differences:
- disable pragma-anywhere,
supportsPragmaAnywhere()
- disable comparator-names,
supportsComparatorNames()
- enable lexical,
isLexical()
- enable lexical-shade,
isLexicalShade()
- enable const-capture,
supportsConstCapture()
It also adds a set of reserved words to enable future unencumbered syntax evolution: try, catch, throw, finally, switch, case, default, class, instanceof
- Returns:
- a new instance of a modern scripting features set
- Since:
- 3.3.1
- disable pragma-anywhere,
-
stringify
The text corresponding to a feature code.- Parameters:
feature
- the feature number- Returns:
- the feature name
-
annotation
Sets whether annotation constructs are enabled.When disabled, parsing a script/expression using syntactic annotation constructs (@annotation) will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
arrayReferenceExpr
Sets whether array references expressions are enabled.When disabled, parsing a script/expression using 'obj[ ref ]' where ref is not a string or integer literal will throw a parsing exception;
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
comparatorNames
Sets whether the legacy comparison operator names syntax is enabled.When disabled, comparison operators names (eq;ne;le;lt;ge;gt) will be treated as plain identifiers.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
- Since:
- 3.3
-
constCapture
Sets whether lambda captured-variables are const or not.When disabled, lambda-captured variables are implicitly converted to read-write local variable (let), when enabled, those are implicitly converted to read-only local variables (const).
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
equals
-
fatArrow
Sets whether fat-arrow lambda syntax is enabled.When disabled, parsing a script/expression using syntactic fat-arrow (=<) will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
- Since:
- 3.3
-
getFlags
- Returns:
- these features"s flags
-
getReservedNames
- Returns:
- the (unmodifiable) set of reserved names.
-
hashCode
-
importPragma
Sets whether import pragma constructs are enabled.When disabled, parsing a script/expression using syntactic import pragma constructs (#pragma jexl.import....) will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
- Since:
- 3.3
-
isLexical
- Returns:
- whether lexical scope feature is enabled
-
isLexicalShade
- Returns:
- whether lexical shade feature is enabled
-
isReservedName
Checks whether a name is reserved.- Parameters:
name
- the name to check- Returns:
- true if reserved, false otherwise
-
lambda
Sets whether lambda/function constructs are enabled.When disabled, parsing a script/expression using syntactic lambda constructs (->,function) will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
lexical
Sets whether syntactic lexical mode is enabled.- Parameters:
flag
- true means syntactic lexical function scope is in effect, false implies non-lexical scoping- Returns:
- this features instance
-
lexicalShade
Sets whether syntactic lexical shade is enabled.- Parameters:
flag
- true means syntactic lexical shade is in effect and implies lexical scope- Returns:
- this features instance
-
localVar
Sets whether local variables are enabled.When disabled, parsing a script/expression using a local variable or parameter syntax will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
loops
Sets whether looping constructs are enabled.When disabled, parsing a script/expression using syntactic looping constructs (for,while) will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
methodCall
Sets whether method calls expressions are enabled.When disabled, parsing a script/expression using 'obj.method()' will throw a parsing exception;
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
namespacePragma
Sets whether namespace pragma constructs are enabled.When disabled, parsing a script/expression using syntactic namespace pragma constructs (#pragma jexl.namespace....) will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
- Since:
- 3.3
-
namespaceTest
- Returns:
- the declared namespaces test.
-
namespaceTest
Sets a test to determine namespace declaration.- Parameters:
names
- the name predicate- Returns:
- this features instance
-
newInstance
Sets whether creating new instances is enabled.When disabled, parsing a script/expression using 'new(...)' will throw a parsing exception; using a class as functor will fail at runtime.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
pragma
Sets whether pragma constructs are enabled.When disabled, parsing a script/expression using syntactic pragma constructs (#pragma) will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
pragmaAnywhere
Sets whether pragma constructs can appear anywhere in the code.- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
- Since:
- 3.3
-
register
Sets whether register are enabled.This is mostly used internally during execution of JexlEngine.{g,s}etProperty.
When disabled, parsing a script/expression using the register syntax will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
reservedNames
Sets a collection of reserved r precluding those to be used as local variables or parameter r.- Parameters:
names
- the r to reserve- Returns:
- this features instance
-
script
Sets whether scripts constructs are enabled.When disabled, parsing a script using syntactic script constructs (statements, ...) will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
sideEffect
Sets whether side effect expressions are enabled.When disabled, parsing a script/expression using syntactical constructs modifying variables or members will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
sideEffectGlobal
Sets whether side effect expressions on global variables (aka non-local) are enabled.When disabled, parsing a script/expression using syntactical constructs modifying variables including all potentially ant-ish variables will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
structuredLiteral
Sets whether array/map/set literal expressions are enabled.When disabled, parsing a script/expression creating one of these literals will throw a parsing exception;
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
-
supportsAnnotation
- Returns:
- true if annotation are enabled, false otherwise
-
supportsArrayReferenceExpr
- Returns:
- true if array references can contain method call expressions, false otherwise
-
supportsComparatorNames
- Returns:
- true if legacy comparison operator names syntax is enabled, false otherwise
- Since:
- 3.3
-
supportsConstCapture
- Returns:
- true if lambda captured-variables are const, false otherwise
-
supportsExpression
- Returns:
- true if expressions (aka not scripts) are enabled, false otherwise
-
supportsFatArrow
- Returns:
- true if fat-arrow lambda syntax is enabled, false otherwise
- Since:
- 3.3
-
supportsImportPragma
- Returns:
- true if import pragma are enabled, false otherwise
- Since:
- 3.3
-
supportsLambda
- Returns:
- true if lambda are enabled, false otherwise
-
supportsLocalVar
- Returns:
- true if local variables syntax is enabled
-
supportsLoops
- Returns:
- true if loops are enabled, false otherwise
-
supportsMethodCall
- Returns:
- true if array references can contain expressions, false otherwise
-
supportsNamespacePragma
- Returns:
- true if namespace pragma are enabled, false otherwise
- Since:
- 3.3
-
supportsNewInstance
- Returns:
- true if creating new instances is enabled, false otherwise
-
supportsPragma
- Returns:
- true if namespace pragma are enabled, false otherwise
-
supportsPragmaAnywhere
- Returns:
- true if pragma constructs can appear anywhere in the code, false otherwise
- Since:
- 3.3
-
supportsRegister
- Returns:
- true if register syntax is enabled
-
supportsScript
- Returns:
- true if scripts are enabled, false otherwise
-
supportsSideEffect
- Returns:
- true if side effects are enabled, false otherwise
-
supportsSideEffectGlobal
- Returns:
- true if global variables can be assigned
-
supportsStructuredLiteral
- Returns:
- true if array/map/set literal expressions are supported, false otherwise
-
supportsThinArrow
- Returns:
- true if thin-arrow lambda syntax is enabled, false otherwise
- Since:
- 3.3
-
thinArrow
Sets whether thin-arrow lambda syntax is enabled.When disabled, parsing a script/expression using syntactic thin-arrow (-<) will throw a parsing exception.
- Parameters:
flag
- true to enable, false to disable- Returns:
- this features instance
- Since:
- 3.3
-