索引和PSI Stub

原文链接:
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。请查阅VirtualFileGistPsiFileGist文档。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,992评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,966评论 25 709
  • 原文链接:http://www.jetbrains.org/intellij/sdk/docs/basics/in...
    pr488阅读 966评论 0 0
  • 摘录翻译自“Software Engineering at Google”,作者:Fergus Henderson...
    灯下鼠阅读 3,009评论 1 18