我在编写Eclipse Java Parser项目时仍遇到问题。我想编写一个遍历我的工作区项目结构的解析器并返回所有变量。我尝试了多种方法,但没有一种方法可行。
当我遍历IResource
数组时,它会正确识别所有java类和包。但是当我尝试访问相应的java类时,它不起作用。它要么找不到任何东西,要么抛出异常。
我导入了我要在我的测试工作区中解析的项目(当你运行eclipse插件项目时会自动打开),我将项目作为“真正的”插件添加到我当前的工作区。错误消息是相同的。
有人可以告诉我我做错了什么。代码能够找到我工作区的所有项目和IResources
,但我无法“访问”文件。
从IFile
到char[]
的转换中是否有错误?
到目前为止我的代码是:
IWorkspaceRoot workspace = ResourcesPlugin.getWorkspace().getRoot();
IProject myProject = workspace.getProject("nameOfProject");
IResource[] members = myProject.getFolder ("/src/main/java/com/xy").members();
for (IResource member : members) {
if (member instanceof IContainer) {
}
if (member instanceof IFile) {
if (member != null) {
if (member.getFileExtension().equals("java")) {
//1st approach
for (Field field : member.getClass().getDeclaredFields()) {
//does not go into here
System.out.println("fields" + field.getName());
}
//2nd approach
ICompilationUnit cu = (ICompilationUnit) JavaCore.create(member);
//returns name of class
System.out.println(cu.getElementName());
//throws exception
System.out.println(cu.getTypes().length);
//3rd approach
for (TypeVariable<?> field: member.getClass().getTypeParameters()) {
//does not go into here
System.out.println(field.getName());
}
//4th approach
int i=0;
Inputstream is = ((IFile)member).getContents();
char [] buffer = new char [is.available()];
BufferedReader r = new BufferedReader(new InputStreamReader(is))
while ((i = r.read())!= -1) {
buffer[i++] = (char) i;
}
//throws exception Java Model Exception: Java Model Status [nameOfProject does not exist]
ASTParser parser = ASTParser.newParser(AST.JLS8);
parser.setSource(buffer);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setResolveBindings(true);
final CompilationUnit comp = (CompilationUnit) parser.createAST(null);
comp.accept(new ASTVisitor() {
@Override
public boolean visit(VariableDeclarationFragment v) {
System.out.println(v.getName());
})
}
}
}
}