| <!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.0.0 - New and Noteworthy</title> |
| |
| </head> |
| <body> |
| <h1>AJDT 2.0.0 - New and Noteworthy</h1> |
| |
| <table border="0" cellpadding="10" cellspacing="0" width="80%"> |
| <tbody> |
| <tr> |
| <td valign="top"><b>Overview<br>and new versioning scheme</b></td> |
| <td valign="top"> |
| <b>Today, we introduce AJDT 2.0.</b> Over the past year, there have been many changes to this project. |
| Some have been functional: better intertype declaration support, Java search support for Aspects, Aspect-aware reconciling, etc. |
| Some have been non-functional: faster and more robust incremental builds, better inter-project dependency analysis. Some have been |
| structural and API: a new, more compact, and incrementally updated crosscutting model. Some have been fundamental: using AspectJ to weave |
| into JDT to provide better Eclipse integration. |
| <br> |
| <br> |
| All these changes so far have been crammed into 1.6 maintenance releases due to |
| the tradition of pegging AJDT minor versions (e.g., <em>1.6</em>) to Eclipse minor versions (e.g., <em>3.4</em>). We now believe that |
| this tradition has outlived its usefulness and is proving to be more confusing than helpful for users. For the current and future |
| releases of AJDT, we have decided to move towards a more common use of versioning based on feature and API changes. |
| <br> |
| <br> |
| From now on, changes to the micro part of the version number will indicate only trivial functionality changes and bug fixes. |
| Changes to the minor part of version number will indicate that no major functionality or API has been introduced or changed. |
| And changes to the major part of the version number will indicate that the new version has some significant enhancements |
| in it. |
| <br> |
| <br> |
| AJDT releases targeting different Eclipse versions will use the same <code>major.minor.micro</code> scheme, but |
| there will be a noticeable difference in the qualifier. For example: |
| <table> |
| <tr> |
| <td>Release for AJDT targeting Eclipse 3.5:</td><td>2.0.0_e35x2009XXXXXX</td> |
| </tr> |
| <tr> |
| <td>Release for AJDT targeting Eclipse 3.4:</td><td>2.0.0_e34x2009XXXXXX</td> |
| </tr> |
| </table> |
| |
| For the first 6 months after a new release of Eclipse, we will be releasing maintenance versions of AJDT |
| targeting the previous versino of Eclipse. And after that we will only do so if there is a major bug found |
| or if there is significant community desire to do so. Also, around this time, we will start to produce |
| development builds targeting the next version of Eclipse (e.g., <em>e36x</em>) |
| <br> |
| <br> |
| So this means that AJDT 1.6.5 has been renamed AJDT 2.0.0_e34x and AJDT 1.7.0 has been renamed AJDT 2.0.0_e35x. Although this is |
| potentially confusing in the short term, we believe in the long term, this will be more informative and users will be able to |
| read the version and immediately know which Eclipse version it targets and also what feature level it contains. |
| <br> |
| <br> |
| With that important bit of information explained, below are the bug fixes and new features introduced in the 2.0 release since AJDT 1.6.4. |
| </td> |
| |
| <tr> |
| <td colspan="2"> |
| <hr></td> |
| </tr> |
| <tr> |
| <td valign="top"><b>ITD Hovers and Hyperlinking</b></td> |
| <td> |
| AJDT now supports ITD-aware text hovers and hyperlinking.<br/><br/> |
| |
| Hovering over a method that is declared as an ITD will display the JavaDoc of that method:<br/> |
| <img src="itd_hover.gif" border="1"/><br/><br/> |
| |
| Similarly, pressing <strong>F3</strong> or <strong>CTRL-Click</strong> on an identifier that is declared as an ITD |
| will navigate to the ITD's declaration:<br/> |
| <table><tr valign="center"> |
| <td><img src="itd_opendecl_source.gif" border="1"/></td><td><img src="arrow.gif"/></td><td><img src="itd_opendecl_dest.gif" border="1"/></td> |
| </tr></table> |
| <br/><br/> |
| For more information, see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273334">Bug 273334</a>. |
| <br/><br/> |
| Note, like all other ITD awareness support, a successful build since the last restart of the workspace is required. |
| </td> |
| |
| <tr> |
| <td colspan="2"> |
| <hr></td> |
| </tr> |
| <tr> |
| <td valign="top"><b>Push-In refactoring</b></td> |
| <td> |
| In AJDT 2.0, we have introduced the new <em>Push-In</em> refactoring. <br/><br/> |
| |
| Essentially, the refactoring <em>pushes</em> intertype declarations into their target types. |
| So, when a push in refactoring is applied to the following aspect and class: |
| <br><br><pre><br>aspect Foo {<br> int Bar.x;<br> declare parents : Bar implements I;<br> declare @type : Bar : @Baz;<br>}<br><br>class Bar { }<br></pre><br><br> |
| the result is: |
| <br><br><pre><br>@Baz<br> class Bar implements I {<br> int x;<br>}<br></pre> |
| The Foo aspect is deleted because it is empty.<br/><br/> |
| |
| This refactoring is available from the package explorer, the outline view, and wherever else Java elements appear in a hierarchy. |
| To use, select the ITDs or set of ITDs that you want to push in. You can select an entire project, source folder, or package to |
| push all of its ITDs into the target types: |
| <br> |
| <img src="push_in.jpg" border="1"/><br><br> |
| |
| See <a href="http://contraptionsforprogramming.blogspot.com/2009/05/push-in-refactoring-for-ajdt.html">AJDT's blog</a> for a detailed explanation of the refactoring. |
| </td> |
| </tr> |
| |
| <tr> |
| <td colspan="2"> |
| <hr></td></tr> |
| <tr> |
| <td valign="top"><b>Crosscutting support for ITDs on the inpath</b></td> |
| <td> |
| AJDT now shows ITD and declare parents relationships that are targeting elements on the inpath. For example, |
| below are a simple aspect and a simple class that is on the inpath. The inpath relationships now appear |
| in the gutter marker and in the X Refs view (<em>C</em> is a class that is on the inpath). |
| <br/> |
| <br/> |
| <img src="inpath_rels.gif" border="1"/> |
| <br/> |
| <br/> |
| Note that we do not support displaying advice relationships on the inpath, nor do we show the inverse relationship |
| on the inpath. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273086">Bug 273086</a> and |
| <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273087">Bug 273087</a> respectively. |
| |
| <p>More information can be found in <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=271269">Bug 271269</a>.</p> |
| </td> |
| </tr> |
| |
| <tr> |
| <td colspan="2"> |
| <hr></td></tr> |
| <tr> |
| <td valign="top"><b>Linked source folders</b></td> |
| <td> |
| AJDT now supports linked source folders. In the image below, you can see that crosscutting relationships |
| can apply across linked folders. Here, the <em>fromMyDesktop</em> folder is a linked source folder |
| to the file system directory <em>/Users/andrew/Desktop/link</em>. |
| <br/> |
| <br/> |
| <img src="linked.gif" border="1"/> |
| <br/> |
| <br/> |
| Note that we typically recommend using linked source folders instead of inpath relationships where |
| possible. The reason is that the AspectJ compiler can perform better incremental analysis on linked |
| folders than it can with inpath folders. This is because linked folders are considered part of the |
| source of project and the compiler stores more specific state on these kinds of folders. |
| <br/> |
| <br/> |
| More information can be found in <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=253555">Bug 253555</a> |
| and <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=253555">Bug 275903</a>. |
| </td> |
| </tr> |
| |
| <tr> |
| <td colspan="2"> |
| <hr></td></tr> |
| <tr> |
| <td valign="top"><b>AJDT Event Trace enhancements</b></td> |
| <td> |
| |
| It is now possible to print the hierarchies and relationship maps of all projects |
| in the workspace into the event trace view. This information can be accessed by clicking on the this button |
| in the AJDT Event Trace view:<br> |
| <img src="event_trace.gif" border="1"/><br> |
| in the AJDT Event Trace view. |
| <br/> |
| <br/> |
| For example, the hierarchy and relationship map for the <em>DeclareParents on Inpath</em> project displayed above is: |
| |
| <pre> |
| 9:2:18 Printing crosscutting model for all AspectJ projects in the workspace |
| 9:2:18 |
| 9:2:18 -------------------------------------- |
| 9:2:18 Printing crosscutting model for DeclareParents on Inpath |
| 9:2:18 |
| Hierarchy: |
| =DeclareParents on Inpath/src |
| =DeclareParents on Inpath/src< |
| =DeclareParents on Inpath/src<*A.aj |
| =DeclareParents on Inpath/src<*A.aj# |
| =DeclareParents on Inpath/src<*A.aj}A |
| =DeclareParents on Inpath/src<*A.aj}A[E |
| =DeclareParents on Inpath/src<*A.aj}A`declare parents |
| =DeclareParents on Inpath/src<*A.aj}A)C.x |
| |
| Relationship map: |
| =DeclareParents on Inpath/src<*A.aj}A)C.x :: |
| =DeclareParents on Inpath/src<*A.aj}A)C.x --declared on--> [=DeclareParents on Inpath/,<(C.class[C] |
| =DeclareParents on Inpath/,<(C.class[C :: |
| =DeclareParents on Inpath/,<(C.class[C --aspect declarations--> |
| [=DeclareParents on Inpath/binaries<*AnotherAspect.aj}AnotherAspect`declare parents, |
| =DeclareParents on Inpath/src<*A.aj}A`declare parents, =DeclareParents on Inpath/src<*A.aj}A)C.x] |
| =DeclareParents on Inpath/src<*A.aj}A`declare parents :: |
| =DeclareParents on Inpath/src<*A.aj}A`declare parents --declared on--> [=DeclareParents on Inpath/,<(C.class[C] |
| |
| 9:2:18 -------------------------------------- |
| </pre> |
| |
| The information spit out here corresponds to internal <em>handles</em> used by AspectJ and AJDT to |
| describe the crosscutting relationships in a project. These handles correspond to program elements |
| that represent things like advice declarations, method declarations, source folders, etc. |
| Although this feature is meant for diagnostic purposes, |
| it can be used to introspect your project and help you understand a little more about AJDT and AspectJ internals. |
| <b>Warning:</b> the crosscutting model can be large and dump significant amount of text to the Event Trace view. |
| <br/> |
| <br/> |
| More information can be found in <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=271668">Bug 271668</a> |
| </td> |
| </tr> |
| |
| <tr> |
| <td colspan="2"> |
| <hr></td></tr> |
| <tr> |
| <td valign="top"><b>Better support for AJDT and Maven</b></td> |
| <td> |
| In the past, users of Maven and AJDT who are not using the m2eclipse |
| maven integration plugin for Eclipse could not specify Aspect path elements |
| through the pom.xml. Additionally, the projects would often be erroneously |
| configured with the an extra <em>javaBuilder</em>. |
| |
| AJDT 2.0.0 now addresses both of these issues in a generic way. To specify aspects libraries to go |
| on the aspect path from within a pom.xml, add the following: |
| |
| <pre> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-eclipse-plugin</artifactId> |
| <version>2.5.1</version> |
| <configuration> |
| <additionalBuildcommands> |
| <buildCommand> |
| <name>org.eclipse.ajdt.core.ajbuilder</name> |
| <arguments> |
| <aspectPath>org.springframework.aspects,org.springframework.aop</aspectPath> |
| </arguments> |
| </buildCommand> |
| </additionalBuildcommands> |
| <additionalProjectnatures> |
| <projectnature>org.eclipse.ajdt.ui.ajnature</projectnature> |
| </additionalProjectnatures> |
| </configuration> |
| </plugin> |
| </pre> |
| |
| Inside the <em>arguments</em> element, specify a comma separated list of <em>aspectPath</em> elements. The |
| builder then looks for any jar file or binary folder on the raw classpath that contains the specified string. So, |
| the above would add any of <em>org.springframework.aspects_2.5.1.jar</em>, <em>org.springframework.aspects_3.0.0.jar</em>, |
| or <em>org.springframework.aop_2.5.1.jar</em> onto the aspect path of the project if the jar files already |
| exist on the classpath. |
| <br/> |
| <br/> |
| <b>Note the use of version 2.5.1.</b> Unfortunately, version 2.6 of the Maven-Eclipse-Plugin <a href=http://jira.codehaus.org/browse/MECLIPSE-538"> |
| does not support AJDT</a>. Version 2.7 should fix this problem. |
| <br/> |
| <br/> |
| More information can be found in <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270552">Bug 270552</a>, |
| <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270554">Bug 270554</a>, |
| and <a href=http://jira.codehaus.org/browse/MECLIPSE-538">MECLIPSE-538</a>. |
| </td> |
| </tr> |
| |
| <tr> |
| <td colspan="2"> |
| <hr></td></tr> |
| <tr> |
| <td valign="top"><b>Scoping for ITDs in content assist</b></td> |
| <td> |
| Intertype declarations will now only appear in content assist if they are properly accessible in the current |
| scope. For example, the following two editors show a <em>Point</em> class and an aspect that |
| inserts ITDs into it. In this first image, you can see that the content assist in the <em>PointSetters</em> aspect |
| correctly shows the <em>logger</em> field, which is private to <em>PointSetters</em>: |
| <br/> |
| <br/> |
| <img src="content_assist1.gif" border="1" /> |
| <br/> |
| <br/> |
| In this second image, the content assist inside of <em>Point</em> does not show the <em>logger</em> field, but still shows |
| the <em>getX</em> and <em>getY</em> methods. |
| <br/> |
| <br/> |
| <img src="content_assist2.gif" border="1" /> |
| <br/> |
| <br/> |
| More information can be found in <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=272547">Bug 272547</a> |
| </td> |
| </tr> |
| |
| <tr> |
| <td colspan="2"> |
| <hr></td> |
| </tr> |
| <tr> |
| <td valign="top"><b>Bug Fixes</b></td> |
| <td> |
| Here are some interesting statistics from our friendly Bugzilla database |
| <ul> |
| <li>Bugs closed for this release: <a href="http://tinyurl.com/qc4ymf">52 bugs</a></li> |
| <li>Bug closed since April '08: <a href="http://tinyurl.com/mnvhr4">248 bugs</a></li> |
| <li>Outstanding bugs targeting 2.0.0 and onward: <a href="http://tinyurl.com/ojeqja">53 bugs</a></li> |
| <li>New, unresolved bugs since April '08: <a href="http://tinyurl.com/ko6bp6>71 bugs</a></li> |
| <li><em>All</em> open bugs in AJDT: <a href="http://tinyurl.com/luyfj6">115 bugs</a></li> |
| </ul> |
| <em>Why April '08? That's when we added someone full time to work on AJDT, and breathed new life into the project.</em> |
| </td> |
| |
| <tr> |
| <td colspan="2"> |
| <hr></td> |
| </tr> |
| <tr> |
| <td valign="top"><b>Thanks!</b></td> |
| <td> |
| Thanks to those of you who have submitted patches, bug reports, and contributed to the mailing list for this release. |
| We appreciate your help. |
| <br/> |
| <br/> |
| Also, AJDT is spreading. The Scala-Eclipse plugin |
| <a href="http://www.scala-lang.org/node/149">is now using JDT Weaving</a> to make its JDT integration deeper and more robust. |
| </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/whatsnew164/index.html">here</a> |
| for information on the new features in AJDT 1.6.4. |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </body></html> |