快速业务通道

扩展JDT实现自动代码注释与格式化 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

处理 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)

时间:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号