扩展 JDT 实现自动代码注释与格式化
2010-07-30 00:00:00 来源:WEB开发网使用 IBuffer 替换原代码的操作时,需确定处理内容的起始位置及长度。IJavaElement 的 getSourceRange() 方法,可得到 Java 元素的区域范围,起始位置 (getOffset() 方法 ) 及长度 (getLength() 方法 )。由于 IJavaElement 是其他 Java 模型元素的父类,因此,Java 模型的元素均可使用 getSourceRange() 方法得到元素的区域范围,并得到其元素内容的起始位置和长度,在后续的实现中多次使用此方法确定处理元素内容的位置及长度。
在操作过程,对工作副本缓存的修改需要通知原资源,保证原文件与副本的一致性,否则后续操作还是基于原文件进行,会覆盖之前所做的操作。JavaModelUtil 的 reconcile() 方法将触发元素变化事件,保证文件的同步。
重新添加引用包
由于在重新构建 Java 代码时,CodeGeneration 的 getCompilationUnitContent() 方法的实现中没有涉及引用包的处理。因此,需要重新为 Java 代码添加引用包。
代码 清单 9得到引用包的列表,以字符串列表的类型返回。
清单 9. 得到引用包列表
public List<String> getImport(ICompilationUnit parentCU,
String lineDelimiter) throws JavaModelException {
List<String> allImports = new ArrayList<String>();
for (int i = 0; i < parentCU.getImports().length; i++) {
allImports.add(parentCU.getImports()[i].getElementName());
}
return allImports;
}
代码 清单 10为 Java 代码重新添加引用包列表。由于代码重新构建且与原文件同步后,就会完全丢失引用包的信息,需要在 清单 7执行之前获得引用包列表。代码重新构建之后再使用 createImport() 方法为 Java 文件逐一重新添加引用包,并及时与原文件同步。清单 10 中的省略号处的内容同清单 7。
更多精彩
赞助商链接