Skip to content

Commit dc16f3c

Browse files
committed
Polish SpEL function invocation support
1 parent f2b3263 commit dc16f3c

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

spring-expression/src/main/java/org/springframework/expression/spel/ast/FunctionReference.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ else if (spelParamCount != declaredParamCount) {
217217
}
218218
}
219219

220-
// more complex case, we need to look at conversion and vararg repacking
220+
// more complex case, we need to look at conversion and varargs repackaging
221221
Integer varArgPosition = null;
222222
if (isSuspectedVarargs) {
223223
varArgPosition = declaredParamCount - 1;

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

+8-8
Original file line numberDiff line numberDiff line change
@@ -356,10 +356,10 @@ public static boolean convertAllMethodHandleArguments(TypeConverter converter, O
356356
MethodHandle methodHandle, @Nullable Integer varargsPosition) throws EvaluationException {
357357

358358
boolean conversionOccurred = false;
359-
MethodType methodHandleArgumentTypes = methodHandle.type();
359+
MethodType methodHandleType = methodHandle.type();
360360
if (varargsPosition == null) {
361361
for (int i = 0; i < arguments.length; i++) {
362-
Class<?> argumentClass = methodHandleArgumentTypes.parameterType(i);
362+
Class<?> argumentClass = methodHandleType.parameterType(i);
363363
ResolvableType resolvableType = ResolvableType.forClass(argumentClass);
364364
TypeDescriptor targetType = new TypeDescriptor(resolvableType, argumentClass, null);
365365

@@ -371,7 +371,7 @@ public static boolean convertAllMethodHandleArguments(TypeConverter converter, O
371371
else {
372372
// Convert everything up to the varargs position
373373
for (int i = 0; i < varargsPosition; i++) {
374-
Class<?> argumentClass = methodHandleArgumentTypes.parameterType(i);
374+
Class<?> argumentClass = methodHandleType.parameterType(i);
375375
ResolvableType resolvableType = ResolvableType.forClass(argumentClass);
376376
TypeDescriptor targetType = new TypeDescriptor(resolvableType, argumentClass, null);
377377

@@ -380,10 +380,10 @@ public static boolean convertAllMethodHandleArguments(TypeConverter converter, O
380380
conversionOccurred |= (argument != arguments[i]);
381381
}
382382

383-
Class<?> varArgClass = methodHandleArgumentTypes.lastParameterType().componentType();
383+
Class<?> varArgClass = methodHandleType.lastParameterType().componentType();
384384
ResolvableType varArgResolvableType = ResolvableType.forClass(varArgClass);
385-
TypeDescriptor varArgComponentType = new TypeDescriptor(varArgResolvableType, varArgClass, null);
386-
TypeDescriptor componentTypeDesc = varArgComponentType.getElementTypeDescriptor();
385+
TypeDescriptor targetType = new TypeDescriptor(varArgResolvableType, varArgClass, null);
386+
TypeDescriptor componentTypeDesc = targetType.getElementTypeDescriptor();
387387
// TODO Determine why componentTypeDesc can be null.
388388
// Assert.state(componentTypeDesc != null, "Component type must not be null for a varargs array");
389389

@@ -403,7 +403,7 @@ public static boolean convertAllMethodHandleArguments(TypeConverter converter, O
403403
// convert a String containing a comma would result in the String being split and
404404
// repackaged in an array when it should be used as-is.
405405
else if (componentTypeDesc != null && !sourceType.isAssignableTo(componentTypeDesc)) {
406-
arguments[varargsPosition] = converter.convertValue(argument, sourceType, varArgComponentType);
406+
arguments[varargsPosition] = converter.convertValue(argument, sourceType, targetType);
407407
}
408408
// Possible outcomes of the above if-else block:
409409
// 1) the input argument was null, and nothing was done.
@@ -420,7 +420,7 @@ else if (componentTypeDesc != null && !sourceType.isAssignableTo(componentTypeDe
420420
else {
421421
for (int i = varargsPosition; i < arguments.length; i++) {
422422
Object argument = arguments[i];
423-
arguments[i] = converter.convertValue(argument, TypeDescriptor.forObject(argument), varArgComponentType);
423+
arguments[i] = converter.convertValue(argument, TypeDescriptor.forObject(argument), targetType);
424424
conversionOccurred |= (argument != arguments[i]);
425425
}
426426
}

0 commit comments

Comments
 (0)