对于一个项目,我使用Javassist来检测一些代码。现在我遇到了一个我不知道如何解决的问题。
问题如下:
我想在第122行检测源代码以测试变量sr.systemId
,但Javassist使用方法insertAt(int lineNumber)
(来自类CtBehavior)计算包含下一个语句的下一行。这意味着Javassist在第124行而不是122处插入我的代码,因为行122只有一个右括号。但是在第124行,变量sr.systemId
不再存在,因此抛出异常。我不能使用insertAfter()
(CtBehavior),因为它不在方法体的末尾。
public static IXMLReader fileReader(String filename)
throws FileNotFoundException,
IOException
{
StdXMLReader r = new StdXMLReader(new FileInputStream(filename));
r.setSystemID(filename);
for (int i = 0; i < r.readers.size(); i++) {
StackedReader sr = (StackedReader) r.readers.elementAt(i);
sr.systemId = r.currentReader.systemId; // line 121
-> "code I wish to insert goes here" // "line 122"
} // line 122
// line 123
return r; // line 124
}
我该如何解决这个问题?