7

我知道 Eclipse 使用它自己的 Java (ECJ) 编译器,它能够执行增量编译。从我发现的大多数读数来看,这种编译通常是由保存操作触发的,但这似乎与您在输入单个单元/代码后几乎立即收到编译错误的错误反馈这一事实不符. 我还没有找到任何文档或文献说明触发的粒度(即每个单词、字母、行)?是否正在进行某种额外的背景代码分析?尽管除了语法中的错误检测之外,我看不出它如何能够检测到只能通过编译过程才能发现的语义错误。

4

1 回答 1

1

编译器的紧密集成允许 Eclipse 在各种情况下调用编译器,其中两个与这个问题相关:

术语“增量编译”通常是指保存时编译,这可能会触发编译更多依赖于已更改文件的文件。在技​​术术语中,这称为“构建”,它读取 .java 文件并生成 .class 文件。

即时编译提供了更直接的反馈。这种编译基于内存中的工作副本而不是文件。您甚至可以在不保存的情况下编辑多个依赖文件,并且编译已经可以看到对其他工作副本所做的更改。在技​​术术语中,这被称为“调和”。尽管此功能是通过调用完整编译器来实现的,但协调不会产生任何类文件。

至于触发器粒度的原始问题:协调工作在每个编辑器的脏区队列上。记录脏区是由编辑器中的击键触发的。然后以 500 毫秒的默认延迟轮询队列。

除了更直接的反馈之外,用户将体验到协调仅在编辑器中创建错误标记,而构建另外使这些标记在问题标记视图中可见。

于 2018-12-06T19:29:29.280 回答