Как игнорировать аннотации при генерации Getter? - PullRequest
0 голосов
/ 17 февраля 2019

Я создал простой генератор Getter для генерации «Optional-Getter», который оборачивает поле внутри Optional.проблема в том, что когда поле аннотируется как @Nullable, геттер также генерируется с помощью @Nullable, и я обнаружил, что очень неприятно просто удалять его каждый раз, когда я генерирую геттер.Как я могу игнорировать полевую аннотацию в сборщике костюма?

Это мой генератор "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);
}

и вот результат, когда я генерирую геттер -

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 голосов
/ 17 февраля 2019

Получите плагин CodeGenerator , через их GitHub Repository > Releases.
Последний ответ: 1.3.3

Установите плагин "с диска", перезапустите IntelliJ / AndroidStudio, затем через Settings > CodeGenerator, измените шаблон Getter and Setter по умолчанию с этим кодом, и включите it

#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 для сгенерированных геттеров / сеттеров

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

...