服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - JavaParse入门

JavaParse入门

2023-10-18 14:55爱吃鱼的简大Boss Java教程

工作时有需求获取java文件成员变量的注释,故而研究了一系列开源产品,之所以选择JavaParse,是因为博客上文件比较多。。。

需求

工作时有需求获取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));

        // 获取指定文件中的所有类
        List types = 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));

        Optional errSubType = 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

延伸 · 阅读

精彩推荐