Вызов иерархии Thread.run () в Eclipse - PullRequest
1 голос
/ 23 января 2009

Я часто использую функцию eclipse «Open Call Hierarchy», чтобы отследить, где происходят вызовы методов в более крупных проектах Java. Меня раздражают потоки, поскольку иерархия вызовов показывает, что вызывающие методы Thread.run() представляют собой различные внутренние функции потоков Java, а не вызов Thread.start(), который фактически привел к запуску потока.

Есть ли способ заставить Eclipse показывать вызовы Thread.start в качестве родителя для Thread.run() методов. Возможно, плагин для этого?

Ответы [ 3 ]

0 голосов
/ 23 января 2009

Интересный вопрос.

Вы можете проверить nWire . Это новый инструмент для изучения всех ассоциаций вашего кода в одном динамическом представлении. Очень удобно и просто в использовании. Он объединяет вызывающих и реализующих (и все другие ассоциации) вместе. Хотелось бы получить ваши отзывы об этом.

0 голосов
/ 28 января 2009

Спасибо за ваш ответ, Jamesh. С первыми двумя замечаниями вы скажете, что (как в анонимных, так и в неанонимных Runnables) было бы полезно взглянуть на иерархию вызовов конструктора Runnable - да, я согласен! Обычно это то, что я делаю. Но обычно это означает частое переключение между двумя иерархиями, только одна из которых может отображаться одновременно. Я хотел бы избежать этого, сохранив одну иерархию.

Не существует прямой иерархии вызовов между конструктором Runnable и вызовом run (), поэтому мне кажется, что было бы неуместно расширять иерархию вызовов путем добавления конструктора в качестве «вызывающего» метода run (). Однако вызовы start () или добавления потока в Executor (или, возможно, вызовы run () внутри исполнителя) могут быть уместны для отображения в иерархии вызовов.

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

Я опробовал плагин для разработчиков. Это полезно, но не для этой конкретной проблемы!

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

0 голосов
/ 23 января 2009

Если я понимаю, что у вас вопрос: вы хотите найти вызывающего метод Thread.start() для данного метода Runnable.run()?

Я считаю, что это было бы полезно для очень маленьких, коротко работающих анонимных Runnables.

Однако в более общем случае я не уверен в дальнейшей практичности:

  • Стандартная практика заключается в том, что Runnable передается в Thread в качестве аргумента конструктора. Зачастую Runnable вызывается предварительно созданным потоком (например, Executors, asynchExec). В данном случае вас интересуют вызывающие конструктора.
  • Неанонимные Runnables могут быть отслежены через его конструктор (иерархия вызовов для этого ctor будет хорошим подходом)
  • Переопределение метода Thread.run() может сделать это, но тогда вас больше интересуют вызывающие Thread.start() методы
  • Представление иерархии вызовов (AFAIK) не очень расширяемо (однако, Разработчики использовали для этого, но были написаны теми же людьми, что и исходная иерархия вызовов, до того, как оно было интегрировано в основной JDT) .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...