我必须为自定义JVM语言实现静态代码分析工具,并且我希望在Java Class<?>
类中可以访问大多数方法,例如:getDeclaredMethods(): Method[]
。我提出了两种方法:
1)编译所有类,以便我有.class文件,我可以在其上调用javap,然后从javap保存到java源文件,并使用Java类型信息。
2)使用antlr4并创建与Java中可访问的相同的类结构。也许还有其他一些方法?
我觉得选项2是重新发明轮子或者它是否是有效的方法?我认为1号选项会更好但我不确定天气这是否可行...然后它不是真正的静态代码分析,因为我需要编译我的自定义语言的所有文件。
你能帮助我,还是至少指出我正确的方向?
有javassist和[cglib]来处理字节码。谷歌的errorprone将自己挂钩到构建过程/编译器。将静态代码分析作为编译器的一部分并不是一个坏主意,例如java编译器检查无法访问的代码。