Как структурно заменить значение одного параметра аннотации в intellij

У меня есть классы, помеченные @SequenceGenerator(name = "seq_gen",/*other_parameters*/) Мне нужно заменить "seq_gen" на "$Class$_seq_gen" в каждом классе.

Я пробовал подписаться.

Поиск

@SequenceGenerator(name = "seq_gen")
class $Class$ {}

Замена

@SequenceGenerator(name = "$Class$_seq_gen")
class $Class$ {}

Когда я запускаю замену, деталь /*other_parameters*/ удаляется.

Я тоже пробовал

Поиск

@SequenceGenerator(name = "$VALUE$")
class $Class$ {}

Замена

"$Class$_$VALUE$"

с $VALUE$ в качестве цели, теперь он ничего не удаляет, а заменяет на _seq_gen, как если бы $Class$ не был определен.

Как я могу этого добиться? Документация SSR довольно запутанная и не детализированная.


Я нашел этот вопрос через поиск по SO, но у него нет и фактического ответа, и он действительно касается проблем с массивами. Замените один из параметров аннотации структурной заменой IntelliJ IDEA.

Можете ли вы как-то использовать name= " seq_gen", $param$ = $value$ с несколькими повторениями последнего?

Thomas Timbul 11.04.2018 13:17

Если я сделаю это так и укажу 1, ∞ для $param$ и $value$, результат будет с последней частью как $param$ $param$ = $value$, $value O_o Например. @SequenceGenerator(name = "BankAccountTurnover_seq_gen", sequenceName allocationSize = "bank_account_turnovers_seq",1)

Czar 11.04.2018 13:26

Шаблоны в вопросе работают без проблем в IntelliJ IDEA 2019.3 (который сейчас находится в программе раннего доступа)

Bas Leijdekkers 18.09.2019 16:04
0
3
472
2

Ответы 2

Я нашел уродливую работу, просто сделайте это для всех возможных N:

Поиск:

@SequenceGenerator(name = "$VALUE$", $param1$ = $value1$,/*...*/ $paramN$ = $valueN$)
class $Class$ {}

Замена:

@SequenceGenerator(name = "$Class$_$VALUE$", $param1$ = $value1$,/*...*/ $paramN$ = $valueN$)
class $Class$ {}

Я действительно не хочу, чтобы это был настоящий ответ, поэтому я не буду принимать его в течение следующей недели в надежде, что кто-то даст лучший ответ :)

Я борюсь с этим, чтобы облегчить себе жизнь, заменяя аннотацию Spring @RequestMapping на специализированные. то есть @GetMapping. К сожалению, это решение работает только при фиксированном количестве параметров аннотации. В моем случае количество параметров очень велико, поэтому он оставляет мне: @GetMapping(path = "/xxx", consumes = "xxx", produces = "xxx", = , = , = , = )

Grzegorz Poznachowski 26.09.2018 12:15

Это сложно выполнить из-за ошибка в структурном поиске, относящемся к параметрам аннотации. Однако есть обходной путь с использованием заменяющей переменной и скрипта Groovy. Используйте следующий шаблон поиска:

@SequenceGenerator(name = $value$)
class $Class$ {}
$value$ constraints

текст / регулярное выражение: "seq_gen" (включая кавычки)
Эта переменная является целью поиска: включено

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

$replacement$
$replacement$ script constraints

текст сценария:

import com.intellij.psi.util.PsiTreeUtil
import com.intellij.psi.PsiClass

def x = PsiTreeUtil.getParentOfType(value, PsiClass.class);
"\"" + x.name + "_seq_gen\""

Другие вопросы по теме