blob: 2a8998dd981dc23f9ffb48333a037387add76626 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<link rel="STYLESHEET" href="http://www.eclipse.org/default_style.css" charset="ISO-8859-1" type="text/css">
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>AJDT 2.1.0 - New and Noteworthy</title>
</head>
<body>
<h1>AJDT 2.1.0 - New and Noteworthy</h1>
<table border="0" cellpadding="10" cellspacing="0" width="80%">
<tbody>
<tr>
<td valign="top"><b>Overview</b></td>
<td valign="top">In this release, we have gone further with our support for Intertype Declarations (ITDs).
Due to frameworks like <a href="http://www.springsource.org/roo">Spring Roo</a>, AspectJ and AJDT
having been growing in popularity. Spring Roo uses ITDs heavily and as such, there has been a strong push
to provide even better support for them in the IDE.
</td>
<tr>
<td colspan="2">
<hr></td>
</tr>
<tr>
<td valign="top"><b>ITD-Aware search</b></td>
<td>
AJDT now supports ITD-aware searching. There are two parts to this feature:
<ol>
<li>Standard Java search will find references to Java elements inside an ITD. For example, in this snippet of code,
a search for the references to the <code>name</code> field yields two references inside of ITDs:<br/>
<img src="img/searchInsideOfITD.gif" border="1" /><br/><br/>
</li>
<li>Now, invoking Java search on an ITD will locate all of its valid references as shown in this example:><br/>
<img src="img/searchOfITD.gif" border="1" /><br/><br/>
</li>
</ol>
For more information, see <a href="https://bugs.eclipse.org/273335">Bug 273335</a>.
</td>
</tr>
<tr>
<td colspan="2">
<hr></td>
</tr>
<tr>
<td valign="top"><b>ITD rename refactoring</b></td>
<td>
Building on top of our new support for ITD-aware searches, we now support rename refactoring of ITD fields and methods. You can invoke rename
refactoring for ITDs in the same way that you invoke rename refactoring for Java elements using keyboard commands (e.g.- CTRL-Shift-R on Windows)
or from the context menu. As much as reasonable, we follow the same conventions of JDT's rename refactoring. For example, rename an ITD and all
overriding methods will be renamed as well as the following example shows:
<ol>
<li>In the following code, notice that the <code>Person.getName()</code> is overridden in the <code>Cyborg</code>
class. This is the method that we want to rename:<br/>
<img src="img/rename1.gif" border="1" /><br/><br/>
</li>
<li>Select the method, right-click, Refactor, Rename...:<br/>
<img src="img/rename2.gif" border="1" /><br/><br/>
</li>
<li>The rename dialog pops up:<br/>
<img src="img/rename3.gif" border="1" /><br/><br/>
</li>
<li>After choosing the new name, select <em>Preview</em>:<br/>
<img src="img/rename4.gif" border="1" /><br/>
Notice how <code>Cyborg.getName()</code> is renamed along with the Person.getName() intertype declaration.<br/><br/>
</li>
<li>Finally, click OK to finish the refactoring and get the following result, with all references to <code>Person.getName()</code> renamed:<br/>
<img src="img/rename5.gif" border="1" /><br/><br/>
</li>
</ol>
The rename refactoring is hooked into Eclipse's undo facility, so that all renames, even those that span multiple files, are undoable.
For more information, see <a href="https://bugs.eclipse.org/303558">Bug 303558</a>.
</td>
</tr>
<tr>
<td colspan="2">
<hr></td>
</tr>
<tr>
<td valign="top"><b>ITD-aware renaming of getters and setters</b></td>
<td>
AJDT has added a refactoring participant to allow ITD getters and setters to be renamed when their associated field is renamed.
In order to access this functionality, the <em>Rename Getter</em> and/or <em>Rename Setter</em> check boxes must be checked
in the rename field dialog:<br/>
<img src="img/participant1.gif" border="1" /><br/><br/>
With these check boxes selected, renaming the <code>name</code> field to <code>firstName</code> in the previous example will
produce the following results:<br/>
<img src="img/participant2.gif" border="1" /><br/><br/>
</td>
</tr>
<tr>
<td colspan="2">
<hr></td>
</tr>
<tr>
<td valign="top"><b>Pull-out refactoring</b></td>
<td>
We have implemented the Pull-Out refactoring, which is the analog to the
<a href="http://contraptionsforprogramming.blogspot.com/2009/05/push-in-refactoring-for-ajdt.html">Push-In refactoring</a>.
This refactoring will pull out a Java field, method, or constructor into a target Aspect as an intertype declaration.
<br/><br/>
This refactoring can be invoked from the package explorer, Java editor, outline view, or anywhere that Java elements appear. For example:
<ol>
<li>Select the elements that you would like to pull out and invoke the refactoring wizard:<br/>
<img src="img/pullOut1.gif" border="1" /><br/><br/></li>
<li>Choose the target aspect and the appropriate options:<br/>
<img src="img/pullOut2.gif" border="1" /><br/><br/></li>
<li>Click Preview to see the proposed results (if desired):<br/>
<img src="img/pullOut3.gif" border="1" /><br/><br/></li>
</ol>
The pull out refactoring is hooked into Eclipse's undo and redo mechanism and so it
can be undone with a single command. For more information, see <a href="https://bugs.eclipse.org/277055">Bug 277055</a>.
</td>
</tr>
<tr>
<td colspan="2">
<hr></td>
</tr>
<tr>
<td valign="top"><b>Aspect-aware type renaming</b></td>
<td>
Type references inside of Aspects are now renamed when the associated type declaration is renamed.
Here, the <code>Wibble</code> aspect contains several references to <code>Target</code> inside of
its aspect elements:<br/>
<img src="img/renameType1.gif" border="1" />
<br/><br/>
When <code>Target</code> is renamed, all references in referring aspects are renamed as well:<br/>
<img src="img/renameType3.gif" border="1" />
<br/><br/>
In some circumstances, you will see a refactoring warning:<br/>
<img src="img/renameType2.gif" border="1" />
<br/><br/>
This warning occurs due to some limitations we have with searching for references inside of aspects and
it can safely be ignored.
</td>
</tr>
<tr>
<td colspan="2">
<hr></td>
</tr>
<tr>
<td valign="top"><b><code>@Test</code> and Intertype declarations</b></td>
<td>
It is now possible to run intertype declarations that are JUnit 4 tests through the
Eclipse JUnit test launcher:<br/>
<img src="img/runTest1.gif" border="1" />
<br/><br/>
Notice here that the <code>Target</code> class is empty, and it has 2 tests declared on it as ITDs.
<br/><br/>
To run these kinds of tests, simply choose the container (type, compilation unit, package, etc) that the
tests are contained in and launch:<br/>
<img src="img/runTest2.gif" border="1" />
</td>
</tr>
<tr>
<td colspan="2">
<hr></td>
</tr>
<tr>
<td valign="top"><b>AspectJ-aware PDE Build (Helios only)</b></td>
<td>
For the Helios (Eclipse 3.6) stream, AJDT now provides PDE build integration on top of
<a href="https://bugs.eclipse.org/303960">Bug 303960</a>. This means that the old AJDT-PDE
feature and wizards are superfluous and no longer exist in the 3.6 stream.
<br/><br/>
Now, plug-ins that require AspectJ can use the same PDE export wizards and headless PDE support as any other Java
plug-in. All that is required is adding two lines to your <code>build.properties</code> file
on all of your plug-ins that require AspectJ:
<pre>compilerAdapter=org.eclipse.ajdt.core.ant.AJDT_AjcCompilerAdapter
sourceFileExtensions=*.java, *.aj</pre>
For more information, see: <a href="http://contraptionsforprogramming.blogspot.com/2010/03/ajdt-pde-builds-redux.html">
AJDT-PDE builds redux</a>.
</td>
</tr>
<tr>
<td colspan="2">
<hr></td>
</tr>
<tr>
<td valign="top"><b>Modernize the build server</b></td>
<td>
We have moved the AJDT continuous integration builds to a modern Atlassian Bamboo server. From an end user's
perspective this does not mean much, except that you can browse the build processes as they occur. However,
from a developer's point of view, the build process is faster, more robust, and easier to maintain over time.
<br/><br/>
From an end-user's perspective, it is now possible to closely monitor the development releases of AJDT.
If you are interested, you can see the build server at: <a href="http://build.springframework.org/browse/AJDT">http://build.springframework.org/browse/AJDT</a>.
For more information, see <a href="https://bugs.eclipse.org/298913">Bug 298913</a>.
</td>
</tr>
<tr>
<td colspan="2">
<hr></td>
</tr>
<tr>
<td valign="top"><b>AspectJ 1.6.9</b></td>
<td>
AJDT 2.1.0 includes AspectJ 1.6.9. This release has several new features including
transparent weaving, intertype inner types, overweaving, and a reduction of class
file size. See the <a href="http://eclipse.org/aspectj/doc/released/README-169.html">readme</a> for all details.
</td>
<tr>
<td colspan="2">
<hr></td>
</tr>
<tr>
<td valign="top"><b>Bug Fixes</b></td>
<td>
See <a href="http://tinyurl.com/35h4asy">Bugzilla</a> for a list of bugs addressed in this release.
</td>
<tr>
<td colspan="2">
<hr></td>
</tr>
<tr>
<td valign="top"><b>Thanks!</b></td>
<td>
We now have a new member on the AJDT team, Kris De Volder. Kris is joining us from the University of British
Columbia, where his focus was AOP and code browsing using AOP techniques to help understand large code-bases. Kris
is the implementor of the pull out refactoring. Welcome aboard!
</td>
</tr>
<tr>
<td colspan="2">
<hr></td>
<tr>
<td valign="top"><b>Previous Releases</b></td>
<td>
See <a href="http://www.eclipse.org/ajdt/whatsnew202/index.html">here</a>
for information on the new features in AJDT 2.0.2.
</td>
</tr>
</tbody>
</table>
</body></html>