java forráskódelemzés

Fórumok

Sziasztok!

Szeretném kinyerni a kódból, hogy milyen hibaüzeneteket dobálhat egy adott WS hívás. Végig kell menni rekurzívan az elejétől, ezzel nincs gond. Spoonnal próbálkoztam, de abból miután felépítette az AST-t, csak a deklaráció szignatúráját lehet kiszedni, tehát

public void display(MessageConstant message);
public void displayObject(Object message);

enum MessageConstants {
  MESSAGE1,
  MESSAGE2;
}

esetén ha ilyet írok:

setError(MessageConstants.MESSAGE1);
setErrorObject(MessageConstants.MESSAGE1);

akkor

setError(MessageConstants.MESSAGE1); -nél setError(MessageConstants) -t kapok

this.setErrorObject(MessageConstants.MESSAGE1);

-nél pedig setErrorObject(java.lang.Object); -et

 

és nekem MESSAGE1 a lényeg.

 

CtExecutable parent = ref.getParent(CtExecutable.class);
String codeBlock = parent.getBody().toString();

-tel kiszedtem annak a blokknak a forrását amiben a metódusok vannak és regex-el ki tudom hámozni, a MESSAGE1-et, de setErrorObject()-tel nem boldogulok, mert arra nem matchel az Enum mivel Objectként látja.

 

Sajnos az nem opció, hogy megváltoztassam a metódus szignatúrákat mert meglévő kódról van szó.

 

Van esetleg valami olyan eszköz amivel ez kényelmesen megoldható?

Hozzászólások

Egyszer régen használtam a pmd-t Java forráskód elemzésre programozottan. Azzal mindent (is) lehet szinte.

Nem vagyok benne biztos, hogy megéri a fáradtságot.

Inkább kérj dokumentációt a gazdájától a szerviznek.

> Sajnos az nem opció, hogy megváltoztassam a metódus szignatúrákat mert meglévő kódról van szó.

Csak a felgöngyölítés erejéig miért ne lehetne átírni a szignatúrát? Feltéve, hogy nem túl sok típussal van használva ez a metódus.

Annyira sokféle hibaüzenet tud jönni, hogy ha simán be lenne indexelve a kód, akkor "kézzel" végignyálazni lehetetlen lenne?

Ha van egy AST-d, akkor miért nem mész végig pl. egy visitorral, miért kezded el a blokkot stringként feldolgozni?

Pont az a jó az AST-ben, hogy nem kell stringként küzdeni. Mi egyébként Eclipse AST-vel csináltunk jó dolgokat, ha jól értem a Spoon is erre épül, de nem tudom mennyire rejti el. Az Eclipse AST-ből mindent ki lehet nyerni + módosítani / új kódot is lehet generálni, nem kell hozzá regex meg toString().

Pont erre benne van a kommentben a válasz: az Eclipse AST ilyen. Nem tudom ismeretlen forrásra hogyan lehet rábírni, hogy behúzza, legrosszabb esetben csinálsz egy üres Eclipse projektet, és abba belemásolod az összes forrást egyetlen source folderbe, az működni fog - remélhetőleg.