0

私はJavaソースファイルを持っています(例)

public class JTest{  
  public static void main (String arg[])  
    { . . . . . }  
  public mytestmethod()  
    {  
    for(i=0;i<10;i++)  
      System.out.println(i);  
    }    }  

私がしなければならないことは、コンパイルされたクラスファイルではなく、上記のJavaファイルのソースコードを変更できるJavaプログラムを書くことです。 そのプログラムを使用して変更した後、出力は次のようになります。. .

public class JTest{  
  public static void main (String arg[])  
    { . . . . . }  
  public mytestmethod()  
    {  
    for(i=0;i<10;i++)  
      {                                    // { added to code  
         System.out.println(i);  
         System.out.println("ITERATION");  //new line added to code  
      }                                    // } added to code  
 }  }  

私の質問は今明確になると思います。それは私の仕事のほんの一例です。
どのJavaライブラリ/ライブラリを使用できますか。

JAVASSISTは、クラス ファイルを変更するのに役立ちます。バイトコード編集用の非常に簡単で便利なツールですが、ソース コードを編集する必要があります。

4

2 に答える 2

2

これは、完全な構文解析を行う必要があるようです。Java ソース コードは基本的に自由形式のテキストです。改行や空白に依存することはできません。コメントはコード内の任意の場所に挿入できます。そのため、文字列の一致や正規表現を使用してそれに取り組む試みはすべて、最終的に失敗します。

解析には、Javacc や antlr などのツールが役立つ場合があります。検索すると、これらのツールの Java 文法が見つかります。

于 2012-12-30T06:58:42.433 に答える
1

簡単な解決策(javaccなどを使用した完全な解析なし):

などのタグ付けコメントを作成します。

public void myMethod(bla blubb) {
//$myMethod entry$
stuff.going.on();
//$myMethod exit$
}

次に、単純な文字列置換を使用してコードを挿入します。(再注入できるように、注入後にマーカーを保管してください)。

完全な構文ツリーの解析を行ってからコードを挿入し、コメントとフォーマットを保持してファイルを書き直すのは、かなり複雑な作業です。それには少し時間が必要です。

于 2012-12-30T12:57:57.027 に答える