• 介绍

Eclipse新建类的时候,是可以自动添加一个main方法的,这个是怎么做到的呢?我们可不可以修改这个向导,从而添加别的方法?

使用过自动添加getter和setter方法的小盆友,想不想知道Eclipse又是怎么做到的?我们可不可以在给PO添加getter和setter方法的同时把我们需要的例如@Entity、@Column等注解也添加好呢?

实际上,Eclipse还可以帮我们把注释也根据既定规则来添加好。

  • main方法的玄机

通过反编译Eclipse安装根目录中的plugins文件夹下的org.eclipse.jdt.ui_xxx.jar文件或者访问​​http://grepcode.com​​可以看到源代码。

org.eclipse.jdt.internal.ui.wizards.NewClassCreationWizard是用于新建一个Java类的向导

org.eclipse.jdt.ui.wizards.NewClassWizardPage是新建类向导的UI页面,要注意这个类的包路径中没有internal,也就是说我们可以通过继承的方式来修改或者增加功能

org.eclipse.jdt.ui.CodeGeneration是JDT对外提供代码生成的一个工具类

org.eclipse.jdt.internal.corext.codemanipulation.StubUtility是JDT对CodeGeneration的内部实现

main方法的添加就在NewClassWizardPage.createTypeMembers中实现,这里主要调用了:CodeGeneration.getMethodComment(用于方法上注释的添加)、CodeGeneration.getMethodBodyContent(用于方法的添加)。方法的头部和尾部还是要我们通过字符串拼接来完成的。最终,org.eclipse.jdt.core.IType接口提供了createField(添加属性)、createMethod(添加方法)。