Не в состоянии получить доступ к классам Java через Eclipse Plug-in - PullRequest
0 голосов
/ 28 апреля 2018

Я все еще сталкиваюсь с проблемами при написании своего проекта 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());
                })

            }
        }
    }
}
...