blob: 6578a507a2ea374d6c31a2f5be12a9907222409f [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>OT/J content/code assist</title>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<h1 align="center">OT/J code completion<a name="completion"></a></h1>
<u>On this page:</u>
<br /><a href="#completeRole">1. Overriding an inherited role class</a>
<br /><a href="#completeBase">2. Completing a role's base class</a>
<br /><a href="#completeMapping">3. Creating callout/callin method bindings</a>
<br /><a href="#completeCall">4. Completing special method calls</a>
<br /><a href="#completeTemplate">5. Completion templates</a>
<h2><a name="completeRole">1. Overriding an inherited role class</a></h2>
Simply by typing <code class="ui">Ctrl-Space</code> in the body of a team class that inherits from another team, completion proposes
to create a role declaration overriding any inherited role from the super team (<a href="otjld/def/s1.html#s1.3.1.c"><img src="../images/ot_paragraph.png"> 1.3.1(c).</a>).
<p>
So selecting this proposal:<br>
<img style="margin:10px;margin-left:25px;" src="images/screenshots/OverrideRole.png"><br>
will create this declaration:
<pre style="margin-left:25px;"><code style="color:#606060;">@Override</code>
<code class="keyword">protected class</code> <code>Subscriber {
}</code></pre>
<h2><a name="completeBase">2. Completing a role's base class</a></h2>
When expanding the base type after the keyword <code class="keyword">playedBy</code>,
completion will also generate an "<code class="keyword">import <strong>base</strong> ...</code>" declaration
(<a href="otjld/def/s2.html#s2.1.2.d"><img src="../images/ot_paragraph.png"> 2.1.2(d)</a>), if needed.
<h2><a name="completeMapping">3. Creating callout/callin method bindings</a></h2>
Specific support for code completion exists to facilitate the creation of <b>callout</b> (<a href="otjld/def/s3.html"><img src="../images/ot_paragraph.png"> 3.</a>) and <b>callin</b> (<a href="otjld/def/s4.html"><img src="../images/ot_paragraph.png"> 4.</a>) method bindings.<br />
Completion can be used for
<ul>
<li><a href="#full">Creating full method bindings (callout/callin)</a>
<li><a href="#partial">Completing partial callout/callin bindings</a>
<li><a href="#correct">Corrections after callin creation.</a>
</ul>
<h3><a name="full">3.1 Creating full method bindings (callout/callin)</a></h3>
Just activating the completion anywhere in the body of a role class allows you to create a full callout or callin binding to an existing base method (or field &mdash; "callout to field", see <a href="otjld/def/s3.html#s3.5"><img src="../images/ot_paragraph.png"> 3.5</a>).<br />
<table>
<tr><td colspan=2>
After pressing <code>Ctrl-space</code>, selection of the desired binding happens in three steps:
<tr><td class="caption">a) Select a base method</td>
<td><img src="images/screenshots/complete_binding_1.png">
<tr><td class="caption">b) Change the role method name if desired.</td>
<td><img src="images/screenshots/complete_binding_2.png">
<tr><td class="caption">c) Select the binding kind.</td>
<td><img src="images/screenshots/complete_binding_3.png">
</table>
<h4>3.1.1 Creating callout to field</h4>
<p>
Two additional kinds of callouts can be generated, by typing "<code>get</code>" or "<code>set</code>" before invoking completion:
<table class="border" cellpadding=3>
<tr class="z2"><td>after typing <code class="keyword">get</code>
<td>Create a callout to field <i>getter</i>.</tr>
<tr class="z3">
<td>after typing <code class="keyword">set</code>
<td>Create a callout to field <i>setter</i>.
</table>
</p>
<h4>3.1.2 Mapping signatures using lifting/lowering</h4>
<p>
When binding to a base method/field, whose signature contains other base types for which a bound role exists in the current team,
completion lets you select whether the role side of the binding should use base or role types.
If role types are selected, they will be conform to the corresponding base type by implicitly using lifting (<a href="otjld/def/s2.html#s2.3"><img src="../images/ot_paragraph.png"> 2.3</a>) or lowering (<a href="otjld/def/s2.html#s2.2"><img src="../images/ot_paragraph.png"> 2.2</a>).
</p>
<h3><a name="partial">3.2 Completing partial callin/callout bindings</a></h3>
<p>
If a callin or callout binding has been typed up-to and including the "<code class="keyword">&lt;-</code>" or "<code class="keyword">-&gt;</code>" token, completion can be used to expand the right hand side specifying the base method or field. For callin bindings you may optionally first type the callin modifier (<code class="keyword">before, replace</code> or <code class="keyword">after</code>). Otherwise you will be prompted for the desired callin modifier.
In this case the proposed modifier is inferred to match the bound base method:<br />
<table class="border">
<tr class="z2"><td>regular method<td>Default is <code class="keyword">before</code> (also <code class="keyword">after</code> is legal).
<tr class="z3"><td><code class="keyword">callin</code> method<td>Default is <code class="keyword">replace</code>
</table>
</p><p>
Normally, after "<code class="keyword">-&gt;</code>" (as well as for "<code class="keyword">&lt;-</code>") completion will try to expand a base <i>method</i>, if for a callout one of the modifiers <code>get</code> or <code>set</code> has been typed, a <i>field</i> is searched instead.
<h3><a name="correct">3.3 Corrections after callin creation</a></h3>
After generating a callin binding using completion, the following two corrections might be especially helpful:
<ul>
<li>Adjusting the role method's <code class="keyword">callin</code> modifier, to match the binding's callin modifier.
<li>Creating a missing role method.
</ul>
Both corrections can easily be performed by a <a href="quickfix.html">quickfix</a> offered on the erroneous role method spec.
<h2><a name="completeCall">4. Completing special method calls</a></h2>
<ul>
<li>After <code class="keyword">base.</code> (<a href="otjld/def/s4.html#s4.3"><img src="../images/ot_paragraph.png"> 4.3</a>) and <code class="keyword">tsuper.</code> (<a href="otjld/def/s1.html#s1.3.1.f"><img src="../images/ot_paragraph.png"> 1.3.1(f)</a>) completion offers only those methods that are actually legal in this context,
which in both cases implies the same name and signature as the surrounding role (callin) method.</li>
<li>Completion also offers calls to members of the bound base class which are implicitly available using <b>inferred callout</b> (<a href="otjld/def/s3.html#s3.1.j"><img src="../images/ot_paragraph.png"> 3.1(j)</a>, <a href="otjld/def/s3.html#s3.5.h"><img src="../images/ot_paragraph.png"> 3.5(h)</a>)
</ul>
<h2><a name="completeTemplate">5. Completion templates</a></h2>
Content assist in the
form of <a href="PLUGINS_ROOT/org.eclipse.jdt.doc.user/concepts/concept-editor-templates.htm">
templates</a> exists for a few specific OT/J language constructs like <span class="low"><code class="keyword">within</code> (<i>Expression</i>)</span>.
</p>