in graphql-dgs/src/main/kotlin/com/netflix/graphql/dgs/DgsDataFetchingEnvironment.kt [44:63]
fun <K, V> getDataLoader(loaderClass: Class<*>): DataLoader<K, V> {
val annotation = loaderClass.getAnnotation(DgsDataLoader::class.java)
val loaderName =
if (annotation != null) {
DataLoaderNameUtil.getDataLoaderName(loaderClass, annotation)
} else {
val loaders = loaderClass.fields.filter { it.isAnnotationPresent(DgsDataLoader::class.java) }
if (loaders.isEmpty()) {
// annotation is not on the class, but potentially on the Bean definition
tryGetDataLoaderFromBeanDefinition(loaderClass)
} else {
if (loaders.size > 1) throw MultipleDataLoadersDefinedException(loaderClass)
val loaderField = loaders.firstOrNull() ?: throw NoDataLoaderFoundException(loaderClass)
val theAnnotation = loaderField.getAnnotation(DgsDataLoader::class.java)
theAnnotation.name
}
}
return getDataLoader(loaderName) ?: throw NoDataLoaderFoundException("DataLoader with name $loaderName not found")
}