Javassist澄清(导入和插入)

Javassist澄清(导入和插入),java,javassist,Java,Javassist,我只想澄清一些与Javassist相关的事情 1。ClassPool.importPackage方法是否实际向类添加行号?例如,如果这是我的代码: public class Test { public static void main(String[] args){ System.out.println("Message!");// Line 3 } } 我要导入“java.util.*;”包,打印语句现在会在第4行吗 2.有没有办法在方法行号而不是类行号处添加

我只想澄清一些与Javassist相关的事情

1。ClassPool.importPackage方法是否实际向类添加行号?例如,如果这是我的代码:

public class Test {
    public static void main(String[] args){
        System.out.println("Message!");// Line 3
    }
}
我要导入“java.util.*;”包,打印语句现在会在第4行吗

2.有没有办法在方法行号而不是类行号处添加代码?CtMethod.insertAt()需要类行号


如果有人知道这方面的任何情况,我将非常感谢澄清,因为文档非常模糊,似乎没有其他人发现有必要问这个问题。除非您告诉Javassist,否则Javassist不会更改行号。如果在Javassist中导入一个类,这既不会更改类文件,也只会提示Javassist应该在哪些包中查找不合格的类名。在字节码中,类名总是完全限定的


此外,Javassist在方法级别不支持insertAt。但是,您可以通过迭代方法的指令并查找第一行号来模拟这一点。只需在这个数字上添加一个偏移量。

如果这听起来很愚蠢,很抱歉,但是我可以举一个例子,迭代一个方法的指令并找到第一个行号吗?从
CtMethod
,您可以获得它的
MethodInfo
实例。它甚至定义了一个convencience方法
getLineNumber
,该方法可以满足您的需要:请注意,如果在
insertAt
方法首先不起作用的地方没有定义值,它可能会返回
-1