Groovy ast 変換コードを使用して Java クラスを操作することは可能でしょうか?
はいの場合、例を挙げてください。
いいえの場合、その理由を教えてください。
Groovy ast 変換コードを使用して Java クラスを操作することは可能でしょうか?
はいの場合、例を挙げてください。
いいえの場合、その理由を教えてください。
はい、Groovy AST Transformations を Java コードで使用することは可能です。Groovy は Java バイトコードにコンパイルされ、Java ライブラリ上に構築されます。2 つの言語間の相互運用性は優れています。
Groovy サイトには、AST Transformationsをカバーするセクション全体があります。
以下は、Java/Groovy が混在するアプリケーションの例です。標準の Java インターフェイスと実装があります。groovy クラスは @Delegate AST 変換を使用し、invokeMethod も使用します。
Java クラス:
interface IFoo {
public String someMethod(String arg1);
}
class Foo implements IFoo {
public String someMethod(String arg1) {
arg1+arg1;
}
}
Groovy クラス:
class Bar implements IFoo {
@Delegate Foo foo = new Foo()
def otherMethod() {
someMethod("abcdef")
}
}
new Bar().otherMethod() を実行すると、'abcdefabcdef' が返されます。
多分。最初の問題は、AST を提供する Java コンパイラを見つけることです。Eclipse コンパイラーを試してください。ここでは、Groovy AST トランスフォーマーが期待する型にすべての型をマップするだけです。ダックタイピングは役に立ちますが、2 つの AST に互換性のある情報が含まれている場合に限ります (これは疑問です)。
その後、バイトコードが生成される前にコンパイラから AST を取得する方法を見つけてから、変更された AST をコンパイラに再度挿入してバイトコードを取得する方法を見つける必要があります。
全体として、おそらく不可能ではありませんが、ある程度の作業が必要です。