статический анализ, чтобы узнать весь класс, на который ссылаются, из корня в java

На языке Java. Учитывая корневой класс, я хочу узнать все классы, на которые ссылается корень (весь граф объектов). Java Reflect недостаточно. Потому что :

Class A{
   List list = new ArrayList();

   public void add(Object obj){
      list.add(obj);
   }

   public void add2(){
      Ent ent = new Ent();
      add(ent);
   }
}

Используя Reflect, я могу легко получить "Класс A содержит (объект)". Но на самом деле я хочу «Класс A содержит (Ent)».

Я хочу проанализировать код java src или файл .class, чтобы узнать весь граф объектов статически, а не во время выполнения.

Кто-нибудь может мне помочь? Спасибо!


person DON1101    schedule 20.12.2012    source источник
comment
выглядит как stackoverflow.com/questions/3734825/   -  person philippe lhardy    schedule 20.12.2012


Ответы (1)


Инструменты depfind помогают отслеживать зависимости и выполнять некоторые действия. Он может найти исходящие зависимости.

Отображение только исходящих зависимостей

Исходящие зависимости показывают, от кого зависит данный программный элемент. Они очень полезны при разделении элементов программирования и выяснении того, какие другие классы нужны данному классу для запуска. Dependency Finder использует текстовую нотацию для их отображения:

programming element
    --> dependable 1
    --> dependable 2
        ...

Когда имеется много зависимостей, либо из-за того, что граф очень большой, либо из-за того, что элемент сильно связан, полезно отфильтровать другие зависимости, чтобы исходящие выделялись и их было легче читать.

http://depfind.sourceforge.net/Manual.html#ShowingOnlyOutboundDependencies

person Jayan    schedule 20.12.2012
comment
похоже на то, что я ищу! Спасибо Джаян! - person DON1101; 20.12.2012
comment
@ DON1101: Приятно знать, что это полезно. Пожалуйста, проверьте вопрос, упомянутый nullix. У него есть больше вариантов, перечисленных - person Jayan; 20.12.2012