用于获取有关 Java 源代码的元数据的 Java API
我想创建一些基于Java代码(而不是字节码)的反向工程设计文档,而不是编写自己的解释器,有哪些工具和API可用于使用Java代码遍历Java代码?
反射是针对字节码的,并且仅限于方法级别,我也想“对象化”方法代码。
Java doc 忽略代码本身,仅基于注释,自动 UML 序列过于
严格像这样的 API(请原谅我对官方编程语言结构术语的无知):
JavaCodeDom jcd = new JavaCodeDom(new File(pathToJavaSource), CompilerEnum.Java16)
List <ClassSrc> classes = jcd.getClasses();
ClassSrc cls = classes.get(0);
Map<MethodSignatureSrc,MethodSrc> methods = cls.getMethodsMap();
MethodSrc main = mothds.get(new MethodSignatureSrc(Modifiers.Public, Modifiers.Static, ReturnTypes.Void, "main", new MethodParams(String[].class))
List<StatementSrc> statements = main.getStatements();
for(StatementSrc statement : statements){
if(statement.getType()==StatementTypes.Assignment()){
AssignmentStatementSrc assignment = (AssignmentStatementSrc)statement;
Identifier src = assignment.getAssigneeVariable();
ExpressinoSrc = assignment.getAssignmentValue();
}
}
List<AnnotationsSrc> annotations = cls.getAnnotations();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
存在多个此类 API(并随 JDK 一起提供),其中一些内置于 Java 编译器 (javac)。
java.lang.Class
和java.lang.reflect.*
,以及java.lang.annotation< /代码>)。
我曾经使用 Doclet API 和 Compiler Tree API 的组合来漂亮地格式化源代码(遗憾的是,这不是在线的)。
There are several such APIs in existence (and delivered with the JDK), some of them build in in the Java Compiler (javac).
java.lang.Class
andjava.lang.reflect.*
, together withjava.lang.annotation
).I once used a combination of Doclet API and Compiler Tree API to format source code beautifully (this is not online, sadly).
BCEL 支持读取操作 Java 类文件。 (我自己没有使用过它,但看到它在第三方产品中成功使用。)
如果您只是对反编译感兴趣,您可能会发现反编译为源代码就足够了。这是Java 的几个选项的比较< /a>.
BCEL supports reading an manipulating Java class files. (I have not used it myself, but saw it used successfully in a third-party product.)
If you're just interested in decompiling, you might find it sufficient to decompile to source code. Here's a comparison of several options for Java.
我似乎 ANTLR 是一种选择,但我没有使用它
I seems ANTLR is one option, but I haven't used it
这似乎回答了我的问题: 如何从 Java 源代码生成 AST ? ( 勺子 )
This seems to answer my question: How to generate AST from Java source-code? ( Spoon )