私はしたいと思います変身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を拡張することも可能です