0

我希望我的插件(一个自动终止分析工具)在用户在 Eclipse 中选择的代码上运行。自然,用户选择源代码(.java文件、大纲中的方法……)。但是,我的程序需要编译.class文件作为输入。

如何获取.class选定源项目的文件?与此相关,如何获取所选源方法的字节码描述符?如果泛型和可变参数将(Eclipse)源描述符转换为相应的字节码描述符,对我来说似乎并不简单。

我不想javac自己运行,也不想猜测.class文件是如何命名的(这对内部类来说很讨厌)然后尝试在磁盘上找到它(如果它存在?也许我可以强制 Eclipse 编译?)。

4

1 回答 1

0

Bytecode Outline 插件使用以下解决方案(请参阅 参考资料JdtUtils.getByteCodePath):

  1. 根据源元素,找到输出位置,例如/home/user/workspace/project/build/
  2. 使用包信息在里面找到正确的目录build/,例如/home/user/workspace/project/build/some/package/
  3. 找到“最外层”的类定义(对内部类很重要),使用这个名称作为文件的文件名.class,例如/home/user/workspace/project/build/some/package/Foo.class
  4. 在内部类的情况下,做奇怪的魔法(JdtUtils.getClassName)并相应地修改生成的类文件的名称(可能导致Foo$1.class

所以这个问题的问题就解决了,内部类到相应文件名的翻译可以改进。不过,根据作者的说法,目前的方法(使用“魔术”)适用于“95% 的情况”,而且他不知道过去几年有任何相关的错误。

于 2012-12-07T10:15:37.613 回答