【问题标题】:Check duplicate variable in a method scope Java检查方法范围Java中的重复变量
【发布时间】:2015-12-07 15:16:44
【问题描述】:

我使用 FileReader 读取包含一些方法的 java 文件。我如何读取方法范围(内部的方法区域)以查找重复变量?

例如,这是我读取的一个java文件:

public double[] copyArray(double[] data) {
    int _nn = data.length;
    double[] _tmp = new double[_nn];

    System.arraycopy(data, 0, _tmp, 0, _nn);
    int _nn;
    _nn = tmp;

    return _tmp;
}

如何知道方法的作用域?,我的意思是在{和}之间,如果找到了作用域,则找到重复的变量,例如上面的示例(int _nn)重复。

[加法] 我试过使用java解析器,然后就成功了。然后我应该使用列表发送结果,但只发送列表中的最后一个方法。我的代码有什么问题?

这是一个 MethodVisitor:

private static class MethodVisitor extends VoidVisitorAdapter {
    private List<String> list = new ArrayList<String>();

    @Override
    public void visit(MethodDeclaration n, Object file) {
        list.add(n.getName());

    }
    public List<String> getList() {
        return list;
    }
}

那么,这是一个调用MethodVisitor的方法:

private MethodVisitor mv;

public void doIt(File file) throws Exception {
    CompilationUnit cu;
    try {
        // parse the file
        cu = JavaParser.parse(file);
    } finally {
        //file.close();
    }
    // visit and print the methods names
    mv = new MethodVisitor();
    mv.visit(cu, file);

    List<String> list = mv.getList();

    for(String item:list){
        System.out.println(item);
    }
} 

【问题讨论】:

  • 使用堆栈来跟踪{}
  • 您使用 Java 解析器或诸如 Eclipse 编译器之类的编译器,它将提供大量错误信息和警告(例如字段隐藏)。
  • 编译代码。 Javac 不允许你声明重复的变量。
  • @Ramanlfc,恐怕如果有多个 { inside 方法。
  • 这不是你的问题:你问的是如何找到重复变量。

标签: java java-io javaparser


【解决方案1】:

1 你需要解析java代码:

http://code.google.com/p/javaparser/

或阅读:

Java source code parsers/generators

2 之后,尝试一些东西并显示你的代码

【讨论】:

  • 请使用新版本的JavaParser (github.com/javaparser/javaparser)。你说的那个已经好几年没更新了,它支持Java 1.5,而新的那个正在积极维护,它支持Java 1.8
  • @FedericoTomassetti 感谢您的回复,我已经掌握了所有方法,那么我想问您如何获取每种方法中的所有变量?谢谢:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2020-08-14
相关资源
最近更新 更多