Browse Source

Polishing.

Add deprecations, refine nullability arrangements.

Original Pull Request: #4635
pull/4638/head
Mark Paluch 2 years ago committed by Christoph Strobl
parent
commit
8670d2d369
No known key found for this signature in database
GPG Key ID: E6054036D0C37A4B
  1. 29
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/EvaluationContextExpressionEvaluator.java
  2. 23
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingContext.java

29
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/EvaluationContextExpressionEvaluator.java

@ -17,13 +17,11 @@ package org.springframework.data.mongodb.util.json; @@ -17,13 +17,11 @@ package org.springframework.data.mongodb.util.json;
import java.util.Collections;
import java.util.Map;
import java.util.function.Supplier;
import org.springframework.data.mapping.model.SpELExpressionEvaluator;
import org.springframework.data.mapping.model.ValueExpressionEvaluator;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpression;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.lang.Nullable;
@ -31,18 +29,15 @@ import org.springframework.lang.Nullable; @@ -31,18 +29,15 @@ import org.springframework.lang.Nullable;
* @author Christoph Strobl
* @since 3.3.5
*/
class EvaluationContextExpressionEvaluator implements SpELExpressionEvaluator {
class EvaluationContextExpressionEvaluator implements ValueExpressionEvaluator {
ValueProvider valueProvider;
ExpressionParser expressionParser;
Supplier<EvaluationContext> evaluationContext;
final ValueProvider valueProvider;
final ExpressionParser expressionParser;
public EvaluationContextExpressionEvaluator(ValueProvider valueProvider, ExpressionParser expressionParser,
Supplier<EvaluationContext> evaluationContext) {
public EvaluationContextExpressionEvaluator(ValueProvider valueProvider, ExpressionParser expressionParser) {
this.valueProvider = valueProvider;
this.expressionParser = expressionParser;
this.evaluationContext = evaluationContext;
}
@Nullable
@ -52,19 +47,19 @@ class EvaluationContextExpressionEvaluator implements SpELExpressionEvaluator { @@ -52,19 +47,19 @@ class EvaluationContextExpressionEvaluator implements SpELExpressionEvaluator {
}
public EvaluationContext getEvaluationContext(String expressionString) {
return evaluationContext != null ? evaluationContext.get() : new StandardEvaluationContext();
return new StandardEvaluationContext();
}
public SpelExpression getParsedExpression(String expressionString) {
return (SpelExpression) (expressionParser != null ? expressionParser : new SpelExpressionParser())
.parseExpression(expressionString);
public Expression getParsedExpression(String expressionString) {
return expressionParser.parseExpression(expressionString);
}
@SuppressWarnings("unchecked")
public <T> T evaluateExpression(String expressionString, Map<String, Object> variables) {
SpelExpression expression = getParsedExpression(expressionString);
Expression expression = getParsedExpression(expressionString);
EvaluationContext ctx = getEvaluationContext(expressionString);
variables.forEach((key, value) -> ctx.setVariable(key, value));
variables.forEach(ctx::setVariable);
Object result = expression.getValue(ctx, Object.class);
return (T) result;

23
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingContext.java

@ -19,6 +19,7 @@ import java.util.Map; @@ -19,6 +19,7 @@ import java.util.Map;
import java.util.function.Function;
import java.util.function.Supplier;
import org.springframework.data.mapping.model.SpELExpressionEvaluator;
import org.springframework.data.mapping.model.ValueExpressionEvaluator;
import org.springframework.data.spel.ExpressionDependencies;
import org.springframework.data.util.Lazy;
@ -45,7 +46,9 @@ public class ParameterBindingContext { @@ -45,7 +46,9 @@ public class ParameterBindingContext {
* @param valueProvider
* @param expressionParser
* @param evaluationContext
* @deprecated since 4.3, use {@link #ParameterBindingContext(ValueProvider, ExpressionParser, Supplier)} instead.
*/
@Deprecated(since = "4.3")
public ParameterBindingContext(ValueProvider valueProvider, SpelExpressionParser expressionParser,
EvaluationContext evaluationContext) {
this(valueProvider, expressionParser, () -> evaluationContext);
@ -59,13 +62,29 @@ public class ParameterBindingContext { @@ -59,13 +62,29 @@ public class ParameterBindingContext {
*/
public ParameterBindingContext(ValueProvider valueProvider, ExpressionParser expressionParser,
Supplier<EvaluationContext> evaluationContext) {
this(valueProvider, new EvaluationContextExpressionEvaluator(valueProvider, expressionParser, evaluationContext));
this(valueProvider, new EvaluationContextExpressionEvaluator(valueProvider, expressionParser) {
@Override
public EvaluationContext getEvaluationContext(String expressionString) {
return evaluationContext.get();
}
});
}
/**
* @param valueProvider
* @param expressionEvaluator
* @since 3.1
* @deprecated since 4.3, use {@link #ParameterBindingContext(ValueProvider, ValueExpressionEvaluator)} instead.
*/
@Deprecated(since = "4.3")
public ParameterBindingContext(ValueProvider valueProvider, SpELExpressionEvaluator expressionEvaluator) {
this(valueProvider, (ValueExpressionEvaluator) expressionEvaluator);
}
/**
* @param valueProvider
* @param expressionEvaluator
* @since 4.3
*/
public ParameterBindingContext(ValueProvider valueProvider, ValueExpressionEvaluator expressionEvaluator) {
this.valueProvider = valueProvider;
@ -86,7 +105,7 @@ public class ParameterBindingContext { @@ -86,7 +105,7 @@ public class ParameterBindingContext {
Function<ExpressionDependencies, EvaluationContext> contextFunction) {
return new ParameterBindingContext(valueProvider,
new EvaluationContextExpressionEvaluator(valueProvider, expressionParser, null) {
new EvaluationContextExpressionEvaluator(valueProvider, expressionParser) {
@Override
public EvaluationContext getEvaluationContext(String expressionString) {

Loading…
Cancel
Save