Skip to content

Commit 71e60f4

Browse files
author
Keith Donald
committed
Favor convertValue(Object, TypeDescriptor) where possible and TypedValue(Object); check with Andy on Selection and Projection TypedValue usage
1 parent 0fb6313 commit 71e60f4

File tree

12 files changed

+32
-47
lines changed

12 files changed

+32
-47
lines changed

org.springframework.core/src/main/java/org/springframework/core/convert/support/ConversionUtils.java

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
package org.springframework.core.convert.support;
1818

19-
import java.util.Map;
20-
2119
import org.springframework.core.convert.ConversionFailedException;
2220
import org.springframework.core.convert.TypeDescriptor;
2321
import org.springframework.core.convert.converter.GenericConverter;
@@ -43,24 +41,4 @@ public static Object invokeConverter(GenericConverter converter, Object source,
4341
}
4442
}
4543

46-
public static TypeDescriptor[] getMapEntryTypes(Map<?, ?> sourceMap) {
47-
Class<?> keyType = null;
48-
Class<?> valueType = null;
49-
for (Object entry : sourceMap.entrySet()) {
50-
Map.Entry<?, ?> mapEntry = (Map.Entry<?, ?>) entry;
51-
Object key = mapEntry.getKey();
52-
if (keyType == null && key != null) {
53-
keyType = key.getClass();
54-
}
55-
Object value = mapEntry.getValue();
56-
if (valueType == null && value != null) {
57-
valueType = value.getClass();
58-
}
59-
if (keyType!= null && valueType != null) {
60-
break;
61-
}
62-
}
63-
return new TypeDescriptor[] { TypeDescriptor.valueOf(keyType), TypeDescriptor.valueOf(valueType) };
64-
}
65-
6644
}

org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionTests.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,7 @@ public void convertStringToCollection() {
457457

458458
@Test
459459
public void convertStringToCollectionWithElementConversion() throws Exception {
460-
List result = (List) conversionService.convert("1,2,3", TypeDescriptor.valueOf(String.class),
461-
new TypeDescriptor(getClass().getField("genericList")));
460+
List result = (List) conversionService.convert("1,2,3", new TypeDescriptor(getClass().getField("genericList")));
462461
assertEquals(3, result.size());
463462
assertEquals(new Integer(1), result.get(0));
464463
assertEquals(new Integer(2), result.get(1));
@@ -494,8 +493,7 @@ public void convertObjectToCollection() {
494493

495494
@Test
496495
public void convertObjectToCollectionWithElementConversion() throws Exception {
497-
List<Integer> result = (List<Integer>) conversionService.convert(3L, TypeDescriptor.valueOf(Long.class),
498-
new TypeDescriptor(getClass().getField("genericList")));
496+
List<Integer> result = (List<Integer>) conversionService.convert(3L, new TypeDescriptor(getClass().getField("genericList")));
499497
assertEquals(1, result.size());
500498
assertEquals(new Integer(3), result.get(0));
501499
}

org.springframework.expression/src/main/java/org/springframework/expression/TypeConverter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,9 @@ public interface TypeConverter {
4949
* @throws EvaluationException if conversion is not possible
5050
*/
5151
Object convertValue(Object value, TypeDescriptor sourceType, TypeDescriptor targetType);
52+
53+
// 3.1 additions for encapsulation of TypeDescriptor.forObject(value);
54+
55+
Object convertValue(Object value, TypeDescriptor targetType);
5256

5357
}

org.springframework.expression/src/main/java/org/springframework/expression/spel/ExpressionState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ public Object convertValue(Object value, TypeDescriptor targetTypeDescriptor) th
141141
}
142142

143143
public Object convertValue(TypedValue value, TypeDescriptor targetTypeDescriptor) throws EvaluationException {
144-
return this.relatedContext.getTypeConverter().convertValue(value.getValue(), TypeDescriptor.forObject(value.getValue()), targetTypeDescriptor);
144+
return this.relatedContext.getTypeConverter().convertValue(value.getValue(), targetTypeDescriptor);
145145
}
146146

147147
/*

org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/ConstructorReference.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,7 @@ private void populateReferenceTypeArray(ExpressionState state, Object newArray,
322322
for (int i = 0; i < newObjectArray.length; i++) {
323323
SpelNode elementNode = initializer.getChild(i);
324324
Object arrayEntry = elementNode.getValue(state);
325-
newObjectArray[i] = typeConverter.convertValue(arrayEntry, TypeDescriptor.forObject(arrayEntry),
326-
toTypeDescriptor);
325+
newObjectArray[i] = typeConverter.convertValue(arrayEntry, toTypeDescriptor);
327326
}
328327
}
329328

org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/Projection.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.util.List;
2424
import java.util.Map;
2525

26-
import org.springframework.core.convert.TypeDescriptor;
2726
import org.springframework.expression.EvaluationException;
2827
import org.springframework.expression.TypedValue;
2928
import org.springframework.expression.spel.ExpressionState;
@@ -85,7 +84,7 @@ else if (operand instanceof Collection || operandIsArray) {
8584
Class<?> arrayElementType = null;
8685
for (Object element : data) {
8786
try {
88-
state.pushActiveContextObject(new TypedValue(element ,TypeDescriptor.valueOf(op.getTypeDescriptor().getType())));
87+
state.pushActiveContextObject(new TypedValue(element));
8988
state.enterScope("index", idx);
9089
Object value = children[0].getValueInternal(state).getValue();
9190
if (value != null && operandIsArray) {
@@ -105,9 +104,9 @@ else if (operand instanceof Collection || operandIsArray) {
105104
}
106105
Object resultArray = Array.newInstance(arrayElementType, result.size());
107106
System.arraycopy(result.toArray(), 0, resultArray, 0, result.size());
108-
return new TypedValue(resultArray, op.getTypeDescriptor());
107+
return new TypedValue(resultArray);
109108
}
110-
return new TypedValue(result, op.getTypeDescriptor());
109+
return new TypedValue(result);
111110
}
112111
else {
113112
if (operand==null) {

org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/Selection.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.util.List;
2525
import java.util.Map;
2626

27-
import org.springframework.core.convert.TypeDescriptor;
2827
import org.springframework.expression.EvaluationException;
2928
import org.springframework.expression.TypedValue;
3029
import org.springframework.expression.spel.ExpressionState;
@@ -101,9 +100,9 @@ public TypedValue getValueInternal(ExpressionState state) throws EvaluationExcep
101100
Map resultMap = new HashMap();
102101
Object lastValue = result.get(lastKey);
103102
resultMap.put(lastKey,lastValue);
104-
return new TypedValue(resultMap,TypeDescriptor.valueOf(Map.class));
103+
return new TypedValue(resultMap);
105104
}
106-
return new TypedValue(result,op.getTypeDescriptor());
105+
return new TypedValue(result);
107106
} else if ((operand instanceof Collection) || ObjectUtils.isArray(operand)) {
108107
List<Object> data = new ArrayList<Object>();
109108
Collection<?> c = (operand instanceof Collection) ?
@@ -113,13 +112,13 @@ public TypedValue getValueInternal(ExpressionState state) throws EvaluationExcep
113112
int idx = 0;
114113
for (Object element : data) {
115114
try {
116-
state.pushActiveContextObject(new TypedValue(element, op.getTypeDescriptor().getElementTypeDescriptor()));
115+
state.pushActiveContextObject(new TypedValue(element));
117116
state.enterScope("index", idx);
118117
Object o = selectionCriteria.getValueInternal(state).getValue();
119118
if (o instanceof Boolean) {
120119
if (((Boolean) o).booleanValue() == true) {
121120
if (variant == FIRST) {
122-
return new TypedValue(element, op.getTypeDescriptor().getElementTypeDescriptor());
121+
return new TypedValue(element);
123122
}
124123
result.add(element);
125124
}
@@ -137,16 +136,16 @@ public TypedValue getValueInternal(ExpressionState state) throws EvaluationExcep
137136
return TypedValue.NULL;
138137
}
139138
if (variant == LAST) {
140-
return new TypedValue(result.get(result.size() - 1), op.getTypeDescriptor().getElementTypeDescriptor());
139+
return new TypedValue(result.get(result.size() - 1));
141140
}
142141
if (operand instanceof Collection) {
143-
return new TypedValue(result,op.getTypeDescriptor());
142+
return new TypedValue(result);
144143
}
145144
else {
146145
Class<?> elementType = ClassUtils.resolvePrimitiveIfNecessary(op.getTypeDescriptor().getElementType());
147146
Object resultArray = Array.newInstance(elementType, result.size());
148147
System.arraycopy(result.toArray(), 0, resultArray, 0, result.size());
149-
return new TypedValue(resultArray, op.getTypeDescriptor());
148+
return new TypedValue(resultArray);
150149
}
151150
} else {
152151
if (operand==null) {

org.springframework.expression/src/main/java/org/springframework/expression/spel/support/ReflectionHelper.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,7 @@ static void convertArguments(TypeConverter converter, Object[] arguments, Object
241241
else {
242242
targetType = new TypeDescriptor(MethodParameter.forMethodOrConstructor(methodOrCtor, argPosition));
243243
}
244-
arguments[argPosition] = converter.convertValue(
245-
arguments[argPosition], TypeDescriptor.forObject(arguments[argPosition]), targetType);
244+
arguments[argPosition] = converter.convertValue(arguments[argPosition], targetType);
246245
}
247246
}
248247

@@ -279,7 +278,7 @@ public static void convertAllArguments(TypeConverter converter, Object[] argumen
279278
if (converter == null) {
280279
throw new SpelEvaluationException(SpelMessage.TYPE_CONVERSION_ERROR, argument.getClass().getName(), targetType);
281280
}
282-
arguments[argPosition] = converter.convertValue(argument, TypeDescriptor.forObject(argument), targetType);
281+
arguments[argPosition] = converter.convertValue(argument, targetType);
283282
}
284283
}
285284
catch (EvaluationException ex) {

org.springframework.expression/src/main/java/org/springframework/expression/spel/support/ReflectivePropertyAccessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ public void write(EvaluationContext context, Object target, String name, Object
218218
TypeDescriptor typeDescriptor = getTypeDescriptor(context, target, name);
219219
if (typeDescriptor != null) {
220220
try {
221-
possiblyConvertedNewValue = context.getTypeConverter().convertValue(newValue, TypeDescriptor.forObject(newValue), typeDescriptor);
221+
possiblyConvertedNewValue = context.getTypeConverter().convertValue(newValue, typeDescriptor);
222222
}
223223
catch (EvaluationException evaluationException) {
224224
throw new AccessException("Type conversion failure",evaluationException);

org.springframework.expression/src/main/java/org/springframework/expression/spel/support/StandardTypeConverter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,8 @@ public Object convertValue(Object value, TypeDescriptor sourceType, TypeDescript
7575
}
7676
}
7777

78+
public Object convertValue(Object value, TypeDescriptor targetType) {
79+
return convertValue(value, TypeDescriptor.forObject(value), targetType);
80+
}
81+
7882
}

0 commit comments

Comments
 (0)