我的课程注释了
@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找到了这个问题,但它没有和实际答案,而且实际上是关于数组的问题。 Replace one of annotation parameters with IntelliJ IDEA's Structural replace
答案 0 :(得分:0)
我找到了一个丑陋的工作,只为所有可能的N做这个:
搜索:
@SequenceGenerator(name = "$VALUE$", $param1$ = $value1$,/*...*/ $paramN$ = $valueN$)
class $Class$ {}
的更换:
@SequenceGenerator(name = "$Class$_$VALUE$", $param1$ = $value1$,/*...*/ $paramN$ = $valueN$)
class $Class$ {}
我真的不希望这是真正的答案,所以我不会在接下来的一周内接受它,希望有人提供更好的答案:)
答案 1 :(得分:0)
由于结构搜索中与注释参数相关的bug,这很难实现。但是,有一种使用替换变量和Groovy脚本的解决方法。使用以下搜索模板:
@SequenceGenerator(name = $value$)
class $Class$ {}
$ value $ constraints
text / regexp:"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\""