Как эффективно найти классы в проекте, используя Eclipse JDT? - PullRequest
0 голосов
/ 29 июля 2011

В классе SearchEngine Eclipse есть много методов поиска, включая различные варианты search, searchAllTypeNames и т. Д. searchAllTypeNames, кажется, ориентирован на поиск классов в пакете.Какова хорошая стратегия для поиска пользовательских классов в проекте?(Под пользовательскими классами я подразумеваю классы, для которых пользователь написал исходный код, который находится в этом проекте, в отличие от классов, которые импортируются из других проектов, внешних jar-файлов, системных библиотек и т. Д.)

  1. Используйте search с пользовательским IJavaSearchResultCollector.
  2. Получите все пакеты в проекте (используя search?), Затем итерируйте пакеты, собирая классы, используя searchAllTypeNames.
  3. Пройдите AST вручную.
  4. Что-то еще.

Обратите внимание, мне действительно не нужен "самый эффективный" способ сбора классов.Я предпочитаю что-то, что легко кодировать и достаточно эффективно, чем то, что требует больших объемов кода для большей эффективности.

Я приветствую любые общие рекомендации по использованию методов SearchEngine.Я считаю, что многие варианты сбивают с толку.

1 Ответ

1 голос
/ 13 августа 2011

Поскольку ваши критерии поиска довольно специфичны, лучше всего пройтись по модели Java, чтобы найти ваши типы.

Вот небольшой цикл, который вы можете использовать:

    IJavaProject proj = getJavaProject();
    for (IPackageFragmentRoot root : prog.getAllPackageFragmentRoots()) {
        if (!root.isReadOnly()) {
            for (IJavaElement child : root.getChildren()) {
                if (child.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
                    IPackageFragment frag = (IPackageFragment) child;
                    for (ICompilationUnit u : frag.getCompilationUnits()) {
                        for (IType type : u.getAllTypes()) {
                            if (type.isClass() || type.isEnum()) {
                                // do something
                            }
                        }
                    }
                }
            }
        }
    }

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

...