Package org.mvel2.optimizers.impl.refl
Class ReflectiveAccessorOptimizer
- java.lang.Object
-
- org.mvel2.compiler.AbstractParser
-
- org.mvel2.optimizers.AbstractOptimizer
-
- org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer
-
- All Implemented Interfaces:
java.io.Serializable
,Parser
,AccessorOptimizer
public class ReflectiveAccessorOptimizer extends AbstractOptimizer implements AccessorOptimizer
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.Object
ctx
private AccessorNode
currNode
private static int
DONE
private static java.lang.Object[]
EMPTYARG
private static java.lang.Class[]
EMPTYCLS
private boolean
first
private java.lang.Class
ingressType
private static java.util.logging.Logger
LOG
private java.lang.Class
returnType
private AccessorNode
rootNode
private java.lang.Object
thisRef
private java.lang.Object
val
private VariableResolverFactory
variableFactory
-
Fields inherited from class org.mvel2.optimizers.AbstractOptimizer
BEAN, COL, collection, currType, METH, nullSafe, staticAccess, tkStart, WITH
-
Fields inherited from class org.mvel2.compiler.AbstractParser
CLASS_LITERALS, compileMode, cursor, debugSymbols, dStack, end, expr, fields, GET, GET_OR_CREATE, greedy, lastLineStart, lastNode, lastWasComment, lastWasIdentifier, lastWasLineLabel, length, LEVEL_0_PROPERTY_ONLY, LEVEL_1_BASIC_LANG, LEVEL_2_MULTI_STATEMENT, LEVEL_3_ITERATION, LEVEL_4_ASSIGNMENT, LEVEL_5_CONTROL_FLOW, line, literalOnly, LITERALS, OP_CONTINUE, OP_NOT_LITERAL, OP_OVERFLOW, OP_RESET_FRAME, OP_TERMINATE, OPERATORS, pCtx, REMOVE, SET, splitAccumulator, st, start, stk
-
-
Constructor Summary
Constructors Modifier Constructor Description ReflectiveAccessorOptimizer()
private
ReflectiveAccessorOptimizer(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory variableFactory)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private Accessor
_getAccessor(java.lang.Object o, java.lang.Class type)
private void
addAccessorNode(AccessorNode an)
private AccessorNode
compileConstructor(char[] expression, java.lang.Object ctx, VariableResolverFactory vars)
private Accessor
compileGetChain()
private java.lang.Object
getBeanProperty(java.lang.Object ctx, java.lang.String property)
private java.lang.Object
getBeanPropertyAO(java.lang.Object ctx, java.lang.String property)
private java.lang.Object
getCollectionProperty(java.lang.Object ctx, java.lang.String prop)
Handle accessing a property embedded in a collections, map, or arrayprivate java.lang.Object
getCollectionPropertyAO(java.lang.Object ctx, java.lang.String prop)
java.lang.Class
getEgressType()
private java.lang.Object
getMethod(java.lang.Object ctx, java.lang.String name)
Find an appropriate method, execute it, and return it's response.private java.lang.Object
getMethod(java.lang.Object ctx, java.lang.String name, java.lang.Object[] args, java.lang.Class[] argTypes, ExecutableStatement[] es)
java.lang.Object
getResultOptPass()
private AccessorNode
getRootNode()
java.lang.Object
getValue(java.lang.Object ctx, java.lang.Object elCtx, VariableResolverFactory variableFactory)
private java.lang.Object
getWithProperty(java.lang.Object ctx)
void
init()
boolean
isLiteralOnly()
Accessor
optimizeAccessor(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory, boolean root, java.lang.Class ingressType)
Accessor
optimizeCollection(ParserContext pCtx, java.lang.Object o, java.lang.Class type, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory)
Accessor
optimizeObjectCreation(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory)
Accessor
optimizeSetAccessor(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory, boolean rootThisRef, java.lang.Object value, java.lang.Class ingressType)
private java.lang.Object
propHandler(java.lang.String property, java.lang.Object ctx, java.lang.Class handler)
void
propHandlerSet(java.lang.String property, java.lang.Object ctx, java.lang.Class handler, java.lang.Object value)
private void
setRootNode(AccessorNode rootNode)
-
Methods inherited from class org.mvel2.optimizers.AbstractOptimizer
capture, findLastUnion, nextSubToken, scanTo, tryStaticAccess, whiteSpaceSkip
-
Methods inherited from class org.mvel2.compiler.AbstractParser
addFatalError, addFatalError, arithmeticFunctionReduction, captureIdentifier, captureToEOS, captureToEOSorEOL, captureToEOT, captureToNextTokenJunction, expectEOS, expectNextChar_IW, getCursor, getExpression, handleSubstatement, handleUnion, ifThenElseBlockContinues, incNextNonBlank, isArithmeticOperator, isNextIdentifier, isNextIdentifierOrLiteral, isStatementNotManuallyTerminated, lastNonWhite, loadLanguageFeaturesByLevel, lookAhead, lookAhead, lookBehind, lookToLast, nextNonBlank, nextToken, nextTokenSkipSymbols, reduce, setExpression, setExpression, setLanguageLevel, setupParser, skipWhitespace, tokenContinues, trimLeft, trimRight, trimWhitespace
-
-
-
-
Field Detail
-
LOG
private static final java.util.logging.Logger LOG
-
rootNode
private AccessorNode rootNode
-
currNode
private AccessorNode currNode
-
ctx
private java.lang.Object ctx
-
thisRef
private java.lang.Object thisRef
-
val
private java.lang.Object val
-
variableFactory
private VariableResolverFactory variableFactory
-
DONE
private static final int DONE
- See Also:
- Constant Field Values
-
EMPTYARG
private static final java.lang.Object[] EMPTYARG
-
EMPTYCLS
private static final java.lang.Class[] EMPTYCLS
-
first
private boolean first
-
ingressType
private java.lang.Class ingressType
-
returnType
private java.lang.Class returnType
-
-
Constructor Detail
-
ReflectiveAccessorOptimizer
public ReflectiveAccessorOptimizer()
-
ReflectiveAccessorOptimizer
private ReflectiveAccessorOptimizer(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory variableFactory)
-
-
Method Detail
-
init
public void init()
- Specified by:
init
in interfaceAccessorOptimizer
-
optimizeAccessor
public Accessor optimizeAccessor(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory, boolean root, java.lang.Class ingressType)
- Specified by:
optimizeAccessor
in interfaceAccessorOptimizer
-
optimizeSetAccessor
public Accessor optimizeSetAccessor(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory, boolean rootThisRef, java.lang.Object value, java.lang.Class ingressType)
- Specified by:
optimizeSetAccessor
in interfaceAccessorOptimizer
-
compileGetChain
private Accessor compileGetChain()
-
addAccessorNode
private void addAccessorNode(AccessorNode an)
-
getWithProperty
private java.lang.Object getWithProperty(java.lang.Object ctx)
-
getBeanPropertyAO
private java.lang.Object getBeanPropertyAO(java.lang.Object ctx, java.lang.String property) throws java.lang.Exception
- Throws:
java.lang.Exception
-
getBeanProperty
private java.lang.Object getBeanProperty(java.lang.Object ctx, java.lang.String property) throws java.lang.Exception
- Throws:
java.lang.Exception
-
getCollectionProperty
private java.lang.Object getCollectionProperty(java.lang.Object ctx, java.lang.String prop) throws java.lang.Exception
Handle accessing a property embedded in a collections, map, or array- Parameters:
ctx
- -prop
- -- Returns:
- -
- Throws:
java.lang.Exception
- -
-
getCollectionPropertyAO
private java.lang.Object getCollectionPropertyAO(java.lang.Object ctx, java.lang.String prop) throws java.lang.Exception
- Throws:
java.lang.Exception
-
getMethod
private java.lang.Object getMethod(java.lang.Object ctx, java.lang.String name) throws java.lang.Exception
Find an appropriate method, execute it, and return it's response.- Parameters:
ctx
- -name
- -- Returns:
- -
- Throws:
java.lang.Exception
- -
-
getMethod
private java.lang.Object getMethod(java.lang.Object ctx, java.lang.String name, java.lang.Object[] args, java.lang.Class[] argTypes, ExecutableStatement[] es) throws java.lang.Exception
- Throws:
java.lang.Exception
-
getValue
public java.lang.Object getValue(java.lang.Object ctx, java.lang.Object elCtx, VariableResolverFactory variableFactory) throws java.lang.Exception
- Throws:
java.lang.Exception
-
_getAccessor
private Accessor _getAccessor(java.lang.Object o, java.lang.Class type)
-
optimizeCollection
public Accessor optimizeCollection(ParserContext pCtx, java.lang.Object o, java.lang.Class type, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory)
- Specified by:
optimizeCollection
in interfaceAccessorOptimizer
-
optimizeObjectCreation
public Accessor optimizeObjectCreation(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory)
- Specified by:
optimizeObjectCreation
in interfaceAccessorOptimizer
-
setRootNode
private void setRootNode(AccessorNode rootNode)
-
getRootNode
private AccessorNode getRootNode()
-
getResultOptPass
public java.lang.Object getResultOptPass()
- Specified by:
getResultOptPass
in interfaceAccessorOptimizer
-
compileConstructor
private AccessorNode compileConstructor(char[] expression, java.lang.Object ctx, VariableResolverFactory vars) throws java.lang.InstantiationException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, java.lang.ClassNotFoundException, java.lang.NoSuchMethodException
- Throws:
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
java.lang.ClassNotFoundException
java.lang.NoSuchMethodException
-
getEgressType
public java.lang.Class getEgressType()
- Specified by:
getEgressType
in interfaceAccessorOptimizer
-
isLiteralOnly
public boolean isLiteralOnly()
- Specified by:
isLiteralOnly
in interfaceAccessorOptimizer
-
propHandler
private java.lang.Object propHandler(java.lang.String property, java.lang.Object ctx, java.lang.Class handler)
-
propHandlerSet
public void propHandlerSet(java.lang.String property, java.lang.Object ctx, java.lang.Class handler, java.lang.Object value)
-
-