检查方法范围内的重复变量 Java
Check duplicate variable in a method scope Java
我使用 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);
}
}
1 您需要解析 java 代码:
http://code.google.com/p/javaparser/
或阅读此文:
Java source code parsers/generators
2 之后,尝试一些东西并显示您的代码
我使用 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);
}
}
1 您需要解析 java 代码:
http://code.google.com/p/javaparser/
或阅读此文:
Java source code parsers/generators
2 之后,尝试一些东西并显示您的代码