无法通过Eclipse插件访问java类

时间:2018-04-28 12:40:39

标签: java eclipse plugins eclipse-jdt

我在编写Eclipse Java Parser项目时仍遇到问题。我想编写一个遍历我的工作区项目结构的解析器并返回所有变量。我尝试了多种方法,但没有一种方法可行。

当我遍历IResource数组时,它会正确识别所有java类和包。但是当我尝试访问相应的java类时,它不起作用。它要么找不到任何东西,要么抛出异常。

我导入了我要在我的测试工作区中解析的项目(当你运行eclipse插件项目时会自动打开),我将项目作为“真正的”插件添加到我当前的工作区。错误消息是相同的。

有人可以告诉我我做错了什么。代码能够找到我工作区的所有项目和IResources,但我无法“访问”文件。

IFilechar[]的转换中是否有错误?

到目前为止我的代码是:

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());
                })

            }
        }
    }
}

0 个答案:

没有答案