生成Getter时如何忽略注释?

时间:2019-02-17 14:29:40

标签: java android intellij-idea code-generation

我已经创建了一个简单的Getter生成器来生成“ Optional-Getter”,该字段将字段包装在Optional中。问题是当字段注释为@Nullable时,getter也会与@Nullable一起生成,我发现每次生成getter时都将其简单删除非常烦人。如何忽略服装吸气剂中的字段注释?

这是我的“可选字母”生成器。

#if($field.modifierStatic)
static ##
#end
Optional<$field.type> ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#if ($field.boolean && $field.primitive)
  is##
#else
  get##
#end
${name}() {
  return Optional.fromNullable($field.name);
}

这就是我生成吸气剂时的结果-

public class Class {
    @Nullable
    private String someMember;


    @Nullable
    public Optional<String> getSomeMember() {
        return Optional.fromNullable(someMember);
    }
}

这是预期的结果-

public class Class {
    @Nullable
    private String someMember;



    public Optional<String> getSomeMember() {
        return Optional.fromNullable(someMember);
    }
}

1 个答案:

答案 0 :(得分:3)

通过插件GitHub Repository > Releases获得插件CodeGenerator
最新版本是1.3.3

“从磁盘”安装插件,重新启动IntelliJ / Android Studio,然后通过Settings > CodeGenerator,使用此代码修改默认的Getter and Setter模板,并启用

#foreach($field in $fields)
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field.element, $project))))
#if ($field.boolean && $field.primitive)
#set($getter = "is${name}")
#else
#set($getter = "get${name}")
#end
#set($setter = "set${name}")
#if($field.modifierStatic)
static ##
#end

#if($field.modifierStatic)
static ##
#end
Optional<$field.type> ##
${getter}() {
  return Optional.fromNullable($field.name);
}

#if($field.modifierStatic)
static ##
#end
void ${setter}($field.type $paramName) {
#if ($field.name == $paramName)
    #if (!$field.modifierStatic)
    this.##
    #else
        $classname.##
    #end
#end
$field.name = $paramName;
}
#end 

然后您可以通过Alt+ins(或Code > Generate)使用它

enter image description here

根据需要自定义模板,或添加新模板。享受;)


这也是我为IDEA寻找的东西。其实已经很久了。不幸的是,到目前为止,它似乎还无法参数化。

这是YouTrack问题,可将@Nullable@NotNull自动插入生成的getter / setter方法

https://youtrack.jetbrains.net/issue/IDEA-30683

您可以投票支持在可能的情况下会自动转换为Optional<T>吸气剂的功能

https://youtrack.jetbrains.net/issue/IDEA-201804

您可以投票给将注释公开给Apache Velocity模板的功能

https://youtrack.jetbrains.net/issue/IDEA-176763