private void findUsagesBelow(RankProfile profile) {
        ProgressIndicatorProvider.checkCanceled();
        if ( ! visited.add(profile)) return;
        ReadAction.compute(() -> findUsagesIn(profile));
        for (var child : ReadAction.compute(() -> profile.children()))
            findUsagesBelow(child);
    }
Finds usages brute force. There is built-in search functionality in the IntelliJ SDK but I could
not make it work across files. Since the lexical, scope of a rank profile will be quite small
brute force might be faster in any case.

Since search is done by a separate thread it cannot safely access the Psi tree.
This splits Psi tree accesses into smaller chunks which are handed off to the Reader
on the assumption that this keeps the IDE responsive. I have not found documentation
on that.
integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/FunctionUsageFinder.java