override fun collectNavigationMarkers()

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) }
    }