当前位置: 首页 > 工具软件 > D Parser > 使用案例 >

javaParser使用

柴丰
2023-12-01

首先要导入依赖

<dependency>
    <groupId>com.github.javaparser</groupId>
    <artifactId>javaparser-symbol-solver-core</artifactId>
    <version>3.24.0</version>
</dependency>

1.获取Test.java中的方法名

public class TestJavaParser {
    private static final String FILE_PATH="D:\\study_java\\qDox\\src\\main\\java\\test\\TestClass.java";

    @Test
    public void test1() throws Exception {
        CompilationUnit cu = StaticJavaParser.parse(new File(FILE_PATH));
        //获取方法名
        MethodNamePrinter methodNamePrinter = new MethodNamePrinter();
        List<TestNode> nodeList = new ArrayList<>();
        methodNamePrinter.visit(cu,null);
    }

    private static class  MethodNamePrinter extends VoidVisitorAdapter<Void>{

        @Override
        public void visit(MethodDeclaration methodDeclaration,Void arg){

            super.visit(methodDeclaration,arg);
            
            System.out.println("MethodName:"+methodDeclaration.getName());
        }
    }
}

2.获取方法的起始,结束行号

        改一下上面visit方法中的代码就行了

private static class  MethodNamePrinter extends VoidVisitorAdapter<Void>{

        @Override
        public void visit(MethodDeclaration methodDeclaration,Void arg){


            Optional<Position> begin = methodDeclaration.getBegin();
            Position beginPosition = begin.get();
            int beginLine = beginPosition.line;
            Optional<Position> end = methodDeclaration.getEnd();
            Position endPosition = end.get();
            int endLine = endPosition.line;
            super.visit(methodDeclaration,arg);
            SimpleName simpleName = methodDeclaration.getName();
            String methodName = simpleName.getIdentifier();
            TestNode node = new TestNode(methodName,beginLine, endLine);
            System.out.println(node);
            System.out.println("MethodName:"+methodDeclaration.getName()+":begin:"+beginLine+":end:"+endLine);
        }
    }

3.用集合存储方法名

public class TestJavaParser {
private static final String FILE_PATH="D:\\study_java\\qDox\\src\\main\\java\\test\\TestClass.java";
    @Test
    public void test2() throws Exception {
        CompilationUnit cu = StaticJavaParser.parse(new File(FILE_PATH));
        //用集合存放方法名
        List<String> methodNames = new ArrayList<>();
        MethodNameCollector methodNameCollector = new MethodNameCollector();
        methodNameCollector.visit(cu,methodNames);
        methodNames.forEach(n-> System.out.println("MethodName:"+n));
    }


private static class  MethodNameCollector extends VoidVisitorAdapter<List<String>>{

        @Override
        public void visit(MethodDeclaration methodDeclaration,List<String> collector){
            super.visit(methodDeclaration,collector);
            collector.add(methodDeclaration.getName());
        }
    }
}

4.当前类的函数调用

class FunctionCallVisitor extends GenericVisitorAdapter<Void, Void> {
        @Override
        public Void visit(MethodCallExpr n, Void arg) {
            System.out.println("function call: " + n.toString());
            String functionCall = n.toString();
            return super.visit(n, arg);
        }

        @Override
        public Void visit(MethodDeclaration n, Void arg) {
            System.out.println("function declaration: " + n.getNameAsString());
            return super.visit(n, arg);
        }
    }

5.变量

class VariableIdentifierVisitor extends GenericVisitorAdapter<Void,List<String>>{
        @Override
        public Void visit(VariableDeclarationExpr v,List<String> variableIdentifierList){
            NodeList<VariableDeclarator> variables = v.getVariables();
            for (VariableDeclarator vv :variables) {
                System.out.println(vv.getType());
                System.out.println(vv.getName());
            }
            return super.visit(v,variableIdentifierList);
        }
    }

 类似资料: