菜单中Edit | Find Usages | Find Usages in File等一系列动作的操作,Find Usages操作是一个多步骤过程,该过程的每个步骤都需要自定义语言插件的参与。通过在com.intellij.lang.findUsagesProvider
扩展点中注册一个实现。并通过实现PsiNamedElement接口和PsiReference接口来实现最终的功能。
在函数参数和局部变量等情况下,考虑覆盖PsiElement.getUseScope()以返回更窄的范围。例如,返回最近的函数定义的范围可以显着减少重命名此类元素时需要解析的文件和需要解析的引用的数量。
1、在可以调用Find Usages操作之前,IDE 会为自定义语言中每个文件中存在的单词构建一个索引。使用WordsScanner从 返回的实现FindUsagesProvider.getWordsScanner(),加载每个文件的内容并将其与单词消费者一起传递给单词扫描仪。单词扫描器将文本分解为单词,定义每个单词的上下文(代码、注释或文字),并将单词传递给消费者。实现单词扫描器的最简单方法是使用实DefaultWordsScanner??现,将词法分析器标记类型集传递给它,这些标记类型被视为标识符、文字和注释。默认的单词扫描器将使用词法分析器将文本分解为标记,并处理将评论文本和文字标记分解为单独的单词。
2、当用户调用Find Usages操作时,IDE 将 PSI 元素定位为要搜索的引用。光标处的 PSI 元素(光标位置处标记的直接树父)必须是 a