2

我正在使用 java 解析器来读取 java 文件。然后我对如何在每种方法中访问变量,然后在每种方法中修改变量名称和类型有疑问。

public static void main(String[] args) throws Exception {
    // creates an input stream for the file to be parsed
    FileInputStream in = new FileInputStream("test.java");

    CompilationUnit cu;
    try {
        // parse the file
        cu = JavaParser.parse(in);
    } finally {
        in.close();
    }

    // change the methods names and parameters
    changeMethods(cu);

    // prints the changed compilation unit
    System.out.println(cu.toString());
}

private static void changeMethods(CompilationUnit cu) {
    List<TypeDeclaration> types = cu.getTypes();
    for (TypeDeclaration type : types) {
        List<BodyDeclaration> members = type.getMembers();
        for (BodyDeclaration member : members) {
            if (member instanceof MethodDeclaration) {
                // what must i do?
            }
        }
    }
}

[更新]

有关更多详细信息,我有如下方法:

 private double[] getExtremeValues(double[] d) {    
    double min = Double.MAX_VALUE;  
    double max = -min;

}

在那种方法中,我只想用'double max1'修改'double max'。第二个问题,方法参数中如何获取'double[] d'?请帮忙!谢谢

4

2 回答 2

0

这是一个修改方法名称的示例。你需要重写一些方法

    private static class MethodNameModifier extends ModifierVisitor<Void> {
        @Override
        public MethodDeclaration visit(MethodDeclaration md, Void arg) {
            super.visit(md, arg);
            //System.out.println(md.getName());
            md.setName("x");
            return md;
        }
    }
于 2021-05-21T15:38:09.403 回答
0

您想修改方法中包含的所有变量吗?在这种情况下,您将需要使用递归或使用访问者(例如参见GenericVisitorAdapter)。

如果您只想更改参数,请查看MethodDeclaration中的方法“getParameters” 。

在这两种情况下,请注意仅更改变量的名称可能会破坏代码:您还需要更改对该变量的所有引用。

更改方法的类型是什么意思?这可以通过 MethodDeclaration 的方法 setType 轻松完成。

于 2015-12-14T09:37:04.553 回答