Как я могу выполнять поисковые запросы 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;
}