[Modelinterpreter] Fwd: review
Boldizsár Németh
nboldi at caesar.elte.hu
Fri Aug 14 14:33:34 CEST 2015
Persze, csak csatolni felejtettem el a modellt :D
-------- Forwarded Message --------
Subject: review
Date: Fri, 14 Aug 2015 10:29:48 +0200
From: Boldizsár Németh <nboldi at caesar.elte.hu>
Reply-To: nboldi at elte.hu
To: modelinterpreter at plc.inf.elte.hu
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://plc.inf.elte.hu/pipermail/modelinterpreter/attachments/20150814/b46d2234/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: model1.di
Type: text/xml
Size: 103 bytes
Desc: not available
URL: <https://plc.inf.elte.hu/pipermail/modelinterpreter/attachments/20150814/b46d2234/attachment-0003.xml>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: model1.notation
Type: text/xml
Size: 19544 bytes
Desc: not available
URL: <https://plc.inf.elte.hu/pipermail/modelinterpreter/attachments/20150814/b46d2234/attachment-0004.xml>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: model1.uml
Type: text/xml
Size: 6976 bytes
Desc: not available
URL: <https://plc.inf.elte.hu/pipermail/modelinterpreter/attachments/20150814/b46d2234/attachment-0005.xml>
More information about the Modelinterpreter
mailing list