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でそれを行いました。

構造検索ダイアログ

{0, Unlimited} の最小数と最大数を設定$SomeStatement1$する重要なポイントの 1 つ$SomeStatement2$

ここに画像の説明を入力

そして、この時点から、置換句を付けようとしましたが、メソッド/フィールド宣言/クラスの範囲を完全に混乱させていました。

お役に立てれば。

于 2016-02-01T09:44:17.337 に答える
0

このようなものがうまくいくはずです。
検索テンプレート:

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

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

変数:
st1最小: 0 最大: 無制限
st2最小: 0 最大: 無制限

置換テンプレート:

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

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