如何在生成Getter时忽略注解?

How to ignore annotation when generating Getter?

我创建了一个简单的 Getter 生成器来生成一个 "Optional-Getter",它将字段包装在一个 Optional 中。问题是当字段被注释为@Nullable 时,getter 也将使用@Nullable 生成,我发现每次生成 getter 时简单地删除它非常烦人。如何忽略服装 getter 中的字段注释?

这是我的 "Optional-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);
}

这就是我生成 getter -

时的结果
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);
    }
}

通过他们的 GitHub Repository > Releases.
获取插件 CodeGenerator 最新版本是 1.3.3

安装插件 "from disk",重新启动 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

使用它

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


这也是我为 IDEA 寻找的东西。其实从很久以前。不幸的是,到目前为止它似乎还不能参数化。

这是 YouTrack 问题,可以自动插入 @Nullable@NotNull 生成 getters/setters

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

您可以投票选出一项功能,该功能会在可能的情况下自动转换为 Optional<T> getter

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

并且您可以投票支持向 Apache Velocity 模板公开注释的功能

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