扩展 JDT 实现自动代码注释与格式化
2010-07-30 00:00:00 来源:WEB开发网清单 4. 得到编译单元
IPackageFragmentRoot root = ……;
for (IJavaElement pack : root.getChildren()) {
if (pack instanceof IPackageFragment) {
for (ICompilationUnit cu : ((IPackageFragment) pack).getCompilationUnits()) {
// 操作编译单元(ICompilationUnit)
}
}
}
得到 Java 编辑单元的工作副本缓存
Java 代码的可以通过操作工作副本进行修改。工作副本是代码进行修改时的分阶段缓存区域,通过工作副本可以得到操作代码的缓存。修改代码可直接通过操作工作副本的缓存来操作代码,但必须及时与原文件保持同步,避免后续操作与之冲突。修改完毕,提交将修改保存在磁盘上。为避免资源浪费,提交之后丢弃工作副本。
其原理类似于常用的 Java 编译器。在编译器中,Java 代码一旦打开,就会产生一个工作副本,用户保存代码之前的所有操作均是对工作副本的操作。只有进行关闭编辑器或保存代码等提交代码操作时,才会将文件保存到磁盘上。
本文中工具的实现是通过直接操作 Java 文件工作副本的缓存来修改 Java 文件的。首先,要根据编译单元获得工作副本,即将编译单元切换到工作副本模式(参见 清单 5)。
清单 5. 得到编译单元的工作副本
parentCU.becomeWorkingCopy(new SubProgressMonitor(monitor, 1));
清单 5 中将编译单元切换到工作副本模式,就是在内存中创建一块存放 Java 代码副本的地方,即工作副本缓存。
工作副本模式下,工作副本可以得到工作副本缓存,一个 IBuffer 的实例。该实例类似于 StringBuffer 的 API,对其修改就可以达到修改与之关联的 Java 元素的效果。在提交代码之前,对缓存修改一直保存在工作副本中,直至被显示提交(参见 清单 6)。
更多精彩
赞助商链接