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;
import java.util.Collections; import java.util.Collections;
import java.util.Map; 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.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser; 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.expression.spel.support.StandardEvaluationContext;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
@ -31,18 +29,15 @@ import org.springframework.lang.Nullable;
* @author Christoph Strobl * @author Christoph Strobl
* @since 3.3.5 * @since 3.3.5
*/ */
class EvaluationContextExpressionEvaluator implements SpELExpressionEvaluator { class EvaluationContextExpressionEvaluator implements ValueExpressionEvaluator {
ValueProvider valueProvider; final ValueProvider valueProvider;
ExpressionParser expressionParser; final ExpressionParser expressionParser;
Supplier<EvaluationContext> evaluationContext;
public EvaluationContextExpressionEvaluator(ValueProvider valueProvider, ExpressionParser expressionParser, public EvaluationContextExpressionEvaluator(ValueProvider valueProvider, ExpressionParser expressionParser) {
Supplier<EvaluationContext> evaluationContext) {
this.valueProvider = valueProvider; this.valueProvider = valueProvider;
this.expressionParser = expressionParser; this.expressionParser = expressionParser;
this.evaluationContext = evaluationContext;
} }
@Nullable @Nullable
@ -52,19 +47,19 @@ class EvaluationContextExpressionEvaluator implements SpELExpressionEvaluator {
} }
public EvaluationContext getEvaluationContext(String expressionString) { public EvaluationContext getEvaluationContext(String expressionString) {
return evaluationContext != null ? evaluationContext.get() : new StandardEvaluationContext(); return new StandardEvaluationContext();
} }
public SpelExpression getParsedExpression(String expressionString) { public Expression getParsedExpression(String expressionString) {
return (SpelExpression) (expressionParser != null ? expressionParser : new SpelExpressionParser()) return expressionParser.parseExpression(expressionString);
.parseExpression(expressionString);
} }
@SuppressWarnings("unchecked")
public <T> T evaluateExpression(String expressionString, Map<String, Object> variables) { public <T> T evaluateExpression(String expressionString, Map<String, Object> variables) {
SpelExpression expression = getParsedExpression(expressionString); Expression expression = getParsedExpression(expressionString);
EvaluationContext ctx = getEvaluationContext(expressionString); EvaluationContext ctx = getEvaluationContext(expressionString);
variables.forEach((key, value) -> ctx.setVariable(key, value)); variables.forEach(ctx::setVariable);
Object result = expression.getValue(ctx, Object.class); Object result = expression.getValue(ctx, Object.class);
return (T) result; 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;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
import org.springframework.data.mapping.model.SpELExpressionEvaluator;
import org.springframework.data.mapping.model.ValueExpressionEvaluator; import org.springframework.data.mapping.model.ValueExpressionEvaluator;
import org.springframework.data.spel.ExpressionDependencies; import org.springframework.data.spel.ExpressionDependencies;
import org.springframework.data.util.Lazy; import org.springframework.data.util.Lazy;
@ -45,7 +46,9 @@ public class ParameterBindingContext {
* @param valueProvider * @param valueProvider
* @param expressionParser * @param expressionParser
* @param evaluationContext * @param evaluationContext
* @deprecated since 4.3, use {@link #ParameterBindingContext(ValueProvider, ExpressionParser, Supplier)} instead.
*/ */
@Deprecated(since = "4.3")
public ParameterBindingContext(ValueProvider valueProvider, SpelExpressionParser expressionParser, public ParameterBindingContext(ValueProvider valueProvider, SpelExpressionParser expressionParser,
EvaluationContext evaluationContext) { EvaluationContext evaluationContext) {
this(valueProvider, expressionParser, () -> evaluationContext); this(valueProvider, expressionParser, () -> evaluationContext);
@ -59,13 +62,29 @@ public class ParameterBindingContext {
*/ */
public ParameterBindingContext(ValueProvider valueProvider, ExpressionParser expressionParser, public ParameterBindingContext(ValueProvider valueProvider, ExpressionParser expressionParser,
Supplier<EvaluationContext> evaluationContext) { 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 valueProvider
* @param expressionEvaluator * @param expressionEvaluator
* @since 3.1 * @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) { public ParameterBindingContext(ValueProvider valueProvider, ValueExpressionEvaluator expressionEvaluator) {
this.valueProvider = valueProvider; this.valueProvider = valueProvider;
@ -86,7 +105,7 @@ public class ParameterBindingContext {
Function<ExpressionDependencies, EvaluationContext> contextFunction) { Function<ExpressionDependencies, EvaluationContext> contextFunction) {
return new ParameterBindingContext(valueProvider, return new ParameterBindingContext(valueProvider,
new EvaluationContextExpressionEvaluator(valueProvider, expressionParser, null) { new EvaluationContextExpressionEvaluator(valueProvider, expressionParser) {
@Override @Override
public EvaluationContext getEvaluationContext(String expressionString) { public EvaluationContext getEvaluationContext(String expressionString) {

Loading…
Cancel
Save