aboutsummaryrefslogtreecommitdiffstats
path: root/docs/dist/doc/README-1.6.11.adoc
blob: e5f4226a238907439a13df0b308e2c6f999b2ecd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
== AspectJ 1.6.11

_© Copyright 2010-2011 Contributors. All rights reserved._

The full list of resolved issues in 1.6.11 is available
https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced;bug_status=RESOLVED;bug_status=VERIFIED;bug_status=CLOSED;product=AspectJ;target_milestone=1.6.11;[here]

_Release info: 1.6.11 available 15-Mar-2011_

=== Notable Changes

==== RC1 - Our own XML parser

Due to the way AspectJ loads one of the standard XML parsers (for
processing aop.xml) it was possible to get into a deadlock situation. To
avoid this completely we now have our own XML parser inside for
processing this files. It is basic but should support all the known
syntax we have for aop files. To use it instead of the default (if you
are encountering the deadlock) you need to specify this system property:
org.aspectj.weaver.loadtime.configuration.lightxmlparser=true.

'''''

==== M2 - Multithreaded world access

The weaver is backed by a representation of types called a world.
Traditionally the worlds have supported single threads - and that is how
they are used when doing compile time weaving or load time weaving.
However in some configurations, e.g. pointcut matching under Spring, a
single world instance may be getting accessed by multiple threads at the
same time. Under
https://bugs.eclipse.org/bugs/show_bug.cgi?id=337855[bug337855] some
changes have been made to better support this kind of configuration.

==== M2 - various attribute deserialization issues

In 1.6.9 we made some radical changes to the serialized form. It turns
out some of the deserialization code wasn't handling these new forms
quite right. This would manifest as an IllegalStateException or
IndexOutOfBoundsException or similar, during attribute unpacking. These
issues have now all been sorted out in 1.6.11.M2.

==== M2 - further optimizations in model for AJDT

More changes have been made for users trying out the
-Xset:minimalModel=true option to try and reduce the memory used in
their Eclipse/AJDT configurations. This option is discussed in detail
http://andrewclement.blogspot.com/2010/07/ajdt-memory-usage-reduction.html[here].
It now saves even more memory. Also, previously the amount of memory it
recovered depended on compilation order (which the user has no control
over), but now it is insensitive to ordering and should always recover
the same amount across builds of the same project. With a bit more
positive feedback on this option, it will become the default under AJDT.

==== M2 - spaces in path names can cause problems

AspectJ had problems if the paths it was being passed (e.g. aspectpath)
included spaces. This is bug
https://bugs.eclipse.org/bugs/show_bug.cgi?id=282379[282379] and has now
been fixed.

'''''

==== M1 - Annotation removal

Traditionally AspectJ has taken an additive approach, where
methods/fields/supertypes/annotations can only be added to types. Now,
chaos would likely ensue if we allowed removal of supertypes, methods,
etc, but we are seeing an increasing number of requirements to do more
with annotations. What kinds of thing? Basically remove existing
annotations, or modify existing annotations by changing their values.
1.6.11 includes a new piece of syntax that we are thinking might be
appropriate for one of these scenarios. 1.6.11 supports this:

[source, java]
....
declare @field: int Foo.i: -@Anno;
....

Notice the '-' in front of the annotation, meaning 'removal'. The whole
construct means 'remove the @Anno annotation from the int field called i
in type Foo'. It is not yet supported on the other forms of declare @.

==== M1 - Intertype innertypes

More work has gone into this feature. It was originally added in 1.6.9
but the inability to use it with binary weaving greatly reduced the
usefulness. Fixes have gone into 1.6.11 to support binary weaving. What
do we mean by intertype innertypes? Here is an example:

[source, java]
....
class Foo {
  public void m() {
    System.out.println(Inner.i);
  }
}

aspect X {
  public static class Foo.Inner {
    static int i = 34;
  }
}
....

Only static inner types are supported.