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 回答