[英]Java: how to use JavaParser to get number of identifiers of a Java class
我想使用JavaParser來獲取Java類具有的標識符數量。
我下載了JavaParser jar文件並將其添加到我的項目中,然后,我遵循了其中的一些說明,現在我可以以編程方式解析一些Java類,並使用ClassOrInterfaceDeclaration
方法,例如.getMethods()
.getMembers()
等。 。
現在,我想知道如何獲取每個類中的標識符數量。 沒有.getIdentifiers()
方法,那么我應該采用哪種方法?
如果閱讀javaparser-core
的javadoc ,則會發現JavaParser.parse(...)
返回CompilationUnit
,它是AST(抽象語法樹)中的Node
。
可以遍歷AST,例如使用walk(Consumer<Node> consumer)
。
這是一個程序,它將遍歷先前在注釋中發布的源的AST,並打印所有節點。 如果有一個,它將打印節點的標識符 :
import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.nodeTypes.NodeWithIdentifier;
public class Test {
public static void main(String[] args) throws Exception {
String javaSource = "class MyClass {" +
" void main(String[] args) {" +
" int a = 5, b = 6;" +
" int c = a * b;" +
" System.out.println(c);" +
" }" +
"}";
System.out.printf("%-28s %-12s %s%n", "Node.class.simpleName", "Identifier", "Node.toString()");
System.out.printf("%-28s %-12s %s%n", "=====================", "==========", "===============");
JavaParser.parse(javaSource).walk(node -> {
String identifier = "";
if (node instanceof NodeWithIdentifier)
identifier = ((NodeWithIdentifier<?>) node).getIdentifier();
System.out.printf("%-28s %-12s %s%n",
node.getClass().getSimpleName(),
identifier,
node.toString().replaceFirst("(?s)\\R.*", "..."));
});
}
}
產量
Node.class.simpleName Identifier Node.toString()
===================== ========== ===============
CompilationUnit class MyClass {...
ClassOrInterfaceDeclaration class MyClass {...
SimpleName MyClass MyClass
MethodDeclaration void main(String[] args) {...
SimpleName main main
Parameter String[] args
ArrayType String[]
ClassOrInterfaceType String
SimpleName String String
SimpleName args args
VoidType void
BlockStmt {...
ExpressionStmt int a = 5, b = 6;
VariableDeclarationExpr int a = 5, b = 6
VariableDeclarator a = 5
PrimitiveType int
SimpleName a a
IntegerLiteralExpr 5
VariableDeclarator b = 6
PrimitiveType int
SimpleName b b
IntegerLiteralExpr 6
ExpressionStmt int c = a * b;
VariableDeclarationExpr int c = a * b
VariableDeclarator c = a * b
PrimitiveType int
SimpleName c c
BinaryExpr a * b
NameExpr a
SimpleName a a
NameExpr b
SimpleName b b
ExpressionStmt System.out.println(c);
MethodCallExpr System.out.println(c)
FieldAccessExpr System.out
NameExpr System
SimpleName System System
SimpleName out out
SimpleName println println
NameExpr c
SimpleName c c
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.