--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html> <head>
+<title>AspectJ 1.6.12 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>
+© Copyright 2010-2011 Contributors.
+All rights reserved.
+</small></div>
+
+<h1>AspectJ 1.6.12 Readme</h1>
+
+<p>The full list of resolved issues in 1.6.12 is available
+<a href="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.12;">here</a></h2>.</p>
+
+<h4>1.6.12.M1 available 7-Jun-2011</h4>
+
+
+<h2>Notable Changes</h2>
+<hr>
+<h3>M1 - synthetic is supported in pointcut modifiers <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327867">327867</a></h3>
+<p>It is now possible to specify synthetic in pointcuts:
+</p>
+<pre><code>pointcut p(): execution(!synthetic * *(..));
+</code></pre>
+
+<h3>M1 - respect protection domain when generating types during weaving <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328099">328099</a></h3>
+<p>This enables us to weave signed jars correctly. AspectJ sometimes generates closure classes during weaving and
+these must be defined with the same protection domain as the jar that gave rise to them. In 1.6.12.M1 this should
+now work correctly.
+</p>
+
+<h3>M1 - Suppressions inline with the JDT compiler <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335810">335810</a></h3>
+<p>Starting with Eclipse 3.6, the Eclipse compiler no longer suppresses raw type
+warnings with @SuppressWarnings("unchecked"). You need to use
+@SuppressWarnings("rawtypes") for that. AspectJ has now been updated with this rule too.
+</p>
+
+<h3>M1 - Optimized annotation value binding for ints <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=347684">347684</a></h3>
+<p>The optimized annotation value binding now supports ints - this is for use when you want to match upon the existence of an annotation but
+you don't need the annotation, you just need a value from it. This code snippet shows an example:</p>
+<pre><code>@interface SomeAnnotation {
+ int i();
+}
+
+before(int i): execution(* *(..)) && @annotation(SomeAnnotation(i)) {
+</code></pre>
+<p>
+Binding values in this way will result in code that runs *much* faster than using pointcuts that
+bind the annotation itself then pull out the value.
+</p>
+
+<p>Under that same bug some changes were made to match values by name when binding too. Suppose the annotation
+had multiple int values, how would we select which int to bind? AspectJ will now use the name (if it can) to select
+the right value:
+<pre><code>@interface SomeAnnotation {
+ int mods();
+ int flags();
+}
+
+before(int flags): execution(* *(..)) && @annotation(SomeAnnotation(flags)) {
+</code></pre>
+<p>Here the use of 'flags' as the name of the value being bound will ensure the 'flags' value from any SomeAnnotation is
+bound and not the 'mods' value.</p>
+
+
+<h4>
+<!-- ============================== -->
+</body>
+</html>