java源码解析JavaParser

package com.bootdo.jparser;

import java.io.File; 
import java.io.FileNotFoundException;

import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;

public class Jparser {
    public static void main(String[] args) {
        try {
            //将一个java代码的文本解析为一棵CompilationUnit类型的树
            CompilationUnit unit = JavaParser.parse(new File("D:\\Atools\\sts-bundle\\stsWorkspace\\bootdo2\\src\\main\\java\\com\\bootdo\\jparser\\DetectedController.java"));
            classUnit vc = new classUnit();
            //在指定的树上进行搜索,然后根据遇到的节点的类型调用具体的回调
            //vc.visit(unit, null);
            unit.accept(vc,null);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
}

package com.bootdo.jparser;

import java.util.Optional;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.github.javaparser.ast.ImportDeclaration;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.PackageDeclaration;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.body.VariableDeclarator;
import com.github.javaparser.ast.comments.JavadocComment;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.visitor.VoidVisitorAdapter;

public class classUnit extends VoidVisitorAdapter<Object> {
    Logger log  = LoggerFactory.getLogger(classUnit.class);
    //alt+shift m 成员方法
    
    /**
     * 包名
     */
     @Override
     public void visit(PackageDeclaration n, Object arg) {
         System.out.println("package---------"+n.getName());
         super.visit(n, arg);
     }
     
     /**
      * 支持包
      */
     @Override
    public void visit(ImportDeclaration n, Object arg) {
         log.info("ImportDeclaration-------------"+n.toString());
        super.visit(n, arg);
    }
     
    /**
     * 类
     */
    @Override
    public void visit(ClassOrInterfaceDeclaration n, Object arg) {
        log.info("arg-----------"+arg);//null
        log.info("n.toString()--------"+n.toString());//整个类的内容,不包括package和import
        log.info("n.getNameAsString()---------"+n.getNameAsString());//类名
        //获取类的注解
        NodeList<AnnotationExpr> annotations = n.getAnnotations();
        //判断是否有注解
        if(annotations.size()>0) {
            for (AnnotationExpr annotation : annotations) {
                log.info(annotation.toString());
            }
        }
        //获取类的注释
        Optional<JavadocComment> javadocComment = n.getJavadocComment();
        log.info(javadocComment.toString());
        super.visit(n, arg);
    }
    
    
    /**
     * 成员方法
     */
    @Override
    public void visit(MethodDeclaration n, Object arg) {
        log.info("***********************************************************");
        log.info("arg-----------"+arg);//null
        log.info("n.toString()--------"+n.toString());//整个方法的内容
        log.info("n.getNameAsString()---------"+n.getNameAsString());//方法名
        log.info("n.getParameters()---------"+n.getParameters());//所有参数
        NodeList<Parameter> parameters = n.getParameters();
        for (Parameter parameter : parameters) {
            log.info(parameter.toString());
        }
        //获取方法的注解
        NodeList<AnnotationExpr> annotations = n.getAnnotations();
        //判断是否有注解
        if(annotations.size()>0) {
            for (AnnotationExpr annotation : annotations) {
                log.info(annotation.toString());
            }
        }
        //获取方法的注释
        Optional<JavadocComment> javadocComment = n.getJavadocComment();
        log.info(javadocComment.toString());
        //获取方法里面的方法
        /*CompilationUnit cu = JavaParser.parse(n.toString());
        cu.accept(new methodUnit(), null);*/
        super.visit(n, arg);
    }
    
    /**
     * 变量
     */
    @Override
    public void visit(VariableDeclarator n, Object arg) {
        log.info("VariableDeclarator--------"+n.toString());
        log.info("VariableDeclarator--------");
        //bContentService  成员变量
        //bContentDO = bContentService.get(cid)  方法内部的变量
        super.visit(n, arg);
    }
    
    /**
     * 成员变量的注解
     */
    @Override
    public void visit(FieldDeclaration n, Object arg) {
        log.info("FieldDeclaration###############"+n.toString());//@Autowired
        System.out.println("所在位置的行号,int类型"+n.getRange().get().begin.line);
        super.visit(n, arg);
    }
    
}

扫描的java文件

package com.bootdo.jparser;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import com.bootdo.blog.domain.ContentDO;
import com.bootdo.blog.service.ContentService;

/**
 * 文章内容
 * 
 * @author chglee
 * @email [email protected]
 * @date 2017-09-09 10:03:34
 */
@Controller
@RequestMapping("/blog/bContent")
public class DetectedController {
    
    Logger log  = LoggerFactory.getLogger(this.getClass());
    
    @Autowired
    ContentService bContentService;

        
    /**
     * @return 需要配置thymeleaf模板引擎
     */
    @GetMapping()
    String bContent() {
        a();
        return "blog/bContent/bContent";
    }
    
    /**
     * @param cid
     * @return 测试能否获得对象
     */
    @GetMapping("/edit/{cid}")
    public ContentDO edit(@PathVariable("cid") Long cid) {
        ContentDO bContentDO = bContentService.get(cid);
        return bContentDO;
    }
    
    public void a() {
        
    }
}

猜你喜欢

转载自blog.csdn.net/shijiaolong0/article/details/82083964