Изучение контекста ресурса в проектах Java - PullRequest
0 голосов
/ 11 марта 2012

Когда я изучаю сложные Java-коды, которые я не писал, я регулярно записываю в блокноте стеки вызовов некоторых ресурсов, которые я нахожу интересными для данной проблемы. Эти ресурсы обычно являются методами или константами.

Вот пример:

CONSTANT_NAME
    com.company.common.context.business.Context.methodName1()
        com.company.domain.web.controller.subdomain1.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
        com.company.domain.web.controller.subdomain2.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
        com.company.domain.web.controller.subdomain3.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
    com.company.common.context.business.Context.methodName2()
        com.company.domain.web.controller.subdomain1.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
        com.company.domain.web.controller.subdomain3.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
        com.company.domain.web.controller.subdomain2.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
    com.company.common.context.business.Context.methodName3(Long, boolean)
        com.company.domain.web.controller.services.ClassName.onSubmit(HttpServletRequest, HttpServletResponse, Object, BindException)

Для этого я щелкаю правой кнопкой мыши в Eclipse константу / метод и выбираю «Ссылки», «Рабочая область» (сочетание клавиш CTRL + Shift + G). На вкладке «Поиск» я щелкаю правой кнопкой мыши результат и выбираю «Копировать полное имя». Затем я копирую его в блокнот с подходящей таблицей (нет таблицы для первой переменной / метода и дополнительной таблицы для каждого уровня вызова). Если метод вызывается двумя частями кода, то же табуляция добавляется для полных имен двух вызывающих методов. Таким образом, результат выглядит как трассировки стека Java.

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

Для больших программ эта манипуляция может стать громоздкой.

Если я использую режим отладки в Eclipse, я могу получить интересную трассировку стека при достижении точки останова, но это только для одного случая, и я хочу больше "абстракции", когда я изучаю коды.

Вы знаете, могут ли какие-то инструменты сделать такую ​​работу для меня?

Спасибо!

РЕДАКТИРОВАТЬ: Лучший способ найти это:

  1. создать «открытую иерархию вызовов» для константы / метода / переменной.
  2. разверните все элементы с помощью стрелок на клавиатуре в представлении «Иерархия вызовов»
  3. щелкните правой кнопкой мыши корневой элемент и выберите «Копировать расширенную иерархию».

Затем у вас есть стеки вызовов, которые вы можете изучать в блокноте

Ответы [ 2 ]

1 голос
/ 11 марта 2012

Если я использую режим отладки в Eclipse, я могу получить интересную трассировку стека при достижении точки останова, но это только для одного случая, и я хочу больше «абстракции» при изучении кодов.* Знаете ли вы, если некоторые инструменты могут сделать такую ​​работу для меня?

Не уверен, что если бы я получил именно то, что вы просите, но для изучения конкретных частей кода, отладчик был бы лучшим способом, поскольку вы можете точно переходить в разные части кода для каждого варианта использования..
Для чего-то более общего, я бы рекомендовал использовать плагин uml и создавать различные классы и чертеж отношений автоматически .
Это может помочь вам получитьхедз-ап при изучении большого проекта (сделанного другими), чем просто рисование на листе бумаги.Например, EUML2 довольно хорош и имеет бесплатную версию

1 голос
/ 11 марта 2012

Я не уверен, что правильно понял ваш вопрос, но разве «Open Call Hierarchy» (Ctrl + Alt + H) не делает то, что вы хотите?

...