2014-10-23 17 views
5

Interesuje mnie zbieranie statystyk przez duży korpus kodu Java, do którego mam dostęp. Niektóre statystyki, którymi chciałbym się zainteresować, mogą zawierać informacje o tym, jak często niektóre metody/klasy są używane, jak często niektóre pakiety są importowane itd.Statystyki języka Java

Moja pierwsza myśl polegała na użyciu javaparser, ale ta biblioteka obsługuje jedynie Java 1.5, a większość kodu, który mam, jest w wersji 1.6 lub wyższej.

Czy istnieje biblioteka, która da mi dokładną AST z jakiegoś kodu Java (tj. Czy mogę go o to zapytać w jakiś sposób?), Czy może jest lepszy sposób podejścia do tego problemu (być może z kodem bajtowym)?

+0

Chciałbym zagłębić się w pmd's (jak to działa) (http://pmd.sourceforge.net/pmd-5.1.0/howitworks.html) i sprawdzić, czy można go dostosować do tego, czego szukasz. To powiedziawszy, to nie jest mała rzecz, o której myślisz. –

+1

Nie mam pojęcia, jak rozwiązać ten problem, ale dostajesz ode mnie gwiazdę, bo chciałbym dowiedzieć się, co wymyślisz. Jeśli znajdziesz odpowiedź, opublikuj ją jako odpowiedź! Pomogłoby to wielu ludziom w Internecie, tak jak szukasz rozwiązania! – DreadHeadedDeveloper

+1

@DreadHeadedDeveloper Będę pamiętać, kiedy po coś wymyślę. Gdyby tylko to było tak łatwe jak w Haskell ... (dzięki haskell-src-exts!) –

Odpowiedz

0

Dunno o dokładnym AST, ale na pewno można odczytać bajtodes przy użyciu pakietów takich jak ASM lub BCEL, a skanowanie struktur danych dla wywołania funkcji byłoby dość proste. Oczywiście może to być po uprzedniej optymalizacji, więc może nie odzwierciedlać bezpośrednio źródła ... i to jest przed JIT, więc może nie odzwierciedlać bezpośrednio tego, co faktycznie działa.

Innym rozwiązaniem byłoby uruchomienie kodu pod kontrolą profilera, który mógłby zapewnić względną lub bezwzględną częstotliwość wywoływania z różnych miejsc.

Żaden z nich nie dałby liczby importu - to czysto syntaktyczny szczegół cukru. Ale z tego samego powodu nie sądzę, że jest to znacząca liczba.

+0

Takie podejście może stosunkowo łatwo znaleźć strony z zaproszeniami *. Najtrudniejszą częścią problemu jest określenie, jakie konkretne metody docelowe wywołuje strona wywołania? Do tego potrzebny jest wykres wywoławczy. Tak, surowe informacje do skonstruowania wykresu połączeń są w ASM lub BCEL (tak jak jest w kodzie źródłowym). Wydobywanie go nie jest łatwe, ponieważ musisz najpierw wykonać analizę punktów lub jednocześnie. –

+0

Dla wzorców inwokacji, dobrym profilerem może być twój najlepszy zakład - ponieważ twoje założenia podczas ręcznej analizy kodu mogą nie odpowiadać temu, co faktycznie się dzieje, gdy warunki warunkowe przebiegają nad rzeczywistym kodem, a podklasy mogą wprowadzić warstwy/alternatywy, które zrobiłeś Nie oczekuj. – keshlam

Powiązane problemy