2017-05-01 5 views
-3

整数をとる注釈プロセッサを作成しようとしています。明示的な整数を使用するとうまくいきます。私はアンドロイドのデータバインディングBRクラスの値を使用する場合でも:データバインディング生成後にAnnotationProcessorを実行

@SomeAnnotation(BR.someField) 

それはBRクラスが見つからないと言っています。

私はアンドロイドのデータバインディングBR世代がまだこのように実行されていないと思います。データバインディング処理が終了した後、処理を開始するようにアノテーションプロセッサにフラグを立てる方法はありますか?

+0

なぜダウン票ですか? –

答えて

0

この値で実際に何をしたいのかという疑問もあります。実際にアノテート・プロセッサー内でこの値が必要な場合は、フィールド自体のクラスはコンパイル・プロセスの中で必要な場所の後に作成されるだけなので、運が悪いかもしれません。実行時に値が必要な場合は、同じ問題が発生する可能性があります。しかし、実行時に注釈を処理するのは非常にコストがかかるため、実装を変更することを検討する必要があります。

今すぐになる可能性があります。注釈プロセッサで生成するソースに値を書き込む必要がある場合は、このフィールドを文字列値として使用して、新しく作成されたソースに書き込むこともできます。適切なインポートを設定するだけで十分でしょう。

@SomeAnnotation("BR.someField") 

生成されたコードがコンパイルされると、このフィールドは、自己作成ソースに配置した場合とまったく同じように動作します。別の注釈の定義に終わらないようにしてください。

final int someField = BR.someField; 
+0

R.javaファイルの値が注釈プロセッサークラス(Butterknifeなど)で参照できる理由がわかりましたが、BR.javaファイルは使用できません。 私がしようとしているのは、 '@SomeAnnotation(BR.someField)'でアノテーションを付けられた関数を持つことです。その関数は、 'fieldId'が' BR.someField'と等しいPropertyChangedがあるときは常に呼び出されます。 私はa.p.の値が必要ないかもしれません。それを文字列として入力することは可能な解決策であり、前に考えていません。しかし、私はオートコンプリートやものを失ってしまいました。 –

+0

'R'はAndroidツールチェーンによって作成され、' BR'は注釈プロセッサによって作成されます。 – tynn

+0

'@Bindable' apを作成する人々は、' BR'クラスの値を参照するための解法としてStringを使用します。私はこれを答えとしてマークします。 –

関連する問題