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.Objectctxprivate AccessorNodecurrNodeprivate static intDONEprivate static java.lang.Object[]EMPTYARGprivate static java.lang.Class[]EMPTYCLSprivate booleanfirstprivate java.lang.ClassingressTypeprivate static java.util.logging.LoggerLOGprivate java.lang.ClassreturnTypeprivate AccessorNoderootNodeprivate java.lang.ObjectthisRefprivate java.lang.Objectvalprivate VariableResolverFactoryvariableFactory-
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()privateReflectiveAccessorOptimizer(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 voidaddAccessorNode(AccessorNode an)private AccessorNodecompileConstructor(char[] expression, java.lang.Object ctx, VariableResolverFactory vars)private AccessorcompileGetChain()private java.lang.ObjectgetBeanProperty(java.lang.Object ctx, java.lang.String property)private java.lang.ObjectgetBeanPropertyAO(java.lang.Object ctx, java.lang.String property)private java.lang.ObjectgetCollectionProperty(java.lang.Object ctx, java.lang.String prop)Handle accessing a property embedded in a collections, map, or arrayprivate java.lang.ObjectgetCollectionPropertyAO(java.lang.Object ctx, java.lang.String prop)java.lang.ClassgetEgressType()private java.lang.ObjectgetMethod(java.lang.Object ctx, java.lang.String name)Find an appropriate method, execute it, and return it's response.private java.lang.ObjectgetMethod(java.lang.Object ctx, java.lang.String name, java.lang.Object[] args, java.lang.Class[] argTypes, ExecutableStatement[] es)java.lang.ObjectgetResultOptPass()private AccessorNodegetRootNode()java.lang.ObjectgetValue(java.lang.Object ctx, java.lang.Object elCtx, VariableResolverFactory variableFactory)private java.lang.ObjectgetWithProperty(java.lang.Object ctx)voidinit()booleanisLiteralOnly()AccessoroptimizeAccessor(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory, boolean root, java.lang.Class ingressType)AccessoroptimizeCollection(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)AccessoroptimizeObjectCreation(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory)AccessoroptimizeSetAccessor(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.ObjectpropHandler(java.lang.String property, java.lang.Object ctx, java.lang.Class handler)voidpropHandlerSet(java.lang.String property, java.lang.Object ctx, java.lang.Class handler, java.lang.Object value)private voidsetRootNode(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:
initin 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:
optimizeAccessorin 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:
optimizeSetAccessorin 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.ExceptionHandle 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.ExceptionFind 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:
optimizeCollectionin 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:
optimizeObjectCreationin interfaceAccessorOptimizer
-
setRootNode
private void setRootNode(AccessorNode rootNode)
-
getRootNode
private AccessorNode getRootNode()
-
getResultOptPass
public java.lang.Object getResultOptPass()
- Specified by:
getResultOptPassin 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.InstantiationExceptionjava.lang.IllegalAccessExceptionjava.lang.reflect.InvocationTargetExceptionjava.lang.ClassNotFoundExceptionjava.lang.NoSuchMethodException
-
getEgressType
public java.lang.Class getEgressType()
- Specified by:
getEgressTypein interfaceAccessorOptimizer
-
isLiteralOnly
public boolean isLiteralOnly()
- Specified by:
isLiteralOnlyin 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)
-
-