我有一个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 有助于修改类文件。它是一个非常简单方便的字节码编辑工具,但我必须编辑源代码。
答案 0 :(得分:2)
看起来您必须进行完整的语法分析。 Java源代码本质上是自由格式文本,您不能依赖于换行符或间距,可以在代码中的任何位置插入注释。因此,所有使用字符串匹配或正则表达式解决问题的尝试最终都会失败。
像Javacc或antlr这样的工具可能对解析很有帮助。如果您搜索,您将找到这些工具的Java语法。
答案 1 :(得分:1)
一个简单的解决方案(没有使用javacc或类似的东西进行完全解析):
创建标记注释,例如
public void myMethod(bla blubb) {
//$myMethod entry$
stuff.going.on();
//$myMethod exit$
}
然后使用简单的字符串替换来注入您的代码。 (注射后保留标记物才能重新注射)。
执行完整的语法树解析然后注入代码+重写文件保持注释和格式化是一项非常复杂的任务。你需要一些时间。