Tom*_*m G 6 eclipse-plugin incremental-linking incremental-build incremental-compiler
正如Eclipse文档所建议的那样,我有一个org.eclipse.core.resources.IncrementalProjectBuilder编译每个源文件的文件,我也有一个org.eclipse.ui.editors.text.TextEditor可以编辑每个源文件的文件.每个源文件都编译到自己的编译单元中,但它可以引用其他(已编译的)源文件中的类型.
这个重要的两项任务是:
为了实现这一点,我想在内存中存储所有已编译类型的表示(以下称为"类型存储").
我的问题有两个:
上面的任务1由构建器执行,而任务2由编辑器执行.因此,他们都可以访问这种类型的商店,我应该创建一个他们都可以访问的静态存储,还是Eclipse提供了一种更简洁的方法来处理这个问题?请注意,在需要时实例化构建器和编辑器是eclipse,而不是我.
打开eclipse时,我不想重建整个项目,所以我可以重新填充我的类型存储.到目前为止,我最好的解决方案是将这些数据保存在某处,然后从那里重新填充我的商店(也许在项目打开时).这是其他增量编译器通常如何做到这一点的吗?我相信Java的方法是使用一个特殊的解析器,从类文件中有效地提取这些数据.
任何见解都会非常感激.这是我的第一个DSL.
这是一个有趣的问题,而且没有简单的解决方案。我将尝试描述一个潜在的解决方案,并更详细地描述 JDT 如何完成增量编译。
首先,简单介绍一下 JDT:
是的,JDT 确实会读取类文件中的一些信息,但仅限于没有源代码的库。这些信息实际上仅用于编辑辅助(内容辅助、导航等)。
JDT 通过在编译时跟踪编译单元之间的依赖关系来计算增量编译。该状态信息存储在磁盘上,并在每次编译后检索和更新。
作为一个更完整的示例,假设在完整构建之后,JDT 确定 A.java 依赖于 B.java,而 B.java 依赖于 C.java。
如果C.java中有结构变化(结构变化是可能影响外部文件的变化(例如,添加/删除非私有字段或方法)),则B.java将被重新编译。A.java 不会被重新编译,因为 B.java 中没有结构变化。
在对 JDT 的工作原理进行了一些澄清之后,以下是您问题的一些可能的答案:
.metadataorg.eclipse.core.resources 插件的工作空间目录中。您可以查看该类org.eclipse.jdt.internal.core.builder.State以了解实现。因此,这可能不是您正在寻找的答案,但我认为这是解决您的问题最有希望的方法。
| 归档时间: |
|
| 查看次数: |
553 次 |
| 最近记录: |