blob: 55ae0fc32b16f8a84aa2809b0de5185962821aa9 [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.7 (Incubation) - New and Noteworthy</title>
</head>
<body>
<h1>OTDT 0.7 (Incubation) - New and Noteworthy</h1>
<div class="navigation"><i>Changes since the 1.4.0 Release from objectteams.org</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="#formatting">&bull; Formatting</a-->
<a href="#debug">&bull; Run/Debug</a>
<a href="#language">&bull; Language</a>
<a href="#compiler">&bull; Compiler</a>
<a href="#api">&bull; API</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="configuration"><h2>Configuration</h2></td></tr>
<tr>
<td><p align="right"><b>Migration of old OT-projects</b><br>
<span class="since">since&nbsp;0.7 M2</span><br>
<a class="buglink" title=" Automatically migrate OT-projects to new namespace" href="https://bugs.eclipse.org/308029">308029</a></p></td>
<td><p>When opening Object Teams project that have been created by a previous OTDT version (<em>1.x from objectteams.org</em>)
some internal data need to be migrated to the new <code>org.eclipse.objectteams</code> prefix, notably:
<dl>
<dt><b><code>.project</code></b></dt><dd>project nature and builder</dd>
<dt><b><code>META-INF/MANIFEST.MF</code></b></dt><dd>dependency on OT/Equinox plug-in</dd>
<dt><b><code>plugin.xml</code></b></dt><dd><code>aspectBinding</code> declarations</dd>
</dl>
Diagnostics have been added to signal these issues as errors:
</p>
<p><img alt="New project configuration errors" src="../images/screenshots/NN07/ProjectErrors.png"></p>
<p>Quick fixes have been implemented for performing the necessary changes, like:</p>
<p><img alt="Quickfix for migrating to the new namespace" src="../images/screenshots/NN07/ProjectMigration-QuickFix.png"></p>
</td>
</tr>
<tr>
<td><p align="right"><b>Use compiler options for plug-in export</b><br>
<span class="since">since&nbsp;0.7 M4</span><br>
<a class="buglink" title="[compiler] Interactive export of OT-plugin does not use compiler preferences" href="https://bugs.eclipse.org/316553">316553</a></p></td>
<td><p>When interactively exporting an OT plug-in (using the corresponding export wizard)
it is now possible to tell the builder to use the OT/J compiler options from the project settings.
In order to do so simply include the following directive in your <code>build.properties</code> file:
<div class="listbox"><div class="listing">javacProjectSettings=true</div></div>
This is a standard PDE setting which now applies to OT-specific compiler options, too.
</p>
</td>
</tr>
<tr><td colspan="2" id="views"><h2>Views & Dialogs</h2></td></tr>
<tr>
<td><p align="right"><b>Binding to callout-method via binding editor</b><br>
<span class="since">since&nbsp;0.7 M4</span><br>
<a class="buglink" title="[binding-editor] Binding editor does not show base methods which are defined by callout" href="https://bugs.eclipse.org/315520">315520</a></p></td>
<td><p>The binding editor now also shows base methods that are defined by a callout binding (relevant in role-of-role situations):
</p>
<p><img alt="Binding to a callout-defined method" src="../images/screenshots/NN07/BindingEditorBaseCallout.png"></p>
<p>Also a new icon for the "New method()" entry was introduced.
</p>
</td>
</tr>
<tr>
<td><p align="right"><b>Create callout-to-field via binding editor</b><br>
<span class="since">since&nbsp;0.7 M4</span><br>
<a class="buglink" title="[binding-editor] Creating callout-to-field via binding editor" href="https://bugs.eclipse.org/315465">315465</a></p></td>
<td><p>The binding editor now supports the creation of callout-to-field bindings. Simply select (a) "New method()", (b) "->", (c) <em>a base field</em>:
</p>
<p><img alt="Creating a callout-to-field" src="../images/screenshots/NN07/BindingEditorCalloutToField1.png"></p>
<p>As the result you will see two new callout bindings (<code>get</code> and <code>set</code>) to the same <img valign="middle" src="../images/otdt/field_default_obj.gif"/> field.
If only a getter or only a setter was intended simply remove the undesired binding.
</p>
<p><img alt="Created a two callout-to-field bindings" src="../images/screenshots/NN07/BindingEditorCalloutToField2.png"></p>
</td>
</tr>
<tr>
<td><p align="right"><b>"Go to Language Definition" without using Problems view</b><br>
<span class="since">since&nbsp;0.7</span><br>
<a class="buglink" title=" "Go to Language Definition" should be available along more paths" href="https://bugs.eclipse.org/318071">318071</a></p></td>
<td><p>The action <span class="ui">Go to Language Definition</span>, which previously could only be invoked from the <b>Problems</b> view,
can now be invoked in two more ways:
</p>
<p><u>Using the context menu on the problem marker in the editor's left gutter:</u>
<img alt="Go to Language Definition from left gutter" src="../images/screenshots/NN07/GoToLangDefGutter.png"></p>
<p><u>Using a new button on the problem hover:</u>
<img alt="Go to Language Definition from problem hover" src="../images/screenshots/NN07/GoToLangDefHover.png"></p>
</td>
</tr>
<tr><td colspan="2" id="assist"><h2>Content assist</h2></td></tr>
<tr>
<td><p align="right"><b>Create "precedence after"</b><br>
<span class="since">since&nbsp;0.7 M3</span><br>
<a class="buglink" title="[dom] [assist] add support for &quot;precedence after&quot; in DOM and quickfix" href="https://bugs.eclipse.org/313804">313804</a></p></td>
<td><p>When a quickfix is used for creating a <code class="keyword">precedence</code> declaration that affects <code class="keyword">after</code> callin bindings,
the quickfix automatically creates the declaration as <code class="keyword">precedence after</code>
(see also the change of <a class="otjldlink" href="http://www.objectteams.org/def/1.3/s4.html#s4.8.a">OTJLD &sect;4.8(a)</a> described <a href="#language">here</a>).
</p>
<p><img alt="Add &quot;precedence after&quot; quickfix" src="../images/screenshots/NN07/AddPrecedenceAfter-QuickFix.png"></p>
</td>
</tr>
<tr>
<td><p align="right"><b>Add/remove signatures of method bindings</b><br>
<span class="since">since&nbsp;0.7 M3</span><br>
<a class="buglink" title="[assist] Quick assist for adding/removing signatures in method bindings" href="https://bugs.eclipse.org/310923">310923</a></p></td>
</p>
</td>
<td><p>
New quick assists support converting between method bindings with and without signatures.
When, e.g., creating a method binding by means of completion, signatures are automatically included.
In that case a quick assist can be used to convert that verbose binding into its shorter versions without signatures:
</p>
<p><img alt="Remove signatures quick assist" src="../images/screenshots/NN07/RemoveSignatures-QuickAssist.png"></p>
<p>
Conversely, a method binding without signatures can be converted to the long form:
</p>
<p><img alt="Add signatures quick assist" src="../images/screenshots/NN07/AddSignatures-QuickAssist.png"></p>
The quick assist for removing signatures is disabled if argument names are used either in a parameter mapping or a guard predicate.
</td>
</tr>
<tr>
<td><p align="right"><b>Proposal to override inherited role</b><br>
<span class="since">since&nbsp;0.7</span><br>
<a class="buglink" title="[assist] completion should offer to materialize phantom roles" href="https://bugs.eclipse.org/302827">302827</a></p></td>
</p>
</td>
<td><p>
A new kind of completion proposal has been added for overriding a role class inherited from the super team:
</p>
<p><img alt="Override role completion proposal" src="../images/screenshots/NN07/OverrideRole.png"></p>
Invoking this proposal will insert the following code:
<div class="listbox"><div class="listing"><pre> <code class="annotation">@Override</code>
<code class="keyword">protected class</code> Subscriber {
}</pre></div></div>
The new role implicitly inherits all properties from the inherited role <code>Bonus.Subscriber</code> (<a class="otjldlink" href="http://www.objectteams.org/def/1.3/s1.html#s1.3.1.c">OTJLD &sect;1.3.1(c)</a>)
and may override methods and/or refine <code class="keyword">extends</code> (<a class="otjldlink" href="http://www.objectteams.org/def/1.3/s1.html#s1.3.2.b">OTJLD &sect;1.3.2(b)</a>)
and <code class="keyword">playedBy</code> (<a class="otjldlink" href="http://www.objectteams.org/def/1.3/s2.html#s2.1.c">OTJLD &sect;2.1(c)</a>) relationships.
</td>
</tr>
<tr><td colspan="2" id="debug"><h2>Run / Debug</h2></td></tr>
<tr>
<td><p align="right"><b>Fade out JMangler</b><br>
<span class="since">since&nbsp;0.7 M1</span><br>
<a class="buglink" title="Remove all traces of JMangler" href="https://bugs.eclipse.org/302976">302976</a></p></td>
<td><p>Previous versions of the OTDT featured two alternative strategies for launching OT/J applications: JMangler and JPLIS.
During the move to Eclipse.org, the support for JMangler was discontinued because the JPLIS launch mode has long matured
and bringing JMangler to Eclipse.org would have caused additional license issues.
</p>
For users this means that launch configurations have been simplified as the checkbox <span class="ui">Java 5 JPLIS Launching</span>
has been removed, leaving only the <span class="ui">Enable OTRE</span> checkbox:
<p>
<img alt="JRE Tab with OTRE configuration" src="../images/screenshots/NN07/RunJRE-OTRE.png">
</p>
</td>
</tr>
<tr>
<td><p align="right"><b>Show "_OT$base" field</b><br>
<span class="since">since&nbsp;0.7</span><br>
<a class="buglink" title="variables view should not hide _OT$base reference" href="https://bugs.eclipse.org/316907">316907</a></p></td>
<td>
<p>
The <b>Variables</b> view has the option to filter any synthetic variables generated by the OT/J compiler (<span class="ui">Java &gt; Show OT/J internal variables</span>).
However, the synthetic <code><b>_OT$base</b></code> field is special, as it holds the essential information
to which base instance a given role instance is linked. The <code><b>_OT$base</b></code> field is
now shown in the <b>Variables</b> view independent of the current filter setting:
</p>
<p>
<img alt="Variables view showing _OT$base" src="../images/screenshots/NN07/Variables_Base.png">
</p>
<p>
Also note the similarity to the synthetic field <code><b>this$0</b></code> which refers to the
enclosing (team) instance.
</p>
</td>
</tr>
<tr><td colspan="2" id="api"><h2>API</h2></td></tr>
<tr>
<td><p align="right"><b>Team serialization</b><br>
<span class="since">since&nbsp;0.7 M1</span><br>
<a class="buglink" title="[otre] [compiler] Support basic serialization of teams and roles" href="https://bugs.eclipse.org/304728">304728</a><br>
<a class="buglink" title="[otre] Selectively consider activation state during team serialization" href="https://bugs.eclipse.org/304729">304729</a></p></td>
<td><p>Teams and roles can now be serialized if they declare to implement <code>java.io.Serializable</code>.
By default serialization does not handle any generated fields by which roles, teams and bases are linked (role caches, base-to-role backpointers).
Team classes wishing to persist their roles can now do so by implementing a normal pair of <code>writeObject</code> / <code>readObject</code> methods.
New API has been added to <code>org.objectteams.Team</code> for initializing a team after restoring from its persisted representation:
<dl><dt><b><code>void restore()</code></b></dt>
<dd>Serializable teams must invoke this method once from their readObject() method in order to re-initialize internal data structures.</dd>
<dt><b><code>void restoreRole(Class<?> clazz, Object role)</code></b></dt>
<dd>Serializable teams must invoke this method from their readObject() method for each role that has been retrieved and shall be re-registered for this team.</dd>
</dl>
</p>
<p>
Additionally, new API has been added for persisting / restoring the global <b>activation state</b> of a team:
<dl><dt><b><code>void writeGlobalActivationState(ObjectOutputStream out) throws IOException</code></b></dt>
<dd>If a serializable team wishes to persist its global activation status it must
call this method from its <code>writeObject()</code> method and correspondingly call
<code>readGlobalActivationState(ObjectInputStream)</code> from its <code>readObject()</code>.</dd>
<dt><b><code>void readGlobalActivationState(ObjectInputStream in) throws IOException</code></b></dt>
<dd>If a serializable team wishes to persist its global activation status it must
call this method from its <code>readObject()</code> method and correspondingly call
<code>writeGlobalActivationState(ObjectOutputStream)</code> from its <code>writeObject()</code>.
If a team is restored that was globally active when serialized, it will be activated
correspondingly during deserialization when this method is called.</dd>
</dl>
</p>
</td></tr>
<tr><td colspan="2" id="language"><h2>Language</h2></td></tr>
<tr>
<td><p align="right"><b>Semantics of precedence</b><br>
<span class="since">since&nbsp;0.7 M3</span><br>
<a class="buglink" title="[compiler] [otre] implement change in semantics of precedence declaration" href="https://bugs.eclipse.org/310917">310917</a></p></td>
<td><p>The semantics of how exactly a <code class="keyword">precedence</code> declaration should affect <code class="keyword">after</code> callin bindings
was underspecified in the OTJLD and the OTRE implemented unintended semantics.
</p>
<p>
To fix these issues <a class="otjldlink" href="http://www.objectteams.org/def/1.3/s4.html#s4.8.a">OTJLD &sect;4.8(a)</a> has been extended to
<ul>
<li>specify how a precedence declaration affects the execution order:<br>
for <code class="keyword">before</code> and <code class="keyword">replace</code> bindings
a high precedence (i.e., being listed early) means early triggering,
but for <code class="keyword">after</code> bindings a high precedence means <b>late</b> triggering.
<li>require precedence declarations which affect after bindings to make this fact explicit by using
<code class="keyword">precedence after</code> instead of just <code class="keyword">precedence</code>.
</ul>
</p>
<p>
The new semantics have been implemented in the OTRE accordingly (see also the corresponding <a href="#assist">quickfix</a>).
</p>
</td></tr>
<tr>
<td><p align="right"><b>Merging precedence of different kinds</b><br>
<span class="since">since&nbsp;0.7 M4</span><br>
<a class="buglink" title="[otjld] [compiler] Merging of class-based and binding-based precedences is underspecified" href="https://bugs.eclipse.org/316148">316148</a></p></td>
<td><p>The semantics of how exactly <code class="keyword">precedence</code> declarations of different kinds (class-based vs. binding-based) would be merged was underspecified.
Consider the following precedence declarations:
<div class="listbox"><div class="listing"><pre> <code class="keyword">public team class</code> MyTeam {
<code class="keyword">precedence</code> MyRoleB.bl1, MyRoleA.bl3;
<code class="keyword">protected class</code> MyRoleB <code class="keyword">playedBy</code> MyBase {
<code class="keyword">precedence</code> bl1, bl2;
...
}
...
}</pre></div></div>
Here the C3 algorithm could produce two different orders (<code>bl1, bl3, bl2</code>) or (<code>bl1, bl2, bl3</code>) (both order are consistent with
the input lists). Which order is chosen depends on in which order the two precedence lists are passed into the algorithm.
</p>
<p>
To fix these issues <a class="otjldlink" href="http://www.objectteams.org/def/1.3/s4.html#s4.8.d">OTJLD &sect;4.8(d)</a> has been extended to
specify that more deeply nested precedence declarations have higher priority than outer precedence declarations.
So in the above example the final order of callin bindings will be: (<code>bl1, bl2, bl3</code>), because <code>bl2</code> is mentioned
in the inner precedence declaration and thus comes before <code>bl3</code> which is mentioned only in the outer precedence declaration.
</p>
<p>
The compiler has been updated accordingly.
</p>
</td></tr>
<tr>
<td><p align="right"><b>Callin in role with binding ambiguity</b><br>
<span class="since">since&nbsp;0.7 M4</span><br>
<a class="buglink" title="[otjld] Method bindings in role with binding ambiguity?" href="https://bugs.eclipse.org/316200">316200</a></p></td>
<td><p>Previously, callin bindings in a particular situation would be flaged as illegal showing the following message:
<div class="hover" style="margin:5px;">
Callin mapping not allowed here, because lifting to role TX.RY is
not possible due to a reported binding ambiguity (OTJLD 4.1(b)).
</div>
A closer analysis revealed that despite lifting ambituity the callin <em>could</em> succeed in lifting if
<ol>
<li>a suitable role is already found in the cache (perhaps created explicitly), <em>or</em></li>
<li>the actual base object has a type for which a specific role without binding ambiguity exists.</li>
</ol>
</p>
<p>
In order to support even such corner cases,
<ul>
<li>Sections <a class="otjldlink" href="http://www.objectteams.org/def/1.3/s2.html#s2.3.4.b">OTJLD &sect;2.3.4(b)</a> and
<a class="otjldlink" href="http://www.objectteams.org/def/1.3/s4.html#s4.1.b">OTJLD &sect;4.1(b)</a> have been extended</li>
<li>The compiler message has been rephrased in a weaker way.</li>
<li>A new warning token <code>"def-bind-ambiguity"</code> (definite binding ambiguity) has been introduced
which can be used in a <code>@SuppressWarnings</code> annotation in order to silence that error.<br>
Additionally, option <code class="ui">Suppress optional errors with '@SuppressWarnings'</code> must be enabled in the
Java Compiler preferences.</li>
<li>The generated lift method has been changed to service case (1) above.</li>
</ul>
</p>
</td></tr>
<tr><td colspan="2" id="compiler"><h2>Compiler</h2></td></tr>
<tr>
<td><p align="right"><b>Warn about unused result</b><br>
<span class="since">since&nbsp;0.7 M2</span><br>
<a class="buglink" title="[compiler] should warn when after callin ignores return value of its role method " href="https://bugs.eclipse.org/310621">310621</a></p></td>
<td><p>In an <code class="keyword">after</code> callin binding where both methods declare a return type, users might expect the role method's result to be passed down
to the original caller. However, <code class="keyword">after</code> callin bindings may only <em>look</em> at the base method's result but never <em>replace</em> it with its own result.
In order to alert users of this issue, a new warning has been introduced.
</p>
<p style="margin-bottom:0px;">
So this binding:
<div class="listbox"><div class="listing"><code><code class="keyword">int</code> foo() <code class="keyword"><- after int</code> bar();</code></div></div>
Will yield this warning:
<div class="hover" style="margin:5px;">
Callin after binding cannot return a value to the base caller, role method return value of type int will be ignored (OTJLD 4.4(a))
</div>
By contrast, the following declaration does not trigger the warning:
<div class="listbox"><div class="listing"><code><code class="keyword">void</code> foo() <code class="keyword"><- after int</code> bar();</code></div></div>
If desired the warning can be suppressed using the token <code>"ignoredresult"</code>
</p>
</td></tr>
<tr><td colspan="2" id="otequinox"><h2>OT/Equinox</h2></td></tr>
<tr>
<td><p align="right"><b>Aspect bindings for nested teams</b><br>
<span class="since">since&nbsp;0.7 M2</span><br>
<a class="buglink" title="nested teams must be specified using their internal name with &quot;$__OT__&quot;" href="https://bugs.eclipse.org/311109">311109</a><br>
<a class="buglink" title="Adding InnerTeam for aspectBinding with the PDE Extension Editor results in wrong code" href="https://bugs.eclipse.org/311206">311206</a></p></td>
<td><p>Previously, aspect bindings for nested teams could only be specified by using the internal name involving an ugly "$__OT__" prefix.
Specifically, when selecting a nested team using the <span class="ui">Browse</span> button the resulting declaration would not work.
</p>
<p>
To fix these issues support has been added to OT/Equinox for interpreting the source and binary names of nested teams without the internal prefix,
i.e., both
<ul>
<li><code>some.pack.OuterTeam.InnerTeam</code> and</li>
<li><code>some.pack.OuterTeam$InnerTeam</code></li>
</ul>
will be understood by the OT/Equinox runtime.
</p>
</td></tr>
<tr>
<td><p align="right"><b>Extension point for lifting participant</b><br>
<span class="since">since&nbsp;0.7</span><br>
<a class="buglink" title="Extension point for a lifting participant" href="https://bugs.eclipse.org/311081">311081</a></p></td>
<td><p>The <a title="OTDT 1.4 New &amp; Noteworthy" href="http://www.objectteams.org/distrib/new_in_1.4.html#runtime">recently introduced</a>
concept of a lifting participant is now supported also within OT/Equinox.
This is done using the new extension point <code>org.eclipse.objectteams.otequinox.liftingParticipant</code>.
In any application at most one extension to this extension point is allowed.
The extension must provide a class implementing <code>org.objectteams.ILiftingParticipant</code>.
</p>
</td></tr>
<tr><td colspan="2" id="otre"><h2>Object Teams Runtime Environment</h2></td></tr>
<tr>
<td><p align="right"><b>Detect all system threads</b><br>
<span class="since">since&nbsp;0.7</span><br>
<a class="buglink" title="[otre] OTRE doesn't know about all threads" href="https://bugs.eclipse.org/316696">316696</a></p></td>
<td><p>It was a long outstanding issue that per-thread (de)activation of teams could not correctly handle all system threads that
are created before entering the <code>main</code> function.
Only for the AWT-Event-Thread an incomplete workaround was implemented, which could print the following warning at runtime:
<pre style="color:red;">Warning: Deactivation for the AWT-Event-Thread is not effective right now!</pre>
This problem could be resolved and the workaround is no longer used.
</p>
</td></tr>
</table>
</body>