Intellij-插件安装-安装CodeGenerator插件并且添加Builder模板
Intellij IDEA 2018.1.2版本
CodeGenerator插件地址:https://github.com/lotabout/CodeGenerator/releases
步骤一:安装插件
下载CodeGenerator.jar到本地磁盘,打开Intellij安装插件的界面进行安装
步骤二:添加Builder模式的模板
## Tutorial for writing your templates ## ## 1. First you need to know basic syntax of velocity[1]. ## 2. Then it is necessary to understand the variable that CodeGenerator provides ## and its inner structure for retrieving the information you need for generating code. ## 3. Learn to use the utils provided so that you can ask for further information ## or reduce your workload. ## ## Variables Provided (Class Mode) ## ------------------------------- ## Class mode means you want to create new classes(file). ## ## - ClassName: String The name spcified by `Target Class Name` ## - PackageName: String The package name specified by `Target Class Name` ## - class0: ClassEntry The class that the action is triggered upon ## - raw: PsiClass ## - String packageName ## - importList: List<String> ## - fields: List<FieldEntry> ## - allFields: List<FieldEntry> ## - methods: List<MethodEntry> ## - allMethods: List<MethodEntry> ## - innerClasses: List<ClassEntry> ## - allInnerClasses: List<ClassEntry> ## - typeParamList: List<String> ## - name: String ## - superName: String ## - superQualifiedName: String ## - qualifiedName: String ## - typeParams: int ## - hasSuper: boolean ## - deprecated: boolean ## - enum: boolean ## - exception: boolean ## - abstract: boolean ## - implementNames: String[] ## - isImplements(String): bool ## - isExtends(String): bool ## - matchName(String): bool ## ## - class1: ClassEntry The first selected class, where `1` is the postfix ## you specify in pipeline ## ... ## ## - MemberEntry (FieldEntry/MethodEntry common properties) ## - raw: PsiField(for field), PsiMethod(for method) ## - name: String ## - accessor: String ## - array: boolean ## - nestedArray: boolean ## - collection: boolean ## - map: boolean ## - primitive: boolean ## - string: boolean ## - primitiveArray: boolean ## - objectArray: boolean ## - numeric: boolean ## - object: boolean ## - date: boolean ## - set: boolean ## - list: boolean ## - stringArray: boolean ## - calendar: boolean ## - typeName: String ## - typeQualifiedName: String ## - type: String ## - boolean: boolean ## - long: boolean ## - float: boolean ## - double: boolean ## - void: boolean ## - notNull: boolean ## - char: boolean ## - byte: boolean ## - short: boolean ## - modifierStatic: boolean ## - modifierPublic: boolean ## - modifierProtected: boolean ## - modifierPackageLocal: boolean ## - modifierPrivate: boolean ## - modifierFinal: boolean ## ## - FieldEntry ## - constant: boolean ## - modifierTransient: boolean ## - modifierVolatile: boolean ## - enum: boolean ## - matchName(String): bool ## ## - MethodEntry ## - methodName: String ## - fieldName: String ## - modifierAbstract: boolean ## - modifierSynchronzied: boolean ## - modifierSynchronized: boolean ## - returnTypeVoid: boolean ## - getter: boolean ## - deprecated: boolean ## - matchName(String): bool ## ## Variables for Body Mode ## ----------------------- ## - class0: ClassEntry The current class ## - fields: List<FieldEntry> All selected fields ## - methods: List<MethodEntry> All selected methods ## - members: List<MemberEntry> selected fields+methods ## - parentMethod: MethodEntry The nearest method that surround the current cursor ## ## Utilities ## --------- ## - settings: CodeStyleSettings settings of code style ## - project: Project The project instance, normally used by Psi related utilities ## - helper: GenerationHelper ## - StringUtil: Class ## - NameUtil: Class ## - PsiShortNamesCache: Class utility to search classes ## - PsiJavaPsiFacade: Class Java specific utility to search classes ## - GlobalSearchScope: Class class to create search scopes, used by above utilities ## - EntryFactory: Class EntryFactory.of(...) to turn PsiXXX to XXXEntry. ## ## Other feature ## ------------- ## - Auto import. If the generated code contains full qualified name, Code Generator will try to ## import the packages automatically and shorten the name. ## For example `java.util.List<>` -> `List<>` ## ## References ## ---------- ## - Velocity syntax: http://velocity.apache.org/engine/1.7/user-guide.html public static class Builder { private ${class0.name} instance = new ${class0.name}(); private Builder() {} public static Builder getInstance() { return new Builder(); } public static Builder getInstance(${class0.name} instance) { Builder builder = new Builder(); builder.instance = instance; return builder; } #if ( $members.size() > 0 ) #foreach( $member in $members ) #set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($member.element, $project)))) public Builder add${name}(${member.type} ${member.accessor}) { this.instance.set${name}(${member.accessor}); return this; } #end #end public ${class0.name} build() { return this.instance; } }
参考:
【1】个人博客,http://www.littlefisher.site/2018/04/02/Eclipse%E8%BD%ACIDEA%E6%8C%87%E5%8D%97/