<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>
      What's new in 1.2.0
    </title>
    <link rel="stylesheet" href="http://www.eclipse.org/default_style.css" charset="ISO-8859-1" type="text/css">
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <meta http-equiv="Content-Style-Type" content="text/css">
  </head>
  <body>
    <h1>
      What's new in AJDT 1.2
    </h1>

<p>Here are some of the more interesting or significant changes made to the 
AspectJ Developement Tools since the 1.1.12 release:</p>

<table border="1" cellpadding="10" cellspacing="0" width="600">
  <colgroup>
    <col width="20%" valign="top" align="left">
    <col width="80%" valign="top" align="left">
  </colgroup>
  <tbody>

  <tr>
    <td valign="top" align="left"><b>AspectJ editor</b></td>
    <td>

      The AspectJ editor has been significantly improved and now
      offers the following features:

      <ul>
         <li>Folding</li>
         <li>Code formatting</li>
         <li>Add import</li>
         <li>Organize imports</li>
         <li>Code completion (within advice and method bodies)</li>
         <li>Early error indication (syntax errors only)</li>
      </ul>

      <p>The default arrangement is to use the AspectJ editor only for
      .aj files and to use the standard Java editor for .java
      files.</p>
    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>Outline view</b></td>
    <td>

       The standard outline view shows the structure of your aspects
       and is updated as you type. Filters are available to hide
       pointcuts, advice, declare statements, and introductions.  The
       same aspect structure is also shown in the package explorer and
       in the quick outline view in the AspectJ editor.

       <p><img src="outline.png" width="278" height="178"
       alt="Screenshot showing the structure of an aspect in the outline view"></p>
    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>Cross References</b></td>
    <td>

      The new Cross References view shows how a given element is
      related to other elements. For example, which advice is
      affecting a given method or the places advised by a given piece
      of advice. The view responds to selections in the editor and the
      outline view.

      <p><img src="xref.png" width="340" height="135" alt="Screenshot showing the Cross References view"></p>

      <p>If you select a method the Cross References view shows you
      the relationships involving that method plus any that involve
      code elements within the method (such as when the setting of a
      field is advised). If you select a class or aspect you will see
      the relationships involving that class/aspect plus any that
      involve the methods contained in the class/aspect.</p>

      <p>The view supports navigation; you can double-click an element
      to open the containing resource in the editor with that element
      selected. There are buttons available to disable the link with
      the editor and to toggle between showing crosscutting
      information for the current element or the entire file.</p>

      <p>Like the outline view there is also a quick version of the
      view that appears in-place over the editor. This is available
      from the Navigate menu or via the default "Ctrl+Alt+X" key
      binding.</p>

      <p><img src="quickxref.png" width="288" height="125" alt="The quick form of the Cross References view"></p>

    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>Advice Decorator</b></td>
    <td>

      An image decorator has been added to indicate which Java
      elements are being advised. A small orange arrow to the left of
      the icon is used as shown in the enlargement below. This
      decorator is used anywhere that the standard Java decorator is
      used which includes the package explorer, the outline
      view, the Cross Reference view, and the members view in the Java
      browsing perspective. A preference page option is available if
      you wish to disable this function.

      <p><img src="advicedecorator.png" width="347" height="215"
      alt="An example of the image decorator for advice"></p>

    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>Source markers</b></td>
    <td>

      Markers are added to the left-hand edge of the editor to
      indicate where advice will take effect at runtime (or may take
      effect, if there is a dynamic test to the pointcut). In addition
      to these, markers are also added at the source of these
      relationships, namely the advice itself. Selecting the context
      menu from one of these markers will show an "Advises" menu,
      similar to the "Advised By" menu shown at the other end of the
      relationship. As well as being more consistent, these new
      markers provide an additional means of navigating the
      aspect-oriented structure of your code. Similar markers are added
      for the source and target of declare statements, such as inter-type
      declarations. All of these markers are present with both the
      AspectJ and Java editors.

      <p><img src="markers1.png" width="423" height="46" alt="An example advises marker"></p>

      <p><img src="markers2.png" width="423" height="85" alt="The advises context menu"></p>

    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>Incremental compilation</b></td>
    <td>

      Incremental compilation is now set as the default mode of
      operation. Both the generated class files and the structure
      model (used to display the advice markers and to populate the
      Cross References view and Visualiser etc) will be
      incrementally updated as required.

      <p>Simple changes to classes will result in a fast incremental
      build of the project and any dependent projects, whereas
      changes to aspects will trigger a full build. A chain of
      large projects dependent on each other will have high memory
      requirements.</p>

      <p>Incremental mode can be set either for the whole workspace
      or per-project via the <b>AspectJ Compiler &gt; Other</b>
      tab.</p>
    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>File Extensions</b></td>
    <td>

      The best arrangement for your source code is to only put pure
      Java code in .java files and to use .aj files for aspects (and
      for classes containing inner aspects or pointcuts). You can
      select a file or files in the package explorer and right-click
      to convert their file extension. You can also convert all of the
      source files in a project in one go using a wizard. This is
      available by right-clicking on a project and selecting
      <b>Convert File Extensions...</b>

    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>AspectPath Directories</b></td>
    <td>

      You can now specify directories on the aspect-path instead
      of just jars or zips. Simply right-click on a project and select
      Properties, then go to the <b>AspectJ Aspect Path</b>
      section. On the Libraries tab there is now a <b>Add Class
      Folder...</b> button which you can use to add the output "bin"
      directory of another project for example. This allows you to
      apply the aspects from another project without requiring that
      other project to send its class files to an output jar.

    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>Launch configuration</b></td>
    <td>

      You can now do <b>Run As &gt; AspectJ/Java Application.</b>
      This looks and behaves exactly like the basic Java launch
      configuration with the following two additions:

      <ul>

        <li>Main methods inside aspects are detected. This means when
        you press the <b>Search...</b> button in the <b>Main class</b>
        section of the run configuration dialog, or when you do <b>Run
        As &gt; AspectJ/Java Application</b> directly, you are
        presented with a selection dialog containing all main methods
        in both classes and aspects.</li>

        <li>On the <b>Classpath</b> tab of the run configuration
        dialog there is an additional classpath entry for <b>Aspect
        Path</b>. If the aspect-path for a project has been set (via
        Properties &gt; AspectJ Aspect Path) then the same entries
        will automatically appear here.</li>

      </ul>

      <p><img src="ajlaunch.png" width="411" height"286" alt="The AspectJ Launch Configuration"></p>

    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>Visible project options</b></td>
    <td>

      Project-specific AspectJ compiler options and other project
      settings are now saved in preference files under a ".settings"
      folder in the project. This enables the settings to be shared
      between workspaces and other developers by committing the preference
      files to CVS.

    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>Plug-in projects</b></td>
    <td>

      If you have an AspectJ-enabled plug-in project you can now
      generate a build.xml file that can build the project correctly
      using the <code>iajc</code> ant task. This operation is
      available by right-clicking on your plugin.xml file and
      selecting <b>PDE tools &gt; Create Ant Build File with AspectJ
      support.</b>

    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>New docs</b></td>
    <td>

       The documentation provided in the Eclipse help system has
       been overhauled. The "AspectJ Development User
       Guide" has been rewritten to reflect the changes in AJDT 1.2
       and to be more consistent with other Eclipse documentation.
       The documentation from the AspectJ project is available
       as the "AspectJ Language Guide".

    </td>
  </tr>


  <tr>
    <td valign="top" align="left"><b>The Visualiser</b></td>
    <td>

      A large number of improvements have been made to the
      Visualiser:

      <ul>
        <li>The graphical rendering is faster and better able to cope
        with less memory / larger projects.</li>

        <li>The appearance of the columns is more in keeping with the
        rest of Eclipse 3.0</li>

        <li>Alternative drawing styles and color palettes are
        available and new ones can be implemented using the defined
        extension points.</li>

        <li>The drawing preferences page has been changed to handle
        the new options and to provide a preview of the changes.</li>

        <li>A selection mechanism allows columns, bars, and stripes to
        be selected using the mouse or keyboard.</li>

        <li>The results of any AspectJ declare error and declare
        warning statements are now shown as stripes in the Visualiser
        in colors matching the usual Eclipse colors for errors and
        warnings. There are toggles on the Visualiser menu toolbar to
        hide these stripes.</li>

        <li>If you change the color of a stripe in the Visualiser
        then that setting will be preserved such that an aspect of
        that name, in the same project, will continue to use that
        color even across workbench sessions. There is a menu option
        to reset this color memory back to the default of the current
        palette.</li>

        <li>A new provider has been added to the Visualiser to show
        the location of Eclipse markers (such as bookmarks,
        breakpoints, tasks, etc).</li>
      </ul>

      <p><img src="visualiser.png" width="393" height="255"
      alt="Screenshot of the new Visualiser"></p>

    </td>
  </tr>


</tbody>
</table>

    <p>
       <a href="../notices.html"><img src="../cpy.gif" border="0" alt="Legal notices" width="324" height="14"></a>
    </p>
  </body>
</html>

