【问题标题】:How does GoLand of JetBrains find the implementations of interface?JetBrains 的 GoLand 如何找到接口的实现?
【发布时间】:2020-10-04 15:49:21
【问题描述】:

据我所知,vim-go 是根据 Guru 来查找需要编译整个项目的实现或用法作为前提的。否则,GoLand 不需要这样做,但是怎么做呢?

【问题讨论】:

  • 就像大师一样。

标签: go vim editor jetbrains-ide goland


【解决方案1】:

虽然这项任务看起来相当琐碎,但 GoLand 使用了一些技巧来更有效地执行它。让我们一步一步来探索它是如何工作的。

  1. 第一次打开项目时,IDE 会执行所谓的索引。特别是,它存储了所有方法和方法规范名称以及它们的参数数量。
  2. 在搜索开始时,GoLand 获取接口的方法规范并找到参数数量最多的一个。这是性能优化。其背后的想法是,具有许多参数的方法在代码中出现的频率较低,因此 IDE 只需检查其中的几个。
  3. 是时候使用索引了。对于选择的方法规范,IDE 会找到所有对应的方法。考虑了范围,因此对于私有接口,例如,它要小得多。
  4. 对于每个方法,GoLand 都会解析其类型并检查它是否实现了接口。这是考虑所有接口方法规范的时刻。
  5. 不仅结构可以实现接口,其他接口也可以。作为接下来的步骤,IDE 会查找所有对应的方法规范,即具有相同名称和参数数量的方法规范。有一个单独的索引负责此操作。
  6. 对于每个方法规范,都会采用并检查其接口。这次不涉及任何解析,因为它足以遍历语法树以找到任意方法规范的接口。

这基本上就是算法。还有一些实现细节可以使其运行得更快,但不会影响结果。

【讨论】:

    【解决方案2】:

    GoLand 依赖于 IntelliJ Platform 和一组自定义编写工具,捆绑在其上以 a custom language plugin 处理索引、解析、导航和编辑代码。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2012-11-29
      • 2010-10-11
      • 2010-10-29
      • 2019-12-20
      • 2011-11-27
      • 2018-03-14
      • 1970-01-01
      • 2010-10-16
      相关资源
      最近更新 更多