`
yezi_0016
  • 浏览: 455 次
社区版块
存档分类
最新评论

Java

阅读更多

MyEclipse生成get/set注释

    通常我们把 JavaBean 的字段注释(文档注释格式)写在字段上面,但生成的Get/Set方法不会添加字段注释,通过修改Eclipse源码可解决。效果如下:

 

	/**
	 * 序号
	 */
	private int id;

	/**  
	 * 获取序号  
	 * @return id 序号
	 */
	public int getId() {
		return this.id;
	}

	/**  
	 * 设置 序号  
	 * @param id 序号
	 */
	public void setId(int id) {
		this.id = id;
	}

解决方案如下:

 

通过反编译,修改MyEclipse2013的安装文件夹plugins目录下的org.eclipse.jdt.ui_3.8.2.v20130107-165834.jar包中的org.eclipse.jdt.internal.corext.codemanipulation.GetterSetterUtil类
下的getSetterStub及getGetterStub方法,来实现生成getter/setter时,注释使用成员变量的注释(如果成员变量的注释(文档注释格式)有的话)。在选择了生成getter/setter时需要生成code comment的话,如果没有成员变量的注释则使用注释模板生成。

一、在MyEclipse2013中新建一个工程,在src目录下新建org.eclipse.jdt.internal.corext.codemanipulation包,拷贝反编译出的GetterSetterUtil.java类到该目录下,会有报错发生,主要是一些方法和类找不到的问题。现在在工程名上右键新建一个名称为libs的文件夹,从MyEclipse2013的安装文件夹plugins下拷贝

org.eclipse.jdt.core_3.8.3.v20130121-145325.jar、

org.eclipse.jdt.ui_3.8.2.v20130107-165834.jar、

org.eclipse.equinox.common_3.6.100.v20120522-1841.jar三个jar文件到libs目录,并添加到构建路径。


打开GetterSetterUtil类会看到如下错误,在报错处鼠标悬停几秒,会出现提示对话框,选择Organize import即可修复错误。现在已经解决所以报错问题。下面修改源代码:


二、修改源代码:

getSetterStub函数修改的地方为:

 

.......  
        IJavaProject project = field.getJavaProject();  
        //start  
        String accessorName = NamingConventions.removePrefixAndSuffixForFieldName(project, fieldName, field.getFlags());  
        //end  
        String argname = StubUtility.suggestArgumentName(project, accessorName,EMPTY);  
.......  
        if (addComments) {  
            String comment = CodeGeneration.getSetterComment(  
                    field.getCompilationUnit(),  
                    parentType.getTypeQualifiedName('.'),  
                    setterName,   
                    field.getElementName(),   
                    typeName,   
                    argname,   
                    accessorName,  
                    lineDelim);  
            //start  
            ISourceRange sr = field.getJavadocRange();  
            if (null != sr) {  
                String filedComment = field.getSource();  
                filedComment = filedComment.substring(0, sr.getLength());  
                filedComment = filedComment.replaceAll("[\n,\r,*,/, ,\t]", "");  
  
                comment = comment.replaceFirst(field.getElementName(), filedComment);  
  
                int i = comment.lastIndexOf(field.getElementName());  
                int j = getCount(comment, field.getElementName());  
                if (i != -1 && j >= 2) {  
                    comment = comment.substring(0, i) + filedComment + comment.substring(i + field.getElementName().length());  
                }  
            }  
            //end  
            if (comment != null) {  
                buf.append(comment);  
                buf.append(lineDelim);  
            }  
.......  

 getGetterStub函数修改的地方为:

 

 

.......
		String typeName = Signature.toString(field.getTypeSignature());
		//start
		String accessorName = NamingConventions.removePrefixAndSuffixForFieldName(field.getJavaProject(), fieldName, field.getFlags());
		//end
		String lineDelim = "\n";
		StringBuffer buf = new StringBuffer();
		if (addComments) {
			//field.getCompilationUnit() 得到当前类文件内容,就是要get,set的东西
			//parentType.getTypeQualifiedName('.') 得到类名
			//getterName 拼出get的方法名
			//field.getElementName() 得到字段名
			//typeName 类型
			String comment = CodeGeneration.getGetterComment(
							field.getCompilationUnit(),
							parentType.getTypeQualifiedName('.'),
							getterName,
							field.getElementName(),
							typeName, 
							accessorName, 
							lineDelim);
			//start
			ISourceRange sr = field.getJavadocRange();
			if (null != sr) {
				String filedComment = field.getSource();
				filedComment = filedComment.substring(0, sr.getLength());
				filedComment = filedComment.replaceAll("[\n,\r,*,/, ,\t]", "");
				comment = comment.replaceFirst(field.getElementName(),
						filedComment);
				int i = comment.lastIndexOf(field.getElementName());
				int j = getCount(comment, field.getElementName());
				if (i != -1 && j >= 2) {
					comment = comment.substring(0, i)
							+ filedComment
							+ comment.substring(i
									+ field.getElementName().length());
				}
			}
			//end
.....

 新添加一个名称为getCount的方法,代码如下:

 

 

	//start
	private static int getCount(String str, String sign) {
		// 查找某一字符串中str,特定子串sign的出现次数
		if (str == null)
			return 0;
		double i = str.length();
		str = str.replaceAll(sign, "");// 将串中的字符sign替换成""
		return (int) (i - str.length()) / sign.length();
	}
	//end

编译器不报错的时候,在bin目录下拷贝GetterSetterUtil.class文件,使用zip或rar压缩软件打开jar包,替换org.eclipse.jdt.ui_3.8.2.v20130107-165834.jar包中的org.eclipse.jdt.internal.corext.codemanipulation目录下的同名文件。

三、配置MyEclipse2013

 

四、效果

 

 

在JavaBean中使用Alt+Shift+Z快捷键调出get/set方法生成面板,如图所示,点击确定按钮后即可看到效果。



 

  • 大小: 65.3 KB
  • 大小: 83.7 KB
  • 大小: 41.9 KB
  • 大小: 32.8 KB
  • 大小: 62.8 KB
分享到:
评论

相关推荐

    JAVA_API1.6文档(中文)

    java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类...

    Java 面经手册·小傅哥.pdf

    这是一本以面试题为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、...

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java源码包4

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java api最新7.0

    JAVA开发人员最新版本7.0 api文档!本文档是 Java Platform Standard Edition 7 的 API !Java 1.7 API的中文帮助文档。 深圳电信培训中心 徐海蛟博士教学用api 7.0中文文档。支持全文检索,在线即时查询。 里面列...

    java开源包11

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包4

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包6

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包9

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包5

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包8

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包10

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    Java开发技术大全(500个源代码).

    HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...

    java开源包1

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包3

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    Java 中文入门学习手册合集[chm版]

    第一章 Java语言的产生及其特点 第二章 Java程序开发与运行环境 第三章 Java程序设计基础 第四章 Java应用程序的基本框架 第五章 Java的类 第六章 Java图形用户接口 第七章 多线程 第八章 Java的"异常" 第九...

Global site tag (gtag.js) - Google Analytics