Javassist:在仅具有右括号的行中插入源代码

时间:2016-03-30 15:42:57

标签: java javassist

对于一个项目,我使用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
}

我该如何解决这个问题?

0 个答案:

没有答案