diff --git a/spring-expression/src/main/java/org/springframework/expression/TypedValue.java b/spring-expression/src/main/java/org/springframework/expression/TypedValue.java index ccd8b57235..b97020a259 100644 --- a/spring-expression/src/main/java/org/springframework/expression/TypedValue.java +++ b/spring-expression/src/main/java/org/springframework/expression/TypedValue.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,7 +22,8 @@ import org.springframework.util.ObjectUtils; /** * Encapsulates an object and a {@link TypeDescriptor} that describes it. - * The type descriptor can contain generic declarations that would not + * + *

The type descriptor can contain generic declarations that would not * be accessible through a simple {@code getClass()} call on the object. * * @author Andy Clement diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/Selection.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/Selection.java index 72f9aa6f0e..374a9da4d9 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/Selection.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/Selection.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,7 +36,9 @@ import org.springframework.util.ObjectUtils; /** * Represents selection over a map or collection. - * For example: {1,2,3,4,5,6,7,8,9,10}.?{#isEven(#this) == 'y'} returns [2, 4, 6, 8, 10] + * + *

For example, {1,2,3,4,5,6,7,8,9,10}.?{#isEven(#this)} evaluates + * to {@code [2, 4, 6, 8, 10]}. * *

Basically a subset of the input data is returned based on the * evaluation of the expression supplied as selection criteria. @@ -100,11 +102,10 @@ public class Selection extends SpelNodeImpl { Object val = selectionCriteria.getValueInternal(state).getValue(); if (val instanceof Boolean b) { if (b) { + result.put(entry.getKey(), entry.getValue()); if (this.variant == FIRST) { - result.put(entry.getKey(), entry.getValue()); return new ValueRef.TypedValueHolderValueRef(new TypedValue(result), this); } - result.put(entry.getKey(), entry.getValue()); lastKey = entry.getKey(); } } @@ -120,22 +121,22 @@ public class Selection extends SpelNodeImpl { } if ((this.variant == FIRST || this.variant == LAST) && result.isEmpty()) { - return new ValueRef.TypedValueHolderValueRef(new TypedValue(null), this); + return new ValueRef.TypedValueHolderValueRef(TypedValue.NULL, this); } if (this.variant == LAST) { Map resultMap = new HashMap<>(); Object lastValue = result.get(lastKey); - resultMap.put(lastKey,lastValue); - return new ValueRef.TypedValueHolderValueRef(new TypedValue(resultMap),this); + resultMap.put(lastKey, lastValue); + return new ValueRef.TypedValueHolderValueRef(new TypedValue(resultMap), this); } - return new ValueRef.TypedValueHolderValueRef(new TypedValue(result),this); + return new ValueRef.TypedValueHolderValueRef(new TypedValue(result), this); } if (operand instanceof Iterable || ObjectUtils.isArray(operand)) { - Iterable data = (operand instanceof Iterable iterable ? - iterable : Arrays.asList(ObjectUtils.toObjectArray(operand))); + Iterable data = (operand instanceof Iterable iterable ? iterable : + Arrays.asList(ObjectUtils.toObjectArray(operand))); List result = new ArrayList<>(); int index = 0;