在方法javajdt解析器中检测相同的变量

在方法javajdt解析器中检测相同的变量,java,eclipse-plugin,abstract-syntax-tree,eclipse-jdt,Java,Eclipse Plugin,Abstract Syntax Tree,Eclipse Jdt,我一直在用JDT实现Java解析器,但在同一方法中检测相同的变量声明时遇到了问题。例如,我的课程如下: public double method(double[] data) { int _ii = 0; int _ii = 0; //same variable name, data type and value for (int _ii = 0; _ii < _dimensi; _ii++) { _temp += data[_ii]; }

我一直在用JDT实现Java解析器,但在同一方法中检测相同的变量声明时遇到了问题。例如,我的课程如下:

public double method(double[] data) {
    int _ii = 0;
    int _ii = 0; //same variable name, data type and value

    for (int _ii = 0; _ii < _dimensi; _ii++) {
        _temp += data[_ii];
    }
    _output = _temp / _dimensi;

    return _output;
}
public double方法(double[]数据){
int_ii=0;
int _ii=0;//相同的变量名、数据类型和值
对于(int ii=0;ii
上面的类有两个同名的变量(int _ii=0),那么我的目标是在同一个方法中找到重复的变量并删除其中一个。因此,代码将是:

public double method(double[] data) {
    int_ii = 0;

    for (int _ii = 0; _ii < _dimensi; _ii++) {
        _temp += data[_ii];
    }
    _output = _temp / _dimensi;

    return _output;
}
public double方法(double[]数据){
int_ii=0;
对于(int ii=0;ii
到目前为止,我的代码是:

  public static void main(String args[]){

     String str = "public class Classname{"
            + "public double method(double[] data) {\n" +
            "    int _ii = 0;\n" +
            "    int _ii = 0; //same variable name, data type and value\n" +
            "\n" +
            "    for (int _ii = 0; _ii < _dimensi; _ii++) {\n" +
            "        _temp += data[_ii];\n" +
            "    }\n" +
            "    _output = _temp / _dimensi;\n" +
            "\n" +
            "    return _output;\n" +
            "}"
            + "}";

    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setSource(str.toCharArray());

    parser.setKind(ASTParser.K_COMPILATION_UNIT);

    final CompilationUnit cu = (CompilationUnit) parser.createAST(null);

    cu.accept(new ASTVisitor() {
                    public boolean visit(MethodDeclaration method){
                            Block block = method.getBody();

                            block.accept(new ASTVisitor() {

                                    public boolean visit(VariableDeclarationFragment var) {
                                        System.out.println("Variable " + var.getName()+", in Method "+method.getName()+ "' Method line " + cu.getLineNumber(method.getStartPosition()));
                                        Multimap<Integer, String> multimap = ArrayListMultimap.create();

                                        multimap.put(1, var.getName()); // variable name
                                        multimap.put(1, cu.getLineNumber(method.getStartPosition())); // method line
                                        multimap.put(1, method.getName()); // method name

                                        //Then what should i do if found variable name, method line and method name more than one in the Multimap?

                                        return false;
                                    }
                            });


                      return false;
                    }

    });
}
publicstaticvoidmain(字符串参数[]){
String str=“公共类类名{”
+“公共双精度方法(双精度[]数据){\n”+
“int_ii=0;\n”+
int _ii=0;//相同的变量名、数据类型和值\n+
“\n”+
“对于(int ii=0;ii

任何人请帮助我,谢谢:)

到目前为止你做了什么?你看过JDT了吗?@greg-449,我已经用我到目前为止编写的代码更新了我的问题。请回顾:)您正在将解析器配置为需要一个编译单元,这是一个带有类头的Java源文件,但您正在尝试解析一个方法实现,因此可以肯定地说它失败了。试着打印cu.getMessages()@delephin,是的,我知道。我已经编辑了源代码:)请帮助