关于我写的IDEA插件能一键生成service,mapper....这件事(附源码)

最终效果

为了留住兄弟们继续看下去,还是先来看看最终效果吧

在新建一个实体类的时候把相关联的mapper、service都一并生成

当做出这个效果之后,面对一个结构复杂的DDD的项目,我再也不用新建一个实体类,新建一个mapper,新建一个service,新建一个model,再来一个转换类,再来一个。。。。。我想,这大概就是工业革命吧

难道逆向工程不香么?

关于我写的IDEA插件能一键生成service,mapper....这件事(附源码)_第1张图片

什么?逆向工程能用来装逼么!谁能拒绝。。。

调研Api

当然可以上来就直接开搞,毕竟用模版生成文件这种操作,用java实现起来也不是什么难事。但是如果仅仅是实现一个简单的功能,就很难提起兴致。如果在研究兴趣的同时,还能提高一些专业能力的话,岂不美哉

那我们来分析一下,针对这个点子,需要做的事情其实很少

  1. 找到需要生成文件目录
  2. 创建一些模版
  3. 把文件生成过去

但是事情往往没有想象中这么简单

  1. 这些目录找起来并不轻松,在一个陌生的项目环境下,直接通过文件系统找文件目录总是不那么靠谱
  2. 直接在插件中写死模版当然很简单,但是损失了不小的灵活性,总不能每次新建一个项目就去把插件发一个版本
  3. 生成文件的话其实问题不大,但是总觉得用原生的硬搞不是特别优雅,既然我们在IDEA的地盘做事,就要尽量按照他的风格来,应该也可以得到一些便利

针对这些问题,我的选择当然是去看IDEA的源码了,既做插件,又能锻炼阅读源码的能力,一菜多吃!

既然这次主要是文件生成操作,首先肯定是关注创建Class这个Action,大家都是新建文件,只是目录不同,在这个Action中肯定可以找到很多线索。

总之,最后定位到了CreateClassAction这个类,源码我就不全都截出来给大家了,具体的逻辑部分有兴趣的兄弟可以自己去自己研究一下,只说我这边研究得到的线索

创建输入类名的弹窗

这个类中有一个比较有用的方法CreateClassAction. buildDialog(Project project, PsiDirectory directory,CreateFileFromTemplateDialog.Builder builder)

protected void buildDialog(final Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder) {
    builder.setTitle(JavaBundle.message("action.create.new.class", new Object[0])).a

你可能感兴趣的:(程序员,Java,编程,java,intellij-idea,开发语言)