[Modelinterpreter] review

Boldizsár Németh nboldi at caesar.elte.hu
Fri Aug 14 10:29:48 CEST 2015


Sziasztok!

Szükségem lenne egy review-erre a debugView branch-hez. Van benne cucc, 
de röviden itt összefoglalom, és akkor meg lehet érteni, hogy mi történt.

A cél az, hogy a debug perspective eszközeit lehessen használni a modell 
debuggolásához.

  - A futás közben létrejövő/megsemmisülő stateful objektumok 
megjelennek a debug view-ben a szálak helyén. Ennek a frissítése akkor 
történik, amikor megálltunk egy breakpoint-on. Ezt tényleges 
létrehozással nem próbáltam ki, de majd ha Máté action-kódos branch-e 
meglesz, akkor több objektummal is kipróbálom. Az egy létező objektum 
létrejöveteléről mindenesetre megkapjuk az eseményt. Hogy ez működhessen 
a runtime által használt control socket kapcsolatot (ami eddig a 
graceful termination-höz kellett) kétirányúvá tettem, az eclipse 
irányába mennek rajta a példány létrejötte/eltűnése események.
  - Amikor a runtime megáll egy breakpoint-on, megjelenítem a state 
machine-t tartalmazó osztálypéldányt this néven, a szignált, aminek 
hatására az állapotátmenet megtörtént, és az aktuális (átmenet előtti) 
állapotot. Ezeket a variable view-ra helyezem föl. Ehhez nem árt kicsit 
megnézni a jdt api-t, mert azt használom hozzá. Lényegében a megállított 
thread stack-jét lehet elemezni, mint this objektum, változók, 
paraméterek...
  - Az egyes értékeket struktúra szerint ki lehet nyitogatni. Itt arra 
hagyatkozok, hogy a virtuális gép megállított thread-jét tudom 
metódusvégrehajtásra használni. Csináltam egy meta-reprezentációt az 
osztályokhoz és szignálokhoz, ami egy statikus adatstruktúra az 
osztályba generálva. Amikor megálltam a state machine-ben ezt a 
reprezentációt szerializálom, majd a string értéket az eclipse oldalon 
kiolvasom és ott deszerializálom. Így nem kell a jdt api-val szenvedni, 
amikor a meta-reprezentációt elemzem. Ez a reprezentáció megmutatja, 
hogy milyen attribútumok vannak az osztályban (később bele lehet 
olyasmit is rakni, hogy öröklött attribútumok, láthatóság, stb.).
  - Külön kezelem azokat az értékeket, amiknek a multiplicitása lehet 
1-nél több is. Ezeknél indexek szerint ki lehet bontani az értéket. A 
maximum 1-szeres multiplicitásnál meg simán jelenik meg az érték, 
illetve "null", ha nincs.

Tesztelés:
Én a csatolt modellt használtam. Hogy legyenek értékek is benne, a 
generált kódban a _HteA8KuEEeSBF899A__G5w osztályban a create függvényt 
ki kell cserélni, és akkor lesz is mit nézni. Vigyázz, mert a 
módosítások elvesznek, ha build-el egyet a gép.

     /** Creator for UML class <b>Machine</b> */
     public static _HteA8KuEEeSBF899A__G5w 
create(hu.eltesoft.modelexecution.runtime.Runtime runtime) {
         _HteA8KuEEeSBF899A__G5w_impl created = new 
_HteA8KuEEeSBF899A__G5w_impl(runtime);
         _d_nw4EHQEeWbm5q7jTaGDQ point = 
_d_nw4EHQEeWbm5q7jTaGDQ.create(runtime);
         point.set__iJMOUEHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList(BigInteger.valueOf(2))));
         point.set__na$4EEHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList(BigInteger.valueOf(3))));
         created.set__sG2KQEHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList(point)));
         created.set__jl2J0EHhEeWNuIzF56NVqw(new 
HashSet<>(Arrays.asList(point)));

         _xyvWEEHQEeWbm5q7jTaGDQ coloredPoint = 
_xyvWEEHQEeWbm5q7jTaGDQ.create(runtime);
         coloredPoint.set__na$4EEHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList(BigInteger.valueOf(4))));
         coloredPoint.set__na$4EEHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList(BigInteger.valueOf(5))));
         coloredPoint.set__3SQ50EHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList("pink")));
         created.set__rxlcMEHhEeWNuIzF56NVqw(new 
ArrayList<>(Arrays.asList(coloredPoint)));

hu.eltesoft.modelexecution.runtime.InstanceRegistry.getInstanceRegistry().registerInstance(created);
         return created;
     }

Boldi


More information about the Modelinterpreter mailing list