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