重庆中小企业建站价格,凡客诚品官方网站,做财经比较好的网站,做网站需要什么手续需求
工作时有需求获取java文件成员变量的注释#xff0c;故而研究了一系列开源产品#xff0c;之所以选择JavaParse#xff0c;是因为博客上文件比较多。。。
多归多#xff0c;但也版本杂乱#xff0c;走了不少歪路。
版本2.x和版本3.x还是有较大不同的#xff0c;有…需求
工作时有需求获取java文件成员变量的注释故而研究了一系列开源产品之所以选择JavaParse是因为博客上文件比较多。。。
多归多但也版本杂乱走了不少歪路。
版本2.x和版本3.x还是有较大不同的有需要的人可以参考。
版本2.x
!-- https://mvnrepository.com/artifact/com.github.javaparser/javaparser-core --
dependencygroupIdcom.github.javaparser/groupIdartifactIdjavaparser-core/artifactIdversion2.2.1/version
/dependencypackage 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));// 获取指定文件中的所有类ListTypeDeclaration types parse.getTypes();for (TypeDeclaration type : types) {// 获取类名/类注释String className type.getName();type.getComment();// 获取类里的变量、方法等子节点ListNode list type.getChildrenNodes();System.out.println(总个数: list.size());for (Node node : list) {if (node.toString().indexOf(() ! -1)continue;// 获取变量的类型、变量名称和变量值ListNode 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
dependencygroupIdcom.github.javaparser/groupIdartifactIdjavaparser-core/artifactIdversion3.6.16/versionscopecompile/scope
/dependencypackage 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));OptionalClassOrInterfaceDeclaration errSubType parse.getClassByName(ErrSubType);errSubType.ifPresent((c) - {// 获取类名/类注释String className c.getName().toString();c.getComment();// 获取类里的变量、方法等子节点ListNode 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 ;OptionalComment 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));}});}
}