blob: f7ced931ef5f6080fad367b03a5b2c693910d0c3 [file] [log] [blame]
Stephan Herrmann01664412010-04-01 20:28:43 +00001<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "../../dtd/xhtml1-strict.dtd">
2<html xmlns="" lang="en">
3 <head>
4 <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" />
5 <link rel="stylesheet" href="otjld/css/ot.css" type="text/css" />
6 <link rel="stylesheet" href="otjld/css/otjld.css" type="text/css" />
7 <title>OTDT Feature List</title>
8 <!-- special padding for the table of tests. -->
9 <style type="text/css">
10 td,th { padding-left:15px; padding-right:15px; padding-top:2px; padding-bottom:2px; }
11 </style>
12 </head>
13 <body>
14 <div id="head">
15 <h1>Features of the OTDT (version 1.4.x)</h1>
16 </div>
17 <div style="margin:10px;">
19 <h2 style="text-align:center;margin-top:0px;"><img style="vertical-align:middle;" alt="Built on Eclipse" src="../images/built-on-eclipse.gif"/> Version 3.5.0</h2>
21 The release 1.4.0 M1 is based on Eclipse 3.6.0 M3. It contains a modified version of the JDT core
22 and several added plugins.
24 <br/><br/>
26 The following components are available:
28 <ul>
29 <li><a href="#compiler">Compiler</a></li>
30 <li><a href="#wizards">Wizards</a></li>
31 <li><a href="#editor">Editor</a></li>
32 <li><a href="#bindingEditor">Binding Editor</a></li>
33 <li><a href="#refactoring">Refactoring</a></li>
34 <li><a href="#structureViewers">Structure Viewers</a></li>
35 <li><a href="#search">Search</a></li>
36 <li><a href="#execution">Execution Environment</a></li>
37 <li><a href="#otequinox">OT/Equinox</a></li>
38 <li><a href="#debugging">Debugging</a></li>
39 <li><a href="#help">Help and additional Information</a></li>
40 </ul>
43 <p></p>
45 <div id="compiler" class="headl"><div class="headr">
46 <h1>Compiler</h1>
47 </div></div>
49 The Object Teams Compiler is an incremental compiler, based on the Eclipse Compiler for Java.
50 <dl>
51 <dt><strong>Language Definition</strong></dt>
52 <dd>The compiler implements the language as defined in the OT/J
53 <a href="otjld/def/index.html">language definition</a> version 1.1 (OTJLD).
54 The language definition has continuously been revised to precisely specify the language
55 including various corner cases and combinations of features.
56 </dd>
57 <dt><strong>Language Implementation</strong></dt>
58 <dd>
59 The compiler supports all features of OT/J according to the
60 <a href="otjld/def/index.html"><img alt="otjld" src="../images/ot_paragraph.png"/> OTJLD v1.1</a>
61 &sect;&sect;1-7.
62 Support for the join point sub-language (<a href=""><img alt="otjld" src="../images/ot_paragraph.png"/> OTJLD &#167; 8</a>) is not included in the stable release 1.3.x.
63 <p></p>
64 The compiler can be <strong>configured</strong> using global <code>Preferences</code> or project
65 specific <code>Properties</code>.
66 <ul>
67 <li>Configure OT/J-specific compiler diagnostics as "ignore", "warning" or "error".<br/>
68 Any warnings configured on this property sheet can also be suppressed in the
69 source code using the <code>@SuppressWarnings</code> annotation.</li>
70 <li>Scoped keywords <a href="otjld/def/sA.html#sA.0.1"><img alt="otjld" src="../images/ot_paragraph.png"/> OTJLD &#167; A.0.1</a> can be disabled (default is enabled).
71 </li>
72 <!--
73 <li>Compiler support for the join point language (<a href="../def/1.0/joinpoints.html"><img border="0" src="../images/ot_paragraph.png"/> OTJLD &#167 8</a>) is not included in this release. Note, that the runtime environment does not yet support the join point language, thus this feature could mainly be used for learning the join point language.
74 -->
75 </ul>
76 </dd>
Stephan Herrmann01664412010-04-01 20:28:43 +000077 </dl>
79 <div id="wizards" class="headl"><div class="headr">
80 <h1>Wizards</h1>
81 </div></div>
82 <ul>
84 <li>The first step to developing with Object Teams in Eclipse is creating an <img class="inline" alt="" src="../images/newprj_wiz.gif"/><code>&nbsp;Object&nbsp;Teams&nbsp;Project</code>. A wizard will guide you through that process. It will also add the Object Teams class library (<tt>otre.jar</tt>) to your project's classpath.
85 </li>
87 <li>
89 Having done that, you can start adding classes &mdash; be it regular classes, or <img class="inline" alt="" src="../images/team_obj.gif"/> team or <img class="inline" alt="" src="../images/role_obj.png"/> role classes &mdash; wizards will assist you in creating the classes properly.
90 </li>
91 </ul>
94 <div id="editor" class="headl"><div class="headr">
95 <h1>Editor</h1>
96 </div></div>
97 <ul>
99 <li>Editing Object Teams source code is supported by an outline view, showing the structure of the edited source file. This includes the Object Teams specific constructs,
100 <em>teams</em> (<img class="inline" alt="" src="../images/team_obj.gif"/>),
101 <em>roles</em> (<img class="inline" alt="" src="../images/role_obj.png"/>),
102 and <em>method bindings</em> (<img class="inline" alt="" src="../images/callinbindingbefore_obj.gif"/>,
103 <img class="inline" alt="" src="../images/callinbindingreplace_obj.gif"/>,
104 <img class="inline" alt="" src="../images/callinbindingafter_obj.gif"/>,
105 <img class="inline" alt="" src="../images/calloutbinding_obj.gif"/>).</li>
107 <li>The editor highlights the Object Teams keywords like "<code class="keyword">team</code>" the same way standard Java keywords are highlighted.</li>
108 <li>All constructs referencing other code elements are navigable. E.g. you can navigate <tt>super()</tt>, <tt>tsuper()</tt>, <tt>base()</tt> calls, as well as <em>callin</em> and <em>callout bindings</em>.
109 The name in a <code class="keyword">team package</code> declaration lets you navigate from a role file
110 (<a href="otjld/def/s1.html#s1.2.5"><img alt="otjld" src="../images/ot_paragraph.png"/> OTJLD &#167; 1.2.5</a>) to its enclosing team.</li>
112 <li>Classes to which one or more roles are bound using <code class="keyword">playedBy</code> are
113 annotated with a marker (<img class="inline" alt="" src="../images/playedBy_obj.gif"/>),
114 that allows navigating to the role declaration(s).
115 Similarly, methods in a base class that are bound with a <em>callin binding</em> are
116 annotated with a marker (<img class="inline" alt="" src="../images/callinbinding_obj.gif"/>),
117 that allows navigating to the method binding declaration(s).
119 <br/>
120 Because this feature may be resource-consuming in a large workspace the global Object Teams preferences page allows to completely disable the generation of callin markers.</li>
122 <li>Semantic highlighting (checkbox "mark occurrences") is fully supported.</li>
123 <li>Code completion (Ctrl-space) is widely supported. It is, e.g., possible to use completion in order to create a callout binding.</li>
124 <li>Content assist provides quick-fixes (Ctrl-1) for a number of OT/J specific errors and warnings.
125 Also a few templates for specific OT/J language constructs &mdash;
126 namely <code>with{}</code> and <code>within (<em>Expression</em>){}</code> &mdash; are available.</li>
127 </ul>
129 <div id="bindingEditor" class="headl"><div class="headr">
130 <h1>Binding Editor</h1>
131 </div></div>
132 <ul>
133 <li>Supports easy creation of connector definitions using a table based graphical user interface. In this context, a <b>connector</b> is meant to be a team that inherits structure
134 (roles) and functionality (methods) from its super-team, and its main purpose is to bind
135 the inherited structure and functionality using <code class="keyword">playedBy</code>
136 declarations and callin/callout method bindings.</li>
137 <li>Type bindings (<code class="keyword">playedBy</code>) can be defined by choosing a provided role type and the desired base type with a type selection dialog.</li>
138 <li>Method bindings (either callin or callout) can be established by choosing a role method and a base method from the provided role and base method list respectively.
139 <ul>
140 <li>Only appropriate binding kinds are selectable in the corresponding context (callin or callout).</li>
141 <li>Besides the provided role methods, a new role method can be implemented by selecting a provided base method, thus creating a callout binding.</li>
142 </ul>
143 </li>
144 <li>Parameter and result mappings are definable by typing in an expression in the corresponding text field of the parameter mapping configuration tab.</li>
145 </ul>
146 The binding editor can be opened either from the new team wizard or using the package explore's context menu (<code><img class="inline" alt="" src="../images/calloutbinding_obj.gif"/>&nbsp;Open&nbsp;Binding&nbsp;Editor</code>).
147 <p></p>
148 <div id="refactoring" class="headl"><div class="headr">
149 <h1>Refactoring</h1>
150 </div></div>
151 <p></p>
152 <div style="margin:15pt"><i><span style="text-decoration:underline;">Note:</span> The extended refactoring support has been developed based on Eclipse 3.0. Some of this functionality has not yet been ported to Eclipse 3.5 and thus is not yet available in OTDT 1.3.x.</i></div>
153 Significant work has been put into supporting the automated refactoring of OT/J code.
154 The following refactorings take into account the Object Teams-specific
155 relationships (implicit role inheritance, team nesting, role-base bindings and method
156 bindings).
157 <ul>
158 <li style="color:gray;">Extract Method <i>(extended support currently unavailable)</i></li>
159 <li style="color:gray;">Move Method <i>(extended support currently unavailable)</i></li>
160 <li>Rename Method</li>
161 <li>Rename Project</li>
162 <li>Rename Source folder</li>
163 <li>Rename Field</li>
164 </ul>
165 The Rename Package refactoring is also available, with the only limitation
166 that you cannot rename team-packages. The Rename Type refactoring does not
167 yet support role files (<a href="otjld/def/s1.html#s1.2.5"><img alt="otjld" src="../images/ot_paragraph.png"/> OTJLD &sect; 1.2.5</a>).
168 <p></p>
170 <div id="structureViewers" class="headl"><div class="headr">
171 <h1>Structure Viewers</h1>
172 </div></div>
173 <dl>
174 <dt><strong>The Package Explorer</strong></dt>
175 <dd>
176 <ul>
177 <li>
178 provides access to all project artifacts and their structure, i.e. source files, used libraries (<em>jar</em>-files), and other documents. Note that team and role classes are annotated with distinct icons (<img class="inline" alt="" src="../images/team_obj.gif"/> for teams and <img class="inline" alt="" src="../images/role_obj.png"/> for roles). (The same icons are used throughout the IDE, whenever a team or role is visible.)
179 </li>
180 <li>
181 If "Java Type Indicators" is enabled under general preferences/label decorations, OT-specific decorations will also be applied to compilation units (files) and team packages.
182 </li>
183 <li>
184 By opening the tree-branches, you can peek at the structure of e.g. classes.
185 </li>
186 <li>For team classes, there is special support for <b>role files</b> (<a href="otjld/def/s1.html#s1.2.5"><img alt="" src="../images/ot_paragraph.png"/> OTJLD &sect; 1.2.5</a>):<br/>
187 Role files are separate files and can be shown either
188 <em>physically</em> (<img class="inline" alt="" src="../images/team_package.gif"/>) as (separate) files in the team package or
189 <em>logically</em> (<img class="inline" alt="" src="../images/external_roles.gif"/>) as member types of the enclosing team.
190 </li>
191 <li>
192 Furthermore, the Package Explorer provides the current context for other operations. The Team- and Role-Wizards, for example, have a pre-set source folder, package and enclosing class when a team is selected in the Package Explorer.
193 </li>
194 </ul></dd>
195 <dt><strong>The Hierarchy View</strong></dt>
196 <dd><ul>
197 <li>Object Teams intruduce a new type hierarchy. Besides the normal ("<code>extends</code>") inheritance, there is an additional "<em>implicit</em>" role inheritance, established by role name equality in a team hierarchy. In conjunction with team nesting roles support a controlled form of multiple inheritance.
198 </li>
199 <li>
200 The new implicit inheritance has been integrated completely into the standard JDT
201 <em>Hierarchy View</em>.
202 The revised Hierarchy View supercedes the incomplete support which was provided by
203 a specific "Implicit Hierarchy View" in previous releases of the OTDT.
204 </li>
205 </ul></dd>
206 </dl>
209 <div id="search" class="headl"><div class="headr">
210 <h1>Search</h1>
211 </div></div>
212 <p></p>
213 <dl>
214 <dt><strong>Search references</strong></dt>
215 <dd><ul><li>The Java Search functionality has been extended to include search results of
216 Object Teams code, that is, callin and callout bindings, and
217 playedBy-relationships.</li></ul></dd>
218 <dt><strong>Call hierarchy</strong></dt>
219 <dd><ul><li>Also the call hierarchy has been extended for browsing control flows passing
220 through method bindings (callin and callout).</li>
221 <li>The OTDT introduced support for call hierarchies regarding field accesses (read, write, any) and class instantiations. As of version 3.4 this functionality has been adopted by Eclipse.</li>
222 </ul>
223 </dd>
224 </dl>
225 <p></p>
227 <div id="execution" class="headl"><div class="headr">
228 <h1>Execution Environment</h1>
229 </div></div>
230 <dl>
231 <dt><strong>Aspect weaving</strong></dt><dd>
232 <ul><li>
233 All aspect oriented languages have some kind of <em>weaving process</em>, where the aspect code is combined with the other (<em>base</em>) code.
234 </li>
235 <li>
236 Object Teams programs perform the weaving at application <em>startup time</em>, i.e. at the moment, the program is launched. In order to do this, there is the so-called <em>Object Teams Runtime Environment (OTRE)</em>, that wraps around the standard launching procedure.
237 </li>
238 <li>
239 All this is handled transparently using the standard Eclipse "Run" feature.
240 Running any main class of an Object Teams project automatically includes
241 the OTRE (This feature has been <a href="new_in_1.3.html#launch">changed in the OTDT 1.2.2</a>).
242 </li>
243 </ul></dd>
244 <dt><strong>Aspect deployment/activation</strong></dt>
245 <dd><ul>
246 <li>A new "Team Activation" tab in the "Run-Configuration" allows to instantiate and activate teams without modifying the program's source code.
247 </li>
248 <li>
249 Teams that cause aspect code to be woven into an application can be added to a program
250 <ul>
251 <li> by explicit reference within the program source code or</li>
252 <li> by a configuration file which is mentioned as a parameter to the VM or</li>
253 <li> by adding them via the aforementioned "Team Activation" tab.</li>
254 </ul>
255 No such configuration is needed for compilation.
256 </li>
257 </ul>
258 </dd>
259 <dt><strong>Technology used</strong></dt>
260 <dd><ul>
261 <li id="JPLIS">Alternative support for a Java 5 based weaver.
262 The original OT/J-weaver uses the <a href="">JMangler</a> framework for
263 intercepting classes during class loading.
264 The new version uses the Java-agent concept of Java 5
265 (<a href="">JPLIS</a>) instead,
266 which means we are independent of JMangler. In the future this version will support
267 aspect weaving not only at load time but also while an application is running.<br/>
268 The launch configuration for OT/J applications contains a new checkbox for selecting
269 the weaver ("Java 5 JPLIS Launching").
270 </li>
271 </ul></dd>
272 </dl>
273 <p></p>
275 <div id="otequinox" class="headl"><div class="headr">
276 <h1>OT/Equinox</h1>
277 <!--<td width="77%"></td>-->
278 <!--<td align="right" style="margin-top:0px; margin-bottom:0px;">-->
279 <!--
280 <img style="margin-top:0px; margin-bottom:-10px; margin-right:5px; height:60px; align=middle;" src="../images/ot_eclipse_120.gif"/>
281 -->
282 <!--</td>-->
283 </div></div>
284 <p></p>
285 Starting with the OTDT version 0.9.9 it is possible to develop Eclipse plugins using
286 OT/J as the implementation language.
287 <ul>
288 <li>Using the plugin <code>org.eclipse.objectteams.otequinox</code>, a plugin ("aspect plugin")
289 may declare that it adapts classes from a specified other plugin ("base plugin").</li>
290 <li>By an integration of the Object Teams Runtime Environment with new hooks in the
291 Equinox implementation a <code class="keyword">team</code> class from an <em>aspect plugin</em>
292 can trigger byte-code aspect weaving into its <em>base plugin</em> at load-time.
293 As a result an aspect plugin can indeed adapt the behaviour of another plugin.
294 These bindings are declared using the extension point <code>aspectBindings</code> from
295 the mentioned plugin <code>org.eclipse.objectteams.otequinox</code>.</li>
296 <li>The initial client of the OT/Equinox technology is a tiny plugin which extends Eclipse's
297 "about plugins" dialog by additionally displaying which plugins are being adapted by
298 which aspect plugins. This information is found in the version column of the mentioned dialog.
299 This way a user of the OTDT can always check whether a given plugin performs as shipped,
300 or whether it has been adapted by another plugin.</li>
301 <li>The OTDT uses the capabilities of OT/Equinox for some parts of its own implementation.
302 The technology is mainly used for making the JDT-UI aware of Object Teams without having
303 to copy source code or modifying source code of the JDT-UI in place.</li>
304 <li>A new project nature <img class="inline" alt="" src="../images/newpprj_wiz.gif"/>
305 <code>Object Teams Plugin Project</code> is provided, supporting the
306 development of plugins written in OT/J.</li>
307 <li>Support for OT/Equinox is added to the run/debug dialogs for all Equinox related launches.</li>
308 <li>If desired the load-time weaver can be disabled by commenting out or removing the following
309 line from the file <code>configuration/config.ini</code>:
310 <div class="ttindent" style="font-size:small;">
311 osgi.hook.configurators.include=org.eclipse.objectteams.eclipse.transformer.hook.HookConfigurator</div>
312 Ideally, disabling OT/Equinox will be handled by temporarily uninstalling this feature,
313 but the required support by the p2 provisioning system is not yet stable enough to do this.</li>
314 </ul>
315 <p></p>
317 <div id="debugging" class="headl"><div class="headr">
318 <h1>Debugging</h1>
319 </div></div>
320 <p></p>
321 The debugger has been enhanced to support debugging of OT/J programs at the
322 source code level. It is possible to set breakpoints and step through Object Teams code.
324 <dl>
325 <dt><b>Stepping through Code</b></dt>
326 <dd>The following language features produce byte codes for which a standard Java debugger
327 is not able to display appropriate source locations:
328 <ul>
329 <li>Role files (<a href="otjld/def/s1.html#s1.2.5"><img alt="" src="../images/ot_paragraph.png"/> OTJLD &sect; 1.2.5</a>)</li>
330 <li>Implicit inheritance (<a href="otjld/def/s1.html#s1.3.1"><img alt="" src="../images/ot_paragraph.png"/> OTJLD &sect; 1.3.1</a>)</li>
331 <li>Callout bindings (<a href="otjld/def/s3.html"><img alt="" src="../images/ot_paragraph.png"/> OTJLD &sect; 3</a>)
332 (including callout override (<a href="otjld/def/s3.html#s3.1.e"><img alt="" src="../images/ot_paragraph.png"/> OTJLD &sect; 3.1(e)</a>))</li>
333 <li>Callin bindings (<a href="otjld/def/s4.html"><img alt="" src="../images/ot_paragraph.png"/> OTJLD &sect; 4</a>)</li>
334 </ul>
335 The OTDT-Debugger re-maps the byte codes produced by all this constructs to the
336 appropriate source locations.
337 As a result stepping through these sections of a program completely hides
338 the internal translations from the user.<p></p>
339 The following features are not yet fully supported by the debugger:
340 <ul>
341 <li>Role constructors (see <a href="otjld/def/s2.html#s2.4"><img alt="" src="../images/ot_paragraph.png"/> OTJLD &sect; 2.4</a>)</li>
342 <li>Parameters with declared lifting (<a href="otjld/def/s2.html#s2.3.2"><img alt="" src="../images/ot_paragraph.png"/>
343 OTJLD &sect; 2.3.2</a> &mdash; code for lifting is not filtered out yet)</li>
344 </ul></dd>
345 <dt><b>Setting Breakpoints</b></dt>
346 <dd>Use double click on ruler or context menu <code>Toggle Breakpoint</code> to set
347 breakpoints in OT/J-Code. Setting breakpoint in role files is supported, too.</dd>
348 <dt id="team_monitor"><b>New View: "Team Monitor"</b></dt>
349 <dd>The team monitor (<img src="../images/tm.gif" alt="" class="inline"/>)
350 view helps to debug issues related to team activation
351 (<a href="otjld/def/s5.html#s5"><img alt="" src="../images/ot_paragraph.png"/> OTJLD &sect; 5</a>).
352 For this purpose it displays all known team instances and shows their activation status as one of
353 <ul>
354 <li>inactive <img src="../images/team_inact.gif" alt="" class="inline"/>,</li>
355 <li>active <img src="../images/team_act.gif" alt="" class="inline"/>
356 (either globally or for the thread selected in the debug view), or</li>
357 <li>implicitly active
358 <img src="../images/team_act_implicit.gif" alt="" class="inline"/>
359 (temporarily active because the team or one of its roles is currently executing code).
360 </li></ul>
361 Also, a selected team can be (de)activated interactively via the context menu.</dd>
362 <dt id="variables_filter"><b>Filtering variables</b></dt>
363 <dd>The OT/J compiler and the loadtime weaver both add some internal variables to the code.
364 By default such internal variables are hidden within the Team Monitor as well
365 as in the standard variables view. Both views can be configured to also show these internal
366 variables if so desired.</dd>
367 <dt><b>Known Issues and Limitations</b></dt>
368 <dd><ul>
369 <li>Dynamic code evaluation is not supported yet,
370 make sure to clear the Expression view.</li>
371 <li>Hot code replacement of woven code is not supported.</li>
372 </ul></dd>
373 </dl>
375 <div id="help" class="headl"><div class="headr">
376 <h1>Help and additional Information</h1>
377 </div></div>
378 <p></p>
379 The following sources for help and for further information are bundled with the release:
380 <ul>
381 <li>A Tutorial (available via the welcome page) guiding through the first steps of using the OTDT.</li>
382 <li>Example programs demonstrating key features of Object Teams (also via the welcome page).</li>
383 <li>A detailed <a href="guide/webindex.html">guide</a> on using the OTDT via the Help Index, including a link to the
384 language definition (which is also bundled).</li>
385 <li>Problems that are listed in the problem view are linked (when possible) to a corresponding explanatory entry in the language definition.
386 (Context menu -&gt; <img alt="" src="../images/ot_paragraph.png"/><code>&nbsp;Go&nbsp;to&nbsp;Language&nbsp;Definition</code>).</li>
387 </ul>
388 <p>
389 <!--
390 <table width="100%" class="h2"><tr>
391 <td class="h2">Movies demonstrating the OTDT</td></tr>
392 </table>
394 <p>
395 As an introduction to the OTDT you may watch the following movies (requires a plugin for Shockwave Flash Media):
396 <ul>
397 <li><a href="javascript:popup_window( 'otdt/IntroductionToOTDT_viewlet_swf.html', 'IntroductionToOTDT', 1048, 816 );">Introduction to the Object Teams Development Tooling</a>
398 <li><a href="javascript:popup_window( 'otdt/OTDTbyExample_viewlet_swf.html', 'OTDTbyExample', 1048, 816 );">Introducing the Object Teams Development Tooling by Example</a>
400 <li>... more movies will follow.
401 </ul><p></p>
402 -->
403 </p>
404 </div><!-- content -->
405 </body>