Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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ů.
-
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/
-
Grafy volání generuje Doxygen, mělo by to jít is čísly řádek.
-
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.
-
Já myslel, že Java a IDE už všechny problémy světa vyřešily...
-
Já myslel, že Java a IDE už všechny problémy světa vyřešily...
Vzdyt to psal, ze pomoci IDE to vyresil.
-
Taky to řeším pomocí Doxygen + Dot se zapnutým call graphem... ;) jako bonus mám k projektu i dokumentaci.
-
Č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.
-
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.
-
Č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?
-
nestačilo by něco takového?
ack -l metodaX | ack metodaY -B 10
-
Osmdesátky jsou zpět ;D
-
nestačilo by něco takového?
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.
-
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ď?
-
nestačilo by něco takového?
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í.
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.
-
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áš.
-
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.
-
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.
-
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
grep -R metodaX -l | xargs grep metodaY -B 10 -n --color=auto
-
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.
-
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
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.
-
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
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ý.
-
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.