![](/img/trans.png)
[英]How to get CompilationUnit from IJavaCompletionProposal
[英]JavaParser how to get classname in CompilationUnit
我有一條到 a.java class 的路徑,例如“./src/module/car.java”,我像這樣解析它:
File sourceFileCar = new File("./src/module/car.java");
CompilationUnit cuCar = StaticJavaParser.parse(sourceFileCar);
如何在之前不知道的情況下獲取 car.java 文件中的 class 名稱(不能使用 cuCar.getClassByName)
要訪問已解析的文件,您必須創建一個訪問者 class,它擴展了 VoidVisitorAdapter class。
public static class ClassNameCollector extends VoidVisitorAdapter<List<String>>{
@Override
public void visit(ClassOrInterfaceDeclaration n, List<String> collector) {
super.visit(n, collector);
collector.add(n.getNameAsString());
}
}
創建 class 后,您必須重寫 visit() 方法,該方法是訪問解析文件中的節點。 在這種情況下,我們使用 ClassOrInterfaceDeclaration 作為方法參數來獲取 class 名稱,並通過 List 來收集名稱。
在主 class 中,創建一個訪問者 object 用於使用 visit() 獲取編譯 object 並作為參數列出。
public static void main(String[] args) throws Exception {
List<String> className = new ArrayList<>();
// Create Compilation.
CompilationUnit cu = StaticJavaParser.parse(new File(FILE_PATH));
// Create Visitor.
VoidVisitor<List<String>> classNameVisitor = new ClassNameCollector();
// Visit.
classNameVisitor.visit(cu,className);
// Print Class's name
className.forEach(n->System.out.println("Class name collected: "+n));
}
結果如下所示。
Class name collected: InvisibleClass
Class name collected: VisibleClass
Class name collected: ReversePolishNotation
希望這可以解決你的問題:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.