原文鏈接:
http://www.jetbrains.org/intellij/sdk/docs/basics/indexing_and_psi_stubs.html
索引
索引框架提供了一種在大型代碼庫(kù)中定位元素的快速方式,如包含特定單詞的文件或具有特定名稱的方法飘蚯。 插件開發(fā)人員可以使用IDE構(gòu)建的索引冠蒋,也可以構(gòu)建和使用自己的索引。
目前主要支持兩種類型的索引:
基于文件的索引直接在文件內(nèi)容上構(gòu)建。Stub索引在序列化的*stub樹 *上構(gòu)建。 源文件的stub樹是其PSI樹的子集,其僅包含外部可見的聲明寥枝,并序列化為緊湊的二進(jìn)制格式。
查詢基于文件的索引會(huì)得到符合特定條件的文件集磁奖。 查詢stub索引會(huì)得到匹配的PSI元素集合囊拜。 因此,自定義語(yǔ)言插件開發(fā)人員通常在插件實(shí)現(xiàn)中使用stub索引点寥。
Dumb模式
索引是一個(gè)潛在的長(zhǎng)進(jìn)程艾疟。 它在后臺(tái)執(zhí)行来吩,在這段時(shí)間內(nèi)敢辩,IDE的功能僅限于不需要索引的功能:基本文本編輯,版本控制等弟疆。此限制由DumbService管理戚长。
DumbService
提供了查詢IDE當(dāng)前是否在"dumb"模式(不允許訪問索引)或"smart"模式(所有都已構(gòu)建完成并準(zhǔn)備好使用)。它還提供了延遲代碼執(zhí)行直到索引就緒的方法怠苔。 更多詳情同廉,請(qǐng)參閱其javadoc。
Gists
有時(shí),滿足以下條件:
- 不需要基于文件索引的聚合功能迫肖。只需要根據(jù)特定文件的內(nèi)容計(jì)算一些數(shù)據(jù)锅劝,并將其緩存在磁盤上;
- 不需要在索引期間計(jì)算整個(gè)項(xiàng)目的數(shù)據(jù)(例如它減慢索引或這個(gè)數(shù)據(jù)是所有項(xiàng)目文件的次要子集曾經(jīng)需要的)蟆湖;
- 數(shù)據(jù)可以在沒有重大性能損失的情況下按需延遲重新計(jì)算故爵。
在這些情況下可以使用基于文件的索引,但是文件gist提供了延遲計(jì)算數(shù)據(jù)隅津,磁盤緩存的方式和更輕量的API诬垂。請(qǐng)查閱VirtualFileGist和PsiFileGist文檔。