Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: LaLa 30. 03. 2017, 01:12:46

Název: Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: LaLa 30. 03. 2017, 01:12:46
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ů.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: Youda 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/
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: Sten 30. 03. 2017, 02:00:54
Grafy volání generuje Doxygen, mělo by to jít is čísly řádek.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: LaLa 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.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: . 30. 03. 2017, 10:06:02
Já myslel, že Java a IDE už všechny problémy světa vyřešily...
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: to_je_jedno 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.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: PetrM 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.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: gll 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.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: javaman () 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.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: Ondra Satai Nekola 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?
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: gll 30. 03. 2017, 13:50:51
nestačilo by něco takového?

Kód: [Vybrat]
ack -l metodaX | ack metodaY -B 10
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: javaman () 30. 03. 2017, 13:53:19
Osmdesátky jsou zpět ;D
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: Ondra Satai Nekola 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.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: LaLa 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ď?
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: gll 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.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: dustin 30. 03. 2017, 16:32:21
Funkce "Propagate new parameters - Alt+G" na dialogu "Change signature" ti to nezvládne? Předpokládám, že už jsi to zkoušel a výkonově to Idea nedá, resp. se ti nechce všechny ty výskyty zaklikávat. Jinak normálně by to bylo to, co hledáš.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: Kit 30. 03. 2017, 17:12:58
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.

Refactoring běžně dělám, ale IDE na to opravdu nepotřebuji.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: LaLa 30. 03. 2017, 17:57:17
ZKusil bych ten Doxygen. Jenze problem je v tom, ze vyvijim na remote desktopu, kde neni pristup k Internetu a poslat to tam emailem je poruseni security policy, navic exac by beztak nejaky sw spion objevil. Utilitku Ack nemam rovnez. Jsem v pasti. Neresitelny ukol. Rucne to delat nebudu, delal bych to dny ci tydny a nejsem cvicena opice. Neni to ani muj projekt, ktery musim upravit. Asi si tu utilitku naprogramuju sam nebo co.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: gll 30. 03. 2017, 18:50:15
ZKusil bych ten Doxygen. Jenze problem je v tom, ze vyvijim na remote desktopu, kde neni pristup k Internetu a poslat to tam emailem je poruseni security policy, navic exac by beztak nejaky sw spion objevil. Utilitku Ack nemam rovnez. Jsem v pasti. Neresitelny ukol. Rucne to delat nebudu, delal bych to dny ci tydny a nejsem cvicena opice. Neni to ani muj projekt, ktery musim upravit. Asi si tu utilitku naprogramuju sam nebo co.

použij normální grep

Kód: [Vybrat]
grep -R metodaX -l | xargs grep metodaY -B 10 -n --color=auto
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: gll 30. 03. 2017, 18:58:10
Funkce "Propagate new parameters - Alt+G" na dialogu "Change signature" ti to nezvládne? Předpokládám, že už jsi to zkoušel a výkonově to Idea nedá, resp. se ti nechce všechny ty výskyty zaklikávat. Jinak normálně by to bylo to, co hledáš.

on hledá volání metody X následované voláním metody Y.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: LaLa 30. 03. 2017, 19:17:22
ZKusil bych ten Doxygen. Jenze problem je v tom, ze vyvijim na remote desktopu, kde neni pristup k Internetu a poslat to tam emailem je poruseni security policy, navic exac by beztak nejaky sw spion objevil. Utilitku Ack nemam rovnez. Jsem v pasti. Neresitelny ukol. Rucne to delat nebudu, delal bych to dny ci tydny a nejsem cvicena opice. Neni to ani muj projekt, ktery musim upravit. Asi si tu utilitku naprogramuju sam nebo co.

použij normální grep

Kód: [Vybrat]
grep -R metodaX -l | xargs grep metodaY -B 10 -n --color=auto

Ty vole delas si srandu? Ty nechapes ani na co se ptam, hlavne zes sis tu prisel zanadavat na Javu. Ses uplne mimo.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: gll 30. 03. 2017, 19:35:26
ZKusil bych ten Doxygen. Jenze problem je v tom, ze vyvijim na remote desktopu, kde neni pristup k Internetu a poslat to tam emailem je poruseni security policy, navic exac by beztak nejaky sw spion objevil. Utilitku Ack nemam rovnez. Jsem v pasti. Neresitelny ukol. Rucne to delat nebudu, delal bych to dny ci tydny a nejsem cvicena opice. Neni to ani muj projekt, ktery musim upravit. Asi si tu utilitku naprogramuju sam nebo co.

použij normální grep

Kód: [Vybrat]
grep -R metodaX -l | xargs grep metodaY -B 10 -n --color=auto

Ty vole delas si srandu? Ty nechapes ani na co se ptam, hlavne zes sis tu prisel zanadavat na Javu. Ses uplne mimo.

On ten tvůj popis není moc jednoznačný.
Název: Re:Pokročilý nástroj pro vyhledávání v hierarchii kódu
Přispěvatel: LaLa 12. 04. 2017, 04:54:16
No nic, tak jsem si ten vyhledavaci nastroj musel udelat sam. To co je v Idei je brak, to co tam ma Eclipse je jeste vetsi brak, a na githubu se nachazi dalsich par pomalych nebo polofunkcnich braku. Opravdu k nevire, ze Java nema instantne k dispozici poradny nastroj na vyhledani Call Hierarchie. Tak ted uz ma. V Idei trvalo hledani call hierarchie nad jistou metodou hodiny. Moje aplikace to zvladne za par desitek vterin. Co nevidet ji dam na github a treba konecne dosahnu toho bohatsvi a slavy.