<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<br>
<div class="moz-forward-container">Persze, csak csatolni felejtettem
el a modellt :D<br>
<br>
-------- Forwarded Message --------
<table class="moz-email-headers-table" border="0" cellpadding="0"
cellspacing="0">
<tbody>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">Subject:
</th>
<td>review</td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">Date: </th>
<td>Fri, 14 Aug 2015 10:29:48 +0200</td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">From: </th>
<td>Boldizsár Németh <a class="moz-txt-link-rfc2396E" href="mailto:nboldi@caesar.elte.hu"><nboldi@caesar.elte.hu></a></td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">Reply-To:
</th>
<td><a class="moz-txt-link-abbreviated" href="mailto:nboldi@elte.hu">nboldi@elte.hu</a></td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">To: </th>
<td><a class="moz-txt-link-abbreviated" href="mailto:modelinterpreter@plc.inf.elte.hu">modelinterpreter@plc.inf.elte.hu</a></td>
</tr>
</tbody>
</table>
<br>
<br>
<pre>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
</pre>
<br>
</div>
<br>
</body>
</html>