原文链接:
http://www.jetbrains.org/intellij/sdk/docs/basics/indexing_and_psi_stubs.html
索引
索引框架提供了一种在大型代码库中定位元素的快速方式,如包含特定单词的文件或具有特定名称的方法。 插件开发人员可以使用IDE构建的索引,也可以构建和使用自己的索引。
目前主要支持两种类型的索引:
基于文件的索引直接在文件内容上构建。Stub索引在序列化的*stub树 *上构建。 源文件的stub树是其PSI树的子集,其仅包含外部可见的声明,并序列化为紧凑的二进制格式。
查询基于文件的索引会得到符合特定条件的文件集。 查询stub索引会得到匹配的PSI元素集合。 因此,自定义语言插件开发人员通常在插件实现中使用stub索引。
Dumb模式
索引是一个潜在的长进程。 它在后台执行,在这段时间内,IDE的功能仅限于不需要索引的功能:基本文本编辑,版本控制等。此限制由DumbService管理。
DumbService
提供了查询IDE当前是否在"dumb"模式(不允许访问索引)或"smart"模式(所有都已构建完成并准备好使用)。它还提供了延迟代码执行直到索引就绪的方法。 更多详情,请参阅其javadoc。
Gists
有时,满足以下条件:
- 不需要基于文件索引的聚合功能。只需要根据特定文件的内容计算一些数据,并将其缓存在磁盘上;
- 不需要在索引期间计算整个项目的数据(例如它减慢索引或这个数据是所有项目文件的次要子集曾经需要的);
- 数据可以在没有重大性能损失的情况下按需延迟重新计算。
在这些情况下可以使用基于文件的索引,但是文件gist提供了延迟计算数据,磁盘缓存的方式和更轻量的API。请查阅VirtualFileGist和PsiFileGist文档。