<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html> <head>
<title>AspectJ 1.2.1 Readme</title>
<style type="text/css">
<!--
  P   { margin-left:  20px; }
  PRE { margin-left:  20px; }
  LI  { margin-left:  20px; }
  H4  { margin-left:  20px; }
  H3  { margin-left:  10px; }
-->
</style>
</head>

<body>
<div align="right"><small>
&copy; Copyright 2004 Contributors.
All rights reserved.
</small></div>

<h1>AspectJ 1.2.1 Readme</h1>

<p>AspectJ 1.2.1 is largely a bug-fix release and the definition of the 
	AspectJ language is unchanged from the 1.2.0 release (with the exception
	that AspectJ 1.2.1 permits the use of the '+' operator to concatenate
	the messages for declare error and warning statements).
This document describes the tools differences between AspectJ versions 1.2 and 1.2.1.
Users familiar with AspectJ 1.2 may find this document
a quicker way to learn what changed in the tools.
</p>

<p>This document summarizes changes in:
<ul>
	<li>Weaver messages</li>
	<li>Dump support</li>
	<li>JDT Compiler version</li>
	<li>Line number information for join points</li>
	<li>Runtime performance</li>
	<li>String concatentation in declare error and warning statements</li>
	<li>Load-time weaving support</li>
	<li>Use of aspect libraries generated by ajc 1.2.1 with earlier versions of ajc</li>
</ul>	
	
</p>
<p>
	See the <a href="changes.html">changes document</a> for more details, or
	<a href="#allchanges">all the changes</a> as detailed in the bugzilla 
	database.
</p>

<h2>Weaver Informational Messages</h2>
<p> 
	The AspectJ 1.2.1 compiler can produce informational messages about the
	weaving process. To see these messages, use the -showWeaveInfo compiler
	option, or set showweaveinfo=true in the iajc ant task.
</p>	
<p>The following is an example of the messages produced when this option is enabled:</p>
<pre>
	C:\aspectj1.2.1\doc\examples\tjp>ajc -showWeaveInfo *.java

    Type 'tjp.Demo' (Demo.java:20) advised by around advice from 'tjp.GetInfo' 
    (GetInfo.java:26) [RuntimeTest=true]

    Type 'tjp.Demo' (Demo.java:30) advised by around advice from 'tjp.GetInfo' 
    (GetInfo.java:26) [RuntimeTest=true]

    Type 'tjp.Demo' (Demo.java:34) advised by around advice from 'tjp.GetInfo' 
    (GetInfo.java:26) [RuntimeTest=true]
</pre>

<h2>Dump Support</h2>
<p>In the event of a compiler crash, AspectJ 1.2.1 will produce a dump file giving
	important information about the state of the compiler at the time of the crash. 
	These dump files should enable us to analyze problems more effectively. In the
	rare event that you witness a compiler crash, please attach the dump file to 
	the bug report.</p>
<p>In addition to producing a dump file when an abort condition is detected, the
	AspectJ 1.2.1 compiler can also be requested to create a dump file on detection
	of a compilation error. Set the property org.aspectj.weaver.Dump.condition=error to
	enable this behaviour.</p>

<h2>JDT Compiler Version</h2>
<p>AspectJ 1.2.1 is based on the Eclipse 3.0 final JDT compiler.</p>

<h2>Line Number Information for Join Points</h2>
<p>For source files compiled by ajc (as opposed to binary inputs to the compiler
	compiled with some other java compiler), ajc now emits better line number information
	for execution join points. In particular, for a method, constructor or advice
	execution join point (as matched for example by a declare error or declare warning
	statement), ajc 1.2.1 reports the first line number of the declaration,
	as opposed to the line number of the first line of code in the body. </p>

<h2>Runtime Performance</h2>
<p>AspectJ 1.2.1 contains a small number of runtime performance optimisations, including
	optimisations of if(true) and if(false) pointcut expressions, caching of getSignature()
	and toString() results on JoinPoint objects, and an optimised implementation of cflow.</p>
	<p>In the case where there are no arguments bound in
     the cflow pointcut, programs compiled under AspectJ 1.2.1 and that make
     heavy use of cflow will run significantly faster. Thanks to the abc compiler team 
     for detecting this performance related bug and for piloting the fix. </p>

<h2>String Concatentation in Declare Error/Warning Statements</h2>
<p>String concatentation in declare error and warning statements is now supported. 
	For example, you can write:</p>
	<pre>
		declare warning : jdbcCall() &amp;&amp; !inDataLayer()
		                : "Please don't make calls to JDBC " +
		                  "outside of the data layer.";
	</pre>
	
<h2>Load-time Weaving Support</h2>
<p>
	The AspectJ 1.2.1 distribution contains a new jar in the lib directory,
	aspectjweaver.jar, that contains the subset of aspectjtools.jar needed
	for weaving only. This jar may be used in situations where you wish to
	exploit AspectJ's binary weaving capabilities, but do not want the full
	aspectjtools.jar around (aspectjweaver.jar is approx. 5 times smaller).
</p>
<p>
	In addition, the load-time weaving "aj" script which was included in the
	doc/examples/ltw directory in the 1.2 distribution has been moved into
	the regular bin directory. See <a href="README-12.html">README-12</a> for
	details of using this script.
</p>

<h2>Binary Compatibility</h2>
<p>AspectJ 1.2.1 introduces a backwards-incompatible change to the class
	file format generated by the AspectJ compiler. Classes generated by
	ajc v1.2.1 cannot be used on the inpath or aspectpath of a weaver from
	a prior version of the compiler. Classes generated by prior versions of
	the compiler can of course be placed on the inpath or aspectpath of the
	1.2.1 weaver.</p>
<p>
	As ever, you should use the AspectJ runtime library (aspectjrt.jar) that 
	comes with the distribution you used to build your application.
</p>
<hr/>


	<a name="allchanges"></a>
	<h2>All changes are listed in the bug database</h2>
	For a complete list of changes in the 1.2.1 release, search for 
	<code>target 1.2.1</code> in the bug database:
	<a href="https://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&component=Compiler&target_milestone=1.2.1">
		https://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&target_milestone=1.2.1&bug_status=RESOLVED&resolution=FIXED
	</a>
  
</body> </html>
