Skip to content

Commit 135f5eb

Browse files
committed
Update WebService.
1 parent b14571d commit 135f5eb

1 file changed

Lines changed: 13 additions & 24 deletions

File tree

kilo-server/src/main/java/org/httprpc/kilo/WebService.java

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@
6767
import java.util.NoSuchElementException;
6868
import java.util.ResourceBundle;
6969
import java.util.Set;
70+
import java.util.SortedSet;
7071
import java.util.TreeMap;
72+
import java.util.TreeSet;
7173
import java.util.UUID;
7274

7375
import static org.httprpc.kilo.util.Collections.*;
@@ -1256,52 +1258,39 @@ private Object[] getArguments(Parameter[] parameters, List<String> keys, Map<Str
12561258
var name = coalesce(map(parameter.getAnnotation(Name.class), Name::value), parameter::getName);
12571259
var type = parameter.getType();
12581260

1259-
var values = argumentMap.get(name);
1261+
var values = coalesce(argumentMap.get(name), () -> emptyListOf(Object.class));
12601262

12611263
Object argument;
12621264
if (type.isArray()) {
12631265
var componentType = type.getComponentType();
12641266

1265-
if (values != null) {
1266-
argument = Array.newInstance(componentType, values.size());
1267+
argument = Array.newInstance(componentType, values.size());
12671268

1268-
var j = 0;
1269+
var j = 0;
12691270

1270-
for (var value : values) {
1271-
Array.set(argument, j++, BeanAdapter.coerce(value, componentType));
1272-
}
1273-
} else {
1274-
argument = Array.newInstance(componentType, 0);
1271+
for (var value : values) {
1272+
Array.set(argument, j++, BeanAdapter.coerce(value, componentType));
12751273
}
12761274
} else if (Collection.class.isAssignableFrom(type)) {
12771275
var parameterizedType = (ParameterizedType)parameter.getParameterizedType();
12781276
var elementType = (Class<?>)parameterizedType.getActualTypeArguments()[0];
12791277

1280-
var size = coalesce(map(values, List::size), () -> 0);
1281-
12821278
Collection<Object> collection;
12831279
if (type == List.class) {
1284-
collection = new ArrayList<>(size);
1285-
} else if (type == Set.class) {
1286-
collection = new LinkedHashSet<>(size);
1280+
collection = new ArrayList<>(values.size());
1281+
} else if (Set.class.isAssignableFrom(type)) {
1282+
collection = (type == SortedSet.class) ? new TreeSet<>() : new LinkedHashSet<>(values.size());
12871283
} else {
12881284
throw new UnsupportedOperationException("Unsupported collection type.");
12891285
}
12901286

1291-
if (values != null) {
1292-
for (var element : values) {
1293-
collection.add(BeanAdapter.coerce(element, elementType));
1294-
}
1287+
for (var value : values) {
1288+
collection.add(BeanAdapter.coerce(value, elementType));
12951289
}
12961290

12971291
argument = collection;
12981292
} else {
1299-
Object value;
1300-
if (values != null) {
1301-
value = values.getLast();
1302-
} else {
1303-
value = null;
1304-
}
1293+
var value = values.isEmpty() ? null : values.getLast();
13051294

13061295
if (parameter.getAnnotation(Required.class) != null && value == null) {
13071296
throw new IllegalArgumentException(String.format("Parameter \"%s\" is required.", parameter.getName()));

0 commit comments

Comments
 (0)