2016-01-28 11 views
5

Android用ButterKnifeを使用します。コードの他の部分にある式に基づいていくつかのフィールドに注釈を付ける必要があります。私はこのIntelliJ構造検索を使用してフィールドとその式を新しいフィールドに置き換えます。

@BindString(R.string.my_string_id); 
String myField; 
... 
public myClassConstructor() { 
    ... 
    ... 
} 

は結果では、発現がなくなって、そしてフィールドが古い式に基づいて注釈されたい

private String myField; 
... 
public myClassConstructor() { 
    ... 
    myField = res.getString(R.string.my_string_id); 
    ... 
} 

このように私は、コードを持っています。

IntelliJの構造的な置き換えで、この種の検索と置換が可能ですか?関心のある行が隣接しておらず、構造的に異なる場所にある場合は、正常に処理されないようです。私はクラステンプレートをベースにしてみましたが、$ Statement $(無制限のオカレンス)を使用しましたが、それは私のためには機能しませんでした。

私は私のツールを学ぶのが好きなので、私はまだこれが可能であるかどうかを知りたい 確かにはるかに簡単にボールをプレーするためにIntelliJの構造検索を得るよりも、正規表現を行うことがその実際に比較的簡単に実現、しかし。

答えて

2

Search structurallyは何とか動作しており、検索クエリを作成できますが、replace structuralyは「外国人」によって「捕食者」が作成したツールの1つです。 intelliJチームがこの機能を再訪し、より使いやすく/理解しやすくなることを願っています。

私は自分でReplace structurallyというクエリを作成しようとしていましたが、Search structurallyという句しか作成できませんでした。

私は、例えばMockito libでそれを行っています。ここで重要なポイントの

Structural search dialog

一つ{0、無制限}

enter image description here

そして、私が来ることを試みた。この時点からの$SomeStatement1$$SomeStatement2$最小と最大カウントに置くためにreplacement句を使っていましたが、メソッド/フィールド宣言/クラスのスコープを完全に混乱させていました。

これが役に立ちます。

+0

私もそれがめちゃめちゃました私のコードをアップしたり、時にはそれ以上のものを削除したり、新しいクラスを挿入したりすることがあります。非常にシンプルでローカル検索されているように見えました。私は誰かがそれが不可能であると言いたいと思っていました。確かな知識を持った人がいないなら、開発者だけが知っているから、私が望むことはできないと思うので、私はそれを仮定します。 – arberg

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$; 
    } 
} 
+0

ありがとうございました。私は試したことの一つであり、うまくいかないので、これを質問に含めるべきだった。私は何にもマッチしません。私はそれを使って遊んだとき、実際に何らかの置換えが起こったことを覚えています。私はソースコードを簡略化したと思います。しかし、それは完全に置換えを台無しにしました。上記の回答を受け入れて問題を解決します。 – arberg

関連する問題