需求
工作时有需求获取java文件成员变量的注释,故而研究了一系列开源产品,之所以选择JavaParse,是因为博客上文件比较多。。。
多归多,但也版本杂乱,走了不少歪路。
版本2.x和版本3.x还是有较大不同的,有需要的人可以参考。
版本2.x
com.github.javaparser javaparser-core 2.2.1
package cn.com.infosec.netseal.webserver.util; import cn.com.infosec.netseal.common.util.StringUtils; import com.github.javaparser.JavaParser; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Node; import com.github.javaparser.ast.body.TypeDeclaration; import com.github.javaparser.ast.comments.Comment; import java.io.File; import java.util.List; public class JavaParseTest { public static void main(String[] args) throws Exception { String classPath = "E:\\Idea\\NetSeal\\v7\\src\\netseal\\netseal-common\\src\\main\\java\\cn\\com\\infosec\\netseal\\common\\resource\\errCode\\ErrSubType.java"; String mapName = "subTypeMap"; CompilationUnit parse = JavaParser.parse(new File(classPath)); // 获取指定文件中的所有类 Listtypes = parse.getTypes(); for (TypeDeclaration type : types) { // 获取类名/类注释 String className = type.getName(); type.getComment(); // 获取类里的变量、方法等子节点 List list = type.getChildrenNodes(); System.out.println("总个数:" + list.size()); for (Node node : list) { if (node.toString().indexOf("(") != -1) continue; // 获取变量的类型、变量名称和变量值; List varTypeAndKV = node.getChildrenNodes(); Node varKV = varTypeAndKV.get(1); String varK = varKV.toString().split("=")[0].trim(); // 获取变量注释 String content = ""; Comment comment = node.getComment(); if (comment != null && comment.getContent() != "") { content = comment.getContent().replace("*", "").trim(); } System.out.println(StringUtils.format("{}.put({}.{}, \"{}\");", mapName, className, varK, content)); } } } }
版本3.x
com.github.javaparser javaparser-core 3.6.16 compile
package cn.com.infosec.netseal.appserver.util; import cn.com.infosec.netseal.common.util.StringUtils; import com.alibaba.fastjson.JSON; import com.github.javaparser.JavaParser; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Node; import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; import com.github.javaparser.ast.body.FieldDeclaration; import com.github.javaparser.ast.body.TypeDeclaration; import com.github.javaparser.ast.body.VariableDeclarator; import com.github.javaparser.ast.comments.Comment; import com.github.javaparser.ast.expr.SimpleName; import java.io.File; import java.util.List; import java.util.Optional; public class JavaParseTest { public static void main(String[] args) throws Exception { String classPath = "E:\\Idea\\NetSeal\\v7\\src\\netseal\\netseal-common\\src\\main\\java\\cn\\com\\infosec\\netseal\\common\\resource\\errCode\\ErrSubType.java"; String mapName = "subTypeMap"; CompilationUnit parse = JavaParser.parse(new File(classPath)); OptionalerrSubType = parse.getClassByName("ErrSubType"); errSubType.ifPresent((c) -> { // 获取类名/类注释 String className = c.getName().toString(); c.getComment(); // 获取类里的变量、方法等子节点 List list = c.getChildNodes(); System.out.println("总个数:" + list.size()); for (Node nodeTmp : list) { if (!(nodeTmp instanceof FieldDeclaration)) continue; FieldDeclaration node = (FieldDeclaration) nodeTmp; // 获取变量的类型、变量名称和变量值; VariableDeclarator variable = node.getVariable(0); String varName = variable.getNameAsString(); String varType = variable.getTypeAsString(); // 获取变量注释 String content = ""; Optional comment = node.getComment(); if (comment != null && comment.get().getContent() != "") { content = comment.get().getContent().replace("*", "").trim(); } System.out.println(StringUtils.format("{}.put({}.{}, \"{}\");", mapName, className, varName, content)); } }); } }
到此这篇关于JavaParse入门的文章就介绍到这了,更多相关内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文地址:https://blog.csdn.net/qq_42873640/article/details/126230801