Как массово аннотировать аргументы конструктора?

У меня есть проблема, когда я хочу сделать множество классов в нашем проекте десериализованными через Джексона. Проблема в том, что большинство классов выглядят так:

public class FinalFieds{

    private final String field;
    private final String secondField;

    public FinalFieds(String field, String secondField)
    {
        this.field = field;
        this.secondField = secondField;
    }

    public String getField()
    {
        return field;
    }

    public String getSecondField()
    {
        return secondField;
    }
}

Итак, я обнаружил, что в Джексоне вы можете сделать что-то вроде этого:

public FinalFieds(@JsonProperty("field") String field, @JsonProperty("secondField") String secondField)

И это хорошо работает. Проблема в том, что я не могу сделать структурную замену в Intellij, чтобы работать на меня. Когда я пытаюсь: введите описание изображения здесь

Все мои совпадения находятся в разделе "Несекретные совпадения". Кроме того, когда я пытаюсь заменить, Intellij просто удаляет конструктор из класса.

Любая идея о том, что я делаю неправильно или это известная ошибка в intellij?

Даже слишком сложное регулярное выражение, которое поможет мне заменить это (для конструкторов с одним аргументом я могу создать его сам; проблема в том, что наши конструкторы в этих классах имеют конструкторы с несколькими аргументами).

1 ответ

Это ошибка или отсутствующая функция в зависимости от того, как вы на нее смотрите. https://youtrack.jetbrains.com/issue/IDEA-141143

Однако это можно сделать в два этапа. Сначала найдите параметры конструктора, которые вы хотите аннотировать:

class $Class$ implements OurCommonInterface {
  $Class$($Type$ $parameter$);
}

где $parameter$ мин: 1 Максимум: unlimited, This variable is target of the search проверено.

Затем замените параметр аннотированным параметром в области видимости. Previous Search Results:

$Type$ $parameter$

Шаблон замены:

@JsonProperty("$parameter$") $Type$ $parameter$
Другие вопросы по тегам