获取方法中的所有变量名

Get all variable names in methods

我想检索 java 文件的所有方法中的所有变量名。例如 Person.java 包含

class Person {
    private String firstName;
    private String lastName;
    public static void main() {
            String test = "test";
            Person p1 = new Person();
            p1.setName("John");
    }
    public void setName(String name)   {
            this.firstName = name;
    }

}

我希望能够打印出声明的所有变量。我试过使用 javaparser 来检索它们。 但是,我只能检索在 class 中声明的变量,即

firstName

lastName

我也希望能够检索在 main 方法中声明的所有变量

firstName
lastName
test

我的java解析器方法是

public static void getVariables(String inputFilePath) {
    try {
        CompilationUnit cu = StaticJavaParser.parse(new File(inputFilePath));

        cu.findAll(FieldDeclaration.class).forEach(field -> {
            field.getVariables().forEach(variable -> {
                System.out.println(variable.getName());
                variable.getInitializer().ifPresent(initValue -> 
                System.out.println(initValue.toString()));
            });
        });
    } catch (FileNotFoundException fe) {
        System.out.println(fe.getMessage());
    } catch (IOException e){
        System.out.println(e.getMessage());
    }

}

已解决

按照 Eugene 的建议,我现在可以检索所有变量了

public static void getVariables(String inputFilePath) {
    try {
        CompilationUnit cu = StaticJavaParser.parse(new File(inputFilePath));
        cu.findAll(VariableDeclarator.class).forEach(variable -> {
            System.out.println(variable);
        });
    } catch (FileNotFoundException fe) {

    } catch (IOException e) {

    }
}

您正在将 FieldDeclaration.class 传递给 CompilationUnit 的 findAll() 方法。因此,正如所要求的那样,它会为您提供所有已声明的字段。

如果您想列出所有已声明的变量,请使用同一包中的 VariableDeclarator.class - 它会为您提供所有这些,包括声明为字段的变量。