blob: 4bdc6c01bb60f302a784eeb66796cf0615a4f444 [file] [log] [blame]
<html>
<head>
<meta name="copyright" content="Copyright Technical University Berlin and others 2004, 2010. This page is made available under the Eclipse Public License v1.0. For full details see http://www.eclipse.org/legal/epl-v10.html" />
<link rel=stylesheet type="text/css" href="../css/book.css">
<link rel=stylesheet type="text/css" href="otjld/css/ot.css">
<style type="text/css">
body { margin:10px; }
.high { background-color:#a5b7bd;color:white; }
.low { background-color:#fff0c8; padding:2px; }
.caption { text-decoration:underline; vertical-align:top;position:relative;top:20px; margin-top:10px;}
</style>
<title>Call hierarchy extended for OT/J</title>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<h1 align="center" id="callhierarchy">Call hierarchy extended for OT/J</h1>
<p>
The purpose of the <a href="PLUGINS_ROOT/org.eclipse.jdt.doc.user/reference/views/ref-call-hierarchy.htm">Java call hierarchy view</a>
is to statically display all potential
control flows originating from or leading to a specific program element.
Since callout and callin method bindings in OT/J introduce new kinds of control flows,
it is only appropriate to also visualize the control flows induced by such method bindings.
</p>
<p>
Whenever a given method can be invoked via a <b>callout method binding</b>,
the call hierarchy shows a <img src="../images/calloutbinding_obj.gif"> callout node.
Here all calls to the corresponding role method will be forwarded to the base method.
</p>
<p>
Whenever a <b>callin method binding</b> may intercept a given control flow,
a <img src="../images/callinbindingreplace_obj.gif"> callin node is shown.
Note, that a callin control flow is only taken at runtime,
if the enclosing team is active and no guard predicate evaluates to false.
</p>
<img src="images/screenshots/CallHierarchy.png"
alt="Call hierarchy showing Object Teams method bindings">
<p>Additionally, whenever the call hierarchy shows the <b>lifting constructor</b>
(<a href="otjld/def/s2.html#s2.3.1.b"><img src="../images/ot_paragraph.png"> 2.3.1(b &amp; c)</a>) of a role
(either as an intermediate node or when requesting the call hierarchy for
the role class) all those locations are considered as callers that involve
lifting a base object to the given role, because the lifting operation
can implicitly trigger creation of a role instance. According to
<a href="otjld/def/s2.html#s2.3.b"><img src="../images/ot_paragraph.png"> 2.3(b)</a>
lifting can occur
</p>
<ul>
<li>in a callout method binding (for the return value)</li>
<li>in a callin method binding (call target and arguments)</li>
<li>in a team method with declared lifting</li>
</ul>
<img src="images/screenshots/CallHierarchyLifting.png"
alt="Call hierarchy showing implicit role creation by lifting">
</body>
</html>