| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "../../dtd/xhtml1-strict.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> |
| <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" href="otjld/css/ot.css" type="text/css" /> |
| <link rel="stylesheet" href="otjld/css/otjld.css" type="text/css" /> |
| <title>OTDT Feature List</title> |
| <!-- special padding for the table of tests. --> |
| <style type="text/css"> |
| td,th { padding-left:15px; padding-right:15px; padding-top:2px; padding-bottom:2px; } |
| </style> |
| </head> |
| <body> |
| <div id="head"> |
| <h1>Features of the OTDT (version 2.1)</h1> |
| </div> |
| <div style="margin:10px;margin-top:100px;"> |
| <div style="margin-left:40px;padding:2px;float:left;background-color:#D0D0D0;"> |
| <div style="padding:4px;background-color:#def4fe;"> |
| The release 2.1 is based on Eclipse SDK 3.8.<br/> |
| The OTDT contains a modified version of the JDT core and several added plugins. |
| </div> |
| </div> |
| <br style="clear:both;"/><br/> |
| |
| The following components are available: |
| |
| <ul> |
| <li><a href="#compiler">Compiler</a></li> |
| <li><a href="#wizards">Wizards</a></li> |
| <li><a href="#editor">Editor</a></li> |
| <li><a href="#bindingEditor">Binding Editor</a></li> |
| <li><a href="#refactoring">Refactoring</a></li> |
| <li><a href="#structureViewers">Structure Viewers</a></li> |
| <li><a href="#Search">Search</a></li> |
| <li><a href="#execution">Execution Environment</a></li> |
| <li><a href="#otequinox">OT/Equinox</a></li> |
| <li><a href="#debugging">Debugging</a></li> |
| <li><a href="#help">Help and additional Information</a></li> |
| </ul> |
| |
| |
| <p></p> |
| |
| <div id="compiler" class="headl"><div class="headr"> |
| <h1>Compiler</h1> |
| </div></div> |
| |
| The Object Teams Compiler is an incremental compiler, based on the Eclipse Compiler for Java. |
| <dl> |
| <dt><strong>Language Definition</strong></dt> |
| <dd>The compiler implements the language as defined in the OT/J |
| <a href="otjld/def/index.html">language definition</a> version 1.3 (OTJLD). |
| The language definition has continuously been revised to precisely specify the language |
| including various corner cases and combinations of features. |
| </dd> |
| <dt><strong>Language Implementation</strong></dt> |
| <dd> |
| The compiler supports all features of OT/J according to the |
| <a href="otjld/def/index.html"><img alt="otjld" src="../images/ot_paragraph.png"/> OTJLD v1.3</a> |
| §§1-7,9. |
| Support for the join point sub-language (<a href="http://www.objectteams.org/def/0.9/joinpoints.html"><img alt="otjld" src="../images/ot_paragraph.png"/> OTJLD § 8</a>) is not included. |
| <p></p> |
| The compiler can be <strong>configured</strong> using global <code>Preferences</code> or project |
| specific <code>Properties</code>. |
| <ul> |
| <li>Configure OT/J-specific compiler diagnostics as "ignore", "warning" or "error".<br/> |
| Any warnings configured on this property sheet can also be suppressed in the |
| source code using the <code>@SuppressWarnings</code> annotation.</li> |
| <li>Scoped keywords <a href="otjld/def/sA.html#sA.0.1"><img alt="otjld" src="../images/ot_paragraph.png"/> OTJLD § A.0.1</a> can be disabled (default is enabled). |
| </li> |
| </ul> |
| </dd> |
| </dl> |
| |
| <div id="wizards" class="headl"><div class="headr"> |
| <h1>Wizards</h1> |
| </div></div> |
| <ul> |
| |
| <li>The first step to developing with Object Teams in Eclipse is creating an <img class="inline" alt="" src="../images/newprj_wiz.gif"/><code> Object Teams Project</code>. A wizard will guide you through that process. It will also add the Object Teams Runtime Environment (<tt>otre.jar</tt>) to your project's classpath. |
| </li> |
| |
| <li> |
| |
| Having done that, you can start adding classes — 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 — wizards will assist you in creating the classes properly. |
| </li> |
| </ul> |
| |
| |
| <div id="editor" class="headl"><div class="headr"> |
| <h1>Editor</h1> |
| </div></div> |
| <ul> |
| |
| <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, |
| <em>teams</em> (<img class="inline" alt="" src="../images/team_obj.gif"/>), |
| <em>roles</em> (<img class="inline" alt="" src="../images/role_obj.png"/>), |
| and <em>method bindings</em> (<img class="inline" alt="" src="../images/callinbindingbefore_obj.gif"/>, |
| <img class="inline" alt="" src="../images/callinbindingreplace_obj.gif"/>, |
| <img class="inline" alt="" src="../images/callinbindingafter_obj.gif"/>, |
| <img class="inline" alt="" src="../images/calloutbinding_obj.gif"/>).</li> |
| |
| <li>The editor highlights the Object Teams keywords like "<code class="keyword">team</code>" the same way standard Java keywords are highlighted.</li> |
| <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>. |
| The name in a <code class="keyword">team package</code> declaration lets you navigate from a role file |
| (<a href="otjld/def/s1.html#s1.2.5"><img alt="otjld" src="../images/ot_paragraph.png"/> OTJLD § 1.2.5</a>) to its enclosing team.</li> |
| |
| <li>Classes to which one or more roles are bound using <code class="keyword">playedBy</code> are |
| annotated with a marker (<img class="inline" alt="" src="../images/playedBy_obj.gif"/>), |
| that allows navigating to the role declaration(s). |
| Similarly, methods in a base class that are bound with a <em>callin binding</em> are |
| annotated with a marker (<img class="inline" alt="" src="../images/callinbinding_obj.gif"/>), |
| that allows navigating to the method binding declaration(s). |
| |
| <br/> |
| 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> |
| |
| <li>Semantic highlighting (checkbox "mark occurrences") is fully supported.</li> |
| <li>Code completion (Ctrl-space) is widely supported. It is, e.g., possible to use completion in order to create a callout binding.</li> |
| <li>Content assist provides quick-fixes (Ctrl-1) for a number of OT/J specific errors and warnings. |
| Also a few templates for specific OT/J language constructs — |
| namely <code>with{}</code> and <code>within (<em>Expression</em>){}</code> — are available.</li> |
| </ul> |
| |
| <div id="bindingEditor" class="headl"><div class="headr"> |
| <h1>Binding Editor</h1> |
| </div></div> |
| <ul> |
| <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 |
| (roles) and functionality (methods) from its super-team, and its main purpose is to bind |
| the inherited structure and functionality using <code class="keyword">playedBy</code> |
| declarations and callin/callout method bindings.</li> |
| <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> |
| <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. |
| <ul> |
| <li>Only appropriate binding kinds are selectable in the corresponding context (callin or callout).</li> |
| <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> |
| </ul> |
| </li> |
| <li>Parameter and result mappings are definable by typing in an expression in the corresponding text field of the parameter mapping configuration tab.</li> |
| </ul> |
| 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"/> Open Binding Editor</code>). |
| <p></p> |
| <div id="refactoring" class="headl"><div class="headr"> |
| <h1>Refactoring</h1> |
| </div></div> |
| <p></p> |
| Significant work has been put into supporting the automated refactoring of OT/J code. |
| The following refactorings take into account the Object Teams-specific |
| relationships (implicit role inheritance, team nesting, role-base bindings and method |
| bindings). |
| <ul> |
| <li><b>Extract Method</b></li> |
| <li><b>Move Method</b></li> |
| <li><b>Pull Up</b> applicable to method or field</li> |
| <li><b>Push Down</b> applicable to method or field</li> |
| <li><b>Rename</b> applicable to: project, source folder, package, type, method, field.<br/> |
| <i>When trying to rename a team package you'll be asked to rename the team class instead.</i></li> |
| </ul> |
| Additionally, specific refactorings for OT/J are being developed. Currently these are implemented: |
| <ul> |
| <li><b>Extract Callin</b></li> |
| <li><b>Inline Callin</b></li> |
| </ul> |
| <p></p> |
| |
| |
| <div id="structureViewers" class="headl"><div class="headr"> |
| <h1>Structure Viewers</h1> |
| </div></div> |
| <dl> |
| <dt><strong>The Package Explorer</strong></dt> |
| <dd> |
| <ul> |
| <li> |
| 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.) |
| </li> |
| <li> |
| 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. |
| </li> |
| <li> |
| By opening the tree-branches, you can peek at the structure of e.g. classes. |
| </li> |
| <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 § 1.2.5</a>):<br/> |
| Role files are separate files and can be shown either |
| <em>physically</em> (<img class="inline" alt="" src="../images/team_package.gif"/>) as (separate) files in the team package or |
| <em>logically</em> (<img class="inline" alt="" src="../images/external_roles.gif"/>) as member types of the enclosing team. |
| </li> |
| <li> |
| 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. |
| </li> |
| </ul></dd> |
| <dt><strong>The Hierarchy View</strong></dt> |
| <dd><ul> |
| <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. |
| </li> |
| <li> |
| The new implicit inheritance has been integrated completely into the standard JDT |
| <em>Hierarchy View</em>. |
| </li> |
| </ul></dd> |
| </dl> |
| |
| |
| <div id="search" class="headl"><div class="headr"> |
| <h1>Search</h1> |
| </div></div> |
| <p></p> |
| <dl> |
| <dt><strong>Search references</strong></dt> |
| <dd><ul><li>The Java Search functionality has been extended to include search results of |
| Object Teams code, that is, callin and callout bindings, and |
| playedBy-relationships.</li></ul></dd> |
| <dt><strong>Call hierarchy</strong></dt> |
| <dd><ul><li>Also the call hierarchy has been extended for browsing control flows passing |
| through method bindings (callin and callout).</li> |
| <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> |
| </ul> |
| </dd> |
| </dl> |
| <p></p> |
| |
| <div id="execution" class="headl"><div class="headr"> |
| <h1>Execution Environment</h1> |
| </div></div> |
| <dl> |
| <dt><strong>Aspect weaving</strong></dt><dd> |
| <ul><li> |
| 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. |
| </li> |
| <li> |
| 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. |
| </li> |
| <li> |
| All this is handled transparently using the standard Eclipse "Run" feature. |
| Running any main class of an Object Teams project automatically includes |
| the OTRE (This feature has been <a href="new_in_1.3.html#launch">changed in the OTDT 1.2.2</a>). |
| </li> |
| </ul></dd> |
| <dt><strong>Aspect deployment/activation</strong></dt> |
| <dd><ul> |
| <li>A new "Team Activation" tab in the "Run-Configuration" allows to instantiate and activate teams without modifying the program's source code. |
| </li> |
| <li> |
| Teams that cause aspect code to be woven into an application can be added to a program |
| <ul> |
| <li> by explicit reference within the program source code or</li> |
| <li> by a configuration file which is mentioned as a parameter to the VM or</li> |
| <li> by adding them via the aforementioned "Team Activation" tab.</li> |
| </ul> |
| No such configuration is needed for compilation. |
| </li> |
| </ul> |
| </dd> |
| <dt><strong>Technology used</strong></dt> |
| <dd><ul> |
| <li id="JPLIS">Integrating the weaver into the JVM leverages the Java-agent concept of Java 5 |
| (<a href="http://java.sun.com/developer/technicalArticles/releases/j2se15/index.html">JPLIS</a>). |
| (<i>The original implementation using the JMangler framework is no longer maintained</i>).<br/> |
| In the future this integration will support aspect weaving not only at load time |
| but also while an application is running. |
| </li> |
| </ul></dd> |
| </dl> |
| <p></p> |
| |
| <div id="otequinox" class="headl"><div class="headr"> |
| <h1>OT/Equinox</h1> |
| </div></div> |
| <p></p> |
| Starting with the OTDT version 0.9.9 (2006) it is possible to develop Eclipse plugins using |
| OT/J as the implementation language. |
| <ul> |
| <li>Using the plugin <code>org.eclipse.objectteams.otequinox</code>, a plugin ("aspect plugin") |
| may declare that it adapts classes from a specified other plugin ("base plugin").</li> |
| <li>By an integration of the Object Teams Runtime Environment with hooks in the |
| Equinox implementation a <code class="keyword">team</code> class from an <em>aspect plugin</em> |
| can trigger byte-code aspect weaving into its <em>base plugin</em> at load-time. |
| As a result an aspect plugin can indeed adapt the behaviour of another plugin. |
| These bindings are declared using the extension point <code>aspectBindings</code> from |
| the mentioned plugin <code>org.eclipse.objectteams.otequinox</code>.</li> |
| <li>The initial client of the OT/Equinox technology is a tiny plugin which extends Eclipse's |
| "about plugins" dialog by additionally displaying which plugins are being adapted by |
| which aspect plugins. This information is found in the version column of the mentioned dialog. |
| This way a user of the OTDT can always check whether a given plugin performs as shipped, |
| or whether it has been adapted by another plugin.</li> |
| <li>The OTDT uses the capabilities of OT/Equinox for its own implementation. |
| The technology is mainly used for making the JDT-UI aware of Object Teams without having |
| to copy source code or modifying source code of the JDT-UI in place.</li> |
| <li>A new project nature <img class="inline" alt="" src="../images/newpprj_wiz.gif"/> |
| <code>Object Teams Plugin Project</code> is provided, supporting the |
| development of plugins written in OT/J.</li> |
| <li>Support for OT/Equinox is added to the run/debug dialogs for all Equinox related launches.</li> |
| <li>If desired the load-time weaver can be disabled by commenting out or removing the following |
| line from the file <code>configuration/config.ini</code>: |
| <div class="ttindent" style="font-size:small;"> |
| osgi.hook.configurators.include=org.eclipse.objectteams.otequinox.hook.HookConfigurator</div> |
| Ideally, disabling OT/Equinox will be handled by temporarily uninstalling this feature, |
| but the required support by the p2 provisioning system is not yet stable enough to do this.</li> |
| </ul> |
| <p></p> |
| |
| <div id="debugging" class="headl"><div class="headr"> |
| <h1>Debugging</h1> |
| </div></div> |
| <p></p> |
| The debugger has been enhanced to support debugging of OT/J programs at the |
| source code level. It is possible to set breakpoints and step through Object Teams code. |
| |
| <dl> |
| <dt><b>Stepping through Code</b></dt> |
| <dd>The following language features produce byte codes for which a standard Java debugger |
| is not able to display appropriate source locations: |
| <ul> |
| <li>Role files (<a href="otjld/def/s1.html#s1.2.5"><img alt="" src="../images/ot_paragraph.png"/> OTJLD § 1.2.5</a>)</li> |
| <li>Implicit inheritance (<a href="otjld/def/s1.html#s1.3.1"><img alt="" src="../images/ot_paragraph.png"/> OTJLD § 1.3.1</a>)</li> |
| <li>Callout bindings (<a href="otjld/def/s3.html"><img alt="" src="../images/ot_paragraph.png"/> OTJLD § 3</a>) |
| (including callout override (<a href="otjld/def/s3.html#s3.1.e"><img alt="" src="../images/ot_paragraph.png"/> OTJLD § 3.1(e)</a>))</li> |
| <li>Callin bindings (<a href="otjld/def/s4.html"><img alt="" src="../images/ot_paragraph.png"/> OTJLD § 4</a>)</li> |
| </ul> |
| The OTDT-Debugger re-maps the byte codes produced by all this constructs to the |
| appropriate source locations. |
| As a result stepping through these sections of a program completely hides |
| the internal translations from the user.<p></p> |
| The following features are not yet fully supported by the debugger: |
| <ul> |
| <li>Role constructors (see <a href="otjld/def/s2.html#s2.4"><img alt="" src="../images/ot_paragraph.png"/> OTJLD § 2.4</a>)</li> |
| <li>Parameters with declared lifting (<a href="otjld/def/s2.html#s2.3.2"><img alt="" src="../images/ot_paragraph.png"/> |
| OTJLD § 2.3.2</a> — code for lifting is not filtered out yet)</li> |
| </ul></dd> |
| <dt><b>Setting Breakpoints</b></dt> |
| <dd>Use double click on ruler or context menu <code>Toggle Breakpoint</code> to set |
| breakpoints in OT/J-Code. Setting breakpoint in role files is supported, too.</dd> |
| <dt id="team_monitor"><b>New View: "Team Monitor"</b></dt> |
| <dd>The team monitor (<img src="../images/tm.gif" alt="" class="inline"/>) |
| view helps to debug issues related to team activation |
| (<a href="otjld/def/s5.html#s5"><img alt="" src="../images/ot_paragraph.png"/> OTJLD § 5</a>). |
| For this purpose it displays all known team instances and shows their activation status as one of |
| <ul> |
| <li>inactive <img src="../images/team_inact.gif" alt="" class="inline"/>,</li> |
| <li>active <img src="../images/team_act.gif" alt="" class="inline"/> |
| (either globally or for the thread selected in the debug view), or</li> |
| <li>implicitly active |
| <img src="../images/team_act_implicit.gif" alt="" class="inline"/> |
| (temporarily active because the team or one of its roles is currently executing code). |
| </li></ul> |
| Also, a selected team can be (de)activated interactively via the context menu.</dd> |
| <dt id="variables_filter"><b>Filtering variables</b></dt> |
| <dd>The OT/J compiler and the loadtime weaver both add some internal variables to the code. |
| By default such internal variables are hidden within the Team Monitor as well |
| as in the standard variables view. Both views can be configured to also show these internal |
| variables if so desired.</dd> |
| <dt><b>Known Issues and Limitations</b></dt> |
| <dd><ul> |
| <li>Dynamic code evaluation is not supported yet, |
| make sure to clear the Expression view.</li> |
| <li>Hot code replacement of woven code is not supported.</li> |
| </ul></dd> |
| </dl> |
| |
| <div id="help" class="headl"><div class="headr"> |
| <h1>Help and additional Information</h1> |
| </div></div> |
| <p></p> |
| The following sources for help and for further information are bundled with the release: |
| <ul> |
| <li>A Tutorial (available via the welcome page) guiding through the first steps of using the OTDT.</li> |
| <li>Example programs demonstrating key features of Object Teams (also via the welcome page).</li> |
| <li>A detailed <a href="guide/webindex.html">guide</a> on using the OTDT via the Help Index, including a link to the |
| language definition (which is also bundled).</li> |
| <li>Problems that are listed in the problem view are linked (when possible) to a corresponding explanatory entry in the language definition. |
| (Context menu -> <img alt="" src="../images/ot_paragraph.png"/><code> Go to Language Definition</code>).</li> |
| </ul> |
| </div><!-- content --> |
| </body> |
| </html> |