索引和PSI Stub

原文链接:
http://www.jetbrains.org/intellij/sdk/docs/basics/indexing_and_psi_stubs.html

索引

索引框架提供了一种在大型代码库中定位元素的快速方式,如包含特定单词的文件或具有特定名称的方法。 插件开发人员可以使用IDE构建的索引,也可以构建和使用自己的索引。

目前主要支持两种类型的索引:

  • 基于文件的索引
  • Stub索引

基于文件的索引直接在文件内容上构建。Stub索引在序列化的*stub树 *上构建。 源文件的stub树是其PSI树的子集,其仅包含外部可见的声明,并序列化为紧凑的二进制格式。

查询基于文件的索引会得到符合特定条件的文件集。 查询stub索引会得到匹配的PSI元素集合。 因此,自定义语言插件开发人员通常在插件实现中使用stub索引。

Dumb模式

索引是一个潜在的长进程。 它在后台执行,在这段时间内,IDE的功能仅限于不需要索引的功能:基本文本编辑,版本控制等。此限制由DumbService管理。

DumbService提供了查询IDE当前是否在"dumb"模式(不允许访问索引)或"smart"模式(所有都已构建完成并准备好使用)。它还提供了延迟代码执行直到索引就绪的方法。 更多详情,请参阅其javadoc。

Gists

有时,满足以下条件:

  • 不需要基于文件索引的聚合功能。只需要根据特定文件的内容计算一些数据,并将其缓存在磁盘上;
  • 不需要在索引期间计算整个项目的数据(例如它减慢索引或这个数据是所有项目文件的次要子集曾经需要的);
  • 数据可以在没有重大性能损失的情况下按需延迟重新计算。

在这些情况下可以使用基于文件的索引,但是文件gist提供了延迟计算数据,磁盘缓存的方式和更轻量的API。请查阅VirtualFileGist和PsiFileGist文档。

你可能感兴趣的:(索引和PSI Stub)