Pokročilý nástroj pro vyhledávání v hierarchii kódu

LaLa

Už poněkolikáte řeším úkol tado tohoto typu: mám API, které má metody X. A mám metody Y někdy zahrabané ve změti kódu. Potřebuju udělat to, že pokud při volání nějaké metody X může dojít k volání metody Y, pak musím upravit tuto metodu X a celý programový tok za ní, který vede k metodě Y (přidat parametr).

Na tom projektu se pracuje přes 10 let a procházet všechna větvení z metody X a hledat, zda se někde nevolá Y, je totální opičárna. Integrační testy nad tím API nejsou a vymýšlet, jak ho zavolat, aby se prošel všechen kód, by bylo ještě horší, než to hledat ručně.....................

Používám Javu a IntelliJ a to co chci je v podstatě jednoduché: chci dát vyhledat retezec "metodaX" a jako Scope vyhledávání použít metodu Y. Tzn. chci, aby za mě aplikace udělala tu opičárnu, že budu procházet řádek kódu po řádce, a chodit do každého volání metody a checkovat, zda se tam nevolá Y.

PS: ne, nemůžu dát find usages nad Y, protože od Y nahoru je to ještě horší, než z X dolů.


Youda

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #1 kdy: 30. 03. 2017, 01:41:32 »
Už poněkolikáte řeším úkol tado tohoto typu: mám API, které má metody X. A mám metody Y někdy zahrabané ve změti kódu. Potřebuju udělat to, že pokud při volání nějaké metody X může dojít k volání metody Y, pak musím upravit tuto metodu X a celý programový tok za ní, který vede k metodě Y (přidat parametr).

Na tom projektu se pracuje přes 10 let a procházet všechna větvení z metody X a hledat, zda se někde nevolá Y, je totální opičárna. Integrační testy nad tím API nejsou a vymýšlet, jak ho zavolat, aby se prošel všechen kód, by bylo ještě horší, než to hledat ručně.....................

Používám Javu a IntelliJ a to co chci je v podstatě jednoduché: chci dát vyhledat retezec "metodaX" a jako Scope vyhledávání použít metodu Y. Tzn. chci, aby za mě aplikace udělala tu opičárnu, že budu procházet řádek kódu po řádce, a chodit do každého volání metody a checkovat, zda se tam nevolá Y.

PS: ne, nemůžu dát find usages nad Y, protože od Y nahoru je to ještě horší, než z X dolů.

Zkus provest find usages programove a vysledek si prfiltruj.
http://www.programcreek.com/2011/07/find-all-callers-of-a-method/

Sten

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #2 kdy: 30. 03. 2017, 02:00:54 »
Grafy volání generuje Doxygen, mělo by to jít is čísly řádek.

LaLa

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #3 kdy: 30. 03. 2017, 02:54:55 »
Už jsem to našel v Idei, kurzir na metodu Y a potom: Navigate->Call hierarchy-> klikat a klikat na Expand, hierarchie se nacita líně -> kliknou na export do texového souboru -> vyhledat rucne metodu X jestli tam nekde figuruje.

Trochu neprimocare ale aspon neco. Buh nakonec aspoň trochu existuje.

.

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #4 kdy: 30. 03. 2017, 10:06:02 »
Já myslel, že Java a IDE už všechny problémy světa vyřešily...


Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #5 kdy: 30. 03. 2017, 10:11:35 »
Já myslel, že Java a IDE už všechny problémy světa vyřešily...
Vzdyt to psal, ze pomoci IDE to vyresil.
Děkuji za možnost editace příspěvku.

PetrM

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #6 kdy: 30. 03. 2017, 10:18:48 »
Taky to řeším pomocí Doxygen + Dot  se zapnutým call graphem...  ;)  jako bonus mám k projektu i dokumentaci.

gll

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #7 kdy: 30. 03. 2017, 13:09:13 »
Čekám na komentář od místních java expertů dustina, javamana a nekoly. Vždy zde tvrdili, že java aplikace s použitím IDE mohu libovolně měnit a typový systém zabrání všem případným chybám. Testy netřeba.

javaman ()

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #8 kdy: 30. 03. 2017, 13:16:57 »
A co na tom nechápeš? Je to tak. S testy tu nic takového nikdo nepsal, ale automaticky máš vyřešené problémy, které ti ve skriptovacích jazycích dělají problémy. Plus refactoring je nemožný. Ale jak víme, refactoring Kit nedělá, protože není potřeba.

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #9 kdy: 30. 03. 2017, 13:17:23 »
Čekám na komentář od místních java expertů dustina, javamana a nekoly. Vždy zde tvrdili, že java aplikace s použitím IDE mohu libovolně měnit a typový systém zabrání všem případným chybám. Testy netřeba.

To vazne nekdo tvrdil? Nebo to proste byl prvni slameny panak, co ti slina na klavesnici prinesla?

gll

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #10 kdy: 30. 03. 2017, 13:50:51 »
nestačilo by něco takového?

Kód: [Vybrat]
ack -l metodaX | ack metodaY -B 10

javaman ()

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #11 kdy: 30. 03. 2017, 13:53:19 »
Osmdesátky jsou zpět ;D

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #12 kdy: 30. 03. 2017, 14:38:41 »
nestačilo by něco takového?

Kód: [Vybrat]
ack -l metodaX | ack metodaY -B 10

Mno v tehle podobe to asi nebude fungovat vubec (v tom druhem ack ti, rekl bych, chybi -x)

A obecne to nebude fungovat dobre. M.j. protoze resis daleko lehci ukol, nez na jaky se tazatel ptal.

LaLa

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #13 kdy: 30. 03. 2017, 15:22:54 »
Tak bohužel nejsem s Call Hierarchy příliš úspěšný. Ten Calling tree dokáže být v tom projektu tak velký, že se Idea šprajcne už při otvírání řekněme 4 layeru callů a trvá jí to několik minut. Další layer jsem si ani netroufl otevřít. Navíc ji to běží celé jen nad jedním jádrem procesoru.......... co teď?

gll

Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
« Odpověď #14 kdy: 30. 03. 2017, 15:44:49 »
nestačilo by něco takového?

Kód: [Vybrat]
ack -l metodaX | ack metodaY -B 10

Mno v tehle podobe to asi nebude fungovat vubec (v tom druhem ack ti, rekl bych, chybi -x)

A obecne to nebude fungovat dobre. M.j. protoze resis daleko lehci ukol, nez na jaky se tazatel ptal.

děkuji za opravu. -x skutečně chybí.

Kód: [Vybrat]
ack -l metodaX | ack metodaY -B 10 -x

Kdyby mu to řešení nestačilo, tak poradím lepší. Většinou stačí hledat nahrubo.