Javassist Clarification(Imports and InsertAt)

时间:2017-03-16 21:34:16

标签: 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. 有没有办法在方法行号而不是类行号添加代码? CtMethod.insertAt()需要一个类行号。

如果有人对此有所了解,我非常感谢澄清,因为文档非常模糊,似乎没有人发现需要提出这个问题。

1 个答案:

答案 0 :(得分:0)

除非您告知,否则Javassist不会更改行号。如果您在Javassist中导入一个类,这既不会更改类文件,而只会作为Javassist的提示,它应该在哪些包中查找非限定类名。在字节代码中,类名始终是完全限定的。

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