Как я могу выполнять поисковые запросы Java IDE для программных ссылок?

Вы знаете, что функция eclipse находит все ссылки (Search > References > Workspace или Ctrl-Shift-G)? Как я могу запустить это программно?

У меня есть большая база кода, которую мне нужно провести аудит для нарушений безопасности, и вам нужно объединить около дюжины условий.

Существуют ли библиотеки, которые могут анализировать большие проекты (у меня есть 1 ГБ исходных файлов) в Java? Вот вопросы, на которые я должен ответить:

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

Я могу сделать это вручную за один день, но предпочел бы потратить 2 написание приятного script, чтобы выполнить эту работу для меня.

Любые ссылки на библиотеки, которые я могу использовать для script для этих общих задач, которые Eclipse делает так красиво? В идеале я хотел бы выполнить их командную строку, чтобы они могли быть повторяемыми и написанными по сценарию, но, очевидно, возьмут то, что я могу получить.

Ответ 1

Вы можете написать свой собственный плагин в IntelliJ IDEA, чтобы выполнить это.

Программно, вы можете использовать дерево PSI (интерфейс структуры программы) для поиска различных элементов кода (классы, переменные, методы, инструкции и т.д.), перемещаться по базе кода и выполнять все, что вам нужно.

Вот несколько ссылок:

Все, что вам нужно сделать (найти реализации, искать вызовы, методы поиска для конкретного оператора), возможно.

Если вы загрузите исходный код для публикации сообщества IntelliJ IDEA, вы можете посмотреть в коде и посмотреть, как это делается.

Или вы можете публиковать конкретные вопросы здесь (тег с intellij-plugin), и люди вроде CrazyCoder могут быть достаточно любезными, чтобы помочь вам:)

Что касается области базы кода (1 ГБ, вы говорите?), вам просто нужно попробовать ее и посмотреть, как вы идете. В худшем случае вы можете анализировать свою базу кода по частям.

В любом случае, разработка плагинов - это чрезвычайно, мощная в IntelliJ IDEA, и я рекомендую этот подход для любого вида анализа кода Java или рефакторинга, который вы хотите контролировать программно самостоятельно (и еще не охвачены по готовым рефакторингам).

Удачи!

Ответ 2

Это произошло шесть лет спустя, так что, вероятно, это вам мало поможет. Может быть, это поможет кому-то еще...

У меня есть несколько полезных методов поиска Eclipse, JDT здесь, которые используют Поисковик и др. Например:

    /**
     * Collects the methods that access the specified member
     * @param element the field or method whose accessors are being determined
     * @param scope the elements being examined, e.g. this class or this package
     * @return the collection of methods that access the indicated member
     */
    public static Set<IMethod> calculateCallingMethods(
            IJavaElement element,
            IJavaSearchScope scope)
            throws CoreException {
        SearchEngine searchEngine = new SearchEngine();
        SearchParticipant[] participants =
            new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() };
        SearchPattern callingMethodPattern = SearchPattern.createPattern(
                element, REFERENCES);
        MethodCollector methodCollector = new MethodCollector();
        searchEngine.search(callingMethodPattern, participants, scope,
                methodCollector, null);
        Set<IMethod> callers = methodCollector.getResults();
        return callers;
}