Skip to content

Commit 087c8df

Browse files
committed
Update BeanAdapter.
1 parent 874ac69 commit 087c8df

File tree

2 files changed

+47
-32
lines changed

2 files changed

+47
-32
lines changed

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,6 +1008,46 @@ private static Object toBean(Map<?, ?> map, Class<?> type) {
10081008
}
10091009
}
10101010

1011+
/**
1012+
* Generates a generic type.
1013+
*
1014+
* @param rawType
1015+
* The raw type.
1016+
*
1017+
* @param actualTypeArguments
1018+
* The actual type arguments.
1019+
*
1020+
* @return
1021+
* A generic type representing the given raw type and actual type
1022+
* arguments.
1023+
*/
1024+
public static Type genericTypeOf(Class<?> rawType, Type... actualTypeArguments) {
1025+
if (rawType == null || rawType.getTypeParameters().length != actualTypeArguments.length) {
1026+
throw new IllegalArgumentException();
1027+
}
1028+
1029+
if (actualTypeArguments.length == 0) {
1030+
return rawType;
1031+
} else {
1032+
return new ParameterizedType() {
1033+
@Override
1034+
public Type[] getActualTypeArguments() {
1035+
return actualTypeArguments;
1036+
}
1037+
1038+
@Override
1039+
public Type getRawType() {
1040+
return rawType;
1041+
}
1042+
1043+
@Override
1044+
public Type getOwnerType() {
1045+
return null;
1046+
}
1047+
};
1048+
}
1049+
}
1050+
10111051
/**
10121052
* Returns the properties for a given type.
10131053
*

kilo-client/src/test/java/org/httprpc/kilo/beans/BeanAdapterTest.java

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.junit.jupiter.api.Test;
1919

2020
import java.lang.reflect.ParameterizedType;
21-
import java.lang.reflect.Type;
2221
import java.math.BigInteger;
2322
import java.net.URI;
2423
import java.nio.file.Path;
@@ -30,7 +29,6 @@
3029
import java.time.LocalDateTime;
3130
import java.time.LocalTime;
3231
import java.time.Period;
33-
import java.util.Arrays;
3432
import java.util.Date;
3533
import java.util.HashMap;
3634
import java.util.List;
@@ -272,7 +270,7 @@ public void testPathCoercion() {
272270
public void testListCoercion() {
273271
assertInstanceOf(List.class, BeanAdapter.coerce(listOf(), List.class));
274272

275-
assertInstanceOf(List.class, BeanAdapter.coerceGeneric(listOf(), parameterizedTypeOf(List.class)));
273+
assertInstanceOf(List.class, BeanAdapter.coerceGeneric(listOf(), BeanAdapter.genericTypeOf(List.class, Object.class)));
276274

277275
assertThrows(IllegalArgumentException.class, () -> BeanAdapter.coerce(0, List.class));
278276
}
@@ -281,9 +279,9 @@ public void testListCoercion() {
281279
public void testMapCoercion() {
282280
assertInstanceOf(Map.class, BeanAdapter.coerce(mapOf(), Map.class));
283281

284-
assertInstanceOf(Map.class, BeanAdapter.coerceGeneric(mapOf(), parameterizedTypeOf(Map.class)));
285-
assertInstanceOf(SequencedMap.class, BeanAdapter.coerceGeneric(mapOf(), parameterizedTypeOf(SequencedMap.class)));
286-
assertInstanceOf(SortedMap.class, BeanAdapter.coerceGeneric(mapOf(), parameterizedTypeOf(SortedMap.class)));
282+
assertInstanceOf(Map.class, BeanAdapter.coerceGeneric(mapOf(), BeanAdapter.genericTypeOf(Map.class, Object.class, Object.class)));
283+
assertInstanceOf(SequencedMap.class, BeanAdapter.coerceGeneric(mapOf(), BeanAdapter.genericTypeOf(SequencedMap.class, Object.class, Object.class)));
284+
assertInstanceOf(SortedMap.class, BeanAdapter.coerceGeneric(mapOf(), BeanAdapter.genericTypeOf(SortedMap.class, Object.class, Object.class)));
287285

288286
assertThrows(IllegalArgumentException.class, () -> BeanAdapter.coerce(0, Map.class));
289287
}
@@ -292,9 +290,9 @@ public void testMapCoercion() {
292290
public void testSetCoercion() {
293291
assertInstanceOf(Set.class, BeanAdapter.coerce(setOf(), Set.class));
294292

295-
assertInstanceOf(Set.class, BeanAdapter.coerceGeneric(setOf(), parameterizedTypeOf(Set.class)));
296-
assertInstanceOf(SequencedSet.class, BeanAdapter.coerceGeneric(setOf(), parameterizedTypeOf(SequencedSet.class)));
297-
assertInstanceOf(SortedSet.class, BeanAdapter.coerceGeneric(setOf(), parameterizedTypeOf(SortedSet.class)));
293+
assertInstanceOf(Set.class, BeanAdapter.coerceGeneric(setOf(), BeanAdapter.genericTypeOf(Set.class, Object.class)));
294+
assertInstanceOf(SequencedSet.class, BeanAdapter.coerceGeneric(setOf(), BeanAdapter.genericTypeOf(SequencedSet.class, Object.class)));
295+
assertInstanceOf(SortedSet.class, BeanAdapter.coerceGeneric(setOf(), BeanAdapter.genericTypeOf(SortedSet.class, Object.class)));
298296

299297
assertThrows(IllegalArgumentException.class, () -> BeanAdapter.coerce(0, Set.class));
300298
}
@@ -505,27 +503,4 @@ public void testToType() {
505503

506504
assertEquals(listOf(1, 2, 3), integers);
507505
}
508-
509-
private static Type parameterizedTypeOf(Class<?> rawType) {
510-
return new ParameterizedType() {
511-
@Override
512-
public Type[] getActualTypeArguments() {
513-
var actualTypeArguments = new Type[rawType.getTypeParameters().length];
514-
515-
Arrays.fill(actualTypeArguments, Object.class);
516-
517-
return actualTypeArguments;
518-
}
519-
520-
@Override
521-
public Type getRawType() {
522-
return rawType;
523-
}
524-
525-
@Override
526-
public Type getOwnerType() {
527-
return null;
528-
}
529-
};
530-
}
531506
}

0 commit comments

Comments
 (0)