blob: 96bc2449c05376b806b265e13c673e07d4f6e7f8 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<link rel=stylesheet type="text/css" href="../css/style.css">
<link rel=stylesheet type="text/css" href="../css/nn.css">
<title>OTDT 0.8.0 (Incubation) - New and Noteworthy</title>
</head>
<body>
<h1>OTDT 0.8.0 (Incubation) - New and Noteworthy</h1>
<div class="navigation"><i>Accumulating changes since the 0.7.1 Release - status: 0.8.0 M7</i></div>
<div class="navigation">On this page:
<!--a href="#metrics">&bull; Metrics Plug-in</a-->
<!--a href="#configuration">&bull; Configuration</a-->
<a href="#views">&bull; Views/Dialogs</a>
<a href="#assist">&bull; Content Assist</a>
<a href="#refactor">&bull; Refactoring</a>
<!--a href="#formatting">&bull; Formatting</a>
<a href="#debug">&bull; Run/Debug</a-->
<a href="#language">&bull; Language</a>
<!--a href="#api">&bull; API</a-->
<a href="#compiler">&bull; Compiler</a>
<!--a href="#otre">&bull; Runtime</a>
<a href="#otequinox">&bull; OT/Equinox</a-->
</div>
<table cellpadding="10" cellspacing="0" width="100%">
<colgroup>
<col width="20%">
<col width="80%">
</colgroup>
<tbody>
<!--
<tr><td colspan="2" id="NAME"><h2>HEADING</h2></td></tr>
<tr>
<td><p align="right"><b>DESC</b><br>
<span class="since">since&nbsp;0.7.1</span><br>
<a class="buglink" title="TITLE" href="https://bugs.eclipse.org/308029">308029</a></p></td>
<td><p>
</p>
<p><img alt="TEXT" src="../images/screenshots/NN07/.png"></p>
<p></p>
</td>
</tr>
<div class="listbox"><div class="listing"><pre><code class="keyword">public team class</code> <font color="blue">MyTeam</font> {
}</pre></div></div>
-->
<tr><td colspan="2" id="views"><h2>Views & Dialogs</h2></td></tr>
<tr>
<td><p align="right"><b>Compiler preferences page cleaned up</b><br>
<span class="since">since&nbsp;0.8.0M5</span><br>
<a class="buglink" title="cleanup OT/J compiler preferences page" href="https://bugs.eclipse.org/335739">335739</a></p></td>
<td><p>The preference page for OT/J compiler options has be revamped following recent improvements in the JDT UI.
The page is now structured into expandable sections per group of problems.
Also incremental search within the tree of options is supported.
The option to disable "scoped keywords" was apparently never used and has been removed from the preferences.
</p>
<p><img alt="OT/J Compiler preferences" src="../images/screenshots/NN08/CompilerPreferences.png"></p>
<p></p>
</td>
</tr>
<tr><td colspan="2" id="assist"><h2>Content assist</h2></td></tr>
<tr>
<td><p align="right"><b>Create role method quickfix</b><br>
<span class="since">since&nbsp;0.8.0M4</span><br>
<a class="buglink" title="Quickfix method generation on missing replace callin method generates wrong method" href="https://bugs.eclipse.org/329988">329988</a></p></td>
<td><p>If a role class has a callin binding whose left-hand side does not resolve to an existing role method
a quickfix exists for creating the missing role method.
Since 0.8.0M4 this quickfix respects the signature of the bound base method even if the callin binding does not declare any signatures
(see the <b>int</b> parameter and return in the screenshot below):
</p>
<p><img alt="Create Role Method Quickfix" src="../images/screenshots/NN08/CreateRoleMethodQuickfix.png"></p>
<p></p>
</td>
</tr>
<tr><td colspan="2" id="refactor"><h2>Refactoring</h2></td></tr>
<tr>
<td><p align="right"><b>Extract role interface</b><br>
<span class="since">since&nbsp;0.8.0M6</span><br>
<a class="buglink" title="extract interface on a role should create a role interface" href="https://bugs.eclipse.org/339264">339264</a></p></td>
<td><p>A new option has been added to the Extract Interface refactoring:
If the enclosing class is a role class a new check box appears:
</p>
<p><img alt="Extract as role interface checkbox" src="../images/screenshots/NN08/ExtractInterface1.png"></p>
<p>If this box is checked the new interface will not be created as a top-level type (as normally done by the JDT),
but as a role interface of the current enclosing team.</p>
<p><img alt="Extract as role interface preview" src="../images/screenshots/NN08/ExtractInterface2.png"></p>
<p>The refactored result looks like this</p>
<p><img alt="Extract as role interface result" src="../images/screenshots/NN08/ExtractInterface3.png"></p>
</td>
</tr>
<!--
<tr><td colspan="2" id="debug"><h2>Run / Debug</h2></td></tr>
<tr><td colspan="2" id="api"><h2>API</h2></td></tr>
-->
</tr> <tr><td colspan="2" id="language"><h2>Language</h2></td></tr>
<tr>
<td><p align="right"><b>Precedence among tsupers</b><br>
<span class="since">since&nbsp;0.8.0M3</span><br>
<a class="buglink" title="[compiler] implement changed precedence among different tsupers" href="https://bugs.eclipse.org/326969">326969</a></p></td>
<td><p>
Previously, <a class="otjldlink" href="http://www.objectteams.org/def/1.3/s1.html#s1.5.e">OTJLD &sect;1.5(e)</a>
was inconsistent between its first and second sentences.
The first sentence defines the general precendence between <code class="keyword">super</code> and <code class="keyword">tsuper</code>,
which will remain unchanged.
However, the precendence among different tsupers has been adjusted as demonstrated using this example:
<div class="listbox"><div class="listing"><pre><code class="keyword">public team class</code> <font color="blue">Team0</font> {
<code class="keyword">protected team class</code> <font color="darkblue">InnerTeamA</font> {
<code class="keyword">protected class</code> <b>Role</b> {
<code class="keyword">public void</code> rm() { ... }
}
<code class="keyword">public void</code> tm() { ... }
}
<code class="keyword">protected team class</code> InnerTeamB <code class="keyword">extends</code> <font color="darkblue">InnerTeamA</font> {
<code class="keyword">protected class</code> <b>Role</b> {
<code class="keyword">public void</code> rm() { ... }
}
<code class="keyword">public void</code> tm() { ... }
}
}
<code class="keyword">public team class</code> <font color="blue">Team1 <code class="keyword">extends</code> Team0</font> {
<code class="keyword">protected team class</code> <font color="darkblue">InnerTeamA</font> {
<code class="keyword">protected class</code> <b>Role</b> {
<code class="keyword">public void</code> rm() { ... }
}
<code class="keyword">public void</code> tm() { ... }
}
<code class="keyword">protected team class</code> <font color="darkblue">InnerTeamB</font> <code class="keyword">extends</code> <font color="darkblue">InnerTeamA</font> {
<font color="green">// details inherited from Team1.InnerTeamA and Team0.InnerTeamB</font>
}
}
</pre></div></div>
When invoking <code>tm()</code> on an instance of <code>Team1.InnerTeamB</code> two implementation are
candidates for execution:<ul>
<li><code>Team1.InnerTeamA.tm()</code></li>
<li><code>Team0.InnerTeamB.tm()</code>,</li></ul>
from which <a class="otjldlink" href="http://www.objectteams.org/def/1.3/s1.html#s1.5.e">OTJLD &sect;1.5(e)</a>
selects <code>Team0.InnerTeamB</code>.<br />
Correspondingly, when invoking <code>rm()</code> on an instance of <code>Team1.InnerTeamB.R</code> two implementation are
candidates for execution:<ul>
<li><code>Team1.InnerTeamA.Role.rm()</code></li>
<li><code>Team0.InnerTeamB.Role.rm()</code>,</li></ul>
from which <a class="otjldlink" href="http://www.objectteams.org/def/1.3/s1.html#s1.5.e">OTJLD &sect;1.5(e)</a>
now selects <code>Team0.InnerTeamB.Role</code>, consistent with the above.
</p>
</td>
</tr>
<tr><td colspan="2" id="compiler"><h2>Compiler</h2></td></tr>
<tr>
<td><p align="right"><b>Severity of write decapsulation</b><br>
<span class="since">since&nbsp;0.8.0M5</span><br>
<a class="buglink" title="separate tuning of severity of decapsulation in "set" callout-to-field" href="https://bugs.eclipse.org/335523">335523</a></p></td>
<td><p>When a role uses a callout <code class="keyword">set</code> to field with decapsulation this may be considered more severe
than a corresponding <code class="keyword">get</code> access. Therefor, the compiler now supports separate configurability for both
kinds of problems.
</p>
<p><img alt="Callouts to field with different severity" src="../images/screenshots/NN08/CalloutToFieldSeverity.png"></p>
<p></p>
</td>
</tr>
<!--
<tr><td colspan="2" id="otre"><h2>Object Teams Runtime Environment</h2></td></tr>
-->
</table>
</body>