我使用Eclipse JDT库来解析java源代码,以访问类中定义的所有方法。当代码在方法体中包含类似“// xxxx”的注释时,解析器将在注释之前停止,并且方法main(String [] args)被忽略。
这是解析的示例:
public class HelloWorld {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
//Set the age
this.age = age;
System.out.println();
}
public static void main(String[] args) {
HelloWorld hw = new HelloWorld();
if(true) {
hw.setAge(10);
}
}
}
这是我编写的用于解析上述示例案例的代码:
public class Parser {
/**
* Parse java program in given file path
* @param filePath
*/
public void parseFile(String filePath) {
System.out.println("Starting to parse " + filePath);
char[] source = readCharFromFile(filePath);
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(source);
parser.setResolveBindings(true);
CompilationUnit cu = (CompilationUnit) parser.createAST(null);
cu.accept(new ASTVisitor() {
@Override
public boolean visit(MethodDeclaration node) {
return true;
}
@Override
public void endVisit(MethodDeclaration node) {
System.out.println("Method " + node.getName().getFullyQualifiedName() + " is visited");
}
});
}
}
当我使用它来解析代码时,它只能获得getName()
,setName()
,getAge()
和getAge()
方法访问的结果{{1被忽略了。
期待您的回答。感谢。
答案 0 :(得分:1)
问题是您的readCharFromFile(filePath)
方法会从文件中删除\n
或行尾字符。这意味着评论后的所有行实际上都是评论的一部分。
答案 1 :(得分:1)
您使用的代码似乎存在问题。
请尝试以下代码阅读文件:
File javaFile = new File(filePath);
BufferedReader in = new BufferedReader(new FileReader(javaFile));
final StringBuffer buffer = new StringBuffer();
String line = null;
while (null != (line = in.readLine())) {
buffer.append(line).append("\n");
}
并使用它来设置解析器源:
parser.setSource(buffer.toString().toCharArray());
其他所有代码似乎都没问题。