Skip to content

Commit 4aede1f

Browse files
committed
refactor: simplify usage of getGenericTypeArgument
1 parent fcfebd7 commit 4aede1f

File tree

5 files changed

+27
-30
lines changed

5 files changed

+27
-30
lines changed

src/main/java/com/github/nylle/javafixture/InstanceFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ private <T> T manufactureOrNull(final Method method, SpecimenType<T> type, Custo
166166
for (int i = 0; i < method.getParameterCount(); i++) {
167167
var genericParameterType = method.getGenericParameterTypes()[i];
168168
var specimen = specimenFactory.build(type.isParameterized()
169-
? SpecimenType.fromClass(type.getGenericTypeArgument(i))
169+
? type.getGenericTypeArgument(i)
170170
: SpecimenType.fromClass(genericParameterType));
171171
var o = specimen.create(customizationContext, new Annotation[0]);
172172
arguments.add(o);

src/main/java/com/github/nylle/javafixture/SpecimenType.java

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -68,47 +68,43 @@ public Class<T> asClass() {
6868
}
6969

7070
public ParameterizedType asParameterizedType() {
71-
if (isParameterized()) {
72-
return (ParameterizedType) type;
71+
if (!isParameterized()) {
72+
throw new SpecimenTypeException(format("%s is not a ParameterizedType", type));
7373
}
74-
75-
throw new SpecimenTypeException(format("%s is not a ParameterizedType", type));
74+
return (ParameterizedType) type;
7675
}
7776

78-
public Type[] getGenericTypeArguments() {
79-
if (isParameterized()) {
80-
return ((ParameterizedType) type).getActualTypeArguments();
77+
public String[] getTypeParameterNames() {
78+
if (!isParameterized()) {
79+
throw new SpecimenTypeException(format("%s is not a ParameterizedType", type));
8180
}
82-
83-
throw new SpecimenTypeException(format("%s is not a ParameterizedType", type));
81+
return Stream.of(asClass().getTypeParameters()).map(x -> x.getName()).toArray(size -> new String[size]);
8482
}
8583

86-
public Type getGenericTypeArgument(final int index) {
87-
return getGenericTypeArguments()[index];
84+
public String getTypeParameterName(final int index) {
85+
return getTypeParameterNames()[index];
8886
}
8987

90-
public String[] getTypeParameterNames() {
91-
if (isParameterized()) {
92-
return Stream.of(asClass().getTypeParameters()).map(x -> x.getName()).toArray(size -> new String[size]);
88+
public Type[] getGenericTypeArguments() {
89+
if (!isParameterized()) {
90+
throw new SpecimenTypeException(format("%s is not a ParameterizedType", type));
9391
}
94-
95-
throw new SpecimenTypeException(format("%s is not a ParameterizedType", type));
92+
return ((ParameterizedType) type).getActualTypeArguments();
9693
}
9794

98-
public String getTypeParameterName(final int index) {
99-
return getTypeParameterNames()[index];
95+
public <A> SpecimenType<A> getGenericTypeArgument(int index) {
96+
return SpecimenType.fromClass(getGenericTypeArguments()[index]);
10097
}
10198

10299
public <A> Map<String, A> getTypeParameterNamesAndTypes(Function<SpecimenType<?>, A> f) {
103100
if (!isParameterized()) {
104101
return Map.of();
105102
}
106-
107103
return IntStream.range(0, this.getGenericTypeArguments().length)
108104
.boxed()
109105
.collect(toMap(
110106
i -> this.getTypeParameterName(i),
111-
i -> f.apply(SpecimenType.fromClass(this.getGenericTypeArgument(i)))));
107+
i -> f.apply(this.getGenericTypeArgument(i))));
112108
}
113109

114110
public Class<?> getComponentType() {

src/main/java/com/github/nylle/javafixture/specimen/CollectionSpecimen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public CollectionSpecimen(final SpecimenType<T> type, final Context context, fin
4343
this.context = context;
4444

4545
if (type.isParameterized()) {
46-
this.specimen = specimenFactory.build(SpecimenType.fromClass(type.getGenericTypeArgument(0)));
46+
this.specimen = specimenFactory.build(type.getGenericTypeArgument(0));
4747
}
4848
this.instanceFactory = new InstanceFactory(specimenFactory);
4949
}

src/main/java/com/github/nylle/javafixture/specimen/MapSpecimen.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ public MapSpecimen(final SpecimenType<T> type, final Context context, final Spec
4949
this.context = context;
5050

5151
if (type.isParameterized()) {
52-
this.keySpecimen = specimenFactory.build(SpecimenType.fromClass(type.getGenericTypeArgument(0)));
53-
this.valueSpecimen = specimenFactory.build(SpecimenType.fromClass(type.getGenericTypeArgument(1)));
52+
this.keySpecimen = specimenFactory.build(type.getGenericTypeArgument(0));
53+
this.valueSpecimen = specimenFactory.build(type.getGenericTypeArgument(1));
5454
}
5555
}
5656

@@ -72,7 +72,7 @@ public T create(final CustomizationContext customizationContext, Annotation[] an
7272

7373
private Map<K, V> createFromConcreteType(final SpecimenType<T> type) {
7474
if (type.asClass().equals(EnumMap.class)) {
75-
return (Map<K, V>) new EnumMap((Class<K>) type.getGenericTypeArgument(0));
75+
return (Map<K, V>) new EnumMap(type.getGenericTypeArgument(0).asClass());
7676
}
7777

7878
try {

src/test/java/com/github/nylle/javafixture/SpecimenTypeTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -281,10 +281,11 @@ void isSpecialTypeFromClass(Class<?> value, boolean expected) {
281281
void getGenericTypeArgument() {
282282
var sut = new SpecimenType<Map<String, Optional<Integer>>>() {};
283283

284-
assertThat(sut.getGenericTypeArgument(0)).isEqualTo(String.class);
285-
assertThat(sut.getGenericTypeArgument(1)).isInstanceOf(ParameterizedType.class);
286-
assertThat(((ParameterizedType) (sut.getGenericTypeArgument(1))).getRawType()).isEqualTo(Optional.class);
287-
assertThat(((ParameterizedType) (sut.getGenericTypeArgument(1))).getActualTypeArguments()[0]).isEqualTo(Integer.class);
284+
assertThat(sut.getGenericTypeArgument(0).asClass()).isEqualTo(String.class);
285+
assertThat(sut.getGenericTypeArgument(1).asClass()).isEqualTo(Optional.class);
286+
assertThat(sut.getGenericTypeArgument(1).asParameterizedType()).isInstanceOf(ParameterizedType.class);
287+
assertThat(sut.getGenericTypeArgument(1).asParameterizedType().getRawType()).isEqualTo(Optional.class);
288+
assertThat(sut.getGenericTypeArgument(1).asParameterizedType().getActualTypeArguments()[0]).isEqualTo(Integer.class);
288289

289290
assertThatExceptionOfType(SpecimenTypeException.class)
290291
.isThrownBy(() -> SpecimenType.fromClass(String.class).getGenericTypeArgument(0))
@@ -352,7 +353,7 @@ void returnsMapOfTypeParameterNamesAndSpecimenTypes() {
352353
assertThat(actual).hasSize(2);
353354
assertThat(actual.get("T").asClass()).isEqualTo(String.class);
354355
assertThat(actual.get("U").asClass()).isEqualTo(Optional.class);
355-
assertThat(actual.get("U").getGenericTypeArgument(0)).isEqualTo(Integer.class);
356+
assertThat(actual.get("U").getGenericTypeArgument(0).asClass()).isEqualTo(Integer.class);
356357
}
357358

358359
@Test

0 commit comments

Comments
 (0)