Skip to content

Commit 1e235cb

Browse files
committed
Update BeanAdapter.
1 parent 371055f commit 1e235cb

File tree

5 files changed

+39
-48
lines changed

5 files changed

+39
-48
lines changed

kilo-client/src/main/java/org/httprpc/kilo/beans/BeanAdapter.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,8 @@
4444
import java.util.Collection;
4545
import java.util.Date;
4646
import java.util.HashMap;
47+
import java.util.HashSet;
4748
import java.util.Iterator;
48-
import java.util.LinkedHashMap;
49-
import java.util.LinkedHashSet;
5049
import java.util.LinkedList;
5150
import java.util.List;
5251
import java.util.Map;
@@ -684,7 +683,7 @@ public static <T> T coerce(Object value, Class<T> type) {
684683
* The coerced list.
685684
*
686685
* @deprecated
687-
* This method will be removed in a future release. Use streams instead.
686+
* This method will be removed in a future release.
688687
*/
689688
@Deprecated
690689
@SuppressWarnings("unchecked")
@@ -729,7 +728,7 @@ public Type getOwnerType() {
729728
* The coerced map.
730729
*
731730
* @deprecated
732-
* This method will be removed in a future release. Use streams instead.
731+
* This method will be removed in a future release.
733732
*/
734733
@Deprecated
735734
@SuppressWarnings("unchecked")
@@ -768,7 +767,7 @@ public Type getOwnerType() {
768767
* The coerced set.
769768
*
770769
* @deprecated
771-
* This method will be removed in a future release. Use streams instead.
770+
* This method will be removed in a future release.
772771
*/
773772
@Deprecated
774773
@SuppressWarnings("unchecked")
@@ -806,8 +805,8 @@ public Type getOwnerType() {
806805
public static Object toGenericType(Object value, Type type) {
807806
if (type instanceof Class<?> rawType) {
808807
return toRawType(value, rawType);
809-
} else if (type instanceof ParameterizedType parameterizedType) {
810-
var rawType = parameterizedType.getRawType();
808+
} else if (type instanceof ParameterizedType parameterizedType
809+
&& parameterizedType.getRawType() instanceof Class<?> rawType) {
811810
var actualTypeArguments = parameterizedType.getActualTypeArguments();
812811

813812
if (rawType == List.class) {
@@ -833,7 +832,7 @@ public static Object toGenericType(Object value, Type type) {
833832
var keyType = actualTypeArguments[0];
834833
var valueType = actualTypeArguments[1];
835834

836-
var genericMap = new LinkedHashMap<>();
835+
var genericMap = new HashMap<>(map.size());
837836

838837
for (var entry : map.entrySet()) {
839838
genericMap.put(toGenericType(entry.getKey(), keyType), toGenericType(entry.getValue(), valueType));
@@ -849,7 +848,7 @@ public static Object toGenericType(Object value, Type type) {
849848
} else if (value instanceof Collection<?> collection) {
850849
var elementType = actualTypeArguments[0];
851850

852-
var genericSet = new LinkedHashSet<>(collection.size());
851+
var genericSet = new HashSet<>(collection.size());
853852

854853
for (var element : collection) {
855854
genericSet.add(toGenericType(element, elementType));

kilo-client/src/test/java/org/httprpc/kilo/io/JSONDecoderTest.java

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
package org.httprpc.kilo.io;
1616

17-
import org.httprpc.kilo.beans.BeanAdapter;
1817
import org.junit.jupiter.api.Test;
1918

2019
import java.io.IOException;
@@ -28,10 +27,11 @@
2827
import static org.junit.jupiter.api.Assertions.*;
2928

3029
public class JSONDecoderTest {
31-
public interface Row {
32-
String getA();
33-
int getB();
34-
boolean isC();
30+
public record Row (
31+
String a,
32+
int b,
33+
boolean c
34+
) {
3535
}
3636

3737
private static class ListType implements ParameterizedType {
@@ -115,18 +115,10 @@ public void testArray() throws IOException {
115115

116116
@Test
117117
public void testRowArray() throws IOException {
118-
var expected = BeanAdapter.coerceList(listOf(
119-
mapOf(
120-
entry("a", "hello"),
121-
entry("b", 123),
122-
entry("c", true)
123-
),
124-
mapOf(
125-
entry("a", "goodbye"),
126-
entry("b", 456),
127-
entry("c", false)
128-
)
129-
), Row.class);
118+
var expected = listOf(
119+
new Row("hello", 123, true),
120+
new Row("goodbye", 456, false)
121+
);
130122

131123
var text = "[{\"a\": \"hello\", \"b\": 123, \"c\": true}, {\"a\": \"goodbye\", \"b\": 456, \"c\": false}]";
132124

kilo-client/src/test/java/org/httprpc/kilo/util/CollectionsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void testSortedMapOf() {
9393

9494
@Test
9595
public void testSetOf() {
96-
var expected = new HashSet<Integer>(3);
96+
var expected = new HashSet<Integer>();
9797

9898
expected.add(1);
9999
expected.add(2);

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

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1259,27 +1259,25 @@ private Object[] getArguments(Parameter[] parameters, List<String> keys, Map<Str
12591259
argument = Array.newInstance(componentType, 0);
12601260
}
12611261
} else if (Collection.class.isAssignableFrom(type)) {
1262-
var elementType = ((ParameterizedType)parameter.getParameterizedType()).getActualTypeArguments()[0];
1263-
1264-
if (elementType instanceof Class<?>) {
1265-
if (type == List.class) {
1266-
if (values == null) {
1267-
argument = listOf();
1268-
} else {
1269-
argument = BeanAdapter.coerceList(values, (Class<?>)elementType);
1270-
}
1271-
} else if (type == Set.class) {
1272-
if (values == null) {
1273-
argument = setOf();
1274-
} else {
1275-
argument = BeanAdapter.coerceSet(values, (Class<?>)elementType);
1276-
}
1277-
} else {
1278-
throw new UnsupportedOperationException("Unsupported collection type.");
1279-
}
1262+
var parameterizedType = (ParameterizedType)parameter.getParameterizedType();
1263+
var elementType = (Class<?>)parameterizedType.getActualTypeArguments()[0];
1264+
1265+
Collection<Object> collection;
1266+
if (type == List.class) {
1267+
collection = listOf();
1268+
} else if (type == Set.class) {
1269+
collection = setOf();
12801270
} else {
1281-
throw new UnsupportedOperationException("Unsupported element type.");
1271+
throw new UnsupportedOperationException("Unsupported collection type.");
12821272
}
1273+
1274+
if (values != null) {
1275+
for (var element : values) {
1276+
collection.add(BeanAdapter.coerce(element, elementType));
1277+
}
1278+
}
1279+
1280+
argument = collection;
12831281
} else {
12841282
Object value;
12851283
if (values != null) {

kilo-test/src/test/java/org/httprpc/kilo/test/WebServiceProxyTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,9 +256,11 @@ public void testListPost() throws IOException {
256256

257257
webServiceProxy.setBody(body);
258258

259-
var result = webServiceProxy.invoke();
259+
var result = ((List<?>)webServiceProxy.invoke()).stream()
260+
.map(element -> BeanAdapter.coerce(element, Integer.class))
261+
.toList();
260262

261-
assertEquals(body, BeanAdapter.coerceList((List<?>)result, Integer.class));
263+
assertEquals(body, result);
262264
}
263265

264266
@Test

0 commit comments

Comments
 (0)