11package com.trendyol.kediatr
22
33import java.lang.reflect.ParameterizedType
4+ import java.lang.reflect.TypeVariable
45
56@Suppress(" UNCHECKED_CAST" )
67abstract class Registrar {
@@ -23,15 +24,15 @@ abstract class Registrar {
2324
2425 handler.genericInterfaces
2526 .filterIsInstance<ParameterizedType >()
26- .map { extractParameter< TParameter > (it) }
27+ .map { extractParameter(it) }
2728 .forEach { registrar(it, handler) }
2829
2930 when (handler.genericSuperclass) {
3031 is ParameterizedType -> {
3132 val inheritedHandler = (handler.genericSuperclass as ParameterizedType ).rawType as Class <* >
3233 inheritedHandler.genericInterfaces
3334 .filterIsInstance<ParameterizedType >()
34- .map { extractParameter< TParameter > (handler.genericSuperclass as ParameterizedType ) }
35+ .map { extractParameter(handler.genericSuperclass as ParameterizedType ) }
3536 .forEach { registrar(it, handler) }
3637 }
3738
@@ -40,7 +41,7 @@ abstract class Registrar {
4041 if (interfaceOrBaseClass.isAssignableFrom(inheritedHandler)) {
4142 inheritedHandler.genericInterfaces
4243 .filterIsInstance<ParameterizedType >()
43- .map { extractParameter< TParameter > (it) }
44+ .map { extractParameter(it) }
4445 .forEach { registrar(it, handler) }
4546 }
4647 }
@@ -63,9 +64,10 @@ abstract class Registrar {
6364 registrar(handler)
6465 }
6566
66- protected fun < T > extractParameter (genericInterface : ParameterizedType ): Class <out T > =
67+ protected fun extractParameter (genericInterface : ParameterizedType ): Class <* > =
6768 when (val typeArgument = genericInterface.actualTypeArguments[0 ]) {
68- is ParameterizedType -> typeArgument.rawType as Class <out T >
69- else -> typeArgument as Class <out T >
69+ is ParameterizedType -> typeArgument.rawType as Class <* >
70+ is TypeVariable <* > -> extractParameter((genericInterface.rawType as Class <* >).genericInterfaces[0 ] as ParameterizedType )
71+ else -> typeArgument as Class <* >
7072 }
7173}
0 commit comments