我想澄清一些与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()需要一个类行号。
如果有人对此有所了解,我非常感谢澄清,因为文档非常模糊,似乎没有人发现需要提出这个问题。
答案 0 :(得分:0)
除非您告知,否则Javassist不会更改行号。如果您在Javassist中导入一个类,这既不会更改类文件,而只会作为Javassist的提示,它应该在哪些包中查找非限定类名。在字节代码中,类名始终是完全限定的。
此外,Javassist不支持方法级别的insertAt。但是,您可以通过迭代方法的指令并找到第一个行号来模拟这一点。只需在此数字处添加偏移量即可。