2013-09-02 2 views
-3

Программно найти, где и все методы этого класса вызываются или не вызываются вообще.Найти класс, вызывающий методы внутри класса

class blah { 
    void method1() {} 
    void method2() {} 
} 

class blahTest { 
    public static void main(String[] args) { 
     Class classToAnalyze = blah.class; 
     /* DO SOMETHING TO DETERMINE WHO IS CALLING blah CLASS AND IT'S METHODS 
      AND WHICH METHODS ARE NOT GETTING CALLED ANYWERE */ 
     String sMethod = /* GET THIS VALUE FROM PREVIOUS OPERATION */ 
     System.out.println("Method which is not getting called anywere: " + sMethod); 
    } 
} 

Выход:

Method which is not getting called anywere:method2() 

Как мне это сделать программно из Java?

+1

@sanbhat Он есть, все в порядке. – hexafraction

+0

Напишите/используйте AST для выполнения такой задачи. –

+0

Зачем вам нужно делать это на Java? Любая хорошая IDE сообщит вам, если частный метод не используется. Редактировать (означает закрытый, а не общедоступный) – hotforfeature

ответ

1

Вы не можете разумно сделать это, так как вы никогда не узнаете, кто еще может позвонить method2. Кто-то всегда может использовать ваш класс. method1 также не называется для всех, что я вижу, во всяком случае.

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

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

+0

Это еще одна вещь, чтобы написать агент (для динамического определения) или какой-то тип анализа синтаксиса/выполнения. –

+0

@UwePlonus Сканирование всего пути к классам и любых классов, которые используют это? Blech. – hexafraction

+0

Мы не знаем, хочет ли он, чтобы это было сделано статически или динамически ... –

Смежные вопросы