@ -30,6 +30,7 @@ import org.springframework.expression.PropertyAccessor;
@@ -30,6 +30,7 @@ import org.springframework.expression.PropertyAccessor;
import org.springframework.expression.TypeComparator ;
import org.springframework.expression.TypeConverter ;
import org.springframework.expression.TypedValue ;
import org.springframework.util.Assert ;
/ * *
* An ExpressionState is for maintaining per - expression - evaluation state , any changes to
@ -49,35 +50,33 @@ public class ExpressionState {
@@ -49,35 +50,33 @@ public class ExpressionState {
private final EvaluationContext relatedContext ;
private Stack < VariableScope > variableScopes ;
private final TypedValue rootObject ;
private Stack < TypedValue > contextObjects ;
private final SpelParserConfiguration configuration ;
private final TypedValue rootObject ;
private Stack < VariableScope > variableScopes ;
private SpelParserConfiguration configuration ;
private Stack < TypedValue > contextObjects ;
public ExpressionState ( EvaluationContext context ) {
this . relatedContext = context ;
this . rootObject = context . getRootObject ( ) ;
this ( context , context . getRootObject ( ) , new SpelParserConfiguration ( false , false ) ) ;
}
public ExpressionState ( EvaluationContext context , SpelParserConfiguration configuration ) {
this . relatedContext = context ;
this . configuration = configuration ;
this . rootObject = context . getRootObject ( ) ;
this ( context , context . getRootObject ( ) , configuration ) ;
}
public ExpressionState ( EvaluationContext context , TypedValue rootObject ) {
this . relatedContext = context ;
this . rootObject = rootObject ;
this ( context , rootObject , new SpelParserConfiguration ( false , false ) ) ;
}
public ExpressionState ( EvaluationContext context , TypedValue rootObject , SpelParserConfiguration configuration ) {
Assert . notNull ( context , "EvaluationContext must not be null" ) ;
Assert . notNull ( configuration , "SpelParserConfiguration must not be null" ) ;
this . relatedContext = context ;
this . configuration = configuration ;
this . rootObject = rootObject ;
this . configuration = configuration ;
}
@ -96,7 +95,6 @@ public class ExpressionState {
@@ -96,7 +95,6 @@ public class ExpressionState {
if ( this . contextObjects = = null | | this . contextObjects . isEmpty ( ) ) {
return this . rootObject ;
}
return this . contextObjects . peek ( ) ;
}
@ -151,14 +149,12 @@ public class ExpressionState {
@@ -151,14 +149,12 @@ public class ExpressionState {
public Object convertValue ( TypedValue value , TypeDescriptor targetTypeDescriptor ) throws EvaluationException {
Object val = value . getValue ( ) ;
return this . relatedContext . getTypeConverter ( ) . convertValue ( val ,
TypeDescriptor . forObject ( val ) , targetTypeDescriptor ) ;
return this . relatedContext . getTypeConverter ( ) . convertValue ( val , TypeDescriptor . forObject ( val ) , targetTypeDescriptor ) ;
}
/ *
* A new scope is entered when a function is invoked
* A new scope is entered when a function is invoked .
* /
public void enterScope ( Map < String , Object > argMap ) {
ensureVariableScopesInitialized ( ) ;
this . variableScopes . push ( new VariableScope ( argMap ) ) ;
@ -217,16 +213,18 @@ public class ExpressionState {
@@ -217,16 +213,18 @@ public class ExpressionState {
/ * *
* A new scope is entered when a function is called and it is used to hold the parameters to the function call . If the names
* of the parameters clash with those in a higher level scope , those in the higher level scope will not be accessible whilst
* the function is executing . When the function returns the scope is exited .
* A new scope is entered when a function is called and it is used to hold the
* parameters to the function call . If the names of the parameters clash with
* those in a higher level scope , those in the higher level scope will not be
* accessible whilst the function is executing . When the function returns ,
* the scope is exited .
* /
private static class VariableScope {
private final Map < String , Object > vars = new HashMap < String , Object > ( ) ;
public VariableScope ( ) { }
public VariableScope ( ) {
}
public VariableScope ( Map < String , Object > arguments ) {
if ( arguments ! = null ) {
@ -238,7 +236,6 @@ public class ExpressionState {
@@ -238,7 +236,6 @@ public class ExpressionState {
this . vars . put ( name , value ) ;
}
public Object lookupVariable ( String name ) {
return this . vars . get ( name ) ;
}