/** * Returns the conversion type for the converter. */ private static <T> ConvertibleType<T> of(final DynamoDBTypeConverter<?,T> converter) { final Class<?> clazz = converter.getClass(); if (!clazz.isInterface()) { for (Class<?> c = clazz; Object.class != c; c = c.getSuperclass()) { for (final Type genericType : c.getGenericInterfaces()) { final ConvertibleType<T> type = ConvertibleType.<T>of(genericType); if (type.is(DynamoDBTypeConverter.class)) { if (type.params.length == 2 && type.param(0).targetType() != Object.class) { return type.param(0); } } } } final ConvertibleType<T> type = ConvertibleType.<T>of(clazz.getGenericSuperclass()); if (type.is(DynamoDBTypeConverter.class)) { if (type.params.length > 0 && type.param(0).targetType() != Object.class) { return type.param(0); } } } throw new DynamoDBMappingException("could not resolve type of " + clazz); }
/** * Returns the conversion type for the converter. */ private static <T> ConvertibleType<T> of(final DynamoDBTypeConverter<?,T> converter) { final Class<?> clazz = converter.getClass(); if (!clazz.isInterface()) { for (Class<?> c = clazz; Object.class != c; c = c.getSuperclass()) { for (final Type genericType : c.getGenericInterfaces()) { final ConvertibleType<T> type = ConvertibleType.<T>of(genericType); if (type.is(DynamoDBTypeConverter.class)) { if (type.params.length == 2 && type.param(0).targetType() != Object.class) { return type.param(0); } } } } final ConvertibleType<T> type = ConvertibleType.<T>of(clazz.getGenericSuperclass()); if (type.is(DynamoDBTypeConverter.class)) { if (type.params.length > 0 && type.param(0).targetType() != Object.class) { return type.param(0); } } } throw new DynamoDBMappingException("could not resolve type of " + clazz); }