我想在Android上使用ButterKnife。我需要根据代码中其他地方的一些表达式来注释一些字段。我有这样的代码
private String myField;
...
public myClassConstructor() {
...
myField = res.getString(R.string.my_string_id);
...
}
我想要这个
@BindString(R.string.my_string_id);
String myField;
...
public myClassConstructor() {
...
...
}
在结果中,表达式消失了,并且该字段基于旧表达式进行注释。
是否有可能在IntelliJ的结构替换中进行此类搜索和替换?当感兴趣的线不相邻并且在结构上处于不同的位置时,似乎它没有优雅地处理该情况。我尝试将它基于类模板,并使用$ Statement $(0-unbounded occurrence),但它对我不起作用。
我意识到它实际上与正则表达式相比很简单,当然比使用IntelliJ结构搜索来玩球更简单,但是 我喜欢学习我的工具,所以我仍然想知道这是否可行。
答案 0 :(得分:2)
虽然Search structurally
在某种程度上有效并且可以进行搜索查询,但replace structuraly
是一种由外星人和#34;制作的工具。对于"捕食者"。我希望intelliJ团队能够重新审视这个功能,并使其更加实用/可理解。
我自己尝试进行Replace structurally
查询,但我只能制作Search structurally
条款。
我以Mockito lib为例。
此处的一个关键点是$SomeStatement1$
和$SomeStatement2$
分钟和最大点数为{0,无限制}
从这一点开始,我尝试使用替换子句,但它完全弄乱了方法/字段声明/类的范围。
希望这有帮助。
答案 1 :(得分:0)
这样的事情应该有效 搜索模板:
class $Class$ {
$FieldType$ $FieldName$;
$Class$() {
$st1$;
$FieldName$ = res.getString($expr$);
$st2$;
}
}
变量:
st1
分钟:0最大:无限制
st2
min:0 max:unlimited
替换模板:
class $Class$ {
@BindString($expr$)
$FieldType$ $FieldName$;
$Class$() {
$st1$;
$st2$;
}
}