Skip to content

Commit 5075ab3

Browse files
committed
Auto-initialise generic type arguments
This should fix `List<AutoType>` failing to initialise the adapter for `AutoType`.
1 parent 821ea6d commit 5075ab3

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

src/main/java/ca/spottedleaf/yamlconfig/adapter/TypeAdapterRegistry.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,25 @@ public AutoTypeAdapter(final TypeAdapterRegistry registry, final Class<? extends
175175
throw new IllegalArgumentException("No type adapter for " + clazz + " (Forgot @Adaptable?)");
176176
}
177177

178+
private static void ensureGenericsInitialised(final TypeAdapterRegistry registry, final ParameterizedType type) throws Exception {
179+
for (final Type typeArgument : type.getActualTypeArguments()) {
180+
if (typeArgument instanceof Class<?> clazz) {
181+
if (registry.getAdapter(clazz) != null) {
182+
continue;
183+
}
184+
185+
for (final Annotation annotation : clazz.getAnnotations()) {
186+
if (annotation instanceof Adaptable adaptable) {
187+
registry.makeAdapter(clazz);
188+
break;
189+
}
190+
}
191+
} else if (typeArgument instanceof ParameterizedType parameterizedType) {
192+
ensureGenericsInitialised(registry, parameterizedType);
193+
}
194+
}
195+
}
196+
178197
private static String makeSerializedKey(final String input) {
179198
final StringBuilder ret = new StringBuilder();
180199

@@ -210,6 +229,11 @@ private static SerializableField[] findSerializableFields(final TypeAdapterRegis
210229
continue;
211230
}
212231

232+
// make sure we auto initialise generic types
233+
if (field.getGenericType() instanceof ParameterizedType parameterizedType) {
234+
ensureGenericsInitialised(registry, parameterizedType);
235+
}
236+
213237
final TypeAdapter<?, ?> adapter;
214238

215239
if (serializable.adapter() != TypeAdapter.class) {

0 commit comments

Comments
 (0)