in src/main/kotlin/com/netflix/dgs/plugin/navigation/SchemaToDataFetcherMarkerProvider.kt [29:76]
override fun collectNavigationMarkers(
element: PsiElement,
result: MutableCollection<in RelatedItemLineMarkerInfo<*>>
) {
val dgsService = element.project.getService(DgsService::class.java)
if(!dgsService.isDgsProject(element.project)) {
return
}
val psiLeaf = PsiTreeUtil.getDeepestFirst(element)
val iconBuilder = when (element) {
is GraphQLFieldDefinition -> {
dgsService.dgsComponentIndex.dataFetchers.find { it.schemaPsi == element }?.let {
NavigationGutterIconBuilder.create(DgsConstants.dgsIcon)
.setTargets(it.psiAnnotation)
.setTooltipText("Navigate to DGS data fetcher")
.createLineMarkerInfo(psiLeaf)
}
}
is GraphQLObjectTypeDefinition, is GraphQLObjectTypeExtensionDefinition -> {
dgsService.dgsComponentIndex.entityFetchers.find { it.schemaPsi == element }?.let {
NavigationGutterIconBuilder.create(DgsConstants.dgsIcon)
.setTargets(it.psiAnnotation)
.setTooltipText("Navigate to DGS entity fetcher")
.createLineMarkerInfo(psiLeaf)
}
}
is GraphQLScalarTypeDefinition -> {
dgsService.dgsComponentIndex.scalars.find { it.schemaPsi == element }?.let {
NavigationGutterIconBuilder.create(DgsConstants.dgsIcon)
.setTargets(it.psiAnnotation)
.setTooltipText("Navigate to DGS scalar implementation")
.createLineMarkerInfo(psiLeaf)
}
}
is GraphQLDirectiveDefinition -> {
dgsService.dgsComponentIndex.directives.find { it.schemaPsi == element }?.let {
NavigationGutterIconBuilder.create(DgsConstants.dgsIcon)
.setTargets(it.psiAnnotation)
.setTooltipText("Navigate to DGS directive implementation")
.createLineMarkerInfo(psiLeaf)
}
}
else -> null
}
iconBuilder?.apply { result.add(this) }
}