コンパイル時のJavaコード変換 質問する

コンパイル時のJavaコード変換 質問する

私はしたいと思います変身Java ソースコードコンパイル時ソースコードをコンパイラに渡す直前に作成します。言い換えれば、プリプロセッサ変身できる

"bla bla bla" 

次のような他のコードに置き換えることができます。

new MyClass("bla", 3) 

私の本当の動機は文字列の暗号化を行うことです。ここで説明

カスタム注釈プロセッサの作成を提案する人もいますが、私が理解している注釈は次のとおりです。

  • 新しいクラスファイルを生成するために使用できますが、コンパイラに渡す前に既存のコードを変換するために使用することはできません。
  • これらはパッケージ、クラス、またはメソッド レベルでは機能するようですが、メソッド本体/実装では機能しないようです。

Spoon や ObjectsWeb ASM などのフレームワークの使用を提案する人もいますが、これらのフレームワークは学習して既存のコード ベースに展開するのが複雑に思えます。

私は、両方のアプローチについて、Java コードのプリプロセスの簡単な例を見つけようと努力しています。

複数の Ivy モジュールを含む既存の大規模なコード ベースを完全に変更せずに、コード変換を行うスマートな方法をご存知の方はいませんか? アノテーションが最善の方法のようですが、その方法がわかりません。

ベストアンサー1

同じテクニックを試してみるといいと思いますプロジェクト ロンボク

著者らは次のように概ね説明している。このインタビュー:

内部では何が起こっているのでしょうか? つまり、アノテーションによってどのようにして定型句がバイトコードに配置されるのでしょうか?

レイニエ: 注釈プロセッサ API では新しいファイルの作成のみが可能で、注釈が含まれているファイルを変更することはできません。これは Lombok が行うことで、Lombok は注釈プロセッサ API を使用しません。

代わりに、Lombok は、アノテーション プロセッサ API を、コンパイル プロセスに自身を挿入するメカニズムとしてのみ使用します。すべてのアノテーション プロセッサはコンパイル プロセスの早い段階で初期化され、Lombok はアノテーション プロセッサとして初期化されるときに javac を変更します。変更するのは 1 つだけです。まず AST (ツリー形式に解析された生のソース コード) が Lombok に渡され、javac が続行する前に必要なものが生成されます。

そしてロンボクはどのように機能しますか?

必要に応じてProject Lombokを拡張することも可能です

おすすめ記事