Intellij 模板生成器语法
Intellij template generator syntax
在 Intellij IDE 中,您可以编写自己的模板来生成代码。我想编写一个模板来生成我的 equals 方法。
目标是有一个不区分 null 和空字符串的 equals 方法,如下所示:
(使用 apache.commons.language 中的 StringUtils.IsNotEmpty)
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
POJO pojo = (POJO) o;
if(StringUtils.IsNotEmpty(stringAtt) ? !stringAtt.equals(pojo.stringAtt) : StringUtils.IsNotEmpty(pojo.stringAtt)) return false;
return true;
}
我想把这个 equals 写成一个模板,这样我就可以为我正在使用的所有 POJO 生成代码。
问题是我没有完全理解用于生成 intellij 模板的语言和标记的语法。它看起来像这样:
#parse("equalsHelper.vm")
public boolean equals(##
#if ($settings.generateFinalParameters)
final ##
#end
Object $paramName){
#addEqualsPrologue()
#if ($fields.size() > 0)
#addClassInstance()
#foreach($field in $fields)
#addFieldComparison($field)
#end
#end
return true;
}
##
#macro(addFieldComparison $field)
#if ($field.notNull)
if(!${field.accessor}.equals(${classInstanceName}.$field.accessor))return false;
#else
if($field.accessor != null ? !${field.accessor}.equals(${classInstanceName}.$field.accessor) : ${classInstanceName}.$field.accessor != null)return false;
#end
#end
##
我在 Intellij 文档页面上查找过它,但找不到语法的解释。
- 谁能给我一个很好的例子或指向一些文档网页,以便我学习如何做?
- 或者这是什么语言我自己学
谢谢。
所以用于此的语言是Velocity Template Language或VTL
我想我已经完成了工作。唯一重要的事情是检查 POJO 的字段是否为字符串。然后,如果直接编写代码。这是我的回答,希望对您有所帮助,我只给出了 addFieldComparisson 宏的代码,其余相同:
#macro(addFieldComparison $field)
## Check if the field is a String
// CHECKED TYPE: ${field.accessor.class.name}
#if (${field.accessor.class.name} == "java.lang.String")
//is a String
if(StringUtils.isNotEmpty($field.accessor) ? !${field.accessor}.equals(${classInstanceName}.$field.accessor) : StringUtils.isNotEmpty(${classInstanceName}.$field.accessor))return false;
#else
// Not a String
if($field.accessor != null ? !${field.accessor}.equals(${classInstanceName}.$field.accessor) : ${classInstanceName}.$field.accessor != null)return false;
#end
#end
在 Intellij IDE 中,您可以编写自己的模板来生成代码。我想编写一个模板来生成我的 equals 方法。
目标是有一个不区分 null 和空字符串的 equals 方法,如下所示:
(使用 apache.commons.language 中的 StringUtils.IsNotEmpty)
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
POJO pojo = (POJO) o;
if(StringUtils.IsNotEmpty(stringAtt) ? !stringAtt.equals(pojo.stringAtt) : StringUtils.IsNotEmpty(pojo.stringAtt)) return false;
return true;
}
我想把这个 equals 写成一个模板,这样我就可以为我正在使用的所有 POJO 生成代码。
问题是我没有完全理解用于生成 intellij 模板的语言和标记的语法。它看起来像这样:
#parse("equalsHelper.vm")
public boolean equals(##
#if ($settings.generateFinalParameters)
final ##
#end
Object $paramName){
#addEqualsPrologue()
#if ($fields.size() > 0)
#addClassInstance()
#foreach($field in $fields)
#addFieldComparison($field)
#end
#end
return true;
}
##
#macro(addFieldComparison $field)
#if ($field.notNull)
if(!${field.accessor}.equals(${classInstanceName}.$field.accessor))return false;
#else
if($field.accessor != null ? !${field.accessor}.equals(${classInstanceName}.$field.accessor) : ${classInstanceName}.$field.accessor != null)return false;
#end
#end
##
我在 Intellij 文档页面上查找过它,但找不到语法的解释。
- 谁能给我一个很好的例子或指向一些文档网页,以便我学习如何做?
- 或者这是什么语言我自己学
谢谢。
所以用于此的语言是Velocity Template Language或VTL
我想我已经完成了工作。唯一重要的事情是检查 POJO 的字段是否为字符串。然后,如果直接编写代码。这是我的回答,希望对您有所帮助,我只给出了 addFieldComparisson 宏的代码,其余相同:
#macro(addFieldComparison $field)
## Check if the field is a String
// CHECKED TYPE: ${field.accessor.class.name}
#if (${field.accessor.class.name} == "java.lang.String")
//is a String
if(StringUtils.isNotEmpty($field.accessor) ? !${field.accessor}.equals(${classInstanceName}.$field.accessor) : StringUtils.isNotEmpty(${classInstanceName}.$field.accessor))return false;
#else
// Not a String
if($field.accessor != null ? !${field.accessor}.equals(${classInstanceName}.$field.accessor) : ${classInstanceName}.$field.accessor != null)return false;
#end
#end