gpt4 book ai didi

用于获取有关 Java 源代码的元数据的 Java API

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:56:53 25 4
gpt4 key购买 nike

我想创建一些基于 Java 代码(不是字节码)的逆向工程设计文档,而不是编写我自己的解释器,有哪些工具和 API 可用于使用 Java 代码遍历 Java 代码?

反射是在字节码上,并且仅限于方法级别,我想将方法​​代码也“对象化”。

Java 文档忽略了代码本身,仅基于注释,自动 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();

最佳答案

存在多个这样的 API(并随 JDK 提供),其中一些内置在 Java Compiler 中(javac).

  • 最广泛的是 Compiler Tree API ,这使您可以访问 Java 源代码中的各个表达式(和子表达式)。
  • language model API模型类型和类型成员(构造函数、方法、字段)——它由编译器树 API 使用,也用于注释处理。它不允许访问方法的内容。
  • 当然,在运行时,您拥有反射 API(java.lang.Classjava.lang.reflect.*,以及 java.lang .注解).
  • 要使用编译器树 API,您必须使用 compiler API 调用编译器.
  • 此外,还有 Doclet API对于 Javadoc,它为您提供与语言模型 API 类似的 View ,但另外还有文档注释(和已解析的标签)。

我曾经使用 Doclet API 和 Compiler Tree API 的组合来漂亮地格式化源代码(遗憾的是,这不是在线的)。

关于用于获取有关 Java 源代码的元数据的 Java API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com