package com.qianwen.core.tool.spel; import java.lang.reflect.Method; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.expression.AnnotatedElementKey; import org.springframework.context.expression.BeanFactoryResolver; import org.springframework.context.expression.CachedExpressionEvaluator; import org.springframework.context.expression.MethodBasedEvaluationContext; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.lang.Nullable; /* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/spel/BladeExpressionEvaluator.class */ public class BladeExpressionEvaluator extends CachedExpressionEvaluator { private final Map expressionCache = new ConcurrentHashMap(64); private final Map methodCache = new ConcurrentHashMap(64); public EvaluationContext createContext(Method method, Object[] args, Object target, Class targetClass, @Nullable BeanFactory beanFactory) { Method targetMethod = getTargetMethod(targetClass, method); BladeExpressionRootObject rootObject = new BladeExpressionRootObject(method, args, target, targetClass, targetMethod); MethodBasedEvaluationContext evaluationContext = new MethodBasedEvaluationContext(rootObject, targetMethod, args, getParameterNameDiscoverer()); if (beanFactory != null) { evaluationContext.setBeanResolver(new BeanFactoryResolver(beanFactory)); } return evaluationContext; } public EvaluationContext createContext(Method method, Object[] args, Class targetClass, Object rootObject, @Nullable BeanFactory beanFactory) { Method targetMethod = getTargetMethod(targetClass, method); MethodBasedEvaluationContext evaluationContext = new MethodBasedEvaluationContext(rootObject, targetMethod, args, getParameterNameDiscoverer()); if (beanFactory != null) { evaluationContext.setBeanResolver(new BeanFactoryResolver(beanFactory)); } return evaluationContext; } @Nullable public Object eval(String expression, AnnotatedElementKey methodKey, EvaluationContext evalContext) { return eval(expression, methodKey, evalContext, null); } @Nullable public T eval(String expression, AnnotatedElementKey methodKey, EvaluationContext evalContext, @Nullable Class valueType) { return (T) getExpression(this.expressionCache, methodKey, expression).getValue(evalContext, valueType); } @Nullable public String evalAsText(String expression, AnnotatedElementKey methodKey, EvaluationContext evalContext) { return (String) eval(expression, methodKey, evalContext, String.class); } public boolean evalAsBool(String expression, AnnotatedElementKey methodKey, EvaluationContext evalContext) { return Boolean.TRUE.equals(eval(expression, methodKey, evalContext, Boolean.class)); } private Method getTargetMethod(Class targetClass, Method method) { AnnotatedElementKey methodKey = new AnnotatedElementKey(method, targetClass); return this.methodCache.computeIfAbsent(methodKey, key -> { return AopUtils.getMostSpecificMethod(method, targetClass); }); } public void clear() { this.expressionCache.clear(); this.methodCache.clear(); } }