5

我想使用 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-无限次出现),但它对我不起作用。

我意识到使用正则表达式实际上相对简单,当然比让 IntelliJ 结构搜索玩球要简单得多,但我喜欢学习我的工具,所以我仍然想知道这是否可能。

4

2 回答 2

3

虽然Search structurally以某种方式工作并且可以进行搜索查询,replace structuraly但它是“外星人”为“掠夺者”制作的一种工具。我希望 intelliJ 团队将重新审视这个功能,并使其更易于使用/易于理解。

我试图自己做Replace structurally查询,但我只能做Search structurally子句。

例如,我已经使用 Mockito lib 完成了它。

结构搜索对话框

这里的关键点之一是将 for$SomeStatement1$$SomeStatement2$min 和 max count 设置为 {0, Unlimited}

在此处输入图像描述

从这一点开始,我尝试使用替换子句,但它完全弄乱了方法/字段声明/类的范围。

希望这可以帮助。

于 2016-02-01T09:44:17.337 回答
0

像这样的东西应该工作。
搜索模板:

class $Class$ { 
    $FieldType$ $FieldName$;

    $Class$() {
        $st1$;
        $FieldName$ = res.getString($expr$);
        $st2$;
    }
}

变量:
st1min:0 max:无限制
st2min:0 max:无限制

替换模板:

class $Class$ { 
    @BindString($expr$)
    $FieldType$ $FieldName$;

    $Class$() {
        $st1$;
        $st2$;
    }
}
于 2016-03-04T11:25:41.283 回答