= AspectJ 5 v1.5.3 Readme

_© Copyright 2006 Contributors. All rights reserved._

This release includes a number of bug fixes and enhancements (over 80).
The full list of resolved issues can be found with
https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=AspectJ&target_milestone=1.5.3&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=[this
bugzilla query].

Notable changes since the 1.5.2 release include: +

== Pipeline compilation - https://bugs.eclipse.org/bugs/show_bug.cgi?id=146781[146781]

Until this release, the memory profile for AspectJ looked like this
(time is along the X axis, memory usage is the Y axis)

[source, text]
....
     /\_
    /   \_
   /      \_
  /         \_
 /            \_
/               \
....

The first phase (as we go up and up and up) is the compilation of every
file - when the peak is reached we then start weaving files one by one,
discarding them once woven and dumped to disk. In 1.5.3 we don't compile
everything up front - we compile and weave files one at a time. Giving
us this profile:

[source, text]
....
  /\  /\  /\
 /  \/  \/  \
/            \
....

Each peak is compiling a file, then it is woven, dumped to disk and the
space recovered (the trough) - we then move onto the next file. What
does this mean? The peaks are far far lower, so you need far less memory
to compile a project. For example, I have a 1000file project, affected
by aspects at >750 join points. For given values of Xmx, here are the
times taken to compile it (on the command line) with AspectJ1.5.2:

[source, text]
....
Xmx  Time
512M 33seconds
256M 40seconds
220M 116seconds
212M OutOfMemory
....

The times gradually increase as the memory is reduced because the VM
starts to thrash in garbage collection. Here are the results for
AspectJ1.5.3:

[source, text]
....
Xmx  Time
512M 33s
256M 33s
180M 33s
140M 33s
100M 35s
80M  43s
70M  OutOfMemory
....

So with 1.5.3, it isn't until around 80M that the VM starts to struggle
with memory. These savings will affect any code built from source: on
the command line, in Ant, or in AJDT. It will not affect binary weaving
- that is a future enhancement.

== Serviceability - https://bugs.eclipse.org/bugs/show_bug.cgi?id=150487[150487]

As AspectJ grows in popularity, we find that it is becoming more
difficult for users to come up with the small testcases that recreate
problems - the usage scenarios for AJ are becoming more and more
sophisticated. To help us work on problems in these scenarios we have
added a tracing and logging framework and improved our dump mechanism.
These traces and dumps can be attached to bug reports. In AspectJ 1.5.3
we have included some
https://www.eclipse.org/aspectj/doc/released/pdguide/index.html[documentation]
on how to configure these new features. Don't be surprised if you get
asked for an AspectJ trace on a future bug report!

== LTW enhancements

=== User and System Configuration Files - https://bugs.eclipse.org/bugs/show_bug.cgi?id=149289[149289]

The `-outxml` option now generates a file named `META-INF/aop-ajc.xml`.
This no longer clashes with a user defined `META-INF/aop.xml`
configuration file. Both file names along with an OSGi-friendly
`org/aspectj/aop.xml` (which can also be signed) are used by default to
configure LTW.

=== Weaving Concrete Aspects Defined in aop.xml - https://bugs.eclipse.org/bugs/show_bug.cgi?id=132080[132080]

Concrete aspects defined using aop.xml are now exposed for weaving.

== Pertypewithin enhancement - https://bugs.eclipse.org/bugs/show_bug.cgi?id=123423[123423]

It is now possible to ask an instance of a ptw aspect which type it is
'attached' to. The method:

[source, java]
....
String getWithinTypeName()
....

can be called on an aspect and will return the full qualified name of
the type (eg. "com.foo.MyClass")

'''''

For information on bug fixes in AspectJ 5 v1.5.3, see the
link:changes.html[changes] document.
