|
53 | 53 | import graphql.language.StringValue;
|
54 | 54 | import graphql.language.Value;
|
55 | 55 | import graphql.language.VariableReference;
|
| 56 | +import graphql.schema.Coercing; |
56 | 57 | import graphql.schema.DataFetchingEnvironment;
|
57 | 58 | import graphql.schema.GraphQLArgument;
|
58 | 59 | import graphql.schema.GraphQLFieldDefinition;
|
@@ -1509,24 +1510,30 @@ protected Object convertValue(DataFetchingEnvironment environment, Argument argu
|
1509 | 1510 | // Return provided StringValue
|
1510 | 1511 | return ((StringValue) value).getValue();
|
1511 | 1512 | }
|
1512 |
| - } else if (value instanceof VariableReference) { |
| 1513 | + } else if (value instanceof VariableReference variableReference) { |
1513 | 1514 | Class javaType = getJavaType(environment, argument);
|
1514 |
| - Object argumentValue = environment.getVariables().get(VariableReference.class.cast(value).getName()); |
| 1515 | + Object argumentValue = environment.getVariables().get(variableReference.getName()); |
| 1516 | + |
1515 | 1517 | if (javaType.isEnum()) {
|
1516 |
| - if (argumentValue instanceof Collection) { |
| 1518 | + if (argumentValue instanceof Collection argumentValues) { |
1517 | 1519 | List<Enum> values = new ArrayList<>();
|
1518 | 1520 |
|
1519 |
| - Collection.class.cast(argumentValue) |
1520 |
| - .forEach(it -> values.add(Enum.valueOf(javaType, it.toString()))); |
| 1521 | + argumentValues.forEach(it -> values.add(Enum.valueOf(javaType, it.toString()))); |
| 1522 | + |
1521 | 1523 | return values;
|
1522 | 1524 | } else {
|
1523 | 1525 | return Enum.valueOf(javaType, argumentValue.toString());
|
1524 | 1526 | }
|
1525 | 1527 | } else {
|
1526 |
| - // Get resolved variable in environment arguments |
1527 |
| - return javaType.isInstance(argumentValue) |
1528 |
| - ? argumentValue |
1529 |
| - : JavaScalars.of(javaType).getCoercing().parseValue(argumentValue); |
| 1528 | + Coercing<?, ?> coercing = JavaScalars.of(javaType).getCoercing(); |
| 1529 | + Function<Object, Object> valueConverter = it -> javaType.isInstance(it) ? it : coercing.parseValue(it); |
| 1530 | + |
| 1531 | + if (argumentValue instanceof Collection<?> argumentValues) { |
| 1532 | + return argumentValues.stream().map(valueConverter).toList(); |
| 1533 | + } else { |
| 1534 | + // Get resolved variable in environment arguments |
| 1535 | + return valueConverter.apply(argumentValue); |
| 1536 | + } |
1530 | 1537 | }
|
1531 | 1538 | } else if (value instanceof ArrayValue) {
|
1532 | 1539 | Collection arrayValue = environment.getArgument(argument.getName());
|
|
0 commit comments