public DgsComponentIndex getDgsComponentIndex()

in src/main/java/com/netflix/dgs/plugin/services/internal/DgsServiceImpl.java [90:155]


    public DgsComponentIndex getDgsComponentIndex() {

        if (DumbService.isDumb(project)) {
            return new DgsComponentIndex();
        }

        ModificationTracker javaModificationTracker = PsiModificationTracker.getInstance(project).forLanguage(JavaLanguage.INSTANCE);
        ModificationTracker kotlinModificationTracker = PsiModificationTracker.getInstance(project).forLanguage(KotlinLanguage.INSTANCE);

        if (cachedComponentIndex != null && javaModificationCount == javaModificationTracker.getModificationCount() && kotlinModificationCount == kotlinModificationTracker.getModificationCount()) {
            return cachedComponentIndex;
        } else {
            javaModificationCount = javaModificationTracker.getModificationCount();
            kotlinModificationCount = kotlinModificationTracker.getModificationCount();

            StubIndex stubIndex = StubIndex.getInstance();

            DgsComponentIndex dgsComponentIndex = new DgsComponentIndex();
            GraphQLSchemaRegistry graphQLSchemaRegistry = project.getService(GraphQLSchemaRegistry.class);
            var processor = new DgsComponentProcessor(graphQLSchemaRegistry, dgsComponentIndex);

            annotations.forEach(dataFetcherAnnotation -> {
                stubIndex.processElements(JavaStubIndexKeys.ANNOTATIONS, dataFetcherAnnotation, project, GlobalSearchScope.projectScope(project), PsiAnnotation.class, annotation -> {
                    UAnnotation uElement = (UAnnotation) UastContextKt.toUElement(annotation);
                    if (uElement != null) {
                        processor.process(uElement);
                    }
                    return true;
                });
            });

            stubIndex.processElements(JavaStubIndexKeys.SUPER_CLASSES, "DgsCustomContextBuilder", project, GlobalSearchScope.projectScope(project), PsiReferenceList.class, refList -> {
                PsiClass clazz = PsiTreeUtil.getParentOfType(refList, PsiClass.class);
                dgsComponentIndex.addDgsCustomContext(clazz);
                return true;
            });

            StubIndexKey<String, KtAnnotationEntry> key = KotlinAnnotationsIndex.Helper.getIndexKey();
            List<String> list = new ArrayList<>();
            stubIndex.processAllKeys(key, project, e -> {
                ProgressManager.checkCanceled();
                return list.add(e);
            });
            for (String annotation : list) {
                if (annotations.contains(annotation)) {
                    StubIndex.getElements(key, annotation, project, GlobalSearchScope.projectScope(project), KtAnnotationEntry.class).forEach(dataFetcherAnnotation -> {
                        UAnnotation uElement = (UAnnotation) UastContextKt.toUElement(dataFetcherAnnotation);
                        if (uElement != null) {
                            processor.process(uElement);
                        }
                    });
                }
            }

            StubIndexKey<String, KtClassOrObject> superClassIndexKey = KotlinSuperClassIndex.Helper.getIndexKey();
            stubIndex.processElements(superClassIndexKey, "DgsCustomContextBuilder", project, GlobalSearchScope.projectScope(project), KtClassOrObject.class, clazz -> {
                dgsComponentIndex.addDgsCustomContext(clazz);
                return true;
            });

            cachedComponentIndex = dgsComponentIndex;
            ProjectView.getInstance(project).refresh();

            return dgsComponentIndex;
        }
    }