From 8670d2d3693cce262e1942f76cb8fcd55ea8d3a1 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 13 Feb 2024 10:43:11 +0100 Subject: [PATCH] Polishing. Add deprecations, refine nullability arrangements. Original Pull Request: #4635 --- .../EvaluationContextExpressionEvaluator.java | 29 ++++++++----------- .../util/json/ParameterBindingContext.java | 23 +++++++++++++-- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/EvaluationContextExpressionEvaluator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/EvaluationContextExpressionEvaluator.java index 0256e20d5..9759e374f 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/EvaluationContextExpressionEvaluator.java +++ b/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; 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; * @author Christoph Strobl * @since 3.3.5 */ -class EvaluationContextExpressionEvaluator implements SpELExpressionEvaluator { +class EvaluationContextExpressionEvaluator implements ValueExpressionEvaluator { - ValueProvider valueProvider; - ExpressionParser expressionParser; - Supplier evaluationContext; + final ValueProvider valueProvider; + final ExpressionParser expressionParser; - public EvaluationContextExpressionEvaluator(ValueProvider valueProvider, ExpressionParser expressionParser, - Supplier 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 { } 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 evaluateExpression(String expressionString, Map 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; diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingContext.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingContext.java index 8bc1f7a78..1ad1f31a3 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingContext.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingContext.java @@ -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 { * @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 { */ public ParameterBindingContext(ValueProvider valueProvider, ExpressionParser expressionParser, Supplier 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 { Function contextFunction) { return new ParameterBindingContext(valueProvider, - new EvaluationContextExpressionEvaluator(valueProvider, expressionParser, null) { + new EvaluationContextExpressionEvaluator(valueProvider, expressionParser) { @Override public EvaluationContext getEvaluationContext(String expressionString) {