Затмение JDT получить имя классов - PullRequest
0 голосов
/ 19 октября 2011

Я использую Eclipse JDT для получения имени всех классов всех открытых проектов в рабочей области, но до сих пор я не могу этого сделать ...

IWorkspace workspace = ResourcesPlugin.getWorkspace();
IProject[] iprojects = workspace.getRoot().getProjects();

for (IProject ip : iprojects)
{
    if (ip.isOpen() == true)
    {
        IJavaProject javaProject = JavaCore.create(ip);

    IPackageFragment[] packages;
    try
    {
        packages = javaProject.getPackageFragments();

        for (IPackageFragment mypackage : packages)
        {
            if (mypackage.getKind() == IPackageFragmentRoot.K_SOURCE)
            {
                System.out.println("Source Name " + mypackage.getElementName());
                System.out.println("Number of Classes: " + mypackage.getClassFiles().length);
            }
            else if (mypackage.getKind() == IPackageFragmentRoot.K_BINARY)
            {
                System.out.println("Binary Name " + mypackage.getElementName());
                System.out.println("Number of Classes: " + mypackage.getClassFiles().length);
            }
        }
    } catch (JavaModelException e) {
        e.printStackTrace();
    }
}

При этом я могу получить только Количество классов: 0 для каждого пакета в моем примере проекта!

Что не так?Почему я не могу получить классы всех пакетов и затем получить имя каждого класса?

- Cheers, Zé Carlos

Ответы [ 3 ]

0 голосов
/ 20 октября 2011

Из Javadocs

org.eclipse.jdt.core.ICompilationUnit - представляет всю Java модуль компиляции (исходный файл с одним из Java-подобных расширений). Элементы компиляции должны быть открыты, прежде чем они могут быть перемещаться или манипулировать.

org.eclipse.jdt.core.IClassFile - представляет весь двоичный тип (один файл .class).

В ваших проектах не должно быть файлов классов, потому что они, вероятно, являются исходными проектами. Поэтому ищите ICompilationUnits.

0 голосов
/ 02 декабря 2013

Кажется, все правильно с вашим кодом. Дело в том: 1. Он будет работать, только если вы используете его в проекте разработки плагинов. То есть, создайте пример плагина и вызовите этот класс для проверки базового класса плагина. 2. В появившейся вкладке плагина будут перечислены названия проектов. Поэтому создайте несколько примеров проектов в новом окне eclipse, которое вы запускаете как «приложение eclipse».

У меня есть более простой код, который работает нормально, попробуйте:

import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin;

открытый класс GetProjectName {

public static IProject[] getProjects()

{

    IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
    System.out.println(ResourcesPlugin.getWorkspace().getRoot().getName());

    System.out.println(" ****  "+ projects.length +"   ***");

    for (IProject project : projects) {
        System.out.println(project.getName());
    }



    return projects;

}

}

0 голосов
/ 20 октября 2011

Попробуйте один из методов org.eclipse.jdt.core.search.SearchEngine.searchAllTypeNames (...).

...