[英]Java API to get metadata about Java Source Code
我想創建一些基於Java代碼(而不是字節碼)的反向設計文檔,而不是編寫自己的解釋器,使用Java代碼可以使用哪些工具和API來遍歷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();
有幾個這樣的API存在(並隨JDK一起提供),其中一些在Java編譯器 (javac)中構建。
java.lang.Class
和java.lang.reflect.*
,以及java.lang.annotation
)。 我曾經使用Doclet API和編譯器樹API的組合來精美地格式化源代碼(這不是在線的,遺憾的是)。
BCEL支持讀取操作Java類文件。 (我自己沒有使用它,但看到它在第三方產品中成功使用。)
The Byte Code Engineering Library is intended to give users a convenient
possibility to analyze, create, and manipulate (binary) Java class files
(those ending with .class). Classes are represented by objects which
contain all the symbolic information of the given class: methods,
fields and byte code instructions, in particular.
我似乎ANTLR是一個選項,但我沒有使用它
這似乎回答了我的問題: 如何從Java源代碼生成AST? ( 勺子 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.