处理 Javadoc
由于代码重新构建时,将类声明体内容作为整体和其他内容重新组合,其内 部并没有修改。因此,需要处理 Java 代码内部的方法、字段的 javadoc 注释 。获取 Java 代码中所有方法、字段,并识别此类型元素是否含有 Javadoc 注 释,若含有,将此类型元素对应的模板注释内容与原注释替换;否则,为此元素 添加新的模板注释内容。
清单 11通过 IType 得到对方法、字段操作的对象,并返回 IMenber 类型的 列表。
清单 11. 得到 Java 代码中的 method、field
public List<IMember> getAllMember(IType type) throws JavaModelException {
List<IMember> list = new ArrayList<IMember> ();
// 得到所有方法,并添加到 list 中
for (IMethod method : type.getMethods()) {
list.add(method);
}
// 得到所有字段,并添加到 list 中
for (IField field : type.getFields()) {
list.add(field);
}
return list;
}
扩展JDT实现自动代码注释与格式化(6)
时间:2010-11-20 IBM 孟潇 邵兵 王芹华
清单 12识别元素类型并针对类型得到不同的模板注释;通过 IMember 的 getJavadocRange() 方法,判断是否含有 javadoc,没有则为此元素添加注释; 否则,用重新读取的模板注释替换原有注释内容。
清单 12. 处理 Javadoc
// 跟据元素类型不同得到不同的注释模板内容
for (IMember member : getAllMember(type)) {
String comment = null;
switch (member.getElementType()) {
// 方法
case IJavaElement.METHOD:
comment = getMethodComment((IMethod) member, lineDelimiter);
break;
// 字段
case IJavaElement.FIELD:
comment = getFiledComment((IField) member, lineDelimiter);
break;
// 其他情况,返回类注释
default:
comment = CodeGeneration.getTypeComment(parentCU,
type.getElementName(), lineDelimiter);
}
// 元素是否含有 Javadoc,没有添加,有则替换
if (member.getJavadocRange() != null)
buffer.replace(member.getJavadocRange().getOffset(), member
.getJavadocRange().getLength(), comment);
else
buffer.replace(member.getSourceRange().getOffset(), 0, comment);
// 同步
JavaModelUtil.reconcile(copyCU);
}
清单 12利用 IJavaElement 的 getElementType() 方法得到类型属性值,判 断与哪种类型常量(IJavaElement.METHOD、IJavaElement.FIELD)匹配,识别 元素类型;若均不匹配,默认此元素类型是类。
getMethodComment()(清单 13)、getFiledComment()(清单 14)方法分别 得到方法、字段的模板内容。
清单 13. 得到方法注释模板内容
public String getMethodComment(IMethod method, String lineDelimiter)
throws CoreException {
IType declaringType = method.getDeclaringType();
IMethod overridden = null;
if (!method.isConstructor()) {
ITypeHierarchy hierarchy = SuperTypeHierarchyCache
.getTypeHierarchy(declaringType);
MethodOverrideTester tester = new MethodOverrideTester(
declaringType, hierarchy);
overridden = tester.findOverriddenMethod(method, true);
}
return CodeGeneration.getMethodComment(method, overridden,
lineDelimiter);
}
扩展JDT实现自动代码注释与格式化(7)
时间: |