blob: c8389aafac50d6d3c2906c699747cd9128306fa1 [file] [log] [blame]
<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/"); require_once($_SERVER['DOCUMENT_ROOT'] . "/"); require_once($_SERVER['DOCUMENT_ROOT'] . "/"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon()); # All on the same line to unclutter the user's desktop'
* Copyright (c) 2010, 2012
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* Contributors:
* Stephan Herrmann
$pageTitle = "Object Teams - Features of the OTDT";
$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/objectteams/css/style.css"/>');
$html = <<<EOHTML
<div id="widecolumn">
<div style="position:relative;top:0px;left:0px;"> <!-- parent for absolute-positioned contentbox -->
The release 2.4 is based on Eclipse SDK 4.5.
The OTDT contains a modified version of the JDT core<br/>
and several added plugins.
<div style="margin-top:30px;">
<span style="text-decoration:underline;">See also:</span>
<div class="indent">
<a href=""><img alt=">>" src="images/arrow-right-trans.png"/>The OTDT user guide </a><br/>
(this is also bundled with the OTDT as <a href="#help">online help</a>)
<div id="contentbox">
<div id="contentinner">
<ul style="margin-top:2px;margin-bottom:0px;">
<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>
<h2 id="compiler" style="margin-top:150px;">Compiler</h2>
The Object Teams Compiler is an incremental compiler, based on the Eclipse Compiler for Java.
<dt><strong>Language Definition</strong></dt>
<dd>The compiler implements the language as defined in the OT/J
<a href="" target=_blank>language definition</a> version 1.3.1 (OTJLD).
The language definition has continuously been revised to precisely specify the language
including various corner cases and combinations of features.
<dt><strong>Language Implementation</strong></dt>
The compiler supports all features of OT/J according to the
<a href="" target=_blank><img alt="otjld" src="images/otdt/ot_paragraph.png"/> OTJLD v1.3.1</a>
Support for the join point sub-language (<a href="" target=_blank><img alt="otjld" src="images/otdt/ot_paragraph.png"/> OTJLD &#167; 8</a>) is not included.
The compiler can be <strong>configured</strong> using global <code>Preferences</code> or project
specific <code>Properties</code>.
<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="" target=_blank><img alt="otjld" src="images/otdt/ot_paragraph.png"/> OTJLD &#167; A.0.1</a> can be disabled (default is enabled).
<!--dt><strong>Status of the Compiler</strong></dt>
The OTDT is continuously tested using two growing test suites:
<table class="default">
<tr><th>Name</th><th>Software under Test</th><th>Kind</th><th>Number of tests</th></tr>
<tr class="z1"><td><b>Jacks</b></td><td>compiler and runtime environment</td><td>black box</td><td> &gt;2000 (test programs)</td></tr>
<tr class="z2"><td><b>JUnit</b></td><td>all of the OTDT</td> <td>white box</td><td> &gt;40000 tests.</td> </tr>
Feel free to have a look at the <a href="otdt.html#testresults">test status</a> and remaining <a href="">known problems</a>.
<h2 id="wizards">Wizards</h2>
<li>The first step to developing with Object Teams in Eclipse is creating an
<img class="inline" alt="" src="images/otdt/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 Runtime Environment (<tt>otre.jar</tt>) to your project's classpath.
Having done that, you can start adding classes &mdash; be it regular classes,
or <img class="inline" alt="" src="images/otdt/team_obj.gif"/> team
or <img class="inline" alt="" src="images/otdt/role_obj.png"/> role classes &mdash;
wizards will assist you in creating the classes properly.
<h2 id="editor">Editor</h2>
<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/otdt/team_obj.gif"/>),
<em>roles</em> (<img class="inline" alt="" src="images/otdt/role_obj.png"/>),
and <em>method bindings</em> (<img class="inline" alt="" src="images/otdt/callinbindingbefore_obj.gif"/>,
<img class="inline" alt="" src="images/otdt/callinbindingreplace_obj.gif"/>,
<img class="inline" alt="" src="images/otdt/callinbindingafter_obj.gif"/>,
<img class="inline" alt="" src="images/otdt/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="" target=_blank><img alt="otjld" src="images/otdt/ot_paragraph.png"/> OTJLD &#167; 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/otdt/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/otdt/callinbinding_obj.gif"/>),
that allows navigating to the method binding declaration(s).
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 &mdash;
namely <code>with{}</code> and <code>within (<em>Expression</em>){}</code> &mdash; are available.</li>
<h2 id="bindingEditor">Binding Editor</h2>
<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.
<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>
<li>Parameter and result mappings are definable by typing in an expression in the corresponding text field of the parameter mapping configuration tab.</li>
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/otdt/calloutbinding_obj.gif"/>&nbsp;Open&nbsp;Binding&nbsp;Editor</code>).
<h2 id="refactoring">Refactoring</h2>
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
<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>
Additionally, specific refactorings for OT/J are being developed. Currently these are implemented:
<li><b>Extract Callin</b></li>
<li><b>Inline Callin</b></li>
<li><b>Move to Role File</b></li>
<h2 id="structureViewers">Structure Viewers</h2>
<dt><strong>The Package Explorer</strong></dt>
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/otdt/team_obj.gif"/> for teams and <img class="inline" alt="" src="images/otdt/role_obj.png"/> for roles). (The same icons are used throughout the IDE, whenever a team or role is visible.)
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.
By opening the tree-branches, you can peek at the structure of e.g. classes.
<li>For team classes, there is special support for <b>role files</b> (<a href="" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 1.2.5</a>):<br/>
Role files are separate files and can be shown either
<em>physically</em> (<img class="inline" alt="" src="images/otdt/team_package.gif"/>) as (separate) files in the team package or
<em>logically</em> (<img class="inline" alt="" src="images/otdt/external_roles.gif"/>) as member types of the enclosing team.
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.
<dt><strong>The Hierarchy View</strong></dt>
<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.
The new implicit inheritance has been integrated completely into the standard JDT
<em>Hierarchy View</em>.
<dt><strong>Java Structure Compare</strong></dt>
<li>When comparing versions of an OT/J file, the Java Structure Compare will correctly render
Object Teams elements, too.</li>
<li>When selecting a callin replace binding, an action "Compare With &gt; Bound Base Method" is available via the context menu,
which easily let's you compare the method implementations of role and base.</li>
<h2 id="Search">Search</h2>
<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
<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>
<li>OT/J constructs that may cause role creation due to lifting are considered by the call hierarchy as calling the role's lifting constructor.</li>
<h2 id="execution">Execution Environment</h2>
<dt><strong>Aspect weaving</strong></dt><dd>
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.
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 hooks into the class-loading process.
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>).
<dt id="weaving_scheme"><strong>Weaving schemes</strong></dt>
<li>Since version 2.3, the OTDT ships with two distinct weavers with the properties mentioned below.
Since the OT/J compiler performs some preparation for the respective weaver,
it has to generate different byte code formats, depending on the targeted weaving scheme.
As a result, switching from one weaving scheme to the other requires a full recompilation of all OT/J code involved.
<li><strong>OTRE</strong>: This is the traditional <strong>load-time</strong> weaver.
This weaver has <strong>matured</strong> over many years,
but unfortunately, the underlying library <strong>BCEL</strong> is no longer maintained
and thus cannot handle class files from recent Java versions.
Up-to Java 7 this could be worked around,
but Java 8 class files contain several elements that this BCEL-based weaver cannot handle.</li>
The newer Object Teams Dynamic Runtime Environment has been developed to enable even <strong>runtime weaving</strong>.
To work around limitations of the JVM this weaver has to insert a few general hooks into every weavable class.
This weaver is also interesting for weaving into <strong>Java 8</strong> class files,
as it is based on the library <strong>ASM</strong>, for which a Java-8-enabled version already exists.
It should be noted, however, that the OTDRE is not as mature as the OTRE,
both in terms of complete coverage of all combinations of language features
as well as in terms of performance measurement (we simply have no large-scale experience with the OTDRE, yet).</li>
<dt><strong>Aspect deployment/activation</strong></dt>
<li>A new "Team Activation" tab in the "Run-Configuration" allows to instantiate and activate teams without modifying the program's source code.
Teams that cause aspect code to be woven into an application can be added to a program
<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>
No such configuration is needed for compilation.
<dt><strong>Technology used</strong></dt>
<li id="JPLIS">Integrating the weaver into the JVM leverages the Java-agent concept of Java 5
(<a href="">JPLIS</a>).
(<i>The original implementation using the JMangler framework is no longer maintained</i>).<br/>
<h2 id="otequinox">OT/Equinox</h2>
Starting with the OTDT version 0.9.9 (2006) it is possible to develop Eclipse plugins using
OT/J as the implementation language.
<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/otdt/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 adding the following
line to the file <code>eclipse.ini</code> after a <code>-vmargs</code> line:
<div class="ttindent">-Dot.equinox=false</div>.</li>
<h2 id="debugging">Debugging</h2>
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.
<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:
<li>Role files (<a href="" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 1.2.5</a>)</li>
<li>Implicit inheritance (<a href="" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 1.3.1</a>)</li>
<li>Callout bindings (<a href="" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 3</a>)
(including callout override (<a href="" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 3.1(e)</a>))</li>
<li>Callin bindings (<a href="" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 4</a>)</li>
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:
<li>Role constructors (see <a href="" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 2.4</a>)</li>
<li>Parameters with declared lifting (<a href="" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/>
OTJLD &sect; 2.3.2</a> &mdash; code for lifting is not filtered out yet)</li>
<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/otdt/tm.gif" alt="" class="inline"/>)
view helps to debug issues related to team activation
(<a href="" target=_blank><img alt="" src="images/otdt/ot_paragraph.png"/> OTJLD &sect; 5</a>).
For this purpose it displays all known team instances and shows their activation status as one of
<li>inactive <img src="images/otdt/team_inact.gif" alt="" class="inline"/>,</li>
<li>active <img src="images/otdt/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/otdt/team_act_implicit.gif" alt="" class="inline"/>
(temporarily active because the team or one of its roles is currently executing code).
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>
<li>Dynamic code evaluation is not supported yet,
make sure to clear the Expression view.</li>
<h2 id="help">Help and additional Information</h2>
The following sources for help and for further information are bundled with the release:
<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</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 -&gt; <img alt="" src="images/otdt/ot_paragraph.png"/><code>&nbsp;Go&nbsp;to&nbsp;Language&nbsp;Definition</code>).</li>
</div> <!-- parent for absolute-positioned contentbox -->
</div> <!-- witecolumn -->
# Generate the web page
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);