#Code Generator Plugin for IDEA
一、概述
这是一个基于Velocity(VM 模板)
语法 和 Groovy
脚本语法,通过自定义脚本文件 和一个抽象的 contextClass
概念 来完成模板代码自动生成的 IDEA/AndroidStudio
插件。
它通过内置的Converter
, 将 VirtualFile
(IDEA的api提供的对文件系统的抽象)或者是PsiClass
(IDEA提供的对class对象的抽象)转化为统一的ClassStruct
(一种对Java
文件结构的抽象)对象, 这个VirtualFile
对象可以是文本文件、excel表格、通过文件选择器选中的一个.java
文件, PsiClass
则为 鼠标右键选中的当前class对象。
插件内置了三个 Converter
,分别是 Java2ClassConverter
, Pb2ClassConverter
, Excel2ClassConverter
,他们各自通过一定的规则,对java
对象,proto
文件,excel
文件进行了解析并转化为统一的ClassStruct
实体。
解析后的ClassStruct
实体包含了模板需要的全部信息。 此时 将该ClassStruct
实体 和 模板文件 交给 CodeGenerator
去匹配解析,替换模板中的占位符,输出生成的目标代码。
CodeGenerator
支持解析 Groovy
和 Velocity
两种格式文件,都是非常常见的常用模板语言。
二、特点:
插件的特点是高度的灵活化和丰富的拓展性:
1. 你可以在模板文件中通过contextClass
来引用上下文对象的所有属性
包括
- 类属性:
类名、类类型、类修饰符、继承和实现类、导包列表、成员变量列表、方法列表 - 成员变量属性:
变量名、变量类型、变量修饰符 - 方法属性:
方法名、方法修饰符、方法入参、返回值 - 参数属性:
参数名、参数类型
以此定制自己的代码生成规则。
2. 通过自定义模板,可以生成Java、Kotlin、或者更多IDEA支持的语言
语言语法通过模板定义就好了 XD
2. 模板文件支持 Velocity
语法 和 Groovy
语法。
3. 可能会支持动态加载自定义转换器
这个当做一个feature去做,通过动态加载jar包应该是可以做到的,目前的设计还未支持。如果可以自定义转换器,插件的灵活性可以大大提升。
三、usage
1.模板配置
1.配置目标代码语言 Kotlin / Java
1 | enum class CodeLanguage{ |
2.模板作用类型
1 | /** |
3.配置模板文件类型
1 | /** |
2. 模板书写规则
contextClass通配符
用来生成模板类的父类,是一个ClassStruct
实体
此处的父类不是java
意义上的父类,可以把它理解为一个上下文对象,
这个父类 可以是从当前鼠标所在的类右键点击Generate
菜单获取的,
也可以是通过导入特定格式文件解析出来的抽象,比如解析特定格式的excel文件,然后按照特定规则序列化获取到的抽象)
可以用该通配符来匹配目标类中的 类名、包名、继承、接口、成员变量、函数
用以生成模板类指定格式的代码。
具体说明如下:
1 |
|
其他通用通配符
1 | $TIME - 返回当前时间 格式为 yyyy-MM-dd |
Demo Template File
1 | package $contextClass.packageName ; |