1.8.2.20140811101800
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajde/core/AjCompiler.class b/org.aspectj.ajde/classes/org/aspectj/ajde/core/AjCompiler.class
index 291ab64..57ad202 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajde/core/AjCompiler.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajde/core/AjCompiler.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajde/core/JavaOptions.class b/org.aspectj.ajde/classes/org/aspectj/ajde/core/JavaOptions.class
index 126a887..bcbd300 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajde/core/JavaOptions.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajde/core/JavaOptions.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajde/core/internal/AjdeCoreBuildManager.class b/org.aspectj.ajde/classes/org/aspectj/ajde/core/internal/AjdeCoreBuildManager.class
index 7ef6704..be95fa1 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajde/core/internal/AjdeCoreBuildManager.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajde/core/internal/AjdeCoreBuildManager.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/AjdtCommand.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/AjdtCommand.class
index 4638ebf..904dc2f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/AjdtCommand.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/AjdtCommand.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser$AjcConfigParser.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser$AjcConfigParser.class
index f97909a..e2e3f16 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser$AjcConfigParser.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser$AjcConfigParser.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser$StringPrintWriter.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser$StringPrintWriter.class
index 676b746..6c32bda 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser$StringPrintWriter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser$StringPrintWriter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser.class
index 54a6eee..e457293 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/BuildArgParser.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser$1.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser$1.class
index 33fa81e..e331a34 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser$2.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser$2.class
index d623684..7152989 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser.class
index 8105eba..8efffdd 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/ConfigParser.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/messages.properties b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/messages.properties
index 51bbc92..77a40f1 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/messages.properties
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/ajc/messages.properties
@@ -4,8 +4,8 @@
      The -Xlintfile:lint.properties allows fine-grained control. In tools.jar, see
      org/aspectj/weaver/XlintDefault.properties for the default behavior and a template to copy. 
 ### AspectJ-specific messages 
-compiler.name = AspectJ Compiler 1.8.1
-compiler.version = Eclipse Compiler BETA_JAVA8_3f60ba6, 3.10
+compiler.name = AspectJ Compiler 1.8.2
+compiler.version = Eclipse Compiler BETA_JAVA8_2b07958, 3.11
 compiler.copyright = 
 
 ## this next one superceded by above...
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/AjCompilerAdapter.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/AjCompilerAdapter.class
index 7a913c6..424d2e1 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/AjCompilerAdapter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/AjCompilerAdapter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/AjPipeliningCompilerAdapter.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/AjPipeliningCompilerAdapter.class
index 8d0d977..4ce108f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/AjPipeliningCompilerAdapter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/AjPipeliningCompilerAdapter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CommonPrinter.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CommonPrinter.class
index 3f4e311..741b31d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CommonPrinter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CommonPrinter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CompilerAdapter$CompilerAdapter$1.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CompilerAdapter$CompilerAdapter$1.class
index 6efbdf2..7479f32 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CompilerAdapter$CompilerAdapter$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CompilerAdapter$CompilerAdapter$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CompilerAdapter.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CompilerAdapter.class
index e92fa8f..3dcc55e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CompilerAdapter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/CompilerAdapter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/WeaverAdapter.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/WeaverAdapter.class
index 436119b..8e6fc7f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/WeaverAdapter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/WeaverAdapter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/WeaverMessageHandler.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/WeaverMessageHandler.class
index 5a9f3c3..ae77504 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/WeaverMessageHandler.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/WeaverMessageHandler.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AdviceDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AdviceDeclaration.class
index 54383df..f502000 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AdviceDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AdviceDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AjConstructorDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AjConstructorDeclaration.class
index b248d5e..7188ff2 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AjConstructorDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AjConstructorDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AjMethodDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AjMethodDeclaration.class
index 1e431ba..86f191a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AjMethodDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AjMethodDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectClinit.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectClinit.class
index fd3de4f..eb94411 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectClinit.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectClinit.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$1.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$1.class
index 8f41016..c64886c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$10.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$10.class
index a675cf0..3f73f5e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$10.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$10.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$11.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$11.class
index 5a80929..fc8c01f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$11.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$11.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$12.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$12.class
index 9d0f829..9af7482 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$12.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$12.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$13.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$13.class
index 0dd371f..4aa30ac 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$13.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$13.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$14.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$14.class
index 9723c7c..6278ce8 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$14.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$14.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$15.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$15.class
index 5d57e07..072287c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$15.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$15.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$16.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$16.class
index b07d5bc..6c5dc8e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$16.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$16.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$17.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$17.class
index a2d00dd..609e60e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$17.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$17.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$18.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$18.class
index c9f4775..9e33563 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$18.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$18.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$19.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$19.class
index e99296f..390d337 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$19.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$19.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$2.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$2.class
index 1c9edc3..cf497c5 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$20.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$20.class
index 1a5bd7b..0189a9e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$20.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$20.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$3.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$3.class
index 67e6eed..979d906 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$3.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$3.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$4.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$4.class
index 8533d46..d9f00f6 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$4.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$4.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$5.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$5.class
index d9e3722..a0c4296 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$5.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$5.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$6.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$6.class
index 2ab2889..c495837 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$6.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$6.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$7.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$7.class
index 7cce014..7cf5255 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$7.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$7.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$8.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$8.class
index 9caea9d..799be56 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$8.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$8.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$9.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$9.class
index 7b27ce3..b5ba720 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$9.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration$9.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration.class
index 216a82e..ac0460b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AspectDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AstUtil.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AstUtil.class
index ccb869b..c8d9c27 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AstUtil.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AstUtil.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AtAspectJAnnotationFactory.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AtAspectJAnnotationFactory.class
index f2a4c57..5793e32 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AtAspectJAnnotationFactory.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/AtAspectJAnnotationFactory.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/DeclareAnnotationDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/DeclareAnnotationDeclaration.class
index df2576f..c8a3b4e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/DeclareAnnotationDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/DeclareAnnotationDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/DeclareDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/DeclareDeclaration.class
index 11f08ef..de38997 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/DeclareDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/DeclareDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IfMethodDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IfMethodDeclaration.class
index 5f36432..36322c9 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IfMethodDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IfMethodDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IfPseudoToken.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IfPseudoToken.class
index b2cdcc0..43d113f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IfPseudoToken.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IfPseudoToken.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterSuperFixerVisitor.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterSuperFixerVisitor.class
index 5dda980..f755c46 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterSuperFixerVisitor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterSuperFixerVisitor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeConstructorDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeConstructorDeclaration.class
index 4afe302..131e3bc 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeConstructorDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeConstructorDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeDeclaration.class
index 5fdb2ce..56784c0 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeFieldDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeFieldDeclaration.class
index 6d62f8c..3fe5319 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeFieldDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeFieldDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeMethodDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeMethodDeclaration.class
index d0cd7d2..f238569 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeMethodDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/InterTypeMethodDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IntertypeMemberClassDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IntertypeMemberClassDeclaration.class
index 4c6a134..d6edf6c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IntertypeMemberClassDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/IntertypeMemberClassDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/KnownFieldReference.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/KnownFieldReference.class
index f0c63e2..8e66191 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/KnownFieldReference.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/KnownFieldReference.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/PointcutDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/PointcutDeclaration.class
index 198d6d7..d17157a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/PointcutDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/PointcutDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ProceedVisitor.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ProceedVisitor.class
index c5d5160..ea1d9c9 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ProceedVisitor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ProceedVisitor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/PseudoTokens.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/PseudoTokens.class
index 8f57311..ea12e65 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/PseudoTokens.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/PseudoTokens.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/SuperFixerVisitor.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/SuperFixerVisitor.class
index c839a1e..61eb8aa 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/SuperFixerVisitor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/SuperFixerVisitor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ThisJoinPointVisitor.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ThisJoinPointVisitor.class
index 2bd253f..cbbe73f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ThisJoinPointVisitor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ThisJoinPointVisitor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor$1.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor$1.class
index ae628b1..da0bcb1 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor$HasIfPCDVisitor.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor$HasIfPCDVisitor.class
index 095cc87..0365ccc 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor$HasIfPCDVisitor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor$HasIfPCDVisitor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor.class
index c04c0b9..4703ed3 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.class
index a00a8ab..f1fb85f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AjTypeConstants.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AjTypeConstants.class
index 256c54a..1bc85bf 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AjTypeConstants.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AjTypeConstants.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AnonymousClassPublisher.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AnonymousClassPublisher.class
index ec4f8bc..290644b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AnonymousClassPublisher.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/AnonymousClassPublisher.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseAnnotationConvertor.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseAnnotationConvertor.class
index f728792..43f38da 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseAnnotationConvertor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseAnnotationConvertor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.class
index 2e13435..84f05a7 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseResolvedMember.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseResolvedMember.class
index a0e688a..554505b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseResolvedMember.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseResolvedMember.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseScope.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseScope.class
index 00b9276..7777db1 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseScope.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseScope.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseShadow.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseShadow.class
index 5470d5a..25f828f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseShadow.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseShadow.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseSourceLocation.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseSourceLocation.class
index af4b55e..29debf5 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseSourceLocation.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseSourceLocation.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseSourceType.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseSourceType.class
index c62a732..b55aea3 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseSourceType.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseSourceType.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseTypeMunger.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseTypeMunger.class
index cb8938d..08982ca 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseTypeMunger.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/EclipseTypeMunger.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/HelperInterfaceBinding.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/HelperInterfaceBinding.class
index 2dc2960..0375361 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/HelperInterfaceBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/HelperInterfaceBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InlineAccessFieldBinding.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InlineAccessFieldBinding.class
index a64889f..f03bcd7 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InlineAccessFieldBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InlineAccessFieldBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeFieldBinding.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeFieldBinding.class
index d3d59bc..72d695c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeFieldBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeFieldBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMemberFinder.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMemberFinder.class
index e7c6d14..cd197b9 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMemberFinder.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMemberFinder.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMethodBinding.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMethodBinding.class
index 5643154..92e5f16 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMethodBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMethodBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/IntertypeMemberTypeFinder.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/IntertypeMemberTypeFinder.class
index 093a4b8..6ef5db1 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/IntertypeMemberTypeFinder.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/IntertypeMemberTypeFinder.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/OwningClassSupportForFieldBindings.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/OwningClassSupportForFieldBindings.class
index 64fd730..647f0f8 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/OwningClassSupportForFieldBindings.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/OwningClassSupportForFieldBindings.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/OwningClassSupportForMethodBindings.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/OwningClassSupportForMethodBindings.class
index e5dea0b..9a02c72 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/OwningClassSupportForMethodBindings.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/OwningClassSupportForMethodBindings.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PointcutBinding.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PointcutBinding.class
index 0cda303..f0fc225 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PointcutBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PointcutBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedFieldBinding.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedFieldBinding.class
index c66baee..ae424ac 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedFieldBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedFieldBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PushinCollector.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PushinCollector.class
index 51ecc13..64a5c52 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PushinCollector.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/PushinCollector.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/WarnOnSwallowedException.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/WarnOnSwallowedException.class
index 9aa52e0..b906919 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/WarnOnSwallowedException.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/lookup/WarnOnSwallowedException.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/parser/AllowAssertAndEnumAsIdentifierTokensInPointcutExpressions.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/parser/AllowAssertAndEnumAsIdentifierTokensInPointcutExpressions.class
index 946b388..ed69459 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/parser/AllowAssertAndEnumAsIdentifierTokensInPointcutExpressions.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/parser/AllowAssertAndEnumAsIdentifierTokensInPointcutExpressions.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter$1.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter$1.class
index 77367a9..1a91b90 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter$MessageIssued.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter$MessageIssued.class
index fddd4c0..01d549b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter$MessageIssued.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter$MessageIssued.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.class
index 3e85320..94ea4d6 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig$1.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig$1.class
index c058a97..23bb252 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig$BinarySourceFile.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig$BinarySourceFile.class
index bae04c1..5218fc8 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig$BinarySourceFile.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig$BinarySourceFile.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.class
index bef339a..e81a010 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$1.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$1.class
index 7d04109..ca53404 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$2.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$2.class
index c0286f5..30bd597 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$3.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$3.class
index 5250b65..165e874 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$3.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$3.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$4.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$4.class
index 160e9af..c618deb 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$4.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$4.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$AjBuildContexFormatter.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$AjBuildContexFormatter.class
index 01dc19d..d4627de 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$AjBuildContexFormatter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager$AjBuildContexFormatter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager.class
index 111065d..d987d6b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjBuildManager.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjCompilerOptions.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjCompilerOptions.class
index 5b052aa..f757dae 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjCompilerOptions.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjCompilerOptions.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$ClassFile$1.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$ClassFile$1.class
index c14b8df..ac13e39 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$ClassFile$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$ClassFile$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$ClassFile.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$ClassFile.class
index 3b5a769..d522b3e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$ClassFile.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$ClassFile.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$SoftHashMap$SoftReferenceKnownKey.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$SoftHashMap$SoftReferenceKnownKey.class
index 83618a5..6c1e548 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$SoftHashMap$SoftReferenceKnownKey.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState$SoftHashMap$SoftReferenceKnownKey.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState.class
index 25208c3..554afe7 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AjState.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AsmElementFormatter.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AsmElementFormatter.class
index 8470f40..39b3728 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AsmElementFormatter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AsmElementFormatter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AsmHierarchyBuilder.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AsmHierarchyBuilder.class
index 392dc5f..a19af29 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AsmHierarchyBuilder.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AsmHierarchyBuilder.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$1.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$1.class
index 911f340..93750ab 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$UnhandledMessageHandler.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$UnhandledMessageHandler.class
index e9dc4f1..555cc5f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$UnhandledMessageHandler.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$UnhandledMessageHandler.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$UnwovenResultCollector.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$UnwovenResultCollector.class
index 246f245..08b1663 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$UnwovenResultCollector.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder$UnwovenResultCollector.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder.class
index fc68835..b2acf61 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/AspectJBuilder.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseAdapterUtils.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseAdapterUtils.class
index bc02d9e..1018813 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseAdapterUtils.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseAdapterUtils.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseClassPathManager.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseClassPathManager.class
index 0f868fd..3b8dc50 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseClassPathManager.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseClassPathManager.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseSourceContext.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseSourceContext.class
index 2cfb0e3..6c0a494 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseSourceContext.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EclipseSourceContext.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EmacsStructureModelManager$SExpressionPrinter.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EmacsStructureModelManager$SExpressionPrinter.class
index 8d828bc..9840c52 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EmacsStructureModelManager$SExpressionPrinter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EmacsStructureModelManager$SExpressionPrinter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EmacsStructureModelManager.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EmacsStructureModelManager.class
index 2150c1b..67cfc03 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EmacsStructureModelManager.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/EmacsStructureModelManager.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/StatefulNameEnvironment.class b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/StatefulNameEnvironment.class
index 1245003..fe0c75e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/StatefulNameEnvironment.class
+++ b/org.aspectj.ajde/classes/org/aspectj/ajdt/internal/core/builder/StatefulNameEnvironment.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/compiler/IProblem.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/compiler/IProblem.class
index 01cdc09..4a99095 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/compiler/IProblem.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/compiler/IProblem.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AbstractBooleanTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AbstractBooleanTypePattern.class
index 22b05b6..25e4669 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AbstractBooleanTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AbstractBooleanTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AdviceDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AdviceDeclaration.class
index 7587c6c..7d837ae 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AdviceDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AdviceDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterAdviceDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterAdviceDeclaration.class
index e2af87f..8842330 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterAdviceDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterAdviceDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterReturningAdviceDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterReturningAdviceDeclaration.class
index 12748a2..58fb198 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterReturningAdviceDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterReturningAdviceDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterThrowingAdviceDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterThrowingAdviceDeclaration.class
index c19c668..f9cc8d7 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterThrowingAdviceDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AfterThrowingAdviceDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjAST.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjAST.class
index 2917553..9144a18 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjAST.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjAST.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjASTConverter.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjASTConverter.class
index 78515a3..8f2159b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjASTConverter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjASTConverter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjASTMatcher.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjASTMatcher.class
index 669d223..b06e154 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjASTMatcher.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjASTMatcher.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjNaiveASTFlattener.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjNaiveASTFlattener.class
index e43a26b..1f4d911 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjNaiveASTFlattener.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjNaiveASTFlattener.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjTypeDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjTypeDeclaration.class
index 7e9bea7..b88c025 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjTypeDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AjTypeDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AndPointcut.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AndPointcut.class
index f3989d0..854d5d4 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AndPointcut.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AndPointcut.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AndTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AndTypePattern.class
index 8503620..62f64b4 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AndTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AndTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AnyTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AnyTypePattern.class
index cf973e7..667e50c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AnyTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AnyTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AnyWithAnnotationTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AnyWithAnnotationTypePattern.class
index 9cb8159..2be6c0a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AnyWithAnnotationTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AnyWithAnnotationTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AroundAdviceDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AroundAdviceDeclaration.class
index 941ea6f..21d13f4 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AroundAdviceDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AroundAdviceDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AspectDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AspectDeclaration.class
index 7e62cf4..cbed8d4 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AspectDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/AspectDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BeforeAdviceDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BeforeAdviceDeclaration.class
index b483315..6f3954e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BeforeAdviceDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BeforeAdviceDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BindingComparator.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BindingComparator.class
index 13efc4c..8097cf3 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BindingComparator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BindingComparator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BindingTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BindingTypePattern.class
index a113789..bb2d94d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BindingTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/BindingTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/CflowPointcut.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/CflowPointcut.class
index 7b64711..9295f4e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/CflowPointcut.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/CflowPointcut.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/CompilationUnitResolver.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/CompilationUnitResolver.class
index 7b582d6..e14ff0b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/CompilationUnitResolver.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/CompilationUnitResolver.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAnnotationDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAnnotationDeclaration.class
index 3e33d4c..462ce1a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAnnotationDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAnnotationDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtConstructorDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtConstructorDeclaration.class
index 6a43ba1..775d10d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtConstructorDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtConstructorDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtFieldDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtFieldDeclaration.class
index 45a1f0c..a574bc0 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtFieldDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtFieldDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtMethodDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtMethodDeclaration.class
index 794d086..4850fac 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtMethodDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtMethodDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtTypeDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtTypeDeclaration.class
index 057e73e..37a6c6e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtTypeDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareAtTypeDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareDeclaration.class
index a2084d4..a06953b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareErrorDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareErrorDeclaration.class
index 41d8777..0b7a260 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareErrorDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareErrorDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareParentsDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareParentsDeclaration.class
index badeee2..49538c9 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareParentsDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareParentsDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclarePrecedenceDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclarePrecedenceDeclaration.class
index a6a2830..409ccbf 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclarePrecedenceDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclarePrecedenceDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareSoftDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareSoftDeclaration.class
index 99dad424..171ff44 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareSoftDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareSoftDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareWarningDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareWarningDeclaration.class
index a8ac546..091a7bd 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareWarningDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DeclareWarningDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultBindingResolver.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultBindingResolver.class
index 8ba140c..1f2eb67 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultBindingResolver.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultBindingResolver.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultPointcut.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultPointcut.class
index 7297f69..d260115 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultPointcut.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultPointcut.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultTypePattern.class
index 053be5a..0cc8332 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/DefaultTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/EllipsisTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/EllipsisTypePattern.class
index 164f454..6f01b99 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/EllipsisTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/EllipsisTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/FormalBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/FormalBinding.class
index 5bbf842..ead5493 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/FormalBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/FormalBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/HasMemberTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/HasMemberTypePattern.class
index 9726b85..0cd31a9 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/HasMemberTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/HasMemberTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/InterTypeFieldDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/InterTypeFieldDeclaration.class
index a98788e..47274d1 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/InterTypeFieldDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/InterTypeFieldDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/InterTypeMethodDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/InterTypeMethodDeclaration.class
index e3d7d37..8b5af9a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/InterTypeMethodDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/InterTypeMethodDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/MethodBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/MethodBinding.class
index 499b56b..ec5ee3f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/MethodBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/MethodBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/NotPointcut.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/NotPointcut.class
index 070bb87..be05df1 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/NotPointcut.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/NotPointcut.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/NotTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/NotTypePattern.class
index 35d4e96..8b16604 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/NotTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/NotTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/OrPointcut.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/OrPointcut.class
index 028acb6..3944bd7 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/OrPointcut.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/OrPointcut.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/OrTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/OrTypePattern.class
index e5f8062..3063341 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/OrTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/OrTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PatternNode.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PatternNode.class
index daa086f..432fe3d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PatternNode.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PatternNode.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerCflow.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerCflow.class
index f9f6502..24254ac 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerCflow.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerCflow.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerObject.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerObject.class
index d1dc20f..5970bdf 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerObject.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerObject.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerTypeWithin.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerTypeWithin.class
index a5b7cd0..a5629eb 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerTypeWithin.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PerTypeWithin.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PointcutDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PointcutDeclaration.class
index 62ea41c..35b3d14 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PointcutDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PointcutDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PointcutDesignator.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PointcutDesignator.class
index 7dd4f11..7444457 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PointcutDesignator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/PointcutDesignator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/ReferencePointcut.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/ReferencePointcut.class
index 801881b..8e90f1f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/ReferencePointcut.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/ReferencePointcut.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/SignaturePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/SignaturePattern.class
index ceba842..4fa72a2 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/SignaturePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/SignaturePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/TypeBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/TypeBinding.class
index 8705f61..a81aebb 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/TypeBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/TypeBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/TypeCategoryTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/TypeCategoryTypePattern.class
index 7788e59..62b299d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/TypeCategoryTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/TypeCategoryTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/VariableBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/VariableBinding.class
index 1060ce8..3228777 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/VariableBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/VariableBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/WildTypePattern.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/WildTypePattern.class
index 8f5eba7..8ed8c58 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/WildTypePattern.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/dom/WildTypePattern.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.class
index 782afce..5219459 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/util/IConstantPoolEntry2.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/util/IConstantPoolEntry2.class
index d64acd5..9baa95a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/util/IConstantPoolEntry2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/core/util/IConstantPoolEntry2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/CompletionEngine.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/CompletionEngine.class
index a9c69a1..e3cfa71 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/CompletionEngine.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/CompletionEngine.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.class
index 0b58099..214b71f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$1Visitor.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$1Visitor.class
index 4ce3a4c..ba4d754 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$1Visitor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$1Visitor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$2.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$2.class
index 5b2d7ac..c63ebb6 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$3.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$3.class
index d3025e6..46df8ee 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$3.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$3.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$4.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$4.class
index 30c81e8..d6bdc63 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$4.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$4.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor$1.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor$1.class
index 3492f86..9ee9ba4 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor$2.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor$2.class
index 3ece84c..82ace8b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor.class
index e58946c..8194657 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine$InheritDocVisitor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine.class
index 14cee02..ae85a84 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/select/SelectionOnMessageSend.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/select/SelectionOnMessageSend.class
index a603a47..eaf716f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/select/SelectionOnMessageSend.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/codeassist/select/SelectionOnMessageSend.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$1.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$1.class
index a40821c..e6dd917 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$2.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$2.class
index 88f6ee5..d1e1ca8 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$3.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$3.class
index 6aad940..d25f6eb 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$3.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile$3.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile.class
index 9128bb6..9ea221b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/Compiler.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/Compiler.class
index ec7ecde..6311227 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/Compiler.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/Compiler.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl$HookedFileObject$ForwardingOutputStream.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl$HookedFileObject$ForwardingOutputStream.class
new file mode 100644
index 0000000..d642481
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl$HookedFileObject$ForwardingOutputStream.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl$HookedFileObject$ForwardingWriter.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl$HookedFileObject$ForwardingWriter.class
new file mode 100644
index 0000000..cf1a571
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl$HookedFileObject$ForwardingWriter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl$HookedFileObject.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl$HookedFileObject.class
new file mode 100644
index 0000000..874af0b
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl$HookedFileObject.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl.class
new file mode 100644
index 0000000..c95ad35
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AnnotationDiscoveryVisitor.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AnnotationDiscoveryVisitor.class
new file mode 100644
index 0000000..9347162
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AnnotationDiscoveryVisitor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AptProblem.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AptProblem.class
new file mode 100644
index 0000000..e26d892
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AptProblem.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseAnnotationProcessorManager.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseAnnotationProcessorManager.class
new file mode 100644
index 0000000..ae2718d
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseAnnotationProcessorManager.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseMessagerImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseMessagerImpl.class
new file mode 100644
index 0000000..8caea75
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseMessagerImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.class
new file mode 100644
index 0000000..4b76b36
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchAnnotationProcessorManager.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchAnnotationProcessorManager.class
new file mode 100644
index 0000000..af9e836
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchAnnotationProcessorManager.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.class
new file mode 100644
index 0000000..31082b8
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchMessagerImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchMessagerImpl.class
new file mode 100644
index 0000000..1b24e4d
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchMessagerImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchProcessingEnvImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchProcessingEnvImpl.class
new file mode 100644
index 0000000..194f0da
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchProcessingEnvImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject$ForwardingOutputStream.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject$ForwardingOutputStream.class
new file mode 100644
index 0000000..98d1b65
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject$ForwardingOutputStream.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject$ForwardingWriter.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject$ForwardingWriter.class
new file mode 100644
index 0000000..9216382
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject$ForwardingWriter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject.class
new file mode 100644
index 0000000..79619a4
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/IProcessorProvider.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/IProcessorProvider.class
new file mode 100644
index 0000000..48c0c3a
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/IProcessorProvider.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/ProcessorInfo.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/ProcessorInfo.class
new file mode 100644
index 0000000..b100895
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/ProcessorInfo.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundDispatcher.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundDispatcher.class
new file mode 100644
index 0000000..b1dc649
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundDispatcher.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundEnvImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundEnvImpl.class
new file mode 100644
index 0000000..c6aec89
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundEnvImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMemberValue.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMemberValue.class
new file mode 100644
index 0000000..b2045f7
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMemberValue.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMirrorImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMirrorImpl.class
new file mode 100644
index 0000000..7c6991b
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMirrorImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationValueImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationValueImpl.class
new file mode 100644
index 0000000..7dd81da
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationValueImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ArrayTypeImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ArrayTypeImpl.class
new file mode 100644
index 0000000..1b78acd
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ArrayTypeImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/DeclaredTypeImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/DeclaredTypeImpl.class
new file mode 100644
index 0000000..e3f9a45
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/DeclaredTypeImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementImpl.class
new file mode 100644
index 0000000..e820481
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementsImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementsImpl.class
new file mode 100644
index 0000000..606c46c
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementsImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeElement.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeElement.class
new file mode 100644
index 0000000..66f8448
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeElement.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeImpl.class
new file mode 100644
index 0000000..dfdbdcf
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableElementImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableElementImpl.class
new file mode 100644
index 0000000..5480512
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableElementImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableTypeImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableTypeImpl.class
new file mode 100644
index 0000000..15f9979
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableTypeImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/Factory.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/Factory.class
new file mode 100644
index 0000000..80b39d8
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/Factory.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/IElementInfo.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/IElementInfo.class
new file mode 100644
index 0000000..d77c006
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/IElementInfo.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NameImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NameImpl.class
new file mode 100644
index 0000000..375e9a2
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NameImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NoTypeImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NoTypeImpl.class
new file mode 100644
index 0000000..845c017
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NoTypeImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PackageElementImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PackageElementImpl.class
new file mode 100644
index 0000000..ad38391
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PackageElementImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PrimitiveTypeImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PrimitiveTypeImpl.class
new file mode 100644
index 0000000..67f518e
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PrimitiveTypeImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeElementImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeElementImpl.class
new file mode 100644
index 0000000..aeefce6
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeElementImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeMirrorImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeMirrorImpl.class
new file mode 100644
index 0000000..28f02e7
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeMirrorImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeParameterElementImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeParameterElementImpl.class
new file mode 100644
index 0000000..6a3fa4e
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeParameterElementImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeVariableImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeVariableImpl.class
new file mode 100644
index 0000000..c91cca1
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeVariableImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypesImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypesImpl.class
new file mode 100644
index 0000000..bb30282
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypesImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/VariableElementImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/VariableElementImpl.class
new file mode 100644
index 0000000..cf7ee79
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/VariableElementImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/WildcardTypeImpl.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/WildcardTypeImpl.class
new file mode 100644
index 0000000..b0e5f7f
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/WildcardTypeImpl.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Archive.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Archive.class
new file mode 100644
index 0000000..87fb837
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Archive.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ArchiveFileObject.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ArchiveFileObject.class
new file mode 100644
index 0000000..56aad32
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ArchiveFileObject.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileManager.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileManager.class
new file mode 100644
index 0000000..e78273b
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileManager.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileObject.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileObject.class
new file mode 100644
index 0000000..7896cf5
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileObject.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ManyToMany.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ManyToMany.class
new file mode 100644
index 0000000..d3dab1f
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ManyToMany.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Options.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Options.class
new file mode 100644
index 0000000..da1092b
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Options.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util$EncodingError.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util$EncodingError.class
new file mode 100644
index 0000000..a552101
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util$EncodingError.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util$EncodingErrorCollector.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util$EncodingErrorCollector.class
new file mode 100644
index 0000000..85a0b61
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util$EncodingErrorCollector.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util.class
new file mode 100644
index 0000000..b7016ff
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ASTNode.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ASTNode.class
index 669b09e..315cb18 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ASTNode.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ASTNode.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.class
index da3a04d..06c0c43 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.class
index c76668a..1d1fd4d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Annotation.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Annotation.class
index d45c0c4..2181281 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Annotation.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Annotation.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Argument.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Argument.class
index 6f0dc60..ed0e215 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Argument.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Argument.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ArrayTypeReference.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ArrayTypeReference.class
index 0b57ef6..0ecdb14 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ArrayTypeReference.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ArrayTypeReference.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Assignment.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Assignment.class
index ae874fc..ec640f9 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Assignment.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Assignment.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.class
index d0b4299..24b1848 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ConstructorDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ConstructorDeclaration.class
index 0a71ea3..6bc7dee 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ConstructorDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ConstructorDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.class
index e310a94..08a90b1 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Expression.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Expression.class
index 50b48f1..9dc6619 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Expression.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Expression.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FakedTrackingVariable.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FakedTrackingVariable.class
index 87b16c3..386d7b6 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FakedTrackingVariable.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FakedTrackingVariable.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.class
index 2f09ff5..6c4fd1a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FieldReference.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FieldReference.class
index adb958b..f78926a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FieldReference.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FieldReference.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression$1BridgeCollector.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression$1BridgeCollector.class
index f0ca01e..bb17a00 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression$1BridgeCollector.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression$1BridgeCollector.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression.class
index ce9fdf8..020af35 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.class
index 0a09c3c..eb412dd 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Javadoc.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Javadoc.class
index 8bec95b..769555f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Javadoc.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Javadoc.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/JavadocAllocationExpression.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/JavadocAllocationExpression.class
index 1686d1f..963f92c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/JavadocAllocationExpression.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/JavadocAllocationExpression.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/JavadocMessageSend.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/JavadocMessageSend.class
index e408cf8..08c65fa 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/JavadocMessageSend.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/JavadocMessageSend.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression$1LambdaTypeBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression$1LambdaTypeBinding.class
index 009ae24..092520d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression$1LambdaTypeBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression$1LambdaTypeBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression$1ShapeComputer.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression$1ShapeComputer.class
index 190ff58..840be61 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression$1ShapeComputer.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression$1ShapeComputer.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression.class
index 7f6e330..a75362a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MemberValuePair$2.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MemberValuePair$2.class
index f17104e..5c14f93 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MemberValuePair$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MemberValuePair$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MemberValuePair.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MemberValuePair.class
index 0453dee..b6a159d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MemberValuePair.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MemberValuePair.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MessageSend.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MessageSend.class
index 2fd6c0c..f037499 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MessageSend.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MessageSend.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.class
index 8b7990e..6131133 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching$1SearchContradictions.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching$1SearchContradictions.class
index 67b9769..dfcfcb3 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching$1SearchContradictions.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching$1SearchContradictions.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching.class
index f130c7e..c654c8a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.class
index 27029d0..fbfcedf 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.class
index 7b37fe6..19ebbe4 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.class
index a7627ed..9b37e5d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.class
index cb3607d..53fd265 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.class
index 10ad5f6..a6b681b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/SingleNameReference.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/SingleNameReference.class
index b8e0376..329a880 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/SingleNameReference.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/SingleNameReference.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TryStatement.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TryStatement.class
index 0866670..f8934ad 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TryStatement.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TryStatement.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.class
index be4c2a8..2aa0f5b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference$AnnotationCollector.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference$AnnotationCollector.class
index 4c9eebd..31f8d0a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference$AnnotationCollector.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference$AnnotationCollector.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference.class
index a5ee484..f3df641 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Wildcard.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Wildcard.class
index d2aa1c2..966803a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Wildcard.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Wildcard.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker$1.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker$1.class
index 95af1bb..4e92a08 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker.class
index 0fbaf32..e0a8903 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker$1.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker$1.class
index 1f0fbfd..637381a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker.class
index 2b81400..01c4796 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/CodeStream.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/CodeStream.class
index 0ac6388..71042ea 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/CodeStream.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/CodeStream.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.class
index a59f307..bd39d22 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/flow/FlowContext.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/flow/FlowContext.class
index 3634b60..e6f0a7e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/flow/FlowContext.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/flow/FlowContext.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptBinaryLocalVariableBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptBinaryLocalVariableBinding.class
new file mode 100644
index 0000000..c150a22
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptBinaryLocalVariableBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptSourceLocalVariableBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptSourceLocalVariableBinding.class
new file mode 100644
index 0000000..aceea76
--- /dev/null
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptSourceLocalVariableBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.class
index cd7466b..59c4600 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BaseTypeBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BaseTypeBinding.class
index 85348e4..6cba986 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BaseTypeBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BaseTypeBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.class
index 77176f8..96b16b8 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BlockScope.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BlockScope.class
index 5bec348..d523088 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BlockScope.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BlockScope.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet$1.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet$1.class
index 33e1d9f..38dd885 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet$ThreeSets.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet$ThreeSets.class
index 7342d24..8865f90 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet$ThreeSets.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet$ThreeSets.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet.class
index 3f8d53b..18098d6 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CaptureBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CaptureBinding.class
index 2963c25..91ca74c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CaptureBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CaptureBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ClassScope.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ClassScope.class
index 8ec7295..b0d605c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ClassScope.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ClassScope.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.class
index 2ad1636..b3408a1 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExceptionFormula.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExceptionFormula.class
index 4086b86..1322e5b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExceptionFormula.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExceptionFormula.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula$1.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula$1.class
index 638324f..fa28f83 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula.class
index 37cfa91..a15cbba 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/FieldBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/FieldBinding.class
index 9a267fb..1f4533c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/FieldBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/FieldBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ImplicitNullAnnotationVerifier.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ImplicitNullAnnotationVerifier.class
index e668210..1dd5b7e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ImplicitNullAnnotationVerifier.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ImplicitNullAnnotationVerifier.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$1.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$1.class
index c69bc07..5b9808d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$2.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$2.class
index bda6ded..03b4fba 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$3.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$3.class
index ee83a48..3fe9751 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$3.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$3.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$Solution.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$Solution.class
index 3289514..e00311d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$Solution.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18$Solution.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.class
index fdbd695..0d4ea9a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceVariable.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceVariable.class
index 5ea506c..9f0e95c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceVariable.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceVariable.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite$EmptyWithAstNode.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite$EmptyWithAstNode.class
index 7b4f25c..432f041 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite$EmptyWithAstNode.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite$EmptyWithAstNode.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.class
index 935629e..ace548e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.class
index f9696f1..5136f6f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.class
index 5de6679..1229ef7 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.class
index 89266dc..68a842c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodScope.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodScope.class
index c3f6da9..c6cb7fb 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodScope.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodScope.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.class
index 50d2709..57bea29 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.class
index 4e5782c..b63f4e0 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MostSpecificExceptionMethodBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MostSpecificExceptionMethodBinding.class
index 3b10d31..177aaa3 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MostSpecificExceptionMethodBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MostSpecificExceptionMethodBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/NullTypeBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/NullTypeBinding.class
index 1b9e5ea..e6e3c9d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/NullTypeBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/NullTypeBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding$LingeringTypeVariableEliminator.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding$LingeringTypeVariableEliminator.class
index 0bb3142..5dfe0e2 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding$LingeringTypeVariableEliminator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding$LingeringTypeVariableEliminator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.class
index c9fb3b2..364d527 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding.class
index d3dbe43..cc0d7b1 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding$1MentionListener.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding$1MentionListener.class
index af044b1..995043a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding$1MentionListener.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding$1MentionListener.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.class
index 5f1bcb8..02f3fe0 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/PolymorphicMethodBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/PolymorphicMethodBinding.class
index 4d6b2f2..4531afe 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/PolymorphicMethodBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/PolymorphicMethodBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ProblemMethodBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ProblemMethodBinding.class
index 5951c44..ab5dd09 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ProblemMethodBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ProblemMethodBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.class
index b988408..637ac4c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$1.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$1.class
index fea21d5..65b8460 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$2.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$2.class
index 3e28aaf..c396523 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$3.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$3.class
index 73c71f8..d1c725f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$3.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding$3.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.class
index 3a63a2f..28686af 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope$1.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope$1.class
index f267b4f..1ced30e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope$2.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope$2.class
index 871e743..be067d2 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope.class
index f123ed6..fb08fc4 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.class
index e254fd0..c89462a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeCollisionException.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeCollisionException.class
index dfadd68..8ebe959 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeCollisionException.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeCollisionException.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticFactoryMethodBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticFactoryMethodBinding.class
index bafc9d3..665d325 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticFactoryMethodBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticFactoryMethodBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticMethodBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticMethodBinding.class
index 5d46bcc..5bacbda 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticMethodBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticMethodBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding$1.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding$1.class
index 6bc998e..729ef61 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.class
index 28ada9a..70c65d6 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBound.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBound.class
index 6c83223..c0a5d96 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBound.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBound.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.class
index b766fc8..141a960 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.class
index 23648ae..30700f3 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/VoidTypeBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/VoidTypeBinding.class
index 5613eaa..0858cab 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/VoidTypeBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/VoidTypeBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/WildcardBinding.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/WildcardBinding.class
index b2f479f..68ad76f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/WildcardBinding.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/WildcardBinding.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/Parser.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/Parser.class
index 15e951a..5bf05de 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/Parser.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/Parser.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/RecoveredElement.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/RecoveredElement.class
index 92de3ce..3a086e7 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/RecoveredElement.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/RecoveredElement.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1.class
index 009d6e0..ca989c8 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1MethodVisitor.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1MethodVisitor.class
index d4ccaaf..609626e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1MethodVisitor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1MethodVisitor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1TypeVisitor.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1TypeVisitor.class
index a9711e2..16b02ce 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1TypeVisitor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass$1TypeVisitor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass.class
index a81c540..93ca2b9 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.class
index aa66f54..5b9d3f4 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/problem/messages.properties b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/problem/messages.properties
index 51a6cf5..11c0127 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/problem/messages.properties
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/compiler/problem/messages.properties
@@ -39,6 +39,8 @@
 #							Bug 392245 - [1.8][compiler][null] Define whether / how @NonNullByDefault applies to TYPE_USE locations
 #							Bug 430150 - [1.8][null] stricter checking against type variables
 #							Bug 434600 - Incorrect null analysis error reporting on type parameters
+#							Bug 439516 - [1.8][null] NonNullByDefault wrongly applied to implicit type bound of binary type
+#							Bug 438467 - [compiler][null] Better error position for "The method _ cannot implement the corresponding method _ due to incompatible nullness constraints"
 #		Jesper S Moller <jesper@selskabet.org> - Contributions for
 #							bug 382701 - [1.8][compiler] Implement semantic analysis of Lambda expressions & Reference expression
 #							bug 384567 - [1.5][compiler] Compiler accepts illegal modifiers on package declaration
@@ -74,6 +76,7 @@
 31 = The member enum {0} can only be defined inside a top-level class or interface or in a static context
 32 = The member enum {0} must be defined inside a static member type
 33 = The type {0} is hiding the type {1}
+34 = {0} is not an annotation type
 
 50 = {0} cannot be resolved
 51 = The local variable {0} may not have been initialized
@@ -110,6 +113,7 @@
 82 = The final field {0} may already have been assigned
 83 = {0} cannot be resolved to a variable
 84 = This static method of interface {0} can only be accessed as {0}.{1}
+85 = The value of the exception parameter {0} is not used
 
 90 = The local variable {0} is hiding another local variable defined in an enclosing scope
 91 = The local variable {0} is hiding a field from type {1}
@@ -775,7 +779,7 @@
 911 = Null type mismatch: required ''{0}'' but the provided value is inferred as @{1}
 912 = Null type safety: The expression of type ''{0}'' needs unchecked conversion to conform to ''{1}''
 913 = A default nullness annotation has not been specified for the package {0}
-914 = The return type is incompatible with the @{1} return from {0}
+914 = The return type is incompatible with ''{1}'' returned from {0} (mismatching null constraints)
 915 = Illegal redefinition of parameter {0}, inherited method from {1} declares this parameter as @{2}
 916 = Illegal redefinition of parameter {0}, inherited method from {1} does not constrain this parameter
 917 = Missing non-null annotation: inherited method from {0} specifies this parameter as @{1}
@@ -825,6 +829,8 @@
 #968 temporary warning has been removed
 969 = Null type mismatch (type annotations): ''null'' is not compatible to the free type variable ''{0}''
 970 = Null type mismatch (type annotations): required ''{0}'' but this expression has type ''{1}'', where ''{0}'' is a free type variable
+971 = The explicit type bound 'Object' is not affected by the nullness default for DefaultLocation.TYPE_BOUND.
+972 = Illegal redefinition of parameter {0}, inherited method from {1} declares this parameter as ''{2}'' (mismatching null constraints)
 
 # Java 8
 1001 = Syntax error, modifiers and annotations are not allowed for the lambda parameter {0} as its type is elided
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/SelectionRequestor.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/SelectionRequestor.class
index 408f808..c3fb1cf 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/SelectionRequestor.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/SelectionRequestor.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/TypeVector.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/TypeVector.class
index 1b70003..1f51d05 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/TypeVector.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/TypeVector.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/dom/SourceRangeVerifier.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/dom/SourceRangeVerifier.class
index ccfbe58..b903b4b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/dom/SourceRangeVerifier.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/dom/SourceRangeVerifier.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex$IntList.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex$IntList.class
index b8967fd..44035c4 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex$IntList.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex$IntList.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex.class
index 49d1e63..a0d7c8c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/JarIndexLocation.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/JarIndexLocation.class
index 3df3b2d..9a733fd 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/JarIndexLocation.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/index/JarIndexLocation.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/indexing/SourceIndexer.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/indexing/SourceIndexer.class
index c028780..35c6c6c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/indexing/SourceIndexer.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/indexing/SourceIndexer.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/ConstructorLocator.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/ConstructorLocator.class
index 9df9125..3aae38f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/ConstructorLocator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/ConstructorLocator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/FieldLocator.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/FieldLocator.class
index 6f35e28..6a63dd4 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/FieldLocator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/FieldLocator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.class
index b56b073..8569a1e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MethodLocator.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MethodLocator.class
index 88a1cd6..1e4ec1f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MethodLocator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MethodLocator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/OrLocator.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/OrLocator.class
index dd8503a..a054df5 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/OrLocator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/OrLocator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/PackageReferenceLocator.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/PackageReferenceLocator.class
index df5de51..520ac0e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/PackageReferenceLocator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/PackageReferenceLocator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/TypeParameterLocator.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/TypeParameterLocator.class
index 84906a9..c7e4198 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/TypeParameterLocator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/TypeParameterLocator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/TypeReferenceLocator.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/TypeReferenceLocator.class
index 73ace3d..831d08b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/TypeReferenceLocator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/search/matching/TypeReferenceLocator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/util/Util.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/util/Util.class
index 64ce284..96888fb 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/util/Util.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/core/util/Util.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetAllocationExpression.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetAllocationExpression.class
index e5b407c..2ed80ae 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetAllocationExpression.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetAllocationExpression.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetFieldReference.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetFieldReference.class
index a3040a4..48e487a 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetFieldReference.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetFieldReference.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetMessageSend.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetMessageSend.class
index 295f7df..6f74542 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetMessageSend.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetMessageSend.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetQualifiedNameReference.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetQualifiedNameReference.class
index 4fd1d0c..52bf598 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetQualifiedNameReference.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetQualifiedNameReference.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetScope.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetScope.class
index 13037da..e617ee8 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetScope.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetScope.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.class
index 6264564..f578098 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.class
index e97c63a..a18b94d 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/formatter/Scribe.class b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/formatter/Scribe.class
index 4e81119..9cbaaf4 100644
--- a/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/formatter/Scribe.class
+++ b/org.aspectj.ajde/classes/org/aspectj/org/eclipse/jdt/internal/formatter/Scribe.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main$CommandController.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main$CommandController.class
index 23f10dd..a9acafa 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main$CommandController.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main$CommandController.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main$MessagePrinter.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main$MessagePrinter.class
index 041ba39..5d6aaf5 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main$MessagePrinter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main$MessagePrinter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main.class
index ec0103b..2500216 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajc/Main.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/CompilerWrapper.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/CompilerWrapper.class
index 8b4cfd1..b9ccf69 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/CompilerWrapper.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/CompilerWrapper.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Config.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Config.class
index 676a69b..a312f27 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Config.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Config.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/DocException.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/DocException.class
index a656219..1047de6 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/DocException.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/DocException.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator$1.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator$1.class
index cca248d..5a51e4e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator$HtmlRelationshipKind.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator$HtmlRelationshipKind.class
index 68ff5c3..708c7ea 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator$HtmlRelationshipKind.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator$HtmlRelationshipKind.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator.class
index 73eb391..d278acb 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/HtmlDecorator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/JavadocRunner.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/JavadocRunner.class
index 6e1a3fe..bcf858e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/JavadocRunner.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/JavadocRunner.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main$1.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main$1.class
index 823e3b1..acaa75c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main$2.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main$2.class
index afca4ed..30d0bc5 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main.class
index ec97404..a05cf31 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Main.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/StructureUtil.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/StructureUtil.class
index 390f597..26efceb 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/StructureUtil.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/StructureUtil.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/StubFileGenerator.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/StubFileGenerator.class
index 0188031..a499849 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/StubFileGenerator.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/StubFileGenerator.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Util.class b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Util.class
index 53fda8f..ed13afc 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Util.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ajdoc/Util.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc10.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc10.class
index 04d90f2..3e8a47e 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc10.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc10.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc11CompilerAdapter$1.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc11CompilerAdapter$1.class
index 58b38aa..bc3b6e9 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc11CompilerAdapter$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc11CompilerAdapter$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc11CompilerAdapter.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc11CompilerAdapter.class
index 740aebc..7cd79b0 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc11CompilerAdapter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc11CompilerAdapter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc2.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc2.class
index 7f88d55..fef597b 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajc2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcCompilerAdapter.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcCompilerAdapter.class
index 6c37a77..3b33040 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcCompilerAdapter.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcCompilerAdapter.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$1.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$1.class
index 2ab1490..3a792bd 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$1Args.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$1Args.class
index 181e027..09fa745 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$1Args.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$1Args.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$2.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$2.class
index 055f918..c367940 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$AntMessageHandler.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$AntMessageHandler.class
index bb22072..ed9f989 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$AntMessageHandler.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$AntMessageHandler.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$GuardedCommand.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$GuardedCommand.class
index 2dbeb5d..837b159 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$GuardedCommand.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask$GuardedCommand.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask.class
index 06ae166..6835a5f 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/AjcTask.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$1.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$1.class
index 385b9a8..6e2d9f9 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$1.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$1.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$2.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$2.class
index 44c1d57..9d30430 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$2.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$2.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Doclet.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Doclet.class
index a158fef..00e4a75 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Doclet.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Doclet.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Group.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Group.class
index 9398b67..ddbf48c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Group.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Group.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Link.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Link.class
index e58f7fe..80c9ddf 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Link.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc$Link.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc.class
index f4952e7..8d0265c 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/Ajdoc.class
Binary files differ
diff --git a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/compilers/Ajc.class b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/compilers/Ajc.class
index 5439cd9..883c2b8 100644
--- a/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/compilers/Ajc.class
+++ b/org.aspectj.ajde/classes/org/aspectj/tools/ant/taskdefs/compilers/Ajc.class
Binary files differ
diff --git a/org.aspectj.ajde/source/org/aspectj/ajde/core/internal/AjdeCoreBuildManager.java b/org.aspectj.ajde/source/org/aspectj/ajde/core/internal/AjdeCoreBuildManager.java
index 0bf95bb..267ac93 100644
--- a/org.aspectj.ajde/source/org/aspectj/ajde/core/internal/AjdeCoreBuildManager.java
+++ b/org.aspectj.ajde/source/org/aspectj/ajde/core/internal/AjdeCoreBuildManager.java
@@ -245,7 +245,7 @@
 
 		BuildArgParser parser = new BuildArgParser(handler);
 
-		AjBuildConfig config = new AjBuildConfig();
+		AjBuildConfig config = new AjBuildConfig(parser);
 
 		parser.populateBuildConfig(config, args, false, configFile);
 
diff --git a/org.aspectj.ajde/source/org/aspectj/ajdt/ajc/BuildArgParser.java b/org.aspectj.ajde/source/org/aspectj/ajdt/ajc/BuildArgParser.java
index 1f8ad86..d152985 100644
--- a/org.aspectj.ajde/source/org/aspectj/ajdt/ajc/BuildArgParser.java
+++ b/org.aspectj.ajde/source/org/aspectj/ajdt/ajc/BuildArgParser.java
@@ -12,29 +12,13 @@
 
 package org.aspectj.ajdt.ajc;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Locale;
-import java.util.StringTokenizer;
-
+import org.aspectj.ajdt.internal.compiler.lookup.EclipseSourceLocation;
 import org.aspectj.ajdt.internal.core.builder.AjBuildConfig;
-import org.aspectj.bridge.CountingMessageHandler;
-import org.aspectj.bridge.IMessage;
-import org.aspectj.bridge.IMessageHandler;
-import org.aspectj.bridge.ISourceLocation;
-import org.aspectj.bridge.Message;
-import org.aspectj.bridge.MessageUtil;
-import org.aspectj.bridge.SourceLocation;
-import org.aspectj.bridge.Version;
+import org.aspectj.bridge.*;
+import org.aspectj.org.eclipse.jdt.core.compiler.CategorizedProblem;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.AptProblem;
 import org.aspectj.org.eclipse.jdt.internal.compiler.batch.Main;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.aspectj.org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 import org.aspectj.util.FileUtil;
 import org.aspectj.util.LangUtil;
@@ -42,6 +26,12 @@
 import org.aspectj.weaver.Dump;
 import org.aspectj.weaver.WeaverMessages;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.*;
+
 @SuppressWarnings("unchecked")
 public class BuildArgParser extends Main {
 
@@ -88,7 +78,7 @@
 	 * Overrides super's bundle.
 	 */
 	public BuildArgParser(PrintWriter writer, IMessageHandler handler) {
-		super(writer, writer, false);
+		super(writer, writer, false, null, null);
 
 		if (writer instanceof StringPrintWriter) {
 			errorSink = ((StringPrintWriter) writer).stringWriter.getBuffer();
@@ -105,19 +95,19 @@
 
 	/**
 	 * Generate build configuration for the input args, passing to handler any error messages.
-	 * 
+	 *
 	 * @param args the String[] arguments for the build configuration
 	 * @return AjBuildConfig per args, which will be invalid unless there are no handler errors.
 	 */
 	public AjBuildConfig genBuildConfig(String[] args) {
-		AjBuildConfig config = new AjBuildConfig();
+		final AjBuildConfig config = new AjBuildConfig(this);
 		populateBuildConfig(config, args, true, null);
 		return config;
 	}
 
 	/**
 	 * Generate build configuration for the input arguments, passing to handler any error messages.
-	 * 
+	 *
 	 * @param args the String[] arguments for the build configuration
 	 * @param setClasspath determines if the classpath should be parsed and set on the build configuration
 	 * @param configFile can be null
@@ -166,9 +156,9 @@
 			// without these it will go searching for reasonable values from properties
 			// TODO fix org.eclipse.jdt.internal.compiler.batch.Main so this hack isn't needed
 			javaArgList.add("-classpath");
-			javaArgList.add(System.getProperty("user.dir"));
+			javaArgList.add(parser.classpath == null ? System.getProperty("user.dir") : parser.classpath);
 			javaArgList.add("-bootclasspath");
-			javaArgList.add(System.getProperty("user.dir"));
+			javaArgList.add(parser.bootclasspath == null ? System.getProperty("user.dir") : parser.bootclasspath);
 			javaArgList.addAll(parser.getUnparsedArgs());
 			super.configure(javaArgList.toArray(new String[javaArgList.size()]));
 
@@ -256,6 +246,34 @@
 		System.out.println(version);
 	}
 
+	@Override
+	public void addExtraProblems(CategorizedProblem problem) {
+		super.addExtraProblems(problem);
+		if (problem instanceof AptProblem) {
+			handler.handleMessage(newAptMessage((AptProblem)problem));
+		}
+	}
+
+	private IMessage newAptMessage(AptProblem problem) {
+		String message = problem.getMessage();
+		boolean isError = problem.isError();
+		if (problem._referenceContext != null) {
+			return new Message(message,
+					new EclipseSourceLocation(problem._referenceContext.compilationResult(), problem.getSourceStart(), problem.getSourceEnd()),
+					isError);
+		} else {
+			return new Message(message, null, isError);
+		}
+	}
+
+	@Override
+	public void initializeAnnotationProcessorManager() {
+		if (this.compilerOptions.complianceLevel < ClassFileConstants.JDK1_6 || !this.compilerOptions.processAnnotations)
+			return;
+		super.initializeAnnotationProcessorManager();
+	}
+
+	@Override
 	public void printUsage() {
 		System.out.println(getUsage());
 		System.out.flush();
@@ -263,7 +281,7 @@
 
 	/**
 	 * Get messages not dumped to handler or any PrintWriter.
-	 * 
+	 *
 	 * @param flush if true, empty errors
 	 * @return null if none, String otherwise
 	 * @see BuildArgParser()
@@ -668,6 +686,14 @@
 				// dirLookahead(arg, args, nextArgIndex);
 			} else if (arg.equals("-proceedOnError")) {
 				buildConfig.setProceedOnError(true);
+			} else if (arg.equals("-processorpath")) { // -processorpath <directories and ZIP archives separated by pathseporator
+				addPairToUnparsed(args, arg, nextArgIndex, "-processorpath requires list of external directories or zip archives");
+			} else if (arg.equals("-processor")) { // -processor <class1[,class2,...]>
+				addPairToUnparsed(args, arg, nextArgIndex, "-processor requires list of processors' classes");
+			} else if (arg.equals("-s")) { // -s <dir> destination directory for generated source files
+				addPairToUnparsed(args, arg, nextArgIndex, "-s requires directory");
+			} else if (arg.equals("-classNames")) { // -classNames <className1[,className2,...]>
+				addPairToUnparsed(args, arg, nextArgIndex, "-classNames requires list of classes");
 			} else if (new File(arg).isDirectory()) {
 				showError("dir arg not permitted: " + arg);
 			} else if (arg.startsWith("-Xajruntimetarget")) {
@@ -766,5 +792,27 @@
 			return new File(dir, name);
 		}
 
+		private void addPairToUnparsed(LinkedList<Arg> args, String arg, int nextArgIndex, String errorMessage) {
+			if (args.size() <= nextArgIndex) {
+				showError(errorMessage);
+				return;
+			}
+			final Arg nextArg = args.get(nextArgIndex);
+			args.remove(nextArg);
+			unparsedArgs.add(arg);
+			unparsedArgs.add(nextArg.getValue());
+		}
+
+		private int indexOf(LinkedList<Arg> args, String arg) {
+			int index = 0;
+			for (Arg argument : args) {
+				if (arg.equals(argument.getValue())) {
+					return index;
+				}
+				index++;
+			}
+			return -1;
+		}
+
 	}
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/ajdt/ajc/messages.properties b/org.aspectj.ajde/source/org/aspectj/ajdt/ajc/messages.properties
index 51bbc92..77a40f1 100644
--- a/org.aspectj.ajde/source/org/aspectj/ajdt/ajc/messages.properties
+++ b/org.aspectj.ajde/source/org/aspectj/ajdt/ajc/messages.properties
@@ -4,8 +4,8 @@
      The -Xlintfile:lint.properties allows fine-grained control. In tools.jar, see
      org/aspectj/weaver/XlintDefault.properties for the default behavior and a template to copy. 
 ### AspectJ-specific messages 
-compiler.name = AspectJ Compiler 1.8.1
-compiler.version = Eclipse Compiler BETA_JAVA8_3f60ba6, 3.10
+compiler.name = AspectJ Compiler 1.8.2
+compiler.version = Eclipse Compiler BETA_JAVA8_2b07958, 3.11
 compiler.copyright = 
 
 ## this next one superceded by above...
diff --git a/org.aspectj.ajde/source/org/aspectj/ajdt/internal/compiler/CompilerAdapter.aj b/org.aspectj.ajde/source/org/aspectj/ajdt/internal/compiler/CompilerAdapter.aj
index 6079128..0d09a49 100644
--- a/org.aspectj.ajde/source/org/aspectj/ajdt/internal/compiler/CompilerAdapter.aj
+++ b/org.aspectj.ajde/source/org/aspectj/ajdt/internal/compiler/CompilerAdapter.aj
@@ -1,12 +1,12 @@
 /* *******************************************************************
  * Copyright (c) 2005 Contributors.
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
  *   Adrian Colyer			Initial implementation
  * ******************************************************************/
 package org.aspectj.ajdt.internal.compiler;
@@ -16,60 +16,65 @@
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
 import org.aspectj.org.eclipse.jdt.internal.compiler.problem.AbortCompilation;
 
+import java.util.Stack;
+
 /**
  * This aspect implements the necessary hooks around the JDT compiler to allow AspectJ to do its
  * job
  */
 public privileged aspect CompilerAdapter {
-	
+
 	/**
 	 * A default adapter factory for circumstances when this code is used outside of AspectJ
 	 * Seems overkill?? Will that ever happen???
 	 */
-	private static ICompilerAdapterFactory adapterFactory = 
+	private static ICompilerAdapterFactory adapterFactory =
 		new ICompilerAdapterFactory() {
 				public ICompilerAdapter getAdapter(Compiler forCompiler) {
 					return new DefaultCompilerAdapter(forCompiler);
 				}
 		};
-	
+
 	/**
 	 * Called by AspectJ to inform the JDT of the AspectJ compiler adapter factor to use.
 	 */
 	public static void setCompilerAdapterFactory(ICompilerAdapterFactory factory) {
 		adapterFactory = factory;
 	}
-	
-	/**
-	 * adapter to drive on compilation events.
-	 */
-	private ICompilerAdapter compilerAdapter;
- 
-	pointcut dietParsing(Compiler compiler): 
+
+  /**
+   * If annotation processing is enabled method Compiler.compile(..) could be called recursively.
+   * So here we introduce stack of adapters instead of single adapter to drive on compilation events.
+   */
+  private final Stack<ICompilerAdapter> compilerAdapterStack = new Stack<ICompilerAdapter>();
+
+	pointcut dietParsing(Compiler compiler):
 		execution(void Compiler.beginToCompile(ICompilationUnit[])) && this(compiler);
-	
+
 	pointcut compiling(Compiler compiler, ICompilationUnit[] sourceUnits) :
 		execution(* Compiler.compile(..)) && args(sourceUnits) && this(compiler);
-	
+
 	pointcut processing(CompilationUnitDeclaration unit, int index) :
 		execution(* Compiler.process(..)) && args(unit,index);
-	
+
 	pointcut resolving(CompilationUnitDeclaration unit) :
 		call(* CompilationUnitDeclaration.resolve(..)) && target(unit) && within(Compiler);
-	
+
 	pointcut analysing(CompilationUnitDeclaration unit) :
 		call(* CompilationUnitDeclaration.analyseCode(..)) && target(unit) && within(Compiler);
-	
+
 	pointcut generating(CompilationUnitDeclaration unit) :
 		call(* CompilationUnitDeclaration.generateCode(..)) && target(unit) && within(Compiler);
-	
+
 	before(Compiler compiler, ICompilationUnit[] sourceUnits) : compiling(compiler, sourceUnits) {
-		compilerAdapter = adapterFactory.getAdapter(compiler);
+		final ICompilerAdapter compilerAdapter = adapterFactory.getAdapter(compiler);
+		compilerAdapterStack.push(compilerAdapter);
 		compilerAdapter.beforeCompiling(sourceUnits);
 	}
-	
+
 	after(Compiler compiler) returning : compiling(compiler, ICompilationUnit[]) {
 		try {
+			final ICompilerAdapter compilerAdapter = compilerAdapterStack.pop();
 			compilerAdapter.afterCompiling(compiler.unitsToProcess);
 		} catch (AbortCompilation e) {
 			compiler.handleInternalException(e, null);
@@ -80,45 +85,45 @@
 			compiler.handleInternalException(e, null, null);
 			throw e; // rethrow
 		} finally {
-			compiler.reset();
-			this.compilerAdapter = null;
+			if (compilerAdapterStack.isEmpty())
+				compiler.reset();
 		}
 	}
-	
+
 	before(CompilationUnitDeclaration unit, int index) : processing(unit,index) {
-		compilerAdapter.beforeProcessing(unit);
+		compilerAdapterStack.peek().beforeProcessing(unit);
 	}
-	
+
 	after(Compiler compiler) returning(): dietParsing(compiler){
-		compilerAdapter.afterDietParsing(compiler.unitsToProcess);
+		compilerAdapterStack.peek().afterDietParsing(compiler.unitsToProcess);
 	}
-	
+
 	// We want this to run even in the erroneous case to ensure 'compiled:' gets out...
 	after(CompilationUnitDeclaration unit, int index) : processing(unit, index) {
-		compilerAdapter.afterProcessing(unit,index);
+		compilerAdapterStack.peek().afterProcessing(unit,index);
 	}
-	
+
 	before(CompilationUnitDeclaration unit) : resolving(unit) {
-		compilerAdapter.beforeResolving(unit);
+		compilerAdapterStack.peek().beforeResolving(unit);
 	}
-	
+
 	after(CompilationUnitDeclaration unit) returning : resolving(unit) {
-		compilerAdapter.afterResolving(unit);
+		compilerAdapterStack.peek().afterResolving(unit);
 	}
-	
+
 	before(CompilationUnitDeclaration unit) : analysing(unit) {
-		compilerAdapter.beforeAnalysing(unit);
+		compilerAdapterStack.peek().beforeAnalysing(unit);
 	}
-	
+
 	after(CompilationUnitDeclaration unit) returning : analysing(unit) {
-		compilerAdapter.afterAnalysing(unit);
+		compilerAdapterStack.peek().afterAnalysing(unit);
 	}
-	
+
 	before(CompilationUnitDeclaration unit) : generating(unit) {
-		compilerAdapter.beforeGenerating(unit);
+		compilerAdapterStack.peek().beforeGenerating(unit);
 	}
-	
+
 	after(CompilationUnitDeclaration unit) returning : generating(unit) {
-		compilerAdapter.afterGenerating(unit);
+		compilerAdapterStack.peek().afterGenerating(unit);
 	}
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java b/org.aspectj.ajde/source/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java
index e296c74..49b0f73 100644
--- a/org.aspectj.ajde/source/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java
+++ b/org.aspectj.ajde/source/org/aspectj/ajdt/internal/compiler/lookup/AjLookupEnvironment.java
@@ -31,31 +31,13 @@
 import org.aspectj.bridge.context.CompilationAndWeavingContext;
 import org.aspectj.bridge.context.ContextToken;
 import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Annotation;
-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.NormalAnnotation;
-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference;
-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.SingleTypeReference;
-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeReference;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.*;
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.AccessRestriction;
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.IBinaryType;
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.INameEnvironment;
 import org.aspectj.org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 import org.aspectj.org.eclipse.jdt.internal.compiler.impl.ITypeRequestor;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ClassScope;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LocalTypeBinding;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MissingTypeBinding;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TagBits;
-import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.*;
 import org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemReporter;
 import org.aspectj.weaver.AnnotationAJ;
 import org.aspectj.weaver.ConcreteTypeMunger;
@@ -77,13 +59,13 @@
 
 /**
  * Overrides the default eclipse LookupEnvironment for two purposes.
- * 
+ *
  * 1. To provide some additional phases to <code>completeTypeBindings</code> that weave declare parents and inter-type declarations
  * at the correct time.
- * 
+ *
  * 2. To intercept the loading of new binary types to ensure the they will have declare parents and inter-type declarations woven
  * when appropriate.
- * 
+ *
  * @author Jim Hugunin
  */
 public class AjLookupEnvironment extends LookupEnvironment implements AnonymousClassCreationListener {
@@ -211,10 +193,10 @@
 		factory.finishTypeMungers();
 
 		// now do weaving
-		List<ConcreteTypeMunger> typeMungers = factory.getTypeMungers();
+		final List<ConcreteTypeMunger> typeMungers = factory.getTypeMungers();
 
-		List<DeclareParents> declareParents = factory.getDeclareParents();
-		List<DeclareAnnotation> declareAnnotationOnTypes = factory.getDeclareAnnotationOnTypes();
+		final List<DeclareParents> declareParents = factory.getDeclareParents();
+		final List<DeclareAnnotation> declareAnnotationOnTypes = factory.getDeclareAnnotationOnTypes();
 
 		doPendingWeaves();
 
@@ -306,6 +288,10 @@
 		AsmManager.setCompletingTypeBindings(false);
 		factory.getWorld().getCrosscuttingMembersSet().verify();
 		CompilationAndWeavingContext.leavingPhase(completeTypeBindingsToken);
+
+		if (isProcessingAnnotations) {
+			throw new SourceTypeCollisionException(); // TODO(yushkovskiy): temporary solution; forcing to recompile units to insert mungers into types
+		}
 	}
 
 	// /**
@@ -347,7 +333,7 @@
 	// }
 	// }
 
-	public void doSupertypesFirst(ReferenceBinding rb, Collection yetToProcess) {
+	public void doSupertypesFirst(ReferenceBinding rb, Collection<? extends ReferenceBinding> yetToProcess) {
 		if (rb instanceof SourceTypeBinding) {
 			if (yetToProcess.contains(rb)) {
 				collectAllITDsAndDeclares((SourceTypeBinding) rb, yetToProcess);
@@ -363,11 +349,11 @@
 
 	/**
 	 * Find all the ITDs and Declares, but it is important we do this from the supertypes down to the subtypes.
-	 * 
+	 *
 	 * @param sourceType
 	 * @param yetToProcess
 	 */
-	private void collectAllITDsAndDeclares(SourceTypeBinding sourceType, Collection yetToProcess) {
+	private void collectAllITDsAndDeclares(SourceTypeBinding sourceType, Collection<? extends ReferenceBinding> yetToProcess) {
 		// Look at the supertype first
 		ContextToken tok = CompilationAndWeavingContext.enteringPhase(CompilationAndWeavingContext.COLLECTING_ITDS_AND_DECLARES,
 				sourceType.sourceName);
@@ -396,7 +382,7 @@
 	 * compile... it stops recursing the first time it hits a type we aren't going to process during this compile. This could cause
 	 * problems if you supply 'pieces' of a hierarchy, i.e. the bottom and the top, but not the middle - but what the hell are you
 	 * doing if you do that?
-	 * 
+	 *
 	 * @param mode 0=do everything, 1=do declare parents, 2=do ITDs
 	 */
 	private void weaveIntertypes(List<SourceTypeBinding> typesToProcess, SourceTypeBinding typeToWeave,
@@ -760,7 +746,7 @@
 				}
 			}
 
-			List forRemoval = new ArrayList();
+			List<Object> forRemoval = new ArrayList<Object>();
 			// now lets loop over and over until we have done all we can
 			while ((anyNewAnnotations || anyNewParents) && (!decpToRepeat.isEmpty() || !decaToRepeat.isEmpty())) {
 				anyNewParents = anyNewAnnotations = false;
@@ -860,7 +846,7 @@
 	/**
 	 * Called when we discover we are weaving intertype declarations on some type that has an existing 'WeaverStateInfo' object -
 	 * this is typically some previously woven type that has been passed on the inpath.
-	 * 
+	 *
 	 * sourceType and onType are the 'same type' - the former is the 'Eclipse' version and the latter is the 'Weaver' version.
 	 */
 	private void processTypeMungersFromExistingWeaverState(SourceTypeBinding sourceType, ResolvedType onType) {
@@ -1174,8 +1160,8 @@
 
 		// AsmRelationshipProvider.getDefault().addDeclareAnnotationRelationship(
 		// decA.getSourceLocation(), rtx.getSourceLocation());
-		Annotation abefore[] = sourceType.scope.referenceContext.annotations;
-		Annotation[] newset = new Annotation[toAdd.length + (abefore == null ? 0 : abefore.length)];
+		final Annotation[] abefore = sourceType.scope.referenceContext.annotations;
+		final Annotation[] newset = new Annotation[toAdd.length + (abefore == null ? 0 : abefore.length)];
 		System.arraycopy(toAdd, 0, newset, 0, toAdd.length);
 		if (abefore != null) {
 			System.arraycopy(abefore, 0, newset, toAdd.length, abefore.length);
@@ -1434,12 +1420,35 @@
 	/**
 	 * Callback driven when the compiler detects an anonymous type during block resolution. We need to add it to the weaver so that
 	 * we don't trip up later.
-	 * 
+	 *
 	 * @param aBinding
 	 */
 	public void anonymousTypeBindingCreated(LocalTypeBinding aBinding) {
 		factory.addSourceTypeBinding(aBinding, null);
 	}
+
+  @Override
+  public void buildTypeBindings(CompilationUnitDeclaration unit, AccessRestriction accessRestriction) {
+    if (this.isProcessingAnnotations && hasAspectDeclarations(unit)) {
+      throw new SourceTypeCollisionException();
+    }
+    super.buildTypeBindings(unit, accessRestriction);
+  }
+
+  private static boolean hasAspectDeclarations(CompilationUnitDeclaration unit) {
+    for (int j = 0; j < unit.types.length; j++) {
+      if (unit.types[j] instanceof AspectDeclaration) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override
+  public void reset() {
+    this.factory.cleanup();
+    super.reset();
+  }
 }
 
 // commented out, supplied as info on how to manipulate annotations in an
diff --git a/org.aspectj.ajde/source/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java b/org.aspectj.ajde/source/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java
index c6cdd88..e99cac6 100644
--- a/org.aspectj.ajde/source/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java
+++ b/org.aspectj.ajde/source/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java
@@ -24,6 +24,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
+import org.aspectj.ajdt.ajc.BuildArgParser;
 
 import org.aspectj.ajdt.internal.compiler.CompilationResultDestinationManager;
 import org.aspectj.util.FileUtil;
@@ -65,7 +66,9 @@
 
 	private int changes = EVERYTHING; // bitflags, see CompilerConfigurationChangeFlags
 
-	private AjCompilerOptions options;
+	private final AjCompilerOptions options;
+
+	private final BuildArgParser buildArgParser;
 
 	// incremental variants handled by the compiler client, but parsed here
 	private boolean incrementalMode;
@@ -105,10 +108,15 @@
 	 * and enh. 29769. The settings here are duplicated from those set in org.eclipse.jdt.internal.compiler.batch.Main, but I've
 	 * elected to copy them rather than refactor the JDT class since this keeps integration with future JDT releases easier (?).
 	 */
-	public AjBuildConfig() {
+	public AjBuildConfig(BuildArgParser buildArgParser) {
+		this.buildArgParser = buildArgParser;
 		options = new AjCompilerOptions();
 	}
 
+	public BuildArgParser getBuildArgParser() {
+		return buildArgParser;
+	}
+
 	/**
 	 * returned files includes
 	 * <ul>
@@ -116,7 +124,7 @@
 	 * <li>files listed by reference in argument list files</li>
 	 * <li>files contained in sourceRootDir if that exists</li>
 	 * </ul>
-	 * 
+	 *
 	 * @return all source files that should be compiled.
 	 */
 	public List<File> getFiles() {
@@ -334,7 +342,7 @@
 	 * <li>this only sets one of outputDir and outputJar as needed</li>
 	 * <ul>
 	 * This also configures super if javaOptions change.
-	 * 
+	 *
 	 * @param global the AjBuildConfig to read globals from
 	 */
 	public void installGlobals(AjBuildConfig global) { // XXX relies on default values
@@ -445,7 +453,7 @@
 	public String getLintMode() {
 		return lintMode;
 	}
-	
+
 	public Map<String,String> getLintOptionsMap() {
 		return lintOptionsMap;
 	}
@@ -697,7 +705,7 @@
 	/**
 	 * Indicates what has changed in this configuration compared to the last time it was used, allowing the state management logic
 	 * to make intelligent optimizations and skip unnecessary work.
-	 * 
+	 *
 	 * @param changes set of bitflags, see {@link CompilerConfigurationChangeFlags} for flags
 	 */
 	public void setChanged(int changes) {
@@ -706,7 +714,7 @@
 
 	/**
 	 * Return the bit flags indicating what has changed since the last time this config was used.
-	 * 
+	 *
 	 * @return the bitflags according too {@link CompilerConfigurationChangeFlags}
 	 */
 	public int getChanged() {
diff --git a/org.aspectj.ajde/source/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java b/org.aspectj.ajde/source/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
index 76b9f5b..0dda15c 100644
--- a/org.aspectj.ajde/source/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
+++ b/org.aspectj.ajde/source/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
@@ -37,6 +37,7 @@
 import java.util.jar.Manifest;
 import java.util.zip.ZipEntry;
 
+import org.aspectj.ajdt.ajc.BuildArgParser;
 import org.aspectj.ajdt.internal.compiler.AjCompilerAdapter;
 import org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter;
 import org.aspectj.ajdt.internal.compiler.CompilationResultDestinationManager;
@@ -80,7 +81,6 @@
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.INameEnvironment;
 import org.aspectj.org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
-import org.aspectj.org.eclipse.jdt.internal.compiler.impl.IrritantSet;
 import org.aspectj.org.eclipse.jdt.internal.compiler.parser.Parser;
 import org.aspectj.org.eclipse.jdt.internal.compiler.problem.AbortCompilation;
 import org.aspectj.org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
@@ -134,7 +134,7 @@
 	private boolean batchCompile = true;
 	private INameEnvironment environment;
 
-	private Map /* String -> List<UCF> */binarySourcesForTheNextCompile = new HashMap();
+	private Map<String, List<UnwovenClassFile>> /* String -> List<UCF> */binarySourcesForTheNextCompile = new HashMap<String, List<UnwovenClassFile>>();
 
 	// FIXME asc should this really be in here?
 	// private AsmManager structureModel;
@@ -146,8 +146,8 @@
 
 	/**
 	 * Enable check for runtime version, used only by Ant/command-line Main.
-	 * 
-	 * @param main Main unused except to limit to non-null clients.
+	 *
+	 * @param caller Main unused except to limit to non-null clients.
 	 */
 	public static void enableRuntimeVersionCheck(Main caller) {
 		DO_RUNTIME_VERSION_CHECK = null != caller;
@@ -191,7 +191,7 @@
 
 	/**
 	 * Perform a build.
-	 * 
+	 *
 	 * @return true if the build was successful (ie. no errors)
 	 */
 	private boolean performBuild(AjBuildConfig buildConfig, IMessageHandler baseHandler, boolean isFullBuild) throws IOException,
@@ -203,8 +203,8 @@
 			((ILifecycleAware) baseHandler).buildStarting(!isFullBuild);
 		}
 		CompilationAndWeavingContext.reset();
-		int phase = isFullBuild ? CompilationAndWeavingContext.BATCH_BUILD : CompilationAndWeavingContext.INCREMENTAL_BUILD;
-		ContextToken ct = CompilationAndWeavingContext.enteringPhase(phase, buildConfig);
+		final int phase = isFullBuild ? CompilationAndWeavingContext.BATCH_BUILD : CompilationAndWeavingContext.INCREMENTAL_BUILD;
+		final ContextToken ct = CompilationAndWeavingContext.enteringPhase(phase, buildConfig);
 		try {
 			if (isFullBuild) {
 				this.state = new AjState(this);
@@ -212,7 +212,7 @@
 
 			this.state.setCouldBeSubsequentIncrementalBuild(this.environmentSupportsIncrementalCompilation);
 
-			boolean canIncremental = state.prepareForNextBuild(buildConfig);
+			final boolean canIncremental = state.prepareForNextBuild(buildConfig);
 			if (!canIncremental && !isFullBuild) { // retry as batch?
 				CompilationAndWeavingContext.leavingPhase(ct);
 				if (state.listenerDefined()) {
@@ -224,7 +224,7 @@
 
 			if (buildConfig == null || buildConfig.isCheckRuntimeVersion()) {
 				if (DO_RUNTIME_VERSION_CHECK) {
-					String check = checkRtJar(buildConfig);
+					final String check = checkRtJar(buildConfig);
 					if (check != null) {
 						if (FAIL_IF_RUNTIME_NOT_FOUND) {
 							MessageUtil.error(handler, check);
@@ -353,7 +353,7 @@
 
 			// for bug 113554: support ajsym file generation for command line builds
 			if (buildConfig.isGenerateCrossRefsMode()) {
-				File configFileProxy = new File(buildConfig.getOutputDir(), CROSSREFS_FILE_NAME);
+				final File configFileProxy = new File(buildConfig.getOutputDir(), CROSSREFS_FILE_NAME);
 				state.getStructureModel().writeStructureModel(configFileProxy.getAbsolutePath());
 			}
 
@@ -389,7 +389,7 @@
 			}
 			ret = !handler.hasErrors();
 			if (getBcelWorld() != null) {
-				BcelWorld bcelWorld = getBcelWorld();
+				final BcelWorld bcelWorld = getBcelWorld();
 				bcelWorld.reportTimers();
 				bcelWorld.tidyUp();
 			}
@@ -404,7 +404,7 @@
 
 	/**
 	 * Open an output jar file in which to write the compiler output.
-	 * 
+	 *
 	 * @param outJar the jar file to open
 	 * @return true if successful
 	 */
@@ -547,7 +547,7 @@
 	/**
 	 * Add a directory entry to the output zip file. Don't do anything if not writing out to a zip file. A directory entry is one
 	 * whose filename ends with '/'
-	 * 
+	 *
 	 * @param directory the directory path
 	 * @param srcloc the src of the directory entry, for use when creating a warning message
 	 * @throws IOException if something goes wrong creating the new zip entry
@@ -769,7 +769,7 @@
 	/**
 	 * Responsible for managing the ASM model between builds. Contains the policy for maintaining the persistance of elements in the
 	 * model.
-	 * 
+	 *
 	 * This code is driven before each 'fresh' (batch) build to create a new model.
 	 */
 	private void setupModel(AjBuildConfig config) {
@@ -1021,10 +1021,15 @@
 		}
 
 		org.aspectj.ajdt.internal.compiler.CompilerAdapter.setCompilerAdapterFactory(this);
-		org.aspectj.org.eclipse.jdt.internal.compiler.Compiler compiler = new org.aspectj.org.eclipse.jdt.internal.compiler.Compiler(
-				environment, DefaultErrorHandlingPolicies.proceedWithAllProblems(), buildConfig.getOptions().getMap(),
-				getBatchRequestor(), getProblemFactory());
+		final Map<?, ?> settings = buildConfig.getOptions().getMap();
+		final BuildArgParser bMain = buildConfig.getBuildArgParser();
 
+		final org.aspectj.org.eclipse.jdt.internal.compiler.Compiler compiler = new org.aspectj.org.eclipse.jdt.internal.compiler.Compiler(
+			environment, DefaultErrorHandlingPolicies.proceedWithAllProblems(), settings,
+			getBatchRequestor(), getProblemFactory());
+		bMain.compilerOptions = compiler.options;
+		bMain.batchCompiler = compiler;
+		bMain.initializeAnnotationProcessorManager();
 		compiler.options.produceReferenceInfo = true; // TODO turn off when not needed
 
 		try {
@@ -1069,7 +1074,6 @@
 
 	public ICompilerRequestor getBatchRequestor() {
 		return new ICompilerRequestor() {
-
 			public void acceptResult(CompilationResult unitResult) {
 				// end of compile, must now write the results to the output destination
 				// this is either a jar file or a file in a directory
@@ -1343,7 +1347,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.aspectj.ajdt.internal.compiler.AjCompiler.IOutputClassFileNameProvider#getOutputClassFileName(char[])
 	 */
 	public String getOutputClassFileName(char[] eclipseClassFileName, CompilationResult result) {
@@ -1366,7 +1370,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jdt.internal.compiler.ICompilerAdapterFactory#getAdapter(org.eclipse.jdt.internal.compiler.Compiler)
 	 */
 	public ICompilerAdapter getAdapter(org.aspectj.org.eclipse.jdt.internal.compiler.Compiler forCompiler) {
@@ -1406,7 +1410,7 @@
 
 	/**
 	 * Some AspectJ lint options need to be known about in the compiler. This is how we pass them over...
-	 * 
+	 *
 	 * @param forCompiler
 	 */
 	private void populateCompilerOptionsFromLintSettings(org.aspectj.org.eclipse.jdt.internal.compiler.Compiler forCompiler) {
@@ -1420,10 +1424,10 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.aspectj.ajdt.internal.compiler.IBinarySourceProvider#getBinarySourcesForThisWeave()
 	 */
-	public Map getBinarySourcesForThisWeave() {
+	public Map<String, List<UnwovenClassFile>> getBinarySourcesForThisWeave() {
 		return binarySourcesForTheNextCompile;
 	}
 
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/compiler/IProblem.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/compiler/IProblem.java
index 3eff724..1a1f6f7 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/compiler/IProblem.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/compiler/IProblem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -192,6 +192,8 @@
  *									NonNullDefaultDetailIsNotEvaluated
  *									NullNotCompatibleToFreeTypeVariable
  *									NullityMismatchAgainstFreeTypeVariable
+ *									ImplicitObjectBoundNoNullDefault
+ *									IllegalParameterNullityRedefinition
  *      Jesper S Moller  - added the following constants
  *									TargetTypeNotAFunctionalInterface
  *									OuterLocalMustBeEffectivelyFinal
@@ -421,6 +423,8 @@
 	int NonStaticContextForEnumMemberType = Internal + 32;
 	/** @since 3.3 */
 	int TypeHidingType = TypeRelated + 33;
+	/** @since 3.11 */
+	int NotAnnotationType = TypeRelated + 34;
 
 	// variables
 	int UndefinedName = Internal + FieldRelated + 50;
@@ -474,6 +478,10 @@
 	int UnresolvedVariable = FieldRelated + 83;
 	/** @since 3.10 */
 	int NonStaticOrAlienTypeReceiver = MethodRelated + 84;
+
+	/** @since 3.11 */
+	int ExceptionParameterIsNeverUsed = Internal + 85;
+
 	// variable hiding
 	/** @since 3.0 */
 	int LocalVariableHidingLocalVariable = Internal + 90;
@@ -1810,6 +1818,11 @@
 	int NullNotCompatibleToFreeTypeVariable = 969;
 	/** @since 3.10 */
 	int NullityMismatchAgainstFreeTypeVariable = 970;
+	/** @since 3.11 */
+	int ImplicitObjectBoundNoNullDefault = 971;
+	/** @since 3.11 */
+	int IllegalParameterNullityRedefinition = MethodRelated + 972;
+
 
 	// Java 8 work
 	/** @since 3.10 */
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/dom/TypeBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/dom/TypeBinding.java
index 3f52f6d..c4c2f6a 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/dom/TypeBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/dom/TypeBinding.java
@@ -7,6 +7,8 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
  *******************************************************************************/
 
 package org.aspectj.org.eclipse.jdt.core.dom;
@@ -22,6 +24,7 @@
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CaptureBinding;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.IntersectionCastTypeBinding;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LocalTypeBinding;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
@@ -465,7 +468,7 @@
 	public ITypeBinding getTypeDeclaration() {
 		if (this.binding instanceof ParameterizedTypeBinding)
 			return this.resolver.getTypeBinding(((ParameterizedTypeBinding)this.binding).genericType());
-		return this.resolver.getTypeBinding(this.binding.unannotated());
+		return this.resolver.getTypeBinding(this.binding.unannotated(false));
 	}
 	
 	/* (non-Javadoc)
@@ -682,6 +685,10 @@
 				buffer.append(brackets);
 				return String.valueOf(buffer);
 
+			case Binding.INTERSECTION_CAST_TYPE :
+				// just use the first bound for now (same kludge as in IntersectionCastTypeBinding#constantPoolName())
+				return new String(((IntersectionCastTypeBinding) this.binding).getIntersectingTypes()[0].sourceName());
+
 			default :
 				if (isPrimitive() || isNullType()) {
 					BaseTypeBinding baseTypeBinding = (BaseTypeBinding) this.binding;
@@ -1125,7 +1132,7 @@
 			return false;
 		}
 		org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding otherBinding = ((TypeBinding) other).binding;
-		if (org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding.equalsEquals(otherBinding.unannotated(), this.binding.unannotated())) {
+		if (org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding.equalsEquals(otherBinding.unannotated(false), this.binding.unannotated(false))) {
 			return true;
 		}
 		// check return type
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.java
index bc96071..7881724 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.java
@@ -3625,7 +3625,7 @@
 	 * FORMATTER / Option to specify the length of the page. Beyond this length, the formatter will try to split the code
 	 *     - option id:         "org.aspectj.org.eclipse.jdt.core.formatter.lineSplit"
 	 *     - possible values:   "&lt;n&gt;", where n is zero or a positive integer
-	 *     - default:           "80"
+	 *     - default:           "120"
 	 * </pre>
 	 * @since 3.0
 	 */
@@ -4036,7 +4036,9 @@
 	 * @since 3.0
 	 */
 	public static Map getEclipse21Settings() {
-		return DefaultCodeFormatterOptions.getDefaultSettings().getMap();
+		DefaultCodeFormatterOptions options = DefaultCodeFormatterOptions.getDefaultSettings();
+		options.page_width = 80; // changed with bug 356841
+		return options.getMap();
 	}
 
 	/**
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/util/IConstantPoolEntry2.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/util/IConstantPoolEntry2.java
index b5f1434..4f47808 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/util/IConstantPoolEntry2.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/core/util/IConstantPoolEntry2.java
@@ -1,59 +1,59 @@
-/*******************************************************************************

- * Copyright (c) 2011 IBM Corporation and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *     IBM Corporation - initial API and implementation

- *******************************************************************************/

-package org.aspectj.org.eclipse.jdt.core.util;

-

-/**

- * Description of the new constant pool entry as described in the JVM specifications

- * added for Java 7 support.

- * Its contents is initialized according to its kind.

- *

- * This interface may be implemented by clients.

- *

- * @since 3.8

- */

-public interface IConstantPoolEntry2 extends IConstantPoolEntry {

-	/**

-	 * Returns the descriptor index. This value is set only when decoding a MethodType entry.

-	 * The value is unspecified otherwise. The corresponding UTF8 value can be retrieved by using

-	 * {@link #getMethodDescriptor()}.

-	 *

-	 * @return the descriptor index. This value is set only when decoding a MethodType entry.

-	 * @see IConstantPoolConstant#CONSTANT_MethodType

-	 */

-	int getDescriptorIndex();

-

-	/**

-	 * Returns the reference kind. This value is set only when decoding a MethodHandle entry.

-	 * The value is unspecified otherwise.

-	 *

-	 * @return the reference kind. This value is set only when decoding a MethodHandle entry.

-	 * @see IConstantPoolConstant#CONSTANT_MethodHandle

-	 */

-	int getReferenceKind();

-

-	/**

-	 * Returns the reference index. This value is set only when decoding a MethodHandle entry.

-	 * The value is unspecified otherwise.

-	 *

-	 * @return the reference kind. This value is set only when decoding a MethodHandle entry.

-	 * @see IConstantPoolConstant#CONSTANT_MethodHandle

-	 */

-	int getReferenceIndex();

-	

-	/**

-	 * Returns the bootstrap method attribute index. This value is set only when decoding a InvokeDynamic entry.

-	 * The value is unspecified otherwise.

-	 *

-	 * @return the reference kind. This value is set only when decoding a MethodHandle entry.

-	 * @see IConstantPoolConstant#CONSTANT_InvokeDynamic

-	 */

-	int getBootstrapMethodAttributeIndex();

-}

+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.core.util;
+
+/**
+ * Description of the new constant pool entry as described in the JVM specifications
+ * added for Java 7 support.
+ * Its contents is initialized according to its kind.
+ *
+ * This interface may be implemented by clients.
+ *
+ * @since 3.8
+ */
+public interface IConstantPoolEntry2 extends IConstantPoolEntry {
+	/**
+	 * Returns the descriptor index. This value is set only when decoding a MethodType entry.
+	 * The value is unspecified otherwise. The corresponding UTF8 value can be retrieved by using
+	 * {@link #getMethodDescriptor()}.
+	 *
+	 * @return the descriptor index. This value is set only when decoding a MethodType entry.
+	 * @see IConstantPoolConstant#CONSTANT_MethodType
+	 */
+	int getDescriptorIndex();
+
+	/**
+	 * Returns the reference kind. This value is set only when decoding a MethodHandle entry.
+	 * The value is unspecified otherwise.
+	 *
+	 * @return the reference kind. This value is set only when decoding a MethodHandle entry.
+	 * @see IConstantPoolConstant#CONSTANT_MethodHandle
+	 */
+	int getReferenceKind();
+
+	/**
+	 * Returns the reference index. This value is set only when decoding a MethodHandle entry.
+	 * The value is unspecified otherwise.
+	 *
+	 * @return the reference kind. This value is set only when decoding a MethodHandle entry.
+	 * @see IConstantPoolConstant#CONSTANT_MethodHandle
+	 */
+	int getReferenceIndex();
+	
+	/**
+	 * Returns the bootstrap method attribute index. This value is set only when decoding a InvokeDynamic entry.
+	 * The value is unspecified otherwise.
+	 *
+	 * @return the reference kind. This value is set only when decoding a MethodHandle entry.
+	 * @see IConstantPoolConstant#CONSTANT_InvokeDynamic
+	 */
+	int getBootstrapMethodAttributeIndex();
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
index 7e477a5..6f15517 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
@@ -557,6 +557,17 @@
 						case '"':
 						case '\'':
 							break lineLoop;
+						case '-':
+							if (source[nextCharacterPosition] == '>') {
+								nextCharacterPosition--; // nextCharacterPosition = currentPosition
+								break lineLoop;
+							}
+							break;
+						case ':':
+							if (source[nextCharacterPosition] == ':') {
+								nextCharacterPosition--; // nextCharacterPosition = currentPosition
+								break lineLoop;
+							}
 					}
 					currentPosition--;
 				}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile.java
index 375ea7a..9b59352 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ClassFile.java
@@ -21,6 +21,8 @@
  *                          Bug 415470 - [1.8][compiler] Type annotations on class declaration go vanishing
  *                          Bug 405104 - [1.8][compiler][codegen] Implement support for serializeable lambdas
  *                          Bug 434556 - Broken class file generated for incorrect annotation usage
+ *     Stephan Herrmann - Contribution for
+ *							Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler;
 
@@ -2905,7 +2907,8 @@
 		// functional expressions, we know the size ahead of time - this less general
 		// than the full invokedynamic scope, but fine for Java 8
 		
-		int exSize = 10 * numberOfBootstraps + 8;
+		final int contentsEntries = 10;
+		int exSize = contentsEntries * numberOfBootstraps + 8;
 		if (exSize + localContentsOffset >= this.contents.length) {
 			resizeContents(exSize);
 		}
@@ -2939,8 +2942,8 @@
 					// 2 for bridge count then 2 per bridge method type.
 					extraSpace += (2 + 2 * bridges.length);
 				}
-				if (extraSpace + localContentsOffset >= this.contents.length) {
-					resizeContents(extraSpace);
+				if (extraSpace + contentsEntries + localContentsOffset >= this.contents.length) {
+					resizeContents(extraSpace + contentsEntries);
 				} 
 				
 				if (indexForAltMetaFactory == 0) {
@@ -5225,11 +5228,11 @@
 			this.innerClassesBindings = new HashSet(INNER_CLASSES_SIZE);
 		}
 		ReferenceBinding innerClass = (ReferenceBinding) binding;
-		this.innerClassesBindings.add(innerClass.erasure().unannotated());  // should not emit yet another inner class for Outer.@Inner Inner.
+		this.innerClassesBindings.add(innerClass.erasure().unannotated(false));  // should not emit yet another inner class for Outer.@Inner Inner.
 		ReferenceBinding enclosingType = innerClass.enclosingType();
 		while (enclosingType != null
 				&& enclosingType.isNestedType()) {
-			this.innerClassesBindings.add(enclosingType.erasure().unannotated());
+			this.innerClassesBindings.add(enclosingType.erasure().unannotated(false));
 			enclosingType = enclosingType.enclosingType();
 		}
 	}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/Compiler.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/Compiler.java
index a1a553d..8533682 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/Compiler.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/Compiler.java
@@ -417,6 +417,10 @@
 	 * -> recompile any required types for which we have an incomplete principle structure
 	 */
 	public void compile(ICompilationUnit[] sourceUnits) {
+		compile(sourceUnits, false);
+	}
+
+	public void compile(ICompilationUnit[] sourceUnits, boolean ignoreAnnotationProcessing) {
 		this.stats.startTime = System.currentTimeMillis();
 		CompilationUnitDeclaration unit = null;
 		ProcessTaskManager processingTask = null;
@@ -431,7 +435,9 @@
 				try {
 					beginToCompile(sourceUnits);
 
-					processAnnotations();
+					if (!ignoreAnnotationProcessing) {
+						processAnnotations();
+					}
 					if (!this.options.generateClassFiles) {
 						// -proc:only was set on the command line
 						return;
@@ -448,7 +454,11 @@
 					System.arraycopy(originalUnits, 0, combinedUnits, 0, originalLength);
 					System.arraycopy(e.newAnnotationProcessorUnits, 0, combinedUnits, originalLength, newProcessedLength);
 					this.annotationProcessorStartIndex  = originalLength;
-					compile(combinedUnits);
+
+					// Javadoc on javax.annotation.processing.RoundEnvironment#processingOver() claims that
+					// types generated by last round of annotation processing should not be subject to a subsequent rounds
+					// of annotation processing. So this flag have to be added to handle last round of annotation processing gracefully.
+					compile(combinedUnits, e.afterLastAnnotationProcessingRound);
 					return;
 				}
 			}
@@ -879,6 +889,7 @@
 				internalBeginToCompile(newUnits, newUnitSize);
 			} catch (SourceTypeCollisionException e) {
 				e.newAnnotationProcessorUnits = newProcessedUnits;
+				e.afterLastAnnotationProcessingRound = true;
 				throw e;
 			} finally {
 				this.lookupEnvironment.isProcessingAnnotations = false;
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl.java
new file mode 100644
index 0000000..64c412d
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AjBatchFilerImpl.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Sergey Stupin - contributions for adding annotation processing support to ajc
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.batch.CompilationUnit;
+
+import javax.lang.model.element.Element;
+import javax.tools.FileObject;
+import javax.tools.JavaFileManager;
+import java.io.*;
+import java.net.URI;
+
+/**
+ * @author s.stupin
+ */
+public final class AjBatchFilerImpl extends BatchFilerImpl {
+
+    public AjBatchFilerImpl(BaseAnnotationProcessorManager dispatchManager, BatchProcessingEnvImpl env) {
+        super(dispatchManager, env);
+    }
+
+    @Override
+
+    public FileObject createResource(JavaFileManager.Location location, CharSequence pkg, CharSequence relativeName, Element... originatingElements) throws IOException {
+        final String name = String.valueOf(relativeName);
+        final FileObject resource = super.createResource(location, pkg, relativeName, originatingElements);
+        return name.endsWith(".aj") ? new HookedFileObject(resource) : resource;
+    }
+
+    private final class HookedFileObject implements FileObject {
+
+        private final FileObject fileObject;
+        private boolean _closed = false;
+
+        HookedFileObject(FileObject fileObject) {
+            this.fileObject = fileObject;
+        }
+
+
+        @Override
+        public URI toUri() {
+            return fileObject.toUri();
+        }
+
+
+        @Override
+        public String getName() {
+            return fileObject.getName();
+        }
+
+
+        @Override
+        public InputStream openInputStream() throws IOException {
+            return fileObject.openInputStream();
+        }
+
+
+        @Override
+        public OutputStream openOutputStream() throws IOException {
+            return new ForwardingOutputStream(fileObject.openOutputStream());
+        }
+
+
+        @Override
+        public Reader openReader(boolean ignoreEncodingErrors) throws IOException {
+            return fileObject.openReader(ignoreEncodingErrors);
+        }
+
+
+        @Override
+        public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
+            return fileObject.getCharContent(ignoreEncodingErrors);
+        }
+
+
+        @Override
+        public Writer openWriter() throws IOException {
+            return new ForwardingWriter(fileObject.openWriter());
+        }
+
+        @Override
+        public long getLastModified() {
+            return fileObject.getLastModified();
+        }
+
+        @Override
+        public boolean delete() {
+            return fileObject.delete();
+        }
+
+        private void onClose() {
+            if (_closed)
+                return;
+            _closed = true;
+            final String name = fileObject.getName();
+            final CompilationUnit unit = new CompilationUnit(null, name, null /* encoding */);
+            addNewUnit(unit);
+        }
+
+        private final class ForwardingWriter extends Writer {
+
+            private final Writer writer;
+
+            public ForwardingWriter(Writer writer) {
+                this.writer = writer;
+            }
+
+            @Override
+            public void write(int c) throws IOException {
+                writer.write(c);
+            }
+
+            @Override
+            public void write(char[] cbuf) throws IOException {
+                writer.write(cbuf);
+            }
+
+            @Override
+            public void write(String str) throws IOException {
+                writer.write(str);
+            }
+
+            @Override
+            public void write(String str, int off, int len) throws IOException {
+                writer.write(str, off, len);
+            }
+
+            @Override
+            public void write(char[] cbuf, int off, int len) throws IOException {
+                writer.write(cbuf, off, len);
+            }
+
+            @Override
+            public void flush() throws IOException {
+                writer.flush();
+            }
+
+            @Override
+            public void close() throws IOException {
+                writer.close();
+                onClose();
+            }
+
+
+            @Override
+            public Writer append(CharSequence csq) throws IOException {
+                return writer.append(csq);
+            }
+
+
+            @Override
+            public Writer append(CharSequence csq, int start, int end) throws IOException {
+                return writer.append(csq, start, end);
+            }
+
+
+            @Override
+            public Writer append(char c) throws IOException {
+                return writer.append(c);
+            }
+        }
+
+        private final class ForwardingOutputStream extends OutputStream {
+
+            private final OutputStream stream;
+
+            public ForwardingOutputStream(OutputStream stream) {
+                this.stream = stream;
+            }
+
+            @Override
+            public void write(byte[] b) throws IOException {
+                stream.write(b);
+            }
+
+            @Override
+            public void write(byte[] b, int off, int len) throws IOException {
+                stream.write(b, off, len);
+            }
+
+            @Override
+            public void flush() throws IOException {
+                stream.flush();
+            }
+
+            @Override
+            public void close() throws IOException {
+                stream.close();
+                onClose();
+            }
+
+            @Override
+            public void write(int b) throws IOException {
+                stream.write(b);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AnnotationDiscoveryVisitor.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AnnotationDiscoveryVisitor.java
new file mode 100644
index 0000000..3fb706a
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AnnotationDiscoveryVisitor.java
@@ -0,0 +1,244 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2012 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.ASTVisitor;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.ElementImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.Factory;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.util.ManyToMany;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Annotation;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Argument;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.MethodDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeParameter;
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.ReferenceContext;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AptSourceLocalVariableBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BlockScope;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ClassScope;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodScope;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
+
+/**
+ * This class is used to visit the JDT compiler internal AST to discover annotations, 
+ * in the course of dispatching to annotation processors.
+ */
+public class AnnotationDiscoveryVisitor extends ASTVisitor {
+	final BaseProcessingEnvImpl _env;
+	final Factory _factory;
+	/**
+	 * Collects a many-to-many map of annotation types to
+	 * the elements they appear on.
+	 */
+	final ManyToMany<TypeElement, Element> _annoToElement;
+
+	public AnnotationDiscoveryVisitor(BaseProcessingEnvImpl env) {
+		_env = env;
+		_factory = env.getFactory();
+		_annoToElement = new ManyToMany<TypeElement, Element>();
+	}
+
+	@Override
+	public boolean visit(Argument argument, BlockScope scope) {
+		Annotation[] annotations = argument.annotations;
+		ReferenceContext referenceContext = scope.referenceContext();
+		if (referenceContext instanceof AbstractMethodDeclaration) {
+			MethodBinding binding = ((AbstractMethodDeclaration) referenceContext).binding;
+			if (binding != null) {
+				TypeDeclaration typeDeclaration = scope.referenceType();
+				typeDeclaration.binding.resolveTypesFor(binding);
+				if (argument.binding != null) {
+					argument.binding = new AptSourceLocalVariableBinding(argument.binding, binding);
+				}
+			}
+			if (annotations != null) {
+				this.resolveAnnotations(
+						scope,
+						annotations,
+						argument.binding);
+			}
+		}
+		return false;
+	}
+
+	@Override
+	public boolean visit(ConstructorDeclaration constructorDeclaration, ClassScope scope) {
+		Annotation[] annotations = constructorDeclaration.annotations;
+		if (annotations != null) {
+			MethodBinding constructorBinding = constructorDeclaration.binding;
+			if (constructorBinding == null) {
+				return false;
+			}
+			((SourceTypeBinding) constructorBinding.declaringClass).resolveTypesFor(constructorBinding);
+			this.resolveAnnotations(
+					constructorDeclaration.scope,
+					annotations,
+					constructorBinding);
+		}
+		
+		TypeParameter[] typeParameters = constructorDeclaration.typeParameters;
+		if (typeParameters != null) {
+			int typeParametersLength = typeParameters.length;
+			for (int i = 0; i < typeParametersLength; i++) {
+				typeParameters[i].traverse(this, constructorDeclaration.scope);
+			}
+		}
+		
+		Argument[] arguments = constructorDeclaration.arguments;
+		if (arguments != null) {
+			int argumentLength = arguments.length;
+			for (int i = 0; i < argumentLength; i++) {
+				arguments[i].traverse(this, constructorDeclaration.scope);
+			}
+		}
+		return false;
+	}
+
+	@Override
+	public boolean visit(FieldDeclaration fieldDeclaration, MethodScope scope) {
+		Annotation[] annotations = fieldDeclaration.annotations;
+		if (annotations != null) {
+			FieldBinding fieldBinding = fieldDeclaration.binding;
+			if (fieldBinding == null) {
+				return false;
+			}
+			((SourceTypeBinding) fieldBinding.declaringClass).resolveTypeFor(fieldBinding);
+			this.resolveAnnotations(scope, annotations, fieldBinding);
+		}
+		return false;
+	}
+
+	@Override
+	public boolean visit(TypeParameter typeParameter, ClassScope scope) {
+		Annotation[] annotations = typeParameter.annotations;
+		if (annotations != null) {
+			TypeVariableBinding binding = typeParameter.binding;
+			if (binding == null) {
+				return false;
+			}
+			this.resolveAnnotations(scope.referenceContext.initializerScope, annotations, binding);
+		}
+		return false;
+	}
+	
+	@Override
+	public boolean visit(TypeParameter typeParameter, BlockScope scope) {
+		Annotation[] annotations = typeParameter.annotations;
+		if (annotations != null) {
+			TypeVariableBinding binding = typeParameter.binding;
+			if (binding == null) {
+				return false;
+			}
+			// when we get here, it is guaranteed that class type parameters are connected, but method type parameters may not be.			
+			MethodBinding methodBinding = (MethodBinding) binding.declaringElement;
+			((SourceTypeBinding) methodBinding.declaringClass).resolveTypesFor(methodBinding);
+			this.resolveAnnotations(scope, annotations, binding);
+		}
+		return false;
+	}
+
+	@Override
+	public boolean visit(MethodDeclaration methodDeclaration, ClassScope scope) {
+		Annotation[] annotations = methodDeclaration.annotations;
+		if (annotations != null) {
+			MethodBinding methodBinding = methodDeclaration.binding;
+			if (methodBinding == null) {
+				return false;
+			}
+			((SourceTypeBinding) methodBinding.declaringClass).resolveTypesFor(methodBinding);
+			this.resolveAnnotations(
+					methodDeclaration.scope,
+					annotations,
+					methodBinding);
+		}
+		
+		TypeParameter[] typeParameters = methodDeclaration.typeParameters;
+		if (typeParameters != null) {
+			int typeParametersLength = typeParameters.length;
+			for (int i = 0; i < typeParametersLength; i++) {
+				typeParameters[i].traverse(this, methodDeclaration.scope);
+			}
+		}
+		
+		Argument[] arguments = methodDeclaration.arguments;
+		if (arguments != null) {
+			int argumentLength = arguments.length;
+			for (int i = 0; i < argumentLength; i++) {
+				arguments[i].traverse(this, methodDeclaration.scope);
+			}
+		}
+		return false;
+	}
+
+	@Override
+	public boolean visit(TypeDeclaration memberTypeDeclaration, ClassScope scope) {
+		SourceTypeBinding binding = memberTypeDeclaration.binding;
+		if (binding == null) {
+			return false;
+		}
+		Annotation[] annotations = memberTypeDeclaration.annotations;
+		if (annotations != null) {
+			this.resolveAnnotations(
+					memberTypeDeclaration.staticInitializerScope,
+					annotations,
+					binding);
+		}
+		return true;
+	}
+
+	@Override
+	public boolean visit(TypeDeclaration typeDeclaration, CompilationUnitScope scope) {
+		SourceTypeBinding binding = typeDeclaration.binding;
+		if (binding == null) {
+			return false;
+		}
+		Annotation[] annotations = typeDeclaration.annotations;
+		if (annotations != null) {
+			this.resolveAnnotations(
+					typeDeclaration.staticInitializerScope,
+					annotations,
+					binding);
+		}
+		return true;
+	}
+
+	private void resolveAnnotations(BlockScope scope, Annotation[] annotations, Binding currentBinding) {
+		
+		int length = annotations == null ? 0 : annotations.length;
+		if (length == 0)
+			return;
+		
+		boolean old = scope.insideTypeAnnotation;
+		scope.insideTypeAnnotation = true;
+		ASTNode.resolveAnnotations(scope, annotations, currentBinding);
+		scope.insideTypeAnnotation = old;
+		ElementImpl element = (ElementImpl) _factory.newElement(currentBinding);
+		AnnotationBinding [] annotationBindings = element.getPackedAnnotationBindings(); // discovery is never in terms of repeating annotation.
+		for (AnnotationBinding binding : annotationBindings) {
+			if (binding != null) { // binding should be resolved, but in case it's not, ignore it: it could have been wrapped into a container.
+				TypeElement anno = (TypeElement)_factory.newElement(binding.getAnnotationType());
+				_annoToElement.put(anno, element);
+			}
+		}
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AptProblem.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AptProblem.java
new file mode 100644
index 0000000..a9e79e0
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/AptProblem.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Sergey Stupin - contributions for adding annotation processing support to ajc
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.ReferenceContext;
+import org.aspectj.org.eclipse.jdt.internal.compiler.problem.DefaultProblem;
+
+public class AptProblem extends DefaultProblem {
+	
+	// The batch compiler does not depend on org.aspectj.org.eclipse.jdt.apt.pluggable.core; this
+	// is just an arbitrary string to it, namespace notwithstanding.  However, the IDE
+	// cares about the fact that this string is registered as a marker ID by the
+	// org.aspectj.org.eclipse.jdt.apt.pluggable.core plug-in.
+	private static final String MARKER_ID = "org.aspectj.org.eclipse.jdt.apt.pluggable.core.compileProblem";  //$NON-NLS-1$
+	
+	/** May be null, if it was not possible to identify problem context */
+	public final ReferenceContext _referenceContext;
+	
+	public AptProblem(
+			ReferenceContext referenceContext,
+			char[] originatingFileName,
+			String message,
+			int id,
+			String[] stringArguments,
+			int severity,
+			int startPosition,
+			int endPosition,
+			int line,
+			int column) 
+	{
+		super(originatingFileName,
+			message,
+			id,
+			stringArguments,
+			severity,
+			startPosition,
+			endPosition,
+			line,
+			column);
+		_referenceContext = referenceContext;
+	}
+	
+	@Override
+	public int getCategoryID() {
+		return CAT_UNSPECIFIED;
+	}
+
+	@Override
+	public String getMarkerType() {
+		return MARKER_ID;
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseAnnotationProcessorManager.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseAnnotationProcessorManager.java
new file mode 100644
index 0000000..2a15b1c
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseAnnotationProcessorManager.java
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 BEA Systems, Inc. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.AbstractAnnotationProcessorManager;
+import org.aspectj.org.eclipse.jdt.internal.compiler.Compiler;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+
+/**
+ * This class is the central dispatch point for Java 6 annotation processing.
+ * This is created and configured by the JDT core; specifics depend on how
+ * compilation is being performed, ie from the command line, via the Tool
+ * interface, or within the IDE.  This class manages the discovery of annotation
+ * processors and other information spanning multiple rounds of processing;
+ * context that is valid only within a single round is managed by
+ * {@link RoundDispatcher}.  There may be multiple instances of this class;
+ * there is in general one of these for every Compiler that has annotation
+ * processing enabled.  Within the IDE there will typically be one for every
+ * Java project, because each project potentially has a separate processor path.
+ *  
+ * TODO: do something useful with _supportedOptions and _supportedAnnotationTypes.
+ */
+public abstract class BaseAnnotationProcessorManager extends AbstractAnnotationProcessorManager 
+		implements IProcessorProvider 
+{
+
+	protected PrintWriter _out;
+	protected PrintWriter _err;
+	protected BaseProcessingEnvImpl _processingEnv;
+	protected boolean _isFirstRound = true;
+	
+	/**
+	 * The list of processors that have been loaded so far.  A processor on this
+	 * list has been initialized, but may not yet have been called to process().
+	 */
+	protected List<ProcessorInfo> _processors = new ArrayList<ProcessorInfo>();
+	
+	// Tracing
+	protected boolean _printProcessorInfo = false;
+	protected boolean _printRounds = false;
+	protected int _round;
+	
+	/* (non-Javadoc)
+	 * @see org.aspectj.org.eclipse.jdt.internal.compiler.AbstractAnnotationProcessorManager#configure(org.aspectj.org.eclipse.jdt.internal.compiler.batch.Main, java.lang.String[])
+	 */
+	@Override
+	public void configure(Object batchCompiler, String[] options) {
+		// Implemented by BatchAnnotationProcessorManager.
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.aspectj.org.eclipse.jdt.internal.compiler.AbstractAnnotationProcessorManager#configureFromPlatform(org.aspectj.org.eclipse.jdt.internal.compiler.Compiler, java.lang.Object)
+	 */
+	@Override
+	public void configureFromPlatform(Compiler compiler, Object compilationUnitLocator, Object javaProject) {
+		// Implemented by IdeAnnotationProcessorManager.
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public List<ProcessorInfo> getDiscoveredProcessors() {
+		return _processors;
+	}
+
+	@Override
+	public ICompilationUnit[] getDeletedUnits() {
+		return _processingEnv.getDeletedUnits();
+	}
+
+	@Override
+	public ICompilationUnit[] getNewUnits() {
+		return _processingEnv.getNewUnits();
+	}
+
+	@Override
+	public ReferenceBinding[] getNewClassFiles() {
+		return _processingEnv.getNewClassFiles();
+	}
+
+	@Override
+	public void reset() {
+		_processingEnv.reset();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.aspectj.org.eclipse.jdt.internal.compiler.AbstractAnnotationProcessorManager#setErr(java.io.PrintWriter)
+	 */
+	@Override
+	public void setErr(PrintWriter err) {
+		_err = err;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.aspectj.org.eclipse.jdt.internal.compiler.AbstractAnnotationProcessorManager#setOut(java.io.PrintWriter)
+	 */
+	@Override
+	public void setOut(PrintWriter out) {
+		_out = out;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.aspectj.org.eclipse.jdt.internal.compiler.AbstractAnnotationProcessorManager#setProcessors(java.lang.Object[])
+	 */
+	@Override
+	public void setProcessors(Object[] processors) {
+		// Only meaningful in batch mode.
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * A single "round" of processing, in the sense implied in
+	 * {@link javax.annotation.processing.Processor}.
+	 * <p>
+	 * The Java 6 Processor spec contains ambiguities about how processors that support "*" are
+	 * handled. Eclipse tries to match Sun's implementation in javac. What that actually does is
+	 * analogous to inspecting the set of annotions found in the root units and adding an
+	 * "imaginary" annotation if the set is empty. Processors are then called in order of discovery;
+	 * for each processor, the intersection between the set of root annotations and the set of
+	 * annotations the processor supports is calculated, and if it is non-empty, the processor is
+	 * called. If the processor returns <code>true</code> then the intersection (including the
+	 * imaginary annotation if one exists) is removed from the set of root annotations and the loop
+	 * continues, until the set is empty. Of course, the imaginary annotation is not actually
+	 * included in the set of annotations passed in to the processor. A processor's process() method
+	 * is not called until its intersection set is non-empty, but thereafter it is called on every
+	 * round. Note that even if a processor is not called in the first round, if it is called in
+	 * subsequent rounds, it will be called in the order in which the processors were discovered,
+	 * rather than being added to the end of the list.
+	 */
+	@Override
+	public void processAnnotations(CompilationUnitDeclaration[] units, ReferenceBinding[] referenceBindings, boolean isLastRound) {
+		RoundEnvImpl roundEnv = new RoundEnvImpl(units, referenceBindings, isLastRound, _processingEnv);
+		if (_isFirstRound) {
+			_isFirstRound = false;
+		}
+
+		PrintWriter traceProcessorInfo = _printProcessorInfo ? _out : null;
+		PrintWriter traceRounds = _printRounds ? _out : null;
+		if (traceRounds != null) {
+			traceRounds.println("Round " + ++_round + ':'); //$NON-NLS-1$
+		}
+		RoundDispatcher dispatcher = new RoundDispatcher(
+				this, roundEnv, roundEnv.getRootAnnotations(), traceProcessorInfo, traceRounds);
+		dispatcher.round();
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseMessagerImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseMessagerImpl.java
new file mode 100644
index 0000000..b12acc7
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseMessagerImpl.java
@@ -0,0 +1,213 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 BEA Systems, Inc. and others 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - derived base class from BatchMessagerImpl
+ *    
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.tools.Diagnostic.Kind;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.CompilationResult;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.AnnotationMemberValue;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.AnnotationMirrorImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.ExecutableElementImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.TypeElementImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.VariableElementImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Annotation;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.LocalDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.MemberValuePair;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.ReferenceContext;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AptSourceLocalVariableBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
+import org.aspectj.org.eclipse.jdt.internal.compiler.util.Util;
+
+public class BaseMessagerImpl {
+
+	static final String[] NO_ARGUMENTS = new String[0];
+
+	/**
+	 * Create a CategorizedProblem that can be reported to an ICompilerRequestor, etc.
+	 * 
+	 * @param e the element against which to report the message.  If the element is not
+	 * in the set of elements being compiled in the current round, the reference context
+	 * and filename will be set to null.
+	 * @return
+	 */
+	public static AptProblem createProblem(Kind kind, CharSequence msg, Element e, 
+			AnnotationMirror a, AnnotationValue v) {
+		ReferenceContext referenceContext = null;
+		Annotation[] elementAnnotations = null;
+		int startPosition = 0;
+		int endPosition = 0;
+		if (e != null) {
+			switch(e.getKind()) {
+				case ANNOTATION_TYPE :
+				case INTERFACE :
+				case CLASS :
+				case ENUM :
+					TypeElementImpl typeElementImpl = (TypeElementImpl) e;
+					Binding typeBinding = typeElementImpl._binding;
+					if (typeBinding instanceof SourceTypeBinding) {
+						SourceTypeBinding sourceTypeBinding = (SourceTypeBinding) typeBinding;
+						TypeDeclaration typeDeclaration = (TypeDeclaration) sourceTypeBinding.scope.referenceContext();
+						referenceContext = typeDeclaration;
+						elementAnnotations = typeDeclaration.annotations;
+						startPosition = typeDeclaration.sourceStart;
+						endPosition = typeDeclaration.sourceEnd;
+					}
+					break;
+				case PACKAGE :
+					// nothing to do: there is no reference context for a package
+					break;
+				case CONSTRUCTOR :
+				case METHOD :
+					ExecutableElementImpl executableElementImpl = (ExecutableElementImpl) e;
+					Binding binding = executableElementImpl._binding;
+					if (binding instanceof MethodBinding) {
+						MethodBinding methodBinding = (MethodBinding) binding;
+						AbstractMethodDeclaration sourceMethod = methodBinding.sourceMethod();
+						if (sourceMethod != null) {
+							referenceContext = sourceMethod;
+							elementAnnotations = sourceMethod.annotations;
+							startPosition = sourceMethod.sourceStart;
+							endPosition = sourceMethod.sourceEnd;
+						}
+					}
+					break;
+				case ENUM_CONSTANT :
+					break;
+				case EXCEPTION_PARAMETER :
+					break;
+				case FIELD :
+				case PARAMETER :
+					VariableElementImpl variableElementImpl = (VariableElementImpl) e;
+					binding = variableElementImpl._binding;
+					if (binding instanceof FieldBinding) {
+						FieldBinding fieldBinding = (FieldBinding) binding;
+						FieldDeclaration fieldDeclaration = fieldBinding.sourceField();
+						if (fieldDeclaration != null) {
+							ReferenceBinding declaringClass = fieldBinding.declaringClass;
+							if (declaringClass instanceof SourceTypeBinding) {
+								SourceTypeBinding sourceTypeBinding = (SourceTypeBinding) declaringClass;
+								TypeDeclaration typeDeclaration = (TypeDeclaration) sourceTypeBinding.scope.referenceContext();
+								referenceContext = typeDeclaration;
+							}
+							elementAnnotations = fieldDeclaration.annotations;
+							startPosition = fieldDeclaration.sourceStart;
+							endPosition = fieldDeclaration.sourceEnd;
+						}
+					} else if (binding instanceof AptSourceLocalVariableBinding){
+						AptSourceLocalVariableBinding parameterBinding = (AptSourceLocalVariableBinding) binding;
+						LocalDeclaration parameterDeclaration = parameterBinding.declaration;
+						if (parameterDeclaration != null) {
+							MethodBinding methodBinding = parameterBinding.methodBinding;
+							if (methodBinding != null) {
+								referenceContext = methodBinding.sourceMethod();
+							}
+							elementAnnotations = parameterDeclaration.annotations;
+							startPosition = parameterDeclaration.sourceStart;
+							endPosition = parameterDeclaration.sourceEnd;
+						}
+					}
+					break;
+				case INSTANCE_INIT :
+				case STATIC_INIT :
+					break;
+				case LOCAL_VARIABLE :
+					break;
+				case TYPE_PARAMETER :
+				default:
+					break;
+			}
+		}
+		StringBuilder builder = new StringBuilder();
+		if (msg != null) {
+			builder.append(msg);
+		}
+		if (a != null && elementAnnotations != null) {
+			AnnotationBinding annotationBinding = ((AnnotationMirrorImpl) a)._binding;
+			Annotation annotation = null;
+			for (int i = 0; annotation == null && i < elementAnnotations.length; i++) {
+				if (annotationBinding == elementAnnotations[i].getCompilerAnnotation()) {
+					annotation = elementAnnotations[i];
+				}
+			}
+			if (annotation != null) {
+				startPosition = annotation.sourceStart;
+				endPosition = annotation.sourceEnd;
+				if (v != null && v instanceof AnnotationMemberValue) {
+					MethodBinding methodBinding = ((AnnotationMemberValue) v).getMethodBinding();
+					MemberValuePair[] memberValuePairs = annotation.memberValuePairs();
+					MemberValuePair memberValuePair = null;
+					for (int i = 0; memberValuePair == null && i < memberValuePairs.length; i++) {
+						if (methodBinding == memberValuePairs[i].binding) {
+							memberValuePair = memberValuePairs[i];
+						}
+					}
+					if (memberValuePair != null) {
+						startPosition = memberValuePair.sourceStart;
+						endPosition = memberValuePair.sourceEnd;
+					}
+				}
+			}
+		}
+		int lineNumber = 0;
+		int columnNumber = 1;
+		char[] fileName = null;
+		if (referenceContext != null) {
+			CompilationResult result = referenceContext.compilationResult();
+			fileName = result.fileName;
+			int[] lineEnds = null;
+			lineNumber = startPosition >= 0
+					? Util.getLineNumber(startPosition, lineEnds = result.getLineSeparatorPositions(), 0, lineEnds.length-1)
+					: 0;
+			columnNumber = startPosition >= 0
+					? Util.searchColumnNumber(result.getLineSeparatorPositions(), lineNumber,startPosition)
+					: 0;
+		}
+		int severity;
+		switch(kind) {
+			case ERROR :
+				severity = ProblemSeverities.Error;
+				break;
+			default :
+				// There is no "INFO" equivalent in JDT
+				severity = ProblemSeverities.Warning;
+				break;
+		}
+		return new AptProblem(
+				referenceContext,
+				fileName,
+				String.valueOf(builder),
+				0,
+				NO_ARGUMENTS,
+				severity,
+				startPosition,
+				endPosition,
+				lineNumber,
+				columnNumber);
+	}
+
+	public BaseMessagerImpl() {
+		super();
+	}
+
+}
\ No newline at end of file
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.java
new file mode 100644
index 0000000..443ca8e
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 BEA Systems, Inc. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    IBM Corporation - fix for 342598
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.processing.Filer;
+import javax.annotation.processing.Messager;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.util.Elements;
+import javax.lang.model.util.Types;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.Compiler;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.ElementsImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.Factory;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.TypesImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
+import org.aspectj.org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+
+/**
+ * Implementation of ProcessingEnvironment that is common to batch and IDE environments.
+ */
+public abstract class BaseProcessingEnvImpl implements ProcessingEnvironment {
+
+	// Initialized in subclasses:
+	protected Filer _filer;
+	protected Messager _messager;
+	protected Map<String, String> _processorOptions;
+	protected Compiler _compiler;
+	
+	// Initialized in this base class:
+	protected Elements _elementUtils;
+	protected Types _typeUtils;
+	private List<ICompilationUnit> _addedUnits;
+	private List<ReferenceBinding> _addedClassFiles;
+	private List<ICompilationUnit> _deletedUnits;
+	private boolean _errorRaised;
+	private Factory _factory;
+
+	public BaseProcessingEnvImpl() {
+		_addedUnits = new ArrayList<ICompilationUnit>();
+		_addedClassFiles = new ArrayList<ReferenceBinding>();
+		_deletedUnits = new ArrayList<ICompilationUnit>();
+		_elementUtils = new ElementsImpl(this);
+		_typeUtils = new TypesImpl(this);
+		_factory = new Factory(this);
+		_errorRaised = false;
+	}
+
+	public void addNewUnit(ICompilationUnit unit) {
+		_addedUnits.add(unit);
+	}
+
+	public void addNewClassFile(ReferenceBinding binding) {
+		_addedClassFiles.add(binding);
+	}
+	
+	public Compiler getCompiler() {
+		return _compiler;
+	}
+
+	public ICompilationUnit[] getDeletedUnits() {
+		ICompilationUnit[] result = new ICompilationUnit[_deletedUnits.size()];
+		_deletedUnits.toArray(result);
+		return result;
+	}
+
+	public ICompilationUnit[] getNewUnits() {
+		ICompilationUnit[] result = new ICompilationUnit[_addedUnits.size()];
+		_addedUnits.toArray(result);
+		return result;
+	}
+
+	@Override
+	public Elements getElementUtils() {
+		return _elementUtils;
+	}
+
+	@Override
+	public Filer getFiler() {
+		return _filer;
+	}
+
+	@Override
+	public Messager getMessager() {
+		return _messager;
+	}
+	
+	@Override
+	public Map<String, String> getOptions() {
+		return _processorOptions;
+	}
+
+	@Override
+	public Types getTypeUtils() {
+		return _typeUtils;
+	}
+
+	public LookupEnvironment getLookupEnvironment() {
+		return _compiler.lookupEnvironment;
+	}
+
+	@Override
+	public SourceVersion getSourceVersion() {
+		if (this._compiler.options.sourceLevel <= ClassFileConstants.JDK1_5) {
+			return SourceVersion.RELEASE_5;
+		}
+		if (this._compiler.options.sourceLevel == ClassFileConstants.JDK1_6) {
+			return SourceVersion.RELEASE_6;
+		}
+		try {
+			return SourceVersion.valueOf("RELEASE_7"); //$NON-NLS-1$
+		} catch(IllegalArgumentException e) {
+			// handle call on a JDK 6
+			return SourceVersion.RELEASE_6;
+		}
+	}
+
+	/**
+	 * Called when AnnotationProcessorManager has retrieved the list of 
+	 * newly generated compilation units (ie, once per round)
+	 */
+	public void reset() {
+		_addedUnits.clear();
+		_addedClassFiles.clear();
+		_deletedUnits.clear();
+	}
+
+	/**
+	 * Has an error been raised in any of the rounds of processing in this build?
+	 * @return
+	 */
+	public boolean errorRaised()
+	{
+		return _errorRaised;
+	}
+
+	/**
+	 * Set or clear the errorRaised flag.  Typically this will be set by the Messager
+	 * when an error has been raised, and it will never be cleared.
+	 */
+	public void setErrorRaised(boolean b)
+	{
+		_errorRaised = true;
+	}
+
+	public Factory getFactory()
+	{
+		return _factory;
+	}
+
+	public ReferenceBinding[] getNewClassFiles() {
+		ReferenceBinding[] result = new ReferenceBinding[_addedClassFiles.size()];
+		_addedClassFiles.toArray(result);
+		return result;
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchAnnotationProcessorManager.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchAnnotationProcessorManager.java
new file mode 100644
index 0000000..34863af
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchAnnotationProcessorManager.java
@@ -0,0 +1,296 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.batch.Main;
+import org.aspectj.org.eclipse.jdt.internal.compiler.problem.AbortCompilation;
+
+import javax.annotation.processing.Processor;
+import javax.tools.StandardLocation;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.*;
+
+/**
+ * Java 6 annotation processor manager used when compiling from the command line
+ * or via the javax.tools.JavaCompiler interface.
+ *
+ * @see org.aspectj.org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager
+ */
+public class BatchAnnotationProcessorManager extends BaseAnnotationProcessorManager {
+
+  /**
+   * Processors that have been set by calling CompilationTask.setProcessors().
+   */
+  private List<Processor> _setProcessors = null;
+  private Iterator<Processor> _setProcessorIter = null;
+
+  /**
+   * Processors named with the -processor option on the command line.
+   */
+  private List<String> _commandLineProcessors;
+  private Iterator<String> _commandLineProcessorIter = null;
+
+  private ServiceLoader<Processor> _serviceLoader = null;
+  private Iterator<Processor> _serviceLoaderIter;
+
+  private ClassLoader _procLoader;
+
+  // Set this to true in order to trace processor discovery when -XprintProcessorInfo is specified
+  private final static boolean VERBOSE_PROCESSOR_DISCOVERY = true;
+  private boolean _printProcessorDiscovery = false;
+
+  /**
+   * Zero-arg constructor so this object can be easily created via reflection.
+   * A BatchAnnotationProcessorManager cannot be used until its
+   * {@link #configure(Object, String[])} method has been called.
+   */
+  public BatchAnnotationProcessorManager() {
+  }
+
+  @Override
+  public void configure(Object batchCompiler, String[] commandLineArguments) {
+    if (null != _processingEnv) {
+      throw new IllegalStateException(
+              "Calling configure() more than once on an AnnotationProcessorManager is not supported"); //$NON-NLS-1$
+    }
+    BatchProcessingEnvImpl processingEnv = new BatchProcessingEnvImpl(this, (Main) batchCompiler, commandLineArguments);
+    _processingEnv = processingEnv;
+    _procLoader = processingEnv.getFileManager().getClassLoader(StandardLocation.ANNOTATION_PROCESSOR_PATH);
+    parseCommandLine(commandLineArguments);
+    _round = 0;
+  }
+
+  /**
+   * If a -processor option was specified in command line arguments,
+   * parse it into a list of qualified classnames.
+   *
+   * @param commandLineArguments contains one string for every space-delimited token on the command line
+   */
+  private void parseCommandLine(String[] commandLineArguments) {
+    List<String> commandLineProcessors = null;
+    for (int i = 0; i < commandLineArguments.length; ++i) {
+      String option = commandLineArguments[i];
+      if ("-XprintProcessorInfo".equals(option)) { //$NON-NLS-1$
+        _printProcessorInfo = true;
+        _printProcessorDiscovery = VERBOSE_PROCESSOR_DISCOVERY;
+      } else if ("-XprintRounds".equals(option)) { //$NON-NLS-1$
+        _printRounds = true;
+      } else if ("-processor".equals(option)) { //$NON-NLS-1$
+        commandLineProcessors = new ArrayList<String>();
+        String procs = commandLineArguments[++i];
+        for (String proc : procs.split(",")) { //$NON-NLS-1$
+          commandLineProcessors.add(proc);
+        }
+        break;
+      }
+    }
+    _commandLineProcessors = commandLineProcessors;
+    if (null != _commandLineProcessors) {
+      _commandLineProcessorIter = _commandLineProcessors.iterator();
+    }
+  }
+
+  @Override
+  public ProcessorInfo discoverNextProcessor() {
+    try {
+      if (null != _setProcessors) {
+        // If setProcessors() was called, use that list until it's empty and then stop.
+        if (_setProcessorIter.hasNext()) {
+          Processor p = _setProcessorIter.next();
+          p.init(_processingEnv);
+          ProcessorInfo pi = new ProcessorInfo(p);
+          _processors.add(pi);
+          if (_printProcessorDiscovery && null != _out) {
+            _out.println("API specified processor: " + pi); //$NON-NLS-1$
+          }
+          return pi;
+        }
+        return null;
+      }
+
+      if (null != _commandLineProcessors) {
+        // If there was a -processor option, iterate over processor names,
+        // creating and initializing processors, until no more names are found, then stop.
+        if (_commandLineProcessorIter.hasNext()) {
+          String proc = _commandLineProcessorIter.next();
+          try {
+            Class<?> clazz = _procLoader.loadClass(proc);
+            Object o = clazz.newInstance();
+            Processor p = (Processor) o;
+            p.init(_processingEnv);
+            ProcessorInfo pi = new ProcessorInfo(p);
+            _processors.add(pi);
+            if (_printProcessorDiscovery && null != _out) {
+              _out.println("Command line specified processor: " + pi); //$NON-NLS-1$
+            }
+            return pi;
+          } catch (Exception e) {
+            // TODO: better error handling
+            throw new AbortCompilation(null, e);
+          }
+        }
+        return null;
+      }
+      // if no processors were explicitly specified with setProcessors()
+      // or the command line, search the processor path with ServiceLoader.
+      String resPath = "META-INF/services/" + Processor.class.getName();
+      Enumeration<URL> resources = _procLoader.getResources(resPath);
+      if (resources != null) {
+        while (resources.hasMoreElements()) {
+          URL url = resources.nextElement();
+          parse(url);
+        }
+      }
+      if (null == _serviceLoader) {
+        _serviceLoader = ServiceLoader.load(Processor.class, _procLoader);
+        _serviceLoaderIter = _serviceLoader.iterator();
+      }
+      try {
+        if (_serviceLoaderIter.hasNext()) {
+          Processor p = _serviceLoaderIter.next();
+          p.init(_processingEnv);
+          ProcessorInfo pi = new ProcessorInfo(p);
+          _processors.add(pi);
+          if (_printProcessorDiscovery && null != _out) {
+            StringBuilder sb = new StringBuilder();
+            sb.append("Discovered processor service "); //$NON-NLS-1$
+            sb.append(pi);
+            sb.append("\n  supporting "); //$NON-NLS-1$
+            sb.append(pi.getSupportedAnnotationTypesAsString());
+            sb.append("\n  in "); //$NON-NLS-1$
+            sb.append(getProcessorLocation(p));
+            _out.println(sb.toString());
+          }
+          return pi;
+        }
+      } catch (ServiceConfigurationError e) {
+        // TODO: better error handling
+        throw new AbortCompilation(null, e);
+      }
+    } catch (Throwable e) {
+      throw new IllegalStateException(e);
+    }
+    return null;
+  }
+
+  private Iterator<String> parse(URL u)
+          throws ServiceConfigurationError, IOException {
+    InputStream in = null;
+    BufferedReader r = null;
+    ArrayList<String> names = new ArrayList<String>();
+    try {
+      in = u.openStream();
+      r = new BufferedReader(new InputStreamReader(in, "utf-8"));
+      int lc = 1;
+      while ((lc = parseLine(r, lc, names)) >= 0) ;
+    } catch (IOException x) {
+      throw new IllegalStateException("Error reading configuration file", x);
+    } finally {
+      try {
+        if (r != null) r.close();
+        if (in != null) in.close();
+      } catch (IOException y) {
+        throw new IllegalStateException("Error closing configuration file", y);
+      }
+    }
+    return names.iterator();
+  }
+
+  private int parseLine(BufferedReader r, int lc, List<String> names)
+          throws IOException, ServiceConfigurationError {
+    String ln = r.readLine();
+    if (ln == null) {
+      return -1;
+    }
+    int ci = ln.indexOf('#');
+    if (ci >= 0) ln = ln.substring(0, ci);
+    ln = ln.trim();
+    int n = ln.length();
+    if (n != 0) {
+      if ((ln.indexOf(' ') >= 0) || (ln.indexOf('\t') >= 0))
+        throw new IllegalStateException("Illegal configuration-file syntax");
+      int cp = ln.codePointAt(0);
+      if (!Character.isJavaIdentifierStart(cp))
+        throw new IllegalStateException("Illegal provider-class name: " + ln);
+      for (int i = Character.charCount(cp); i < n; i += Character.charCount(cp)) {
+        cp = ln.codePointAt(i);
+        if (!Character.isJavaIdentifierPart(cp) && (cp != '.'))
+          throw new IllegalStateException("Illegal provider-class name: " + ln);
+      }
+      if (!names.contains(ln))
+        names.add(ln);
+    }
+    return lc + 1;
+  }
+
+  /**
+   * Used only for debugging purposes.  Generates output like "file:jar:D:/temp/jarfiles/myJar.jar!/".
+   * Surely this code already exists in several hundred other places?
+   *
+   * @return the location whence a processor class was loaded.
+   */
+  private String getProcessorLocation(Processor p) {
+    // Get the classname in a form that can be passed to ClassLoader.getResource(),
+    // e.g., "pa/pb/pc/Outer$Inner.class"
+    boolean isMember = false;
+    Class<?> outerClass = p.getClass();
+    StringBuilder innerName = new StringBuilder();
+    while (outerClass.isMemberClass()) {
+      innerName.insert(0, outerClass.getSimpleName());
+      innerName.insert(0, '$');
+      isMember = true;
+      outerClass = outerClass.getEnclosingClass();
+    }
+    String path = outerClass.getName();
+    path = path.replace('.', '/');
+    if (isMember) {
+      path = path + innerName;
+    }
+    path = path + ".class"; //$NON-NLS-1$
+
+    // Find the URL for the class resource and strip off the resource name itself
+    String location = _procLoader.getResource(path).toString();
+    if (location.endsWith(path)) {
+      location = location.substring(0, location.length() - path.length());
+    }
+    return location;
+  }
+
+  @Override
+  public void reportProcessorException(Processor p, Exception e) {
+    // TODO: if (verbose) report the processor
+    throw new AbortCompilation(null, e);
+  }
+
+  @Override
+  public void setProcessors(Object[] processors) {
+    if (!_isFirstRound) {
+      throw new IllegalStateException("setProcessors() cannot be called after processing has begun"); //$NON-NLS-1$
+    }
+    // Cast all the processors here, rather than failing later.
+    // But don't call init() until the processor is actually needed.
+    _setProcessors = new ArrayList<Processor>(processors.length);
+    for (Object o : processors) {
+      Processor p = (Processor) o;
+      _setProcessors.add(p);
+    }
+    _setProcessorIter = _setProcessors.iterator();
+
+    // processors set this way take precedence over anything on the command line
+    _commandLineProcessors = null;
+    _commandLineProcessorIter = null;
+  }
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.java
new file mode 100644
index 0000000..1afedb4
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 BEA Systems, Inc. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    philippe.marschall@netcetera.ch - Fix for 338370
+ *    IBM Corporation - Fix for validating relative name
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URI;
+import java.util.HashSet;
+import java.util.Iterator;
+
+import javax.annotation.processing.Filer;
+import javax.annotation.processing.FilerException;
+import javax.lang.model.element.Element;
+import javax.tools.*;
+import javax.tools.JavaFileManager.Location;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+
+/**
+ * Implementation of Filer used when compilation is driven by command line
+ * or by Tool interface.  This version does not need to keep track of
+ * dependencies.
+ */
+public class BatchFilerImpl implements Filer {
+
+	protected final BaseAnnotationProcessorManager _dispatchManager;
+	protected final BaseProcessingEnvImpl _env;
+	protected final JavaFileManager _fileManager;
+	protected final HashSet<URI> _createdFiles;
+
+	public BatchFilerImpl(BaseAnnotationProcessorManager dispatchManager, BatchProcessingEnvImpl env)
+	{
+		_dispatchManager = dispatchManager;
+		_fileManager = env._fileManager;
+		_env = env;
+		_createdFiles = new HashSet<URI>();
+	}
+
+	public void addNewUnit(ICompilationUnit unit) {
+		_env.addNewUnit(unit);
+	}
+
+	public void addNewClassFile(ReferenceBinding binding) {
+		_env.addNewClassFile(binding);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.annotation.processing.Filer#createClassFile(java.lang.CharSequence, javax.lang.model.element.Element[])
+	 */
+	@Override
+	public JavaFileObject createClassFile(CharSequence name,
+			Element... originatingElements) throws IOException {
+		JavaFileObject jfo = _fileManager.getJavaFileForOutput(
+				StandardLocation.CLASS_OUTPUT, name.toString(), JavaFileObject.Kind.CLASS, null);
+		URI uri = jfo.toUri();
+		if (_createdFiles.contains(uri)) {
+			throw new FilerException("Class file already created : " + name); //$NON-NLS-1$
+		}
+
+    _createdFiles.add(uri);
+    return new HookedJavaFileObject(jfo, jfo.getName(), name.toString(), this);
+  }
+
+	/* (non-Javadoc)
+	 * @see javax.annotation.processing.Filer#createResource(javax.tools.JavaFileManager.Location, java.lang.CharSequence, java.lang.CharSequence, javax.lang.model.element.Element[])
+	 */
+	@Override
+	public FileObject createResource(Location location, CharSequence pkg,
+			CharSequence relativeName, Element... originatingElements)
+			throws IOException {
+		validateName(relativeName);
+		FileObject fo = _fileManager.getFileForOutput(
+				location, pkg.toString(), relativeName.toString(), null);
+		URI uri = fo.toUri();
+		if (_createdFiles.contains(uri)) {
+			Iterator<URI> it = _createdFiles.iterator();
+			StringBuilder sb = new StringBuilder("\n----\n");
+			while (it.hasNext()) {
+				URI next = it.next();
+				sb.append(next).append("\n");
+			}
+			throw new FilerException("createResource. Resource already created : " + location + '/' + pkg + '/' + relativeName + " --- uri = " + uri + sb.toString()); //$NON-NLS-1$
+		}
+
+    _createdFiles.add(uri);
+    return fo;
+	}
+
+	private static void validateName(CharSequence relativeName) {
+		int length = relativeName.length();
+		if (length == 0) {
+			throw new IllegalArgumentException("relative path cannot be empty"); //$NON-NLS-1$
+		}
+		String path = relativeName.toString();
+		if (path.indexOf('\\') != -1) {
+			// normalize the path with '/'
+			path = path.replace('\\', '/');
+		}
+		if (path.charAt(0) == '/') {
+			throw new IllegalArgumentException("relative path is absolute"); //$NON-NLS-1$
+		}
+		boolean hasDot = false;
+		for (int i = 0; i < length; i++) {
+			switch(path.charAt(i)) {
+				case '/' :
+					if (hasDot) {
+						throw new IllegalArgumentException("relative name " + relativeName + " is not relative"); //$NON-NLS-1$ //$NON-NLS-2$
+					}
+					break;
+				case '.' :
+					hasDot = true;
+					break;
+				default:
+					hasDot = false;
+			}
+		}
+		if (hasDot) {
+			throw new IllegalArgumentException("relative name " + relativeName + " is not relative"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.annotation.processing.Filer#createSourceFile(java.lang.CharSequence, javax.lang.model.element.Element[])
+	 */
+	@Override
+	public JavaFileObject createSourceFile(CharSequence name,
+			Element... originatingElements) throws IOException {
+		JavaFileObject jfo = _fileManager.getJavaFileForOutput(
+				StandardLocation.SOURCE_OUTPUT, name.toString(), JavaFileObject.Kind.SOURCE, null);
+		URI uri = jfo.toUri();
+		if (_createdFiles.contains(uri)) {
+			throw new FilerException("Source file already created : " + name); //$NON-NLS-1$
+		}
+
+    _createdFiles.add(uri);
+    // hook the file object's writers to create compilation unit and add to addedUnits()
+		return new HookedJavaFileObject(jfo, jfo.getName(), name.toString(), this);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.annotation.processing.Filer#getResource(javax.tools.JavaFileManager.Location, java.lang.CharSequence, java.lang.CharSequence)
+	 */
+	@Override
+	public FileObject getResource(Location location, CharSequence pkg,
+			CharSequence relativeName) throws IOException {
+		validateName(relativeName);
+		FileObject fo = _fileManager.getFileForInput(
+				location, pkg.toString(), relativeName.toString());
+		if (fo == null) {
+			throw new FileNotFoundException("Resource does not exist : " + location + '/' + pkg + '/' + relativeName); //$NON-NLS-1$
+		}
+		URI uri = fo.toUri();
+		if (_createdFiles.contains(uri)) {
+			throw new FilerException("getResource. Resource already created : " + location + '/' + pkg + '/' + relativeName + " --- uri = " + uri); //$NON-NLS-1$
+		}
+
+    _createdFiles.add(uri);
+    return fo;
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchMessagerImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchMessagerImpl.java
new file mode 100644
index 0000000..78a2830
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchMessagerImpl.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2009 BEA Systems, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import javax.annotation.processing.Messager;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.tools.Diagnostic.Kind;
+
+import org.aspectj.org.eclipse.jdt.core.compiler.CategorizedProblem;
+import org.aspectj.org.eclipse.jdt.internal.compiler.batch.Main;
+
+/**
+ * An implementation of Messager that reports messages via the Compiler
+ */
+public class BatchMessagerImpl extends BaseMessagerImpl implements Messager {
+
+	private final Main _compiler;
+	private final BaseProcessingEnvImpl _processingEnv;
+
+	public BatchMessagerImpl(BaseProcessingEnvImpl processingEnv, Main compiler) {
+		_compiler = compiler;
+		_processingEnv = processingEnv;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.annotation.processing.Messager#printMessage(javax.tools.Diagnostic.Kind, java.lang.CharSequence)
+	 */
+	@Override
+	public void printMessage(Kind kind, CharSequence msg) {
+		printMessage(kind, msg, null, null, null);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.annotation.processing.Messager#printMessage(javax.tools.Diagnostic.Kind, java.lang.CharSequence, javax.lang.model.element.Element)
+	 */
+	@Override
+	public void printMessage(Kind kind, CharSequence msg, Element e) {
+		printMessage(kind, msg, e, null, null);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.annotation.processing.Messager#printMessage(javax.tools.Diagnostic.Kind, java.lang.CharSequence, javax.lang.model.element.Element, javax.lang.model.element.AnnotationMirror)
+	 */
+	@Override
+	public void printMessage(Kind kind, CharSequence msg, Element e,
+			AnnotationMirror a) {
+		printMessage(kind, msg, e, a, null);
+
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.annotation.processing.Messager#printMessage(javax.tools.Diagnostic.Kind, java.lang.CharSequence, javax.lang.model.element.Element, javax.lang.model.element.AnnotationMirror, javax.lang.model.element.AnnotationValue)
+	 */
+	@Override
+	public void printMessage(Kind kind, CharSequence msg, Element e,
+			AnnotationMirror a, AnnotationValue v) {
+		if (kind == Kind.ERROR) {
+			_processingEnv.setErrorRaised(true);
+		}
+		CategorizedProblem problem = createProblem(kind, msg, e, a, v);
+		if (problem != null) {
+            this._compiler.addExtraProblems(problem);
+		}
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchProcessingEnvImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchProcessingEnvImpl.java
new file mode 100644
index 0000000..d2987e2
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchProcessingEnvImpl.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 BEA Systems, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import java.lang.reflect.Field;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.tools.JavaFileManager;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.util.EclipseFileManager;
+import org.aspectj.org.eclipse.jdt.internal.compiler.batch.Main;
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
+import org.aspectj.org.eclipse.jdt.internal.compiler.problem.AbortCompilation;
+
+/**
+ * The implementation of ProcessingEnvironment that is used when compilation is
+ * driven by the command line or by the Tool interface.  This environment uses
+ * the JavaFileManager provided by the compiler.
+ * @see org.aspectj.org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeProcessingEnvImpl
+ */
+public class BatchProcessingEnvImpl extends BaseProcessingEnvImpl {
+
+	protected final BaseAnnotationProcessorManager _dispatchManager;
+	protected final JavaFileManager _fileManager;
+	protected final Main _compilerOwner;
+
+	public BatchProcessingEnvImpl(BaseAnnotationProcessorManager dispatchManager, Main batchCompiler,
+			String[] commandLineArguments)
+	{
+		super();
+		_compilerOwner = batchCompiler;
+		_compiler = batchCompiler.batchCompiler;
+		_dispatchManager = dispatchManager;
+		Class<?> c = null;
+		try {
+			c = Class.forName("org.aspectj.org.eclipse.jdt.internal.compiler.tool.EclipseCompilerImpl"); //$NON-NLS-1$
+		} catch (ClassNotFoundException e) {
+			// ignore
+		}
+		Field field = null;
+		JavaFileManager javaFileManager = null;
+		if (c != null) {
+			try {
+				field = c.getField("fileManager"); //$NON-NLS-1$
+			} catch (SecurityException e) {
+				// ignore
+			} catch (IllegalArgumentException e) {
+				// ignore
+			} catch (NoSuchFieldException e) {
+				// ignore
+			}
+		}
+		if (field != null) {
+			try {
+				javaFileManager = (JavaFileManager) field.get(batchCompiler);
+			} catch (IllegalArgumentException e) {
+				// ignore
+			} catch (IllegalAccessException e) {
+				// ignore
+			}
+		}
+		if (javaFileManager != null) {
+			_fileManager = javaFileManager;
+		} else {
+			String encoding = (String) batchCompiler.options.get(CompilerOptions.OPTION_Encoding);
+			Charset charset = encoding != null ? Charset.forName(encoding) : null;
+			JavaFileManager manager = new EclipseFileManager(batchCompiler.compilerLocale, charset);
+			ArrayList<String> options = new ArrayList<String>();
+			for (String argument : commandLineArguments) {
+				options.add(argument);
+			}
+			for (Iterator<String> iterator = options.iterator(); iterator.hasNext(); ) {
+				manager.handleOption(iterator.next(), iterator);
+			}
+			_fileManager = manager;
+		}
+		_processorOptions = Collections.unmodifiableMap(parseProcessorOptions(commandLineArguments));
+		_filer = new AjBatchFilerImpl(_dispatchManager, this);
+		_messager = new BatchMessagerImpl(this, _compilerOwner);
+	}
+
+	/**
+	 * Parse the -A command line arguments so that they can be delivered to
+	 * processors with {@link javax.annotation.processing.ProcessingEnvironment#getOptions()}.  In Sun's Java 6
+	 * version of javac, unlike in the Java 5 apt tool, only the -A options are
+	 * passed to processors, not the other command line options; that behavior
+	 * is repeated here.
+	 * @param args the equivalent of the args array from the main() method.
+	 * @return a map of key to value, or key to null if there is no value for
+	 * a particular key.  The "-A" is stripped from the key, so a command-line
+	 * argument like "-Afoo=bar" will result in an entry with key "foo" and
+	 * value "bar".
+	 */
+	private Map<String, String> parseProcessorOptions(String[] args) {
+		Map<String, String> options = new LinkedHashMap<String, String>();
+		for (String arg : args) {
+			if (!arg.startsWith("-A")) { //$NON-NLS-1$
+				continue;
+			}
+			int equals = arg.indexOf('=');
+			if (equals == 2) {
+				// option begins "-A=" - not valid
+				Exception e = new IllegalArgumentException("-A option must have a key before the equals sign"); //$NON-NLS-1$
+				throw new AbortCompilation(null, e);
+			}
+			if (equals == arg.length() - 1) {
+				// option ends with "=" - not valid
+				options.put(arg.substring(2, equals), null);
+			} else if (equals == -1) {
+				// no value
+				options.put(arg.substring(2), null);
+			} else {
+				// value and key
+				options.put(arg.substring(2, equals), arg.substring(equals + 1));
+			}
+		}
+		return options;
+	}
+
+	public JavaFileManager getFileManager() {
+		return _fileManager;
+	}
+
+	@Override
+	public Locale getLocale() {
+		return _compilerOwner.compilerLocale;
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject.java
new file mode 100644
index 0000000..9ed377b
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/HookedJavaFileObject.java
@@ -0,0 +1,264 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2014 BEA Systems, Inc. and others 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+
+import javax.tools.ForwardingJavaFileObject;
+import javax.tools.JavaFileObject;
+
+import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
+import org.aspectj.org.eclipse.jdt.internal.compiler.batch.CompilationUnit;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
+import org.aspectj.org.eclipse.jdt.internal.compiler.env.IBinaryType;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+
+/**
+ * A delegating JavaFileObject that hooks the close() methods of the Writer
+ * or OutputStream objects that it produces, and notifies the annotation
+ * dispatch manager when a new compilation unit is produced.
+ */
+public class HookedJavaFileObject extends
+		ForwardingJavaFileObject<JavaFileObject> 
+{
+	// A delegating Writer that passes all commands to its contained Writer,
+	// but hooks close() to notify the annotation dispatch manager of the new unit.
+	private class ForwardingWriter extends Writer {
+		private final Writer _w;
+		ForwardingWriter(Writer w) {
+			_w = w;
+		}
+		@Override
+		public Writer append(char c) throws IOException {
+			return _w.append(c);
+		}
+		@Override
+		public Writer append(CharSequence csq, int start, int end)
+				throws IOException {
+			return _w.append(csq, start, end);
+		}
+		@Override
+		public Writer append(CharSequence csq) throws IOException {
+			return _w.append(csq);
+		}
+		// This is the only interesting method - it has to notify the
+		// dispatch manager of the new file.
+		@Override
+		public void close() throws IOException {
+			_w.close();
+			closed();
+		}
+		@Override
+		public void flush() throws IOException {
+			_w.flush();
+		}
+		@Override
+		public void write(char[] cbuf) throws IOException {
+			_w.write(cbuf);
+		}
+		@Override
+		public void write(int c) throws IOException {
+			_w.write(c);
+		}
+		@Override
+		public void write(String str, int off, int len)
+				throws IOException {
+			_w.write(str, off, len);
+		}
+		@Override
+		public void write(String str) throws IOException {
+			_w.write(str);
+		}
+		@Override
+		public void write(char[] cbuf, int off, int len)
+		throws IOException {
+			_w.write(cbuf, off, len);
+		}
+		@Override
+		protected Object clone() throws CloneNotSupportedException {
+			return new ForwardingWriter(this._w);
+		}
+		@Override
+		public int hashCode() {
+			return _w.hashCode();
+		}
+		@Override
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (obj == null)
+				return false;
+			if (getClass() != obj.getClass())
+				return false;
+			final ForwardingWriter other = (ForwardingWriter) obj;
+			if (_w == null) {
+				if (other._w != null)
+					return false;
+			} else if (!_w.equals(other._w))
+				return false;
+			return true;
+		}
+		@Override
+		public String toString() {
+			return "ForwardingWriter wrapping " + _w.toString(); //$NON-NLS-1$
+		}
+	}
+	
+	// A delegating Writer that passes all commands to its contained Writer,
+	// but hooks close() to notify the annotation dispatch manager of the new unit.
+	private class ForwardingOutputStream extends OutputStream {
+		private final OutputStream _os;
+		
+		ForwardingOutputStream(OutputStream os) {
+			_os = os;
+		}
+		
+		@Override
+		public void close() throws IOException {
+			_os.close();
+			closed();
+		}
+		@Override
+		public void flush() throws IOException {
+			_os.flush();
+		}
+		@Override
+		public void write(byte[] b, int off, int len) throws IOException {
+			_os.write(b, off, len);
+		}
+		@Override
+		public void write(byte[] b) throws IOException {
+			_os.write(b);
+		}
+		@Override
+		public void write(int b) throws IOException {
+			_os.write(b);
+		}
+		@Override
+		protected Object clone() throws CloneNotSupportedException {
+			return new ForwardingOutputStream(this._os);
+		}
+		@Override
+		public int hashCode() {
+			return _os.hashCode();
+		}
+		@Override
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (obj == null)
+				return false;
+			if (getClass() != obj.getClass())
+				return false;
+			final ForwardingOutputStream other = (ForwardingOutputStream) obj;
+			if (_os == null) {
+				if (other._os != null)
+					return false;
+			} else if (!_os.equals(other._os))
+				return false;
+			return true;
+		}
+		@Override
+		public String toString() {
+			return "ForwardingOutputStream wrapping " + _os.toString(); //$NON-NLS-1$
+		}
+	}
+	
+	/**
+	 * The Filer implementation that we need to notify when a new file is created. 
+	 */
+	protected final BatchFilerImpl _filer;
+	
+	/**
+	 * The name of the file that is created; this is passed to the CompilationUnit constructor,
+	 * and ultimately to the java.io.File constructor, so it is a normal pathname, just like 
+	 * what would be on the compiler command line.
+	 */
+	protected final String _fileName;
+	
+	
+	
+	/**
+	 * A compilation unit is created when the writer or stream is closed.  Only do this once.
+	 */
+	private boolean _closed = false;
+
+	private String _typeName;
+	
+	public HookedJavaFileObject(JavaFileObject fileObject, String fileName, String typeName, BatchFilerImpl filer) {
+		super(fileObject);
+		_filer = filer;
+		_fileName = fileName;
+		_typeName = typeName;
+	}
+
+	@Override
+	public OutputStream openOutputStream() throws IOException {
+		return new ForwardingOutputStream(super.openOutputStream());
+	}
+
+	@Override
+	public Writer openWriter() throws IOException {
+		return new ForwardingWriter(super.openWriter());
+	}
+	
+	protected void closed() {
+		if (!_closed) {
+			_closed = true;
+			//TODO: support encoding
+			switch(this.getKind()) {
+				case SOURCE :
+					CompilationUnit unit = new CompilationUnit(null, _fileName, null /* encoding */);
+					_filer.addNewUnit(unit);
+					break;
+				case CLASS :
+					IBinaryType binaryType = null;
+					try {
+						binaryType = ClassFileReader.read(_fileName);
+					} catch (ClassFormatException e) {
+						/* When the annotation processor produces garbage, javac seems to show some resilience, by hooking the source type,
+						   which since is resolved can answer annotations during discovery - Not sure if this sanctioned by the spec, to be taken
+						   up with Oracle. Here we mimic the bug, see that addNewClassFile is simply collecting ReferenceBinding's, so adding
+						   a SourceTypeBinding works just fine.
+						*/
+						ReferenceBinding type = this._filer._env._compiler.lookupEnvironment.getType(CharOperation.splitOn('.', _typeName.toCharArray()));
+						if (type != null) 
+							_filer.addNewClassFile(type);
+					} catch (IOException e) {
+						// ignore
+					}
+					if (binaryType != null) {
+						char[] name = binaryType.getName();
+						ReferenceBinding type = this._filer._env._compiler.lookupEnvironment.getType(CharOperation.splitOn('/', name));
+						if (type != null && type.isValidBinding()) {
+							if (type.isBinaryBinding()) {
+								_filer.addNewClassFile(type);
+							} else {
+								BinaryTypeBinding binaryBinding = new BinaryTypeBinding(type.getPackage(), binaryType, this._filer._env._compiler.lookupEnvironment, true);
+								if (binaryBinding != null)
+									_filer.addNewClassFile(binaryBinding);
+							}
+						}
+					}
+					break;
+				case HTML:
+				case OTHER:
+					break;
+			}
+		}
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/IProcessorProvider.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/IProcessorProvider.java
new file mode 100644
index 0000000..d9713e5
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/IProcessorProvider.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 BEA Systems, Inc. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import java.util.List;
+
+import javax.annotation.processing.Processor;
+
+/**
+ * Implementors know how to discover annotation processors, and maintain a list of processors that
+ * have been discovered and initialized so far.
+ */
+public interface IProcessorProvider {
+
+	/**
+	 * Return the next processor that can be discovered, according to the order and discovery rules
+	 *         of the provider (see, for instance, {@link Processor}.
+	 * @return a ProcessorInfo wrapping an initialized Processor, or <code>null</code> if there are
+	 * no more processors to be discovered.
+	 */
+	ProcessorInfo discoverNextProcessor();
+
+	/**
+	 * @return the list of all processors that have been discovered so far. This list will grow when
+	 *         {@link #discoverNextProcessor()} is called.
+	 */
+	List<ProcessorInfo> getDiscoveredProcessors();
+	
+	/**
+	 * Called when a processor throws an exception.  This may abort compilation, throw an
+	 * unchecked exception, etc; the caller should not assume that this method will return.
+	 * 
+	 * @param p the processor, if known, or null if not.
+	 * @param e
+	 */
+	void reportProcessorException(Processor p, Exception e);
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/ProcessorInfo.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/ProcessorInfo.java
new file mode 100644
index 0000000..2250549
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/ProcessorInfo.java
@@ -0,0 +1,174 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 BEA Systems, Inc. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import java.util.Iterator;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.annotation.processing.Processor;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.TypeElement;
+
+/**
+ * Cached information associated with a {@link Processor} in the context
+ * of annotation processor dispatch.
+ * <p>
+ * This class supports inclusion in a collection by implementing
+ * equals() and hashCode().  Its concept of identity is based on
+ * the class object of the Processor that it wraps; so, for instance,
+ * it is not possible to have a Set that contains more than one
+ * instance of a particular Processor class.  In fact, it is possible
+ * to have more than one instance of a Processor if there are multiple
+ * build threads, but within the context of a particular dispatch
+ * manager, there will only be one of any given Processor class.
+ */
+public class ProcessorInfo {
+	final Processor _processor;
+	final Set<String> _supportedOptions;
+	final SourceVersion _supportedSourceVersion;
+
+	private final Pattern _supportedAnnotationTypesPattern;
+	private final boolean _supportsStar;
+	private boolean _hasBeenCalled;
+
+	/**
+	 * Create a ProcessorInfo wrapping a particular Processor. The Processor must already have been
+	 * initialized (that is,
+	 * {@link Processor#init(javax.annotation.processing.ProcessingEnvironment)} must already have
+	 * been called). Its getSupportedXXX() methods will be called and the results will be cached.
+	 */
+	public ProcessorInfo(Processor p) 
+	{
+		_processor = p;
+		_hasBeenCalled = false;
+		_supportedSourceVersion = p.getSupportedSourceVersion();
+		_supportedOptions = p.getSupportedOptions();
+		Set<String> supportedAnnotationTypes = p.getSupportedAnnotationTypes();
+		
+		boolean supportsStar = false;
+		if (null != supportedAnnotationTypes && !supportedAnnotationTypes.isEmpty()) {
+			StringBuilder regex = new StringBuilder();
+			Iterator<String> iName = supportedAnnotationTypes.iterator();
+			while (true) {
+				String name = iName.next();
+				supportsStar |= "*".equals(name);  //$NON-NLS-1$
+				String escapedName1 = name.replace(".", "\\."); //$NON-NLS-1$ //$NON-NLS-2$
+				String escapedName2 = escapedName1.replace("*", ".*"); //$NON-NLS-1$ //$NON-NLS-2$
+				regex.append(escapedName2);
+				if (!iName.hasNext()) {
+					break;
+				}
+				regex.append('|');
+			}
+			_supportedAnnotationTypesPattern = Pattern.compile(regex.toString());
+		}
+		else {
+			_supportedAnnotationTypesPattern = null;
+		}
+		_supportsStar = supportsStar;
+	}
+	
+	/**
+	 * Compute the subset of <code>annotations</code> that are described by <code>annotationTypes</code>,
+	 * and determine whether the processor should be called.  A processor will be called if it has
+	 * any annotations to process, or if it supports "*", or if it was called in a previous round.
+	 * If the return value of this method is true once for a given processor, then it will always be true on
+	 * subsequent calls.
+	 * 
+	 * @param annotations a set of annotation types
+	 * @param result an empty modifiable set, which upon return will contain a subset of <code>annotations</code>, which may be empty but will not be null.
+	 * @return true if the processor should be called on this round.
+	 */
+	public boolean computeSupportedAnnotations(Set<TypeElement> annotations, Set<TypeElement> result)
+	{
+		if (null != annotations && !annotations.isEmpty() && null != _supportedAnnotationTypesPattern) {
+			for (TypeElement annotation : annotations) {
+				Matcher matcher = _supportedAnnotationTypesPattern.matcher(annotation.getQualifiedName().toString());
+				if (matcher.matches()) {
+					result.add(annotation);
+				}
+			}
+		}
+		boolean call = _hasBeenCalled || _supportsStar || !result.isEmpty();
+		_hasBeenCalled |= call;
+		return call;
+	}
+
+	/**
+	 * @return true if the processor included "*" among its list of supported annotations.
+	 */
+	public boolean supportsStar()
+	{
+		return _supportsStar;
+	}
+	
+	/**
+	 * Must be called at the beginning of a build to ensure that no information is
+	 * carried over from the previous build.  In particular, processors are
+	 * required to be called on every round after the round in which they are
+	 * first called; this method resets the "has been called" flag.
+	 */
+	public void reset()
+	{
+		_hasBeenCalled = false;
+	}
+
+	@Override
+	public int hashCode() {
+		return _processor.getClass().hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		final ProcessorInfo other = (ProcessorInfo) obj;
+		if (!_processor.getClass().equals(other._processor.getClass()))
+			return false;
+		return true;
+	}
+
+	@Override
+	public String toString()
+	{
+		return _processor.getClass().getName();
+	}
+	
+	/**
+	 * @return a string representing the set of supported annotation types, in a format
+	 * suitable for debugging.  The format is unspecified and subject to change.
+	 */
+	public String getSupportedAnnotationTypesAsString()
+	{
+		StringBuilder sb = new StringBuilder();
+		sb.append('[');
+		Iterator<String> iAnnots = _processor.getSupportedAnnotationTypes().iterator(); 
+		boolean hasNext = iAnnots.hasNext();
+		while (hasNext) {
+			sb.append(iAnnots.next());
+			hasNext = iAnnots.hasNext();
+			if (hasNext) {
+				sb.append(',');
+			}
+		}
+		sb.append(']');
+		return sb.toString();
+	}
+}
+
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundDispatcher.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundDispatcher.java
new file mode 100644
index 0000000..069b638
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundDispatcher.java
@@ -0,0 +1,174 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 BEA Systems, Inc. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import java.io.PrintWriter;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.processing.RoundEnvironment;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
+
+/**
+ * Manages context during a single round of annotation processing.
+ */
+public class RoundDispatcher {
+	
+	private final Set<TypeElement> _unclaimedAnnotations;
+	private final RoundEnvironment _roundEnv;
+	private final IProcessorProvider _provider;
+	private boolean _searchForStar = false;
+	private final PrintWriter _traceProcessorInfo;
+	private final PrintWriter _traceRounds;
+	
+	/**
+	 * Processors discovered so far.  This list may grow during the
+	 * course of a round, as additional processors are discovered.
+	 */
+	private final List<ProcessorInfo> _processors;
+	
+	/**
+	 * @param rootAnnotations a possibly empty but non-null set of annotations on the
+	 * root compilation units of this round.  A local copy of the set will be made, to
+	 * avoid modifying the set passed in.
+	 * @param traceProcessorInfo a PrintWriter that processor trace output will be sent 
+	 * to, or null if tracing is not desired.
+	 * @param traceRounds 
+	 */
+	public RoundDispatcher(
+			IProcessorProvider provider, 
+			RoundEnvironment env, 
+			Set<TypeElement> rootAnnotations, 
+			PrintWriter traceProcessorInfo, 
+			PrintWriter traceRounds)
+	{
+		_provider = provider;
+		_processors = provider.getDiscoveredProcessors();
+		_roundEnv = env;
+		_unclaimedAnnotations = new HashSet<TypeElement>(rootAnnotations);
+		_traceProcessorInfo = traceProcessorInfo;
+		_traceRounds = traceRounds;
+	}
+	
+	/**
+	 * Handle a complete round, dispatching to all appropriate processors. 
+	 */
+	public void round()
+	{
+		if (null != _traceRounds) {
+			StringBuilder sbElements = new StringBuilder();
+			sbElements.append("\tinput files: {"); //$NON-NLS-1$
+			Iterator<? extends Element> iElements = _roundEnv.getRootElements().iterator();
+			boolean hasNext = iElements.hasNext();
+			while (hasNext) {
+				sbElements.append(iElements.next());
+				hasNext = iElements.hasNext();
+				if (hasNext) {
+					sbElements.append(',');
+				}
+			}
+			sbElements.append('}');
+			_traceRounds.println(sbElements.toString());
+			
+			StringBuilder sbAnnots = new StringBuilder();
+			sbAnnots.append("\tannotations: ["); //$NON-NLS-1$
+			Iterator<TypeElement> iAnnots = _unclaimedAnnotations.iterator();
+			hasNext = iAnnots.hasNext();
+			while (hasNext) {
+				sbAnnots.append(iAnnots.next());
+				hasNext = iAnnots.hasNext();
+				if (hasNext) {
+					sbAnnots.append(',');
+				}
+			}
+			sbAnnots.append(']');
+			_traceRounds.println(sbAnnots.toString());
+			
+			_traceRounds.println("\tlast round: " + _roundEnv.processingOver()); //$NON-NLS-1$
+		}
+		
+		// If there are no root annotations, try to find a processor that claims "*"
+		_searchForStar = _unclaimedAnnotations.isEmpty();
+		
+		// Iterate over all the already-found processors, giving each one a chance at the unclaimed
+		// annotations. If a processor is called at all, it is called on every subsequent round 
+		// including the final round, but it may be called with an empty set of annotations.
+		for (ProcessorInfo pi : _processors) {
+
+			handleProcessor(pi);
+		}
+
+		// If there are any unclaimed annotations, or if there were no root annotations and
+		// we have not yet run into a processor that claimed "*", continue discovery.
+		while (_searchForStar || !_unclaimedAnnotations.isEmpty()) {
+			ProcessorInfo pi = _provider.discoverNextProcessor();
+			if (null == pi) {
+				// There are no more processors to be discovered.
+				break;
+			}
+			handleProcessor(pi);
+		}
+		
+		// TODO: If !unclaimedAnnos.isEmpty(), issue a warning.
+	}
+	
+	/**
+	 * Evaluate a single processor.  Depending on the unclaimed annotations,
+	 * the annotations this processor supports, and whether it has already been
+	 * called in a previous round, possibly call its process() method.
+	 */
+	private void handleProcessor(ProcessorInfo pi)
+	{
+		try {
+			Set<TypeElement> annotationsToProcess = new HashSet<TypeElement>();
+			boolean shouldCall = pi.computeSupportedAnnotations(
+					_unclaimedAnnotations, annotationsToProcess);
+			if (shouldCall) {
+				boolean claimed = pi._processor.process(annotationsToProcess, _roundEnv);
+				if (null != _traceProcessorInfo && !_roundEnv.processingOver()) {
+					StringBuilder sb = new StringBuilder();
+					sb.append("Processor "); //$NON-NLS-1$
+					sb.append(pi._processor.getClass().getName());
+					sb.append(" matches ["); //$NON-NLS-1$
+					Iterator<TypeElement> i = annotationsToProcess.iterator();
+					boolean hasNext = i.hasNext();
+					while (hasNext) {
+						sb.append(i.next());
+						hasNext = i.hasNext();
+						if (hasNext) {
+							sb.append(' ');
+						}
+					}
+					sb.append("] and returns "); //$NON-NLS-1$
+					sb.append(claimed);
+					_traceProcessorInfo.println(sb.toString());
+				}
+				if (claimed) {
+					// The processor claimed its annotations.
+					_unclaimedAnnotations.removeAll(annotationsToProcess);
+					if (pi.supportsStar()) {
+						_searchForStar = false;
+					}
+				}
+			}
+		} catch (Exception e) {
+			// If a processor throws an exception (as opposed to reporting an error),
+			// report it and abort compilation by throwing AbortCompilation.
+			_provider.reportProcessorException(pi._processor, e);
+		}
+	}
+	
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundEnvImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundEnvImpl.java
new file mode 100644
index 0000000..2a88065
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundEnvImpl.java
@@ -0,0 +1,239 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *    IBM Corporation - initial API and implementation
+ *    IBM Corporation - Fix for bug 328575
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch;
+
+import java.lang.annotation.Annotation;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.annotation.processing.RoundEnvironment;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.util.ElementFilter;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.Factory;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.TypeElementImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.util.ManyToMany;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TagBits;
+
+public class RoundEnvImpl implements RoundEnvironment
+{
+	private final BaseProcessingEnvImpl _processingEnv;
+	private final boolean _isLastRound;
+	private final CompilationUnitDeclaration[] _units;
+	private final ManyToMany<TypeElement, Element> _annoToUnit;
+	private final ReferenceBinding[] _binaryTypes;
+	private final Factory _factory;
+	private Set<Element> _rootElements = null;
+
+	public RoundEnvImpl(CompilationUnitDeclaration[] units, ReferenceBinding[] binaryTypeBindings, boolean isLastRound, BaseProcessingEnvImpl env) {
+		_processingEnv = env;
+		_isLastRound = isLastRound;
+		_units = units;
+		_factory = _processingEnv.getFactory();
+		
+		// Discover the annotations that will be passed to Processor.process()
+		AnnotationDiscoveryVisitor visitor = new AnnotationDiscoveryVisitor(_processingEnv);
+		if (_units != null) {
+			for (CompilationUnitDeclaration unit : _units) {
+				unit.scope.suppressImportErrors = true;
+				unit.traverse(visitor, unit.scope);
+				unit.scope.suppressImportErrors = false;
+			}
+		}
+		_annoToUnit = visitor._annoToElement;
+		if (binaryTypeBindings != null) collectAnnotations(binaryTypeBindings);
+		_binaryTypes = binaryTypeBindings;
+	}
+
+	private void collectAnnotations(ReferenceBinding[] referenceBindings) {
+		for (ReferenceBinding referenceBinding : referenceBindings) {
+			// collect all annotations from the binary types
+			if (referenceBinding instanceof ParameterizedTypeBinding) {
+				referenceBinding = ((ParameterizedTypeBinding) referenceBinding).genericType();
+			}
+			AnnotationBinding[] annotationBindings = Factory.getPackedAnnotationBindings(referenceBinding.getAnnotations());
+			for (AnnotationBinding annotationBinding : annotationBindings) {
+				TypeElement anno = (TypeElement)_factory.newElement(annotationBinding.getAnnotationType()); 
+				Element element = _factory.newElement(referenceBinding);
+				_annoToUnit.put(anno, element);
+			}
+			FieldBinding[] fieldBindings = referenceBinding.fields();
+			for (FieldBinding fieldBinding : fieldBindings) {
+				annotationBindings = Factory.getPackedAnnotationBindings(fieldBinding.getAnnotations());
+				for (AnnotationBinding annotationBinding : annotationBindings) {
+					TypeElement anno = (TypeElement)_factory.newElement(annotationBinding.getAnnotationType()); 
+					Element element = _factory.newElement(fieldBinding);
+					_annoToUnit.put(anno, element);
+				}
+			}
+			MethodBinding[] methodBindings = referenceBinding.methods();
+			for (MethodBinding methodBinding : methodBindings) {
+				annotationBindings = Factory.getPackedAnnotationBindings(methodBinding.getAnnotations());
+				for (AnnotationBinding annotationBinding : annotationBindings) {
+					TypeElement anno = (TypeElement)_factory.newElement(annotationBinding.getAnnotationType()); 
+					Element element = _factory.newElement(methodBinding);
+					_annoToUnit.put(anno, element);
+				}
+			}
+			ReferenceBinding[] memberTypes = referenceBinding.memberTypes();
+			collectAnnotations(memberTypes);
+		}
+	}
+
+	/**
+	 * Return the set of annotation types that were discovered on the root elements.
+	 * This does not include inherited annotations, only those directly on the root
+	 * elements.
+	 * @return a set of annotation types, possibly empty.
+	 */
+	public Set<TypeElement> getRootAnnotations()
+	{
+		return Collections.unmodifiableSet(_annoToUnit.getKeySet());
+	}
+
+	@Override
+	public boolean errorRaised()
+	{
+		return _processingEnv.errorRaised();
+	}
+
+	/**
+	 * From the set of root elements and their enclosed elements, return the subset that are annotated
+	 * with {@code a}.  If {@code a} is annotated with the {@link java.lang.annotation.Inherited} 
+	 * annotation, include those elements that inherit the annotation from their superclasses.
+	 * Note that {@link java.lang.annotation.Inherited} only applies to classes (i.e. TypeElements).
+	 */
+	@Override
+	public Set<? extends Element> getElementsAnnotatedWith(TypeElement a)
+	{
+		if (a.getKind() != ElementKind.ANNOTATION_TYPE) {
+			throw new IllegalArgumentException("Argument must represent an annotation type"); //$NON-NLS-1$
+		}
+		Binding annoBinding = ((TypeElementImpl)a)._binding;
+		if (0 != (annoBinding.getAnnotationTagBits() & TagBits.AnnotationInherited)) {
+			Set<Element> annotatedElements = new HashSet<Element>(_annoToUnit.getValues(a));
+			// For all other root elements that are TypeElements, and for their recursively enclosed
+			// types, add each element if it has a superclass are annotated with 'a'
+			ReferenceBinding annoTypeBinding = (ReferenceBinding) annoBinding;
+			for (TypeElement element : ElementFilter.typesIn(getRootElements())) {
+				ReferenceBinding typeBinding = (ReferenceBinding)((TypeElementImpl)element)._binding;
+				addAnnotatedElements(annoTypeBinding, typeBinding, annotatedElements);
+			}
+			return Collections.unmodifiableSet(annotatedElements);
+		}
+		return Collections.unmodifiableSet(_annoToUnit.getValues(a));
+	}
+	
+	/**
+	 * For every type in types that is a class and that is annotated with anno, either directly or by inheritance,
+	 * add that type to result.  Recursively descend on each types's child classes as well.
+	 * @param anno the compiler binding for an annotation type
+	 * @param type a type, not necessarily a class
+	 * @param result must be a modifiable Set; will accumulate annotated classes
+	 */
+	private void addAnnotatedElements(ReferenceBinding anno, ReferenceBinding type, Set<Element> result) {
+		if (type.isClass()) {
+			if (inheritsAnno(type, anno)) {
+				result.add(_factory.newElement(type));
+			}
+		}
+		for (ReferenceBinding element : type.memberTypes()) {
+			addAnnotatedElements(anno, element, result);
+		}
+	}
+	
+	/**
+	 * Check whether an element has a superclass that is annotated with an @Inherited annotation.
+	 * @param element must be a class (not an interface, enum, etc.).
+	 * @param anno must be an annotation type, and must be @Inherited
+	 * @return true if element has a superclass that is annotated with anno
+	 */
+	private boolean inheritsAnno(ReferenceBinding element, ReferenceBinding anno) {
+		ReferenceBinding searchedElement = element;
+		do {
+			if (searchedElement instanceof ParameterizedTypeBinding) {
+				searchedElement = ((ParameterizedTypeBinding) searchedElement).genericType();
+			}
+			AnnotationBinding[] annos = Factory.getPackedAnnotationBindings(searchedElement.getAnnotations());
+			for (AnnotationBinding annoBinding : annos) {
+				if (annoBinding.getAnnotationType() == anno) { //$IDENTITY-COMPARISON$
+					// element is annotated with anno
+					return true;
+				}
+			}
+		} while (null != (searchedElement = searchedElement.superclass()));
+		return false;
+	}
+	
+	@Override
+	public Set<? extends Element> getElementsAnnotatedWith(Class<? extends Annotation> a)
+	{
+		String canonicalName = a.getCanonicalName();
+		if (canonicalName == null) {
+			// null for anonymous and local classes or an array of those
+			throw new IllegalArgumentException("Argument must represent an annotation type"); //$NON-NLS-1$
+		}
+		TypeElement annoType = _processingEnv.getElementUtils().getTypeElement(canonicalName);
+		return getElementsAnnotatedWith(annoType);
+	}
+
+	@Override
+	public Set<? extends Element> getRootElements()
+	{
+		if (_units == null) {
+			return Collections.emptySet();
+		}
+		if (_rootElements == null) {
+			Set<Element> elements = new HashSet<Element>(_units.length);
+			for (CompilationUnitDeclaration unit : _units) {
+				if (null == unit.scope || null == unit.scope.topLevelTypes)
+					continue;
+				for (SourceTypeBinding binding : unit.scope.topLevelTypes) {
+					Element element = _factory.newElement(binding);
+					if (null == element) {
+						throw new IllegalArgumentException("Top-level type binding could not be converted to element: " + binding); //$NON-NLS-1$
+					}
+					elements.add(element);
+				}
+			}
+			if (this._binaryTypes != null) {
+				for (ReferenceBinding typeBinding : _binaryTypes) {
+					Element element = _factory.newElement(typeBinding);
+					if (null == element) {
+						throw new IllegalArgumentException("Top-level type binding could not be converted to element: " + typeBinding); //$NON-NLS-1$
+					}
+					elements.add(element);
+				}
+			}
+			_rootElements = elements;
+		}
+		return _rootElements;
+	}
+
+	@Override
+	public boolean processingOver()
+	{
+		return _isLastRound;
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMemberValue.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMemberValue.java
new file mode 100644
index 0000000..903d42a
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMemberValue.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Vladimir Piskarev and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Vladimir Piskarev - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ElementValuePair;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+
+public class AnnotationMemberValue extends AnnotationValueImpl {
+
+	private final MethodBinding _methodBinding;
+	
+	/**
+	 * @param value
+	 *            The JDT representation of a compile-time constant. See
+	 *            {@link ElementValuePair#getValue()} for possible object types:
+	 *            <ul>
+	 *            <li>{@link org.aspectj.org.eclipse.jdt.internal.compiler.impl.Constant} for member
+	 *            of primitive type or String</li>
+	 *            <li>{@link TypeBinding} for a member value of type
+	 *            {@link java.lang.Class}</li>
+	 *            <li>{@link FieldBinding} for an enum constant</li>
+	 *            <li>{@link AnnotationBinding} for an annotation instance</li>
+	 *            <li><code>Object[]</code> for a member value of array type, where the
+	 *            array entries are one of the above</li>
+	 *            </ul>
+	 * @param methodBinding the method binding that defined this member value pair
+	 */
+	public AnnotationMemberValue(BaseProcessingEnvImpl env, Object value, MethodBinding methodBinding) {
+		super(env, value, methodBinding.returnType);
+		_methodBinding = methodBinding;
+	}
+	
+	/**
+	 * @return the method binding that defined this member value pair.
+	 */
+	public MethodBinding getMethodBinding() {
+		return _methodBinding;
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMirrorImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMirrorImpl.java
new file mode 100644
index 0000000..91e0f28
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMirrorImpl.java
@@ -0,0 +1,531 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.MirroredTypeException;
+import javax.lang.model.type.MirroredTypesException;
+import javax.lang.model.type.TypeMirror;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.Constant;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ArrayBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ElementValuePair;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeIds;
+
+public class AnnotationMirrorImpl implements AnnotationMirror, InvocationHandler {
+	
+	public final BaseProcessingEnvImpl _env;
+	public final AnnotationBinding _binding;
+	
+	/* package */ AnnotationMirrorImpl(BaseProcessingEnvImpl env, AnnotationBinding binding) {
+		_env = env;
+		_binding = binding;
+	}
+	
+	@Override
+	public boolean equals(Object obj) {
+		if (obj instanceof AnnotationMirrorImpl) {
+			if (this._binding == null) {
+				return ((AnnotationMirrorImpl) obj)._binding == null;
+			}
+			return equals(this._binding, ((AnnotationMirrorImpl) obj)._binding);
+		}
+		return obj == null ? false : obj.equals(this); // obj could be wrapped by a proxy.
+	}
+
+	private static boolean equals(AnnotationBinding annotationBinding, AnnotationBinding annotationBinding2) {
+		if (annotationBinding.getAnnotationType() != annotationBinding2.getAnnotationType()) return false; //$IDENTITY-COMPARISON$
+		final ElementValuePair[] elementValuePairs = annotationBinding.getElementValuePairs();
+		final ElementValuePair[] elementValuePairs2 = annotationBinding2.getElementValuePairs();
+		final int length = elementValuePairs.length;
+		if (length != elementValuePairs2.length) return false;
+		loop: for (int i = 0; i < length; i++) {
+			ElementValuePair pair = elementValuePairs[i];
+			// loop on the given pair to make sure one will match
+			for (int j = 0; j < length; j++) {
+				ElementValuePair pair2 = elementValuePairs2[j];
+				if (pair.binding == pair2.binding) {
+					if (pair.value == null) {
+						if (pair2.value == null) {
+							continue loop;
+						}
+						return false;
+					} else {
+						if (pair2.value == null) return false;
+						if (pair2.value instanceof Object[] && pair.value instanceof Object[]) {
+							if (!Arrays.equals((Object[]) pair.value, (Object[]) pair2.value)) {
+								return false;
+							}
+						} else if (!pair2.value.equals(pair.value)){
+							return false;
+						}
+					}
+					continue loop;
+				}
+			}
+			return false;
+		}
+		return true;
+	}
+
+	public DeclaredType getAnnotationType() {
+		return (DeclaredType) _env.getFactory().newTypeMirror(_binding.getAnnotationType());
+	}
+	
+	/**
+	 * @return all the members of this annotation mirror that have explicit values.
+	 * Default values are not included.
+	 */
+	public Map<? extends ExecutableElement, ? extends AnnotationValue> getElementValues() {
+		if (this._binding == null) {
+			return Collections.emptyMap();
+		}
+		ElementValuePair[] pairs = _binding.getElementValuePairs();
+		Map<ExecutableElement, AnnotationValue> valueMap =
+			new LinkedHashMap<ExecutableElement, AnnotationValue>(pairs.length);
+		for (ElementValuePair pair : pairs) {
+			MethodBinding method = pair.getMethodBinding();
+			if (method == null) {
+				// ideally we should be able to create a fake ExecutableElementImpl
+				continue;
+			}
+			ExecutableElement e = new ExecutableElementImpl(_env, method);
+			AnnotationValue v = new AnnotationMemberValue(_env, pair.getValue(), method);
+			valueMap.put(e, v);
+		}
+		return Collections.unmodifiableMap(valueMap);
+	}
+	
+	/**
+	 * @see javax.lang.model.util.Elements#getElementValuesWithDefaults(AnnotationMirror)
+	 * @return all the members of this annotation mirror that have explicit or default
+	 * values.
+	 */
+	public Map<? extends ExecutableElement, ? extends AnnotationValue> getElementValuesWithDefaults() {
+		if (this._binding == null) {
+			return Collections.emptyMap();
+		}
+		ElementValuePair[] pairs = _binding.getElementValuePairs();
+		ReferenceBinding annoType = _binding.getAnnotationType();
+		Map<ExecutableElement, AnnotationValue> valueMap =
+			new LinkedHashMap<ExecutableElement, AnnotationValue>();
+		for (MethodBinding method : annoType.methods()) {
+			// if binding is in ElementValuePair list, then get value from there
+			boolean foundExplicitValue = false;
+			for (int i = 0; i < pairs.length; ++i) {
+				MethodBinding explicitBinding = pairs[i].getMethodBinding();
+				if (method == explicitBinding) {
+					ExecutableElement e = new ExecutableElementImpl(_env, explicitBinding);
+					AnnotationValue v = new AnnotationMemberValue(_env, pairs[i].getValue(), explicitBinding);
+					valueMap.put(e, v);
+					foundExplicitValue = true;
+					break;
+				}
+			}
+			// else get default value if one exists
+			if (!foundExplicitValue) {
+				Object defaultVal = method.getDefaultValue();
+				if (null != defaultVal) {
+					ExecutableElement e = new ExecutableElementImpl(_env, method);
+					AnnotationValue v = new AnnotationMemberValue(_env, defaultVal, method);
+					valueMap.put(e, v);
+				}
+			}
+		}
+		return Collections.unmodifiableMap(valueMap);
+	}
+	
+	public int hashCode() {
+		if (this._binding == null) return this._env.hashCode();
+		return this._binding.hashCode();
+	}
+
+	/*
+	 * Used by getAnnotation(), which returns a reflective proxy of the annotation class.  When processors then
+	 * invoke methods such as value() on the annotation proxy, this method is called.
+	 * <p>
+	 * A challenge here is that the processor was not necessarily compiled against the same annotation
+	 * definition that the compiler is looking at right now, not to mention that the annotation itself
+	 * may be defective in source.  So the actual type of the value may be quite different than the
+	 * type expected by the caller, which will result in a ClassCastException, which is ugly for the
+	 * processor to try to catch.  So we try to catch and correct this type mismatch where possible.
+	 * <p>
+	 * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
+	 */
+	@Override
+	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
+	{
+		if (this._binding == null) return null;
+        final String methodName = method.getName();
+        if ( args == null || args.length == 0 ) {
+            if( methodName.equals("hashCode") ) { //$NON-NLS-1$
+                return new Integer( hashCode() );
+            }
+            else if( methodName.equals("toString") ) { //$NON-NLS-1$
+                return toString();
+            }
+            else if( methodName.equals("annotationType")) { //$NON-NLS-1$
+            	return proxy.getClass().getInterfaces()[0];
+            }
+        }
+        else if ( args.length == 1 && methodName.equals("equals") ) { //$NON-NLS-1$
+            return new Boolean( equals( args[0] ) );
+        }
+        
+        // If it's not one of the above methods, it must be an annotation member, so it cannot take any arguments
+        if ( args != null && args.length != 0 ) {
+            throw new NoSuchMethodException("method " + method.getName() + formatArgs(args) + " does not exist on annotation " + toString()); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+        final MethodBinding methodBinding = getMethodBinding(methodName);
+        if ( methodBinding == null ) {
+            throw new NoSuchMethodException("method " + method.getName() + "() does not exist on annotation" + toString()); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+
+        Object actualValue = null;
+        boolean foundMethod = false;
+        ElementValuePair[] pairs = _binding.getElementValuePairs();
+		for (ElementValuePair pair : pairs) {
+			if (methodName.equals(new String(pair.getName()))) {
+				actualValue = pair.getValue();
+				foundMethod = true;
+				break;
+			}
+		}
+		if (!foundMethod) {
+			// couldn't find explicit value; see if there's a default
+			actualValue = methodBinding.getDefaultValue(); 
+		}
+		Class<?> expectedType = method.getReturnType();
+		TypeBinding actualType = methodBinding.returnType;
+        return getReflectionValue(actualValue, actualType, expectedType);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * Sun implementation shows the values.  We avoid that here,
+	 * because getting the values is not idempotent.
+	 */
+	@Override
+	public String toString() {
+		if (this._binding == null) {
+			return "@any()"; //$NON-NLS-1$
+		}
+		return "@" + _binding.getAnnotationType().debugName(); //$NON-NLS-1$
+	}
+	
+	/**
+	 * Used for constructing exception message text.
+	 * @return a string like "(a, b, c)".
+	 */
+    private String formatArgs(final Object[] args)
+    {
+        // estimate that each class name (plus the separators) is 10 characters long plus 2 for "()".
+        final StringBuilder builder = new StringBuilder(args.length * 8 + 2 );
+        builder.append('(');
+        for( int i=0; i<args.length; i++ )
+        {
+            if( i > 0 ) 
+            	builder.append(", "); //$NON-NLS-1$
+            builder.append(args[i].getClass().getName());
+        }
+        builder.append(')');
+        return builder.toString();
+    }
+    
+	/**
+	 * Find a particular annotation member by name.
+	 * @return a compiler method binding, or null if no member was found.
+	 */
+	private MethodBinding getMethodBinding(String name) {
+		ReferenceBinding annoType = _binding.getAnnotationType();
+		MethodBinding[] methods = annoType.getMethods(name.toCharArray());
+		for (MethodBinding method : methods) {
+			// annotation members have no parameters
+			if (method.parameters.length == 0) {
+				return method;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Convert an annotation member value from JDT into Reflection, and from whatever its actual type
+	 * is into whatever type the reflective invoker of a method is expecting.
+	 * <p>
+	 * Only certain types are permitted as member values.  Specifically, a member must be a constant,
+	 * and must be either a primitive type, String, Class, an enum constant, an annotation, or an
+	 * array of any of those.  Multidimensional arrays are not permitted.
+	 * 
+	 * @param actualValue the value as represented by {@link ElementValuePair#getValue()}
+	 * @param actualType the return type of the corresponding {@link MethodBinding}
+	 * @param expectedType the type that the reflective method invoker is expecting
+	 * @return an object of the expected type representing the annotation member value, 
+	 * or an appropriate dummy value (such as null) if no value is available
+	 */
+	private Object getReflectionValue(Object actualValue, TypeBinding actualType, Class<?> expectedType)
+	{
+		if (null == expectedType) {
+			// With no expected type, we can't even guess at a conversion
+			return null;
+		}
+		if (null == actualValue) {
+			// Return a type-appropriate equivalent of null
+			return Factory.getMatchingDummyValue(expectedType);
+		}
+		if (expectedType.isArray()) {
+			if (Class.class.equals(expectedType.getComponentType())) {
+				// package Class[]-valued return as a MirroredTypesException
+				if (actualType.isArrayType() && actualValue instanceof Object[] &&
+						((ArrayBinding)actualType).leafComponentType.erasure().id == TypeIds.T_JavaLangClass) {
+					Object[] bindings = (Object[])actualValue;
+					List<TypeMirror> mirrors = new ArrayList<TypeMirror>(bindings.length);
+					for (int i = 0; i < bindings.length; ++i) {
+						if (bindings[i] instanceof TypeBinding) {
+							mirrors.add(_env.getFactory().newTypeMirror((TypeBinding)bindings[i]));
+						}
+					}
+					throw new MirroredTypesException(mirrors);
+				}
+				// TODO: actual value is not a TypeBinding[].  Should we return a TypeMirror[] around an ErrorType?
+				return null;
+			}
+			// Handle arrays of types other than Class, e.g., int[], MyEnum[], ...
+			return convertJDTArrayToReflectionArray(actualValue, actualType, expectedType);
+		}
+		else if (Class.class.equals(expectedType)) {
+			// package the Class-valued return as a MirroredTypeException
+			if (actualValue instanceof TypeBinding) {
+				TypeMirror mirror = _env.getFactory().newTypeMirror((TypeBinding)actualValue);
+				throw new MirroredTypeException(mirror);
+			}
+			else {
+				// TODO: actual value is not a TypeBinding.  Should we return a TypeMirror around an ErrorType?
+				return null;
+			}
+		}
+		else {
+			// Handle unitary values of type other than Class, e.g., int, MyEnum, ...
+			return convertJDTValueToReflectionType(actualValue, actualType, expectedType);
+		}
+	}
+
+	/**
+	 * Convert an array of JDT types as obtained from ElementValuePair.getValue()
+	 * (e.g., an Object[] containing IntConstant elements) to the type expected by
+	 * a reflective method invocation (e.g., int[]).
+	 * <p>
+	 * This does not handle arrays of Class, but it does handle primitives, enum constants,
+	 * and types such as String.
+	 * @param jdtValue the actual value returned by ElementValuePair.getValue() or MethodBinding.getDefault()
+	 * @param jdtType the return type of the annotation method binding
+	 * @param expectedType the type that the invoker of the method is expecting; must be an array type
+	 * @return an Object which is, e.g., an int[]; or null, if an array cannot be created.
+	 */
+	private Object convertJDTArrayToReflectionArray(Object jdtValue, TypeBinding jdtType, Class<?> expectedType)
+	{
+		assert null != expectedType && expectedType.isArray();
+		if (!jdtType.isArrayType()) {
+			// the compiler says that the type binding isn't an array type; this probably means
+			// that there's some sort of syntax error.
+			return null;
+		}
+		Object[] jdtArray;
+		// See bug 261969: it's legal to pass a solo element for an array-typed value
+		if (jdtValue != null && !(jdtValue instanceof Object[])) {
+			// Create an array of the expected type
+			jdtArray = (Object[]) Array.newInstance(jdtValue.getClass(), 1);
+			jdtArray[0] = jdtValue;
+		} else {
+			jdtArray = (Object[])jdtValue;
+		}
+		TypeBinding jdtLeafType = jdtType.leafComponentType();
+		Class<?> expectedLeafType = expectedType.getComponentType();
+        final int length = jdtArray.length;
+        final Object returnArray = Array.newInstance(expectedLeafType, length);
+        for (int i = 0; i < length; ++i) {
+        	Object jdtElementValue = jdtArray[i];
+    		if (expectedLeafType.isPrimitive() || String.class.equals(expectedLeafType)) {
+    			if (jdtElementValue instanceof Constant) {
+    				if (boolean.class.equals(expectedLeafType)) {
+    					Array.setBoolean(returnArray, i, ((Constant)jdtElementValue).booleanValue());
+    				}
+    				else if (byte.class.equals(expectedLeafType)) {
+    					Array.setByte(returnArray, i, ((Constant)jdtElementValue).byteValue());
+    				}
+    				else if (char.class.equals(expectedLeafType)) {
+    					Array.setChar(returnArray, i, ((Constant)jdtElementValue).charValue());
+    				}
+    				else if (double.class.equals(expectedLeafType)) {
+    					Array.setDouble(returnArray, i, ((Constant)jdtElementValue).doubleValue());
+    				}
+    				else if (float.class.equals(expectedLeafType)) {
+    					Array.setFloat(returnArray, i, ((Constant)jdtElementValue).floatValue());
+    				}
+    				else if (int.class.equals(expectedLeafType)) {
+    					Array.setInt(returnArray, i, ((Constant)jdtElementValue).intValue());
+    				}
+    				else if (long.class.equals(expectedLeafType)) {
+    					Array.setLong(returnArray, i, ((Constant)jdtElementValue).longValue());
+    				}
+    				else if (short.class.equals(expectedLeafType)) {
+    					Array.setShort(returnArray, i, ((Constant)jdtElementValue).shortValue());
+    				}
+    				else if (String.class.equals(expectedLeafType)) {
+    					Array.set(returnArray, i, ((Constant)jdtElementValue).stringValue());
+    				}
+    			}
+    			else {
+	    			// Primitive or string is expected, but our actual value cannot be coerced into one.
+	    			// TODO: if the actual value is an array of primitives, should we unpack the first one?
+	    			Factory.setArrayMatchingDummyValue(returnArray, i, expectedLeafType);
+    			}
+    		}
+    		else if (expectedLeafType.isEnum()) {
+    			Object returnVal = null;
+    	        if (jdtLeafType != null && jdtLeafType.isEnum() && jdtElementValue instanceof FieldBinding) {
+    	        	FieldBinding binding = (FieldBinding)jdtElementValue;
+    	        	try {
+    	        		Field returnedField = null;
+    	        		returnedField = expectedLeafType.getField( new String(binding.name) );
+    	        		if (null != returnedField) {
+    	        			returnVal = returnedField.get(null);
+    	        		}
+    	        	}
+    	        	catch (NoSuchFieldException nsfe) {
+    	        		// return null
+    	        	}
+    	        	catch (IllegalAccessException iae) {
+    	        		// return null
+    	        	}
+    	        }
+    	        Array.set(returnArray, i, returnVal);
+    		}
+    		else if (expectedLeafType.isAnnotation()) {
+    			// member value is expected to be an annotation type.  Wrap it in an Annotation proxy.
+    			Object returnVal = null;
+    			if (jdtLeafType.isAnnotationType() && jdtElementValue instanceof AnnotationBinding) {
+    				AnnotationMirrorImpl annoMirror =
+    					(AnnotationMirrorImpl)_env.getFactory().newAnnotationMirror((AnnotationBinding)jdtElementValue);
+    				returnVal = Proxy.newProxyInstance(expectedLeafType.getClassLoader(),
+    						new Class[]{ expectedLeafType }, annoMirror );
+    			}
+    	        Array.set(returnArray, i, returnVal);
+    		}
+    		else {
+    			Array.set(returnArray, i, null);
+    		}
+        }
+		return returnArray;
+	}
+
+	/**
+	 * Convert a JDT annotation value as obtained from ElementValuePair.getValue()
+	 * (e.g., IntConstant, FieldBinding, etc.) to the type expected by a reflective
+	 * method invocation (e.g., int, an enum constant, etc.).
+	 * @return a value of type {@code expectedType}, or a dummy value of that type if
+	 * the actual value cannot be converted.
+	 */
+	private Object convertJDTValueToReflectionType(Object jdtValue, TypeBinding actualType, Class<?> expectedType) {
+		if (expectedType.isPrimitive() || String.class.equals(expectedType)) {
+			if (jdtValue instanceof Constant) {
+				if (boolean.class.equals(expectedType)) {
+					return ((Constant)jdtValue).booleanValue();
+				}
+				else if (byte.class.equals(expectedType)) {
+					return ((Constant)jdtValue).byteValue();
+				}
+				else if (char.class.equals(expectedType)) {
+					return ((Constant)jdtValue).charValue();
+				}
+				else if (double.class.equals(expectedType)) {
+					return ((Constant)jdtValue).doubleValue();
+				}
+				else if (float.class.equals(expectedType)) {
+					return ((Constant)jdtValue).floatValue();
+				}
+				else if (int.class.equals(expectedType)) {
+					return ((Constant)jdtValue).intValue();
+				}
+				else if (long.class.equals(expectedType)) {
+					return ((Constant)jdtValue).longValue();
+				}
+				else if (short.class.equals(expectedType)) {
+					return ((Constant)jdtValue).shortValue();
+				}
+				else if (String.class.equals(expectedType)) {
+					return ((Constant)jdtValue).stringValue();
+				}
+			}
+			// Primitive or string is expected, but our actual value cannot be coerced into one.
+			// TODO: if the actual value is an array of primitives, should we unpack the first one?
+			return Factory.getMatchingDummyValue(expectedType);
+		}
+		else if (expectedType.isEnum()) {
+			Object returnVal = null;
+	        if (actualType != null && actualType.isEnum() && jdtValue instanceof FieldBinding) {
+	        	
+	        	FieldBinding binding = (FieldBinding)jdtValue;
+	        	try {
+	        		Field returnedField = null;
+	        		returnedField = expectedType.getField( new String(binding.name) );
+	        		if (null != returnedField) {
+	        			returnVal = returnedField.get(null);
+	        		}
+	        	}
+	        	catch (NoSuchFieldException nsfe) {
+	        		// return null
+	        	}
+	        	catch (IllegalAccessException iae) {
+	        		// return null
+	        	}
+	        }
+	        return null == returnVal ? Factory.getMatchingDummyValue(expectedType) : returnVal;
+		}
+		else if (expectedType.isAnnotation()) {
+			// member value is expected to be an annotation type.  Wrap it in an Annotation proxy.
+			if (actualType.isAnnotationType() && jdtValue instanceof AnnotationBinding) {
+				AnnotationMirrorImpl annoMirror =
+					(AnnotationMirrorImpl)_env.getFactory().newAnnotationMirror((AnnotationBinding)jdtValue);
+				return Proxy.newProxyInstance(expectedType.getClassLoader(),
+						new Class[]{ expectedType }, annoMirror );
+			}
+			else {
+				// No way to cast a non-annotation value to an annotation type; return null to caller
+				return null;
+			}
+		}
+		else {
+			return Factory.getMatchingDummyValue(expectedType);
+		}
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationValueImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationValueImpl.java
new file mode 100644
index 0000000..74b0291
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/AnnotationValueImpl.java
@@ -0,0 +1,265 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.AnnotationValueVisitor;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.Constant;
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.DoubleConstant;
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.FloatConstant;
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.LongConstant;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ArrayBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ElementValuePair;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeIds;
+import org.aspectj.org.eclipse.jdt.internal.compiler.problem.ShouldNotImplement;
+
+public class AnnotationValueImpl implements AnnotationValue, TypeIds {
+	
+	/*
+	 * Additions to T_* constants in TypeIds. 
+	 */
+	private static final int T_AnnotationMirror = -1;
+	private static final int T_EnumConstant = -2;
+	private static final int T_ClassObject = -3;
+	private static final int T_ArrayType = -4;
+	
+	private final BaseProcessingEnvImpl _env;
+	
+	/**
+	 * The annotation value, as it would be returned by
+	 * {@link #getValue()}.  For instance, an Integer (for an int
+	 * constant), a VariableElement (for an enum constant), or
+	 * a List<AnnotationValueImpl> containing multiple such (for an array type).  
+	 */
+	private final Object _value;
+	
+	/**
+	 * The type stored in _value, represented as a T_* value from {@link TypeIds}
+	 * or one of the additional T_* values defined in this class.
+	 */
+	private final int _kind;
+
+	/**
+	 * @param value
+	 *            The JDT representation of a compile-time constant. See
+	 *            {@link ElementValuePair#getValue()} for possible object types:
+	 *            <ul>
+	 *            <li>{@link org.aspectj.org.eclipse.jdt.internal.compiler.impl.Constant} for member
+	 *            of primitive type or String</li>
+	 *            <li>{@link TypeBinding} for a member value of type
+	 *            {@link java.lang.Class}</li>
+	 *            <li>{@link FieldBinding} for an enum constant</li>
+	 *            <li>{@link AnnotationBinding} for an annotation instance</li>
+	 *            <li><code>Object[]</code> for a member value of array type, where the
+	 *            array entries are one of the above</li>
+	 *            </ul>
+	 * @param type
+	 *            The JDT representation of the type of the constant, as determined
+	 *            by the return type of the element.  This is needed because the type
+	 *            of the value may have been widened (e.g., byte to int) by the compiler
+	 *            and we need to call the proper visitor.  This is used only for base types.
+	 *            If it is null or not a BaseTypeBinding, it is ignored and the type is
+	 *            determined from the type of the value.
+	 */
+	public AnnotationValueImpl(BaseProcessingEnvImpl env, Object value, TypeBinding type) {
+		_env = env;
+		int kind[] = new int[1];
+		if (type == null) {
+			_value = convertToMirrorType(value, type, kind);
+			_kind = kind[0];
+		} else if (type.isArrayType()) {
+			List<AnnotationValue> convertedValues = null;
+			TypeBinding valueType = ((ArrayBinding)type).elementsType();
+			if (value instanceof Object[]) {
+				Object[] values = (Object[])value;
+				convertedValues = new ArrayList<AnnotationValue>(values.length);
+				for (Object oneValue : values) {
+					convertedValues.add(new AnnotationValueImpl(_env, oneValue, valueType));
+				}
+			} else {
+				convertedValues = new ArrayList<AnnotationValue>(1);
+				convertedValues.add(new AnnotationValueImpl(_env, value, valueType));
+			}
+			_value = Collections.unmodifiableList(convertedValues);
+			_kind = T_ArrayType;
+		} else {
+			_value = convertToMirrorType(value, type, kind);
+			_kind = kind[0];
+		}
+	}
+	
+	/**
+	 * Convert the JDT representation of a single constant into its javax.lang.model
+	 * representation.  For instance, convert a StringConstant into a String, or
+	 * a FieldBinding into a VariableElement.  This does not handle the case where
+	 * value is an Object[].
+	 * @param value the JDT object
+	 * @param type the return type of the annotation member.  If null or not a
+	 * BaseTypeBinding, this is ignored and the value is inspected to determine type.
+	 * @param kind an int array whose first element will be set to the type of the
+	 * converted object, represented with T_* values from TypeIds or from this class.
+	 * @return
+	 */
+	private Object convertToMirrorType(Object value, TypeBinding type, int kind[]) {
+		if (type == null) {
+			kind[0] = TypeIds.T_JavaLangString;
+			return "<error>"; //$NON-NLS-1$
+		} else if (type instanceof BaseTypeBinding || type.id == TypeIds.T_JavaLangString) {
+			if (value == null) {
+				if (type instanceof BaseTypeBinding
+						|| type.id == TypeIds.T_JavaLangString) {
+					// return a string with error in it to reflect a value that could not be resolved
+					kind[0] = TypeIds.T_JavaLangString;
+					return "<error>"; //$NON-NLS-1$
+				} else if (type.isAnnotationType()) {
+					kind[0] = T_AnnotationMirror;
+					return _env.getFactory().newAnnotationMirror(null);
+				}
+			} else if (value instanceof Constant) {
+				if (type instanceof BaseTypeBinding) {
+					kind[0] = ((BaseTypeBinding)type).id;
+				}
+				else if (type.id == TypeIds.T_JavaLangString) {
+					kind[0] = ((Constant)value).typeID();
+				} else {
+					// error case
+					kind[0] = TypeIds.T_JavaLangString;
+					return "<error>"; //$NON-NLS-1$
+				}
+				switch (kind[0]) {
+				case T_boolean:
+					return ((Constant)value).booleanValue();
+				case T_byte:
+					return ((Constant)value).byteValue();
+				case T_char:
+					return ((Constant)value).charValue();
+				case T_double:
+					return ((Constant)value).doubleValue();
+				case T_float:
+					return ((Constant)value).floatValue();
+				case T_int:
+					try {
+						if (value instanceof LongConstant
+								|| value instanceof DoubleConstant
+								|| value instanceof FloatConstant) {
+							// error case
+							kind[0] = TypeIds.T_JavaLangString;
+							return "<error>"; //$NON-NLS-1$
+						}
+						return ((Constant)value).intValue();
+					} catch (ShouldNotImplement e) {
+						kind[0] = TypeIds.T_JavaLangString;
+						return "<error>"; //$NON-NLS-1$
+					}
+				case T_JavaLangString:
+					return ((Constant)value).stringValue();
+				case T_long:
+					return ((Constant)value).longValue();
+				case T_short:
+					return ((Constant)value).shortValue();
+				}
+			}
+		} else if (type.isEnum()) {
+			if (value instanceof FieldBinding) {
+				kind[0] = T_EnumConstant;
+				return (VariableElement) _env.getFactory().newElement((FieldBinding) value);
+			} else {
+				kind[0] = TypeIds.T_JavaLangString;
+				return "<error>"; //$NON-NLS-1$
+			}
+		} else if (type.isAnnotationType()) {
+			if (value instanceof AnnotationBinding) {
+				kind[0] = T_AnnotationMirror;
+				return _env.getFactory().newAnnotationMirror((AnnotationBinding) value);
+			}
+		} else if (value instanceof TypeBinding) {
+			kind[0] = T_ClassObject;
+			return _env.getFactory().newTypeMirror((TypeBinding) value);
+		}
+		// error case
+		kind[0] = TypeIds.T_JavaLangString;
+		return "<error>"; //$NON-NLS-1$
+	}
+
+	@SuppressWarnings("unchecked") // Need to cast Object _value to a List<AnnotationValue>
+	@Override
+	public <R, P> R accept(AnnotationValueVisitor<R, P> v, P p) {
+		switch (_kind) {
+		case TypeIds.T_boolean:
+			return v.visitBoolean((Boolean)_value, p);
+		case TypeIds.T_byte:
+			return v.visitByte((Byte)_value, p);
+		case TypeIds.T_char:
+			return v.visitChar((Character)_value, p);
+		case TypeIds.T_double:
+			return v.visitDouble((Double)_value, p);
+		case TypeIds.T_float:
+			return v.visitFloat((Float)_value, p);
+		case TypeIds.T_int:
+			return v.visitInt((Integer)_value, p);
+		case TypeIds.T_JavaLangString:
+			return v.visitString((String)_value, p);
+		case TypeIds.T_long:
+			return v.visitLong((Long)_value, p);
+		case TypeIds.T_short:
+			return v.visitShort((Short)_value, p);
+		case T_EnumConstant:
+			return v.visitEnumConstant((VariableElement)_value, p);
+		case T_ClassObject:
+			return v.visitType((TypeMirror)_value, p);
+		case T_AnnotationMirror:
+			return v.visitAnnotation((AnnotationMirror)_value, p);
+		case T_ArrayType:
+			return v.visitArray((List<AnnotationValue>)_value, p);
+		default:
+			return null;
+		}
+	}
+
+	@Override
+	public Object getValue() {
+		return _value;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (obj instanceof AnnotationValueImpl) {
+			return this._value.equals(((AnnotationValueImpl) obj)._value);
+		}
+		return false;
+	}
+
+	@Override
+	public int hashCode() {
+		return this._value.hashCode() + this._kind;
+	}
+
+	@Override
+	public String toString() {
+		if (null == _value) {
+			return "null"; //$NON-NLS-1$
+		}
+		return _value.toString();
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ArrayTypeImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ArrayTypeImpl.java
new file mode 100644
index 0000000..7a7c60a
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ArrayTypeImpl.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2013 BEA Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    IBM Corporation - fix for 342598
+ *    IBM Corporation - Java 8 support
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.TypeVisitor;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ArrayBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding;
+
+/**
+ * Implementation of ArrayType, which represents an array of some type.
+ */
+public class ArrayTypeImpl extends TypeMirrorImpl implements ArrayType {
+	
+	ArrayTypeImpl(BaseProcessingEnvImpl env, ArrayBinding binding) {
+		super(env, binding);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.ArrayType#getComponentType()
+	 */
+	@Override
+	public TypeMirror getComponentType() {
+		return _env.getFactory().newTypeMirror(((ArrayBinding)_binding).elementsType());
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeMirror#accept(javax.lang.model.type.TypeVisitor, java.lang.Object)
+	 */
+	@Override
+	public <R, P> R accept(TypeVisitor<R, P> v, P p) {
+		return v.visitArray(this, p);
+	}
+
+	protected AnnotationBinding[] getAnnotationBindings() {
+		AnnotationBinding[] oldies = ((ArrayBinding)_binding).getTypeAnnotations();
+		AnnotationBinding[] newbies = Binding.NO_ANNOTATIONS;
+		// Strip out the annotations on sub arrays
+		for (int i = 0, length = oldies == null ? 0 : oldies.length; i < length; i++) {
+			if (oldies[i] == null) {
+				System.arraycopy(oldies, 0, newbies = new AnnotationBinding[i], 0, i);
+				return newbies;
+			}
+		}
+		return newbies;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeMirror#getKind()
+	 */
+	@Override
+	public TypeKind getKind() {
+		return TypeKind.ARRAY;
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/DeclaredTypeImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/DeclaredTypeImpl.java
new file mode 100644
index 0000000..e214a35
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/DeclaredTypeImpl.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 BEA Systems, Inc. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    IBM Corporation - fix for 342598
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.TypeVisitor;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
+
+/**
+ * Implementation of DeclaredType, which refers to a particular usage or instance of a type.
+ * Contrast with {@link TypeElement}, which is an element that potentially defines a family
+ * of DeclaredTypes.
+ */
+public class DeclaredTypeImpl extends TypeMirrorImpl implements DeclaredType {
+	
+	private final ElementKind _elementKindHint;
+	
+	/* package */ DeclaredTypeImpl(BaseProcessingEnvImpl env, ReferenceBinding binding) {
+		super(env, binding);
+		_elementKindHint = null;
+	}
+
+	/**
+	 * Create a DeclaredType that knows in advance what kind of element to produce from asElement().
+	 * This is useful in the case where the type binding is to an unresolved type, but we know
+	 * from context what type it is - e.g., an annotation type.
+	 */
+	/* package */ DeclaredTypeImpl(BaseProcessingEnvImpl env, ReferenceBinding binding, ElementKind elementKindHint) {
+		super(env, binding);
+		_elementKindHint = elementKindHint;
+	}
+
+	@Override
+	public Element asElement() {
+		// The JDT compiler does not distinguish between type elements and declared types
+		return _env.getFactory().newElement((ReferenceBinding)_binding, _elementKindHint);
+	}
+
+	@Override
+	public TypeMirror getEnclosingType() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		ReferenceBinding enclosingType = binding.enclosingType();
+		if (enclosingType != null) {
+			return _env.getFactory().newTypeMirror(enclosingType);
+		}
+		return _env.getFactory().getNoType(TypeKind.NONE);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see javax.lang.model.type.DeclaredType#getTypeArguments()
+	 * @see javax.lang.model.element.TypeElement#getTypeParameters().
+	 */
+	@Override
+	public List<? extends TypeMirror> getTypeArguments() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		if (binding.isParameterizedType()) {
+			ParameterizedTypeBinding ptb = (ParameterizedTypeBinding)_binding;
+			TypeBinding[] arguments = ptb.arguments;
+			int length = arguments == null ? 0 : arguments.length;
+			if (length == 0) return Collections.emptyList();
+			List<TypeMirror> args = new ArrayList<TypeMirror>(length);
+			for (TypeBinding arg : arguments) {
+				args.add(_env.getFactory().newTypeMirror(arg));
+			}
+			return Collections.unmodifiableList(args);
+		}
+		if (binding.isGenericType()) {
+			TypeVariableBinding[] typeVariables = binding.typeVariables();
+			List<TypeMirror> args = new ArrayList<TypeMirror>(typeVariables.length);
+			for (TypeBinding arg : typeVariables) {
+				args.add(_env.getFactory().newTypeMirror(arg));
+			}
+			return Collections.unmodifiableList(args);
+		}
+		return Collections.emptyList();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeMirror#accept(javax.lang.model.type.TypeVisitor, java.lang.Object)
+	 */
+	@Override
+	public <R, P> R accept(TypeVisitor<R, P> v, P p) {
+		return v.visitDeclared(this, p);
+	}
+
+	@Override
+	public TypeKind getKind() {
+		return TypeKind.DECLARED;
+	}
+
+	@Override
+	public String toString() {
+		return new String(_binding.readableName());
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementImpl.java
new file mode 100644
index 0000000..f91ad74
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementImpl.java
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2013 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Inherited;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.Elements;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+
+/**
+ * Element represents any defined Java language element - a package, 
+ * a method, a class or interface.  Contrast with DeclaredType.
+ */
+public abstract class ElementImpl 
+	implements javax.lang.model.element.Element, IElementInfo
+{
+	public final BaseProcessingEnvImpl _env;
+	public final Binding _binding;
+	
+	protected ElementImpl(BaseProcessingEnvImpl env, Binding binding) {
+		_env = env;
+		_binding = binding;
+	}
+
+	@Override
+	public TypeMirror asType() {
+		return _env.getFactory().newTypeMirror(_binding);
+	}
+
+	/**
+	 * @return the set of compiler annotation bindings on this element
+	 */
+	protected abstract AnnotationBinding[] getAnnotationBindings();
+
+	/* Package any repeating annotations into containers, return others as is.
+	   In the compiler bindings repeating annotations are left in as is, hence
+	   this step. The return value would match what one would expect to see in
+	   a class file.
+	*/
+	public final AnnotationBinding [] getPackedAnnotationBindings() {
+		return Factory.getPackedAnnotationBindings(getAnnotationBindings());
+	}
+	
+	@Override
+	public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {
+		A annotation = _env.getFactory().getAnnotation(getPackedAnnotationBindings(), annotationClass);
+		if (annotation != null || this.getKind() != ElementKind.CLASS || annotationClass.getAnnotation(Inherited.class) == null)
+			return annotation;
+		
+		ElementImpl superClass = (ElementImpl) _env.getFactory().newElement(((ReferenceBinding) this._binding).superclass());
+		return superClass == null ? null : superClass.getAnnotation(annotationClass);
+	}
+	
+	@Override
+	public List<? extends AnnotationMirror> getAnnotationMirrors() {
+		return _env.getFactory().getAnnotationMirrors(getPackedAnnotationBindings());
+	}
+
+	public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) {
+		A [] annotations = _env.getFactory().getAnnotationsByType(Factory.getUnpackedAnnotationBindings(getPackedAnnotationBindings()), annotationType);
+		if (annotations.length != 0 || this.getKind() != ElementKind.CLASS || annotationType.getAnnotation(Inherited.class) == null)
+			return annotations;
+		
+		ElementImpl superClass =  (ElementImpl) _env.getFactory().newElement(((ReferenceBinding) this._binding).superclass());
+		return superClass == null ? annotations : superClass.getAnnotationsByType(annotationType);
+	}
+
+	@Override
+	public Set<Modifier> getModifiers() {
+		// Most subclasses implement this; this default is appropriate for 
+		// PackageElement and TypeParameterElement.
+		return Collections.emptySet();
+	}
+
+	@Override
+	public Name getSimpleName() {
+		return new NameImpl(_binding.shortReadableName());
+	}
+
+	@Override
+	public int hashCode() {
+		return _binding.hashCode();
+	}
+
+	// TODO: equals() implemented as == of JDT bindings.  Valid within
+	// a single Compiler instance; breaks in IDE if processors cache values. 
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		final ElementImpl other = (ElementImpl) obj;
+		if (_binding == null) {
+			if (other._binding != null)
+				return false;
+		} else if (_binding != other._binding)
+			return false;
+		return true;
+	}
+
+	@Override
+	public String toString() {
+		return _binding.toString();
+	}
+
+	@Override
+	public String getFileName() {
+		// Subclasses should override and return something of value
+		return null;
+	}
+
+	/**
+	 * @return the package containing this element.  The package of a PackageElement is itself.
+	 * @see javax.lang.model.util.Elements#getPackageOf(javax.lang.model.element.Element)
+	 */
+	abstract /* package */ PackageElement getPackage();
+
+	/**
+	 * Subclassed by VariableElementImpl, TypeElementImpl, and ExecutableElementImpl.
+	 * This base implementation suffices for other types.
+	 * @see Elements#hides
+	 * @return true if this element hides {@code hidden}
+	 */
+	public boolean hides(Element hidden)
+	{
+		return false;
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementsImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementsImpl.java
new file mode 100644
index 0000000..4b7a9b4
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ElementsImpl.java
@@ -0,0 +1,713 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2013 BEA Systems, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    IBM Corporation - Fix for bug 341494
+ *    IBM Corporation - Fix for bug 328575
+ *    IBM Corporation - Java 8 support
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.util.Elements;
+
+import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Javadoc;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.ReferenceContext;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LocalVariableBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodVerifier;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TagBits;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
+
+/**
+ * Utilities for working with language elements.
+ * There is one of these for every ProcessingEnvironment.
+ */
+public class ElementsImpl implements Elements {
+
+	// Used for parsing Javadoc comments: matches initial delimiter, followed by whitespace
+	private static final Pattern INITIAL_DELIMITER = Pattern.compile("^\\s*/\\*+"); //$NON-NLS-1$
+
+	private final BaseProcessingEnvImpl _env;
+
+	/*
+	 * The processing env creates and caches an ElementsImpl.  Other clients should
+	 * not create their own; they should ask the env for it.
+	 */
+	public ElementsImpl(BaseProcessingEnvImpl env) {
+		_env = env;
+	}
+
+	/**
+	 * Return all the annotation mirrors on this element, including inherited annotations.
+	 * Annotations are inherited only if the annotation type is meta-annotated with @Inherited,
+	 * and the annotation is on a class: e.g., annotations are not inherited for interfaces, methods,
+	 * or fields.
+	 */
+	@Override
+	public List<? extends AnnotationMirror> getAllAnnotationMirrors(Element e) {
+		// if e is a class, walk up its superclass hierarchy looking for @Inherited annotations not already in the list
+		if (e.getKind() == ElementKind.CLASS && e instanceof TypeElementImpl) {
+			List<AnnotationBinding> annotations = new ArrayList<AnnotationBinding>();
+			// A class can only have one annotation of a particular annotation type.
+			Set<ReferenceBinding> annotationTypes = new HashSet<ReferenceBinding>();
+			ReferenceBinding binding = (ReferenceBinding)((TypeElementImpl)e)._binding;
+			boolean checkIfInherited = false;
+			while (null != binding) {
+				if (binding instanceof ParameterizedTypeBinding) {
+					binding = ((ParameterizedTypeBinding) binding).genericType();
+				}
+				for (AnnotationBinding annotation : Factory.getPackedAnnotationBindings(binding.getAnnotations())) {
+					if (annotation == null) continue;
+					ReferenceBinding annotationType = annotation.getAnnotationType();
+					if (checkIfInherited && (annotationType.getAnnotationTagBits() & TagBits.AnnotationInherited) == 0)
+						continue;
+					if (!annotationTypes.contains(annotationType)) {
+						annotationTypes.add(annotationType);
+						annotations.add(annotation);
+					}
+				}
+				binding = binding.superclass();
+				checkIfInherited = true;
+			}
+			List<AnnotationMirror> list = new ArrayList<AnnotationMirror>(annotations.size());
+			for (AnnotationBinding annotation : annotations) {
+				list.add(_env.getFactory().newAnnotationMirror(annotation));
+			}
+			return Collections.unmodifiableList(list);
+		}
+		else {
+			return e.getAnnotationMirrors();
+		}
+	}
+
+	/**
+	 * Compute a list of all the visible entities in this type.  Specifically:
+	 * <ul>
+	 * <li>All nested types declared in this type, including interfaces and enums</li>
+	 * <li>All protected or public nested types declared in this type's superclasses
+	 * and superinterfaces, that are not hidden by a name collision</li>
+	 * <li>All methods declared in this type, including constructors but not
+	 * including static or instance initializers, and including abstract
+	 * methods and unimplemented methods declared in interfaces</li>
+	 * <li>All protected or public methods declared in this type's superclasses,
+	 * that are not overridden by another method, but not including constructors
+	 * or initializers. Includes abstract methods and methods declared in
+	 * superinterfaces but not implemented</li>
+	 * <li>All fields declared in this type, including constants</li>
+	 * <li>All non-private fields declared in this type's superclasses and
+	 * superinterfaces, that are not hidden by a name collision.</li>
+	 * </ul>
+	 */
+	@Override
+	public List<? extends Element> getAllMembers(TypeElement type) {
+		if (null == type || !(type instanceof TypeElementImpl)) {
+			return Collections.emptyList();
+		}
+		ReferenceBinding binding = (ReferenceBinding)((TypeElementImpl)type)._binding;
+		// Map of element simple name to binding
+		Map<String, ReferenceBinding> types = new HashMap<String, ReferenceBinding>();
+		// Javac implementation does not take field name collisions into account
+		List<FieldBinding> fields = new ArrayList<FieldBinding>();
+		// For methods, need to compare parameters, not just names
+		Map<String, Set<MethodBinding>> methods = new HashMap<String, Set<MethodBinding>>();
+		Set<ReferenceBinding> superinterfaces = new LinkedHashSet<ReferenceBinding>();
+		boolean ignoreVisibility = true;
+		while (null != binding) {
+			addMembers(binding, ignoreVisibility, types, fields, methods);
+			Set<ReferenceBinding> newfound = new LinkedHashSet<ReferenceBinding>();
+			collectSuperInterfaces(binding, superinterfaces, newfound);
+			for (ReferenceBinding superinterface : newfound) {
+				addMembers(superinterface, false, types, fields, methods);
+			}
+			superinterfaces.addAll(newfound);
+			binding = binding.superclass();
+			ignoreVisibility = false;
+		}
+		List<Element> allMembers = new ArrayList<Element>();
+		for (ReferenceBinding nestedType : types.values()) {
+			allMembers.add(_env.getFactory().newElement(nestedType));
+		}
+		for (FieldBinding field : fields) {
+			allMembers.add(_env.getFactory().newElement(field));
+		}
+		for (Set<MethodBinding> sameNamedMethods : methods.values()) {
+			for (MethodBinding method : sameNamedMethods) {
+				allMembers.add(_env.getFactory().newElement(method));
+			}
+		}
+		return allMembers;
+	}
+
+	/**
+	 * Recursively depth-first walk the tree of superinterfaces of a type, collecting
+	 * all the unique superinterface bindings.  (Note that because of generics, a type may
+	 * have multiple unique superinterface bindings corresponding to the same interface
+	 * declaration.)
+	 * @param existing bindings already in this set will not be re-added or recursed into
+	 * @param newfound newly found bindings will be added to this set
+	 */
+	private void collectSuperInterfaces(ReferenceBinding type,
+			Set<ReferenceBinding> existing, Set<ReferenceBinding> newfound) {
+		for (ReferenceBinding superinterface : type.superInterfaces()) {
+			if (!existing.contains(superinterface) && !newfound.contains(superinterface)) {
+				newfound.add(superinterface);
+				collectSuperInterfaces(superinterface, existing, newfound);
+			}
+		}
+	}
+
+	/**
+	 * Add the members of a type to the maps of subtypes, fields, and methods.  Add only those
+	 * which are non-private and which are not overridden by an already-discovered member.
+	 * For fields, add them all; javac implementation does not take field hiding into account.
+	 * @param binding the type whose members will be added to the lists
+	 * @param ignoreVisibility if true, all members will be added regardless of whether they
+	 * are private, overridden, etc.
+	 * @param types a map of type simple name to type binding
+	 * @param fields a list of field bindings
+	 * @param methods a map of method simple name to set of method bindings with that name
+	 */
+	private void addMembers(ReferenceBinding binding, boolean ignoreVisibility, Map<String, ReferenceBinding> types,
+			List<FieldBinding> fields, Map<String, Set<MethodBinding>> methods)
+	{
+		for (ReferenceBinding subtype : binding.memberTypes()) {
+			if (ignoreVisibility || !subtype.isPrivate()) {
+				String name = new String(subtype.sourceName());
+				if (null == types.get(name)) {
+					types.put(name, subtype);
+				}
+			}
+		}
+		for (FieldBinding field : binding.fields()) {
+			if (ignoreVisibility || !field.isPrivate()) {
+				fields.add(field);
+			}
+		}
+		for (MethodBinding method : binding.methods()) {
+			if (!method.isSynthetic() && (ignoreVisibility || (!method.isPrivate() && !method.isConstructor()))) {
+				String methodName = new String(method.selector);
+				Set<MethodBinding> sameNamedMethods = methods.get(methodName);
+				if (null == sameNamedMethods) {
+					// New method name.  Create a set for it and add it to the list.
+					// We don't expect many methods with same name, so only 4 slots:
+					sameNamedMethods = new HashSet<MethodBinding>(4);
+					methods.put(methodName, sameNamedMethods);
+					sameNamedMethods.add(method);
+				}
+				else {
+					// We already have a method with this name.  Is this method overridden?
+					boolean unique = true;
+					if (!ignoreVisibility) {
+						for (MethodBinding existing : sameNamedMethods) {
+							MethodVerifier verifier = _env.getLookupEnvironment().methodVerifier();
+							if (verifier.doesMethodOverride(existing, method)) {
+								unique = false;
+								break;
+							}
+						}
+					}
+					if (unique) {
+						sameNamedMethods.add(method);
+					}
+				}
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.util.Elements#getBinaryName(javax.lang.model.element.TypeElement)
+	 */
+	@Override
+	public Name getBinaryName(TypeElement type) {
+		TypeElementImpl typeElementImpl = (TypeElementImpl) type;
+		ReferenceBinding referenceBinding = (ReferenceBinding) typeElementImpl._binding;
+		return new NameImpl(
+			CharOperation.replaceOnCopy(referenceBinding.constantPoolName(), '/', '.'));
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.util.Elements#getConstantExpression(java.lang.Object)
+	 */
+	@Override
+	public String getConstantExpression(Object value) {
+		if (!(value instanceof Integer)
+				&& !(value instanceof Byte)
+				&& !(value instanceof Float)
+				&& !(value instanceof Double)
+				&& !(value instanceof Long)
+				&& !(value instanceof Short)
+				&& !(value instanceof Character)
+				&& !(value instanceof String)
+				&& !(value instanceof Boolean)) {
+			throw new IllegalArgumentException("Not a valid wrapper type : " + value.getClass()); //$NON-NLS-1$
+		}
+		if (value instanceof Character) {
+			StringBuilder builder = new StringBuilder();
+			builder.append('\'').append(value).append('\'');
+			return String.valueOf(builder);
+		} else if (value instanceof String) {
+			StringBuilder builder = new StringBuilder();
+			builder.append('\"').append(value).append('\"');
+			return String.valueOf(builder);
+		} else if (value instanceof Float) {
+			StringBuilder builder = new StringBuilder();
+			builder.append(value).append('f');
+			return String.valueOf(builder);
+		} else if (value instanceof Long) {
+			StringBuilder builder = new StringBuilder();
+			builder.append(value).append('L');
+			return String.valueOf(builder);
+		} else if (value instanceof Short) {
+			StringBuilder builder = new StringBuilder();
+			builder.append("(short)").append(value); //$NON-NLS-1$
+			return String.valueOf(builder);
+		} else if (value instanceof Byte) {
+			StringBuilder builder = new StringBuilder();
+			builder.append("(byte)0x"); //$NON-NLS-1$
+			int intValue = ((Byte) value).byteValue();
+			String hexString = Integer.toHexString(intValue & 0xFF);
+			if (hexString.length() < 2) {
+				builder.append('0');
+			}
+			builder.append(hexString);
+			return String.valueOf(builder);
+		}
+		return String.valueOf(value);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.util.Elements#getDocComment(javax.lang.model.element.Element)
+	 */
+	@Override
+	public String getDocComment(Element e) {
+		char[] unparsed = getUnparsedDocComment(e);
+		return formatJavadoc(unparsed);
+	}
+
+	/**
+	 * Return the entire javadoc comment on e, including the comment characters and whitespace
+	 * @param e an Element of any sort, possibly with a javadoc comment.
+	 * @return a String, or null if the comment is not available
+	 */
+	private char[] getUnparsedDocComment(Element e)
+	{
+		Javadoc javadoc = null;
+		ReferenceContext referenceContext = null;
+		switch(e.getKind()) {
+			case ANNOTATION_TYPE :
+			case CLASS :
+			case ENUM :
+			case INTERFACE :
+				TypeElementImpl typeElementImpl = (TypeElementImpl) e;
+				ReferenceBinding referenceBinding = (ReferenceBinding)typeElementImpl._binding;
+				if (referenceBinding instanceof SourceTypeBinding) {
+					SourceTypeBinding sourceTypeBinding = (SourceTypeBinding) referenceBinding;
+					referenceContext = sourceTypeBinding.scope.referenceContext;
+					javadoc = ((TypeDeclaration) referenceContext).javadoc;
+				}
+				break;
+			case PACKAGE :
+				// might need to handle javadoc of package-info.java file
+				PackageElementImpl packageElementImpl = (PackageElementImpl) e;
+				PackageBinding packageBinding = (PackageBinding) packageElementImpl._binding;
+				char[][] compoundName = CharOperation.arrayConcat(packageBinding.compoundName, TypeConstants.PACKAGE_INFO_NAME);
+				ReferenceBinding type = this._env.getLookupEnvironment().getType(compoundName);
+				if (type != null && type.isValidBinding() && (type instanceof SourceTypeBinding)) {
+					SourceTypeBinding sourceTypeBinding = (SourceTypeBinding) type;
+					referenceContext = sourceTypeBinding.scope.referenceContext;
+					javadoc = ((TypeDeclaration) referenceContext).javadoc;
+				}
+				break;
+			case CONSTRUCTOR :
+			case METHOD :
+				ExecutableElementImpl executableElementImpl = (ExecutableElementImpl) e;
+				MethodBinding methodBinding = (MethodBinding) executableElementImpl._binding;
+				AbstractMethodDeclaration sourceMethod = methodBinding.sourceMethod();
+				if (sourceMethod != null) {
+					javadoc = sourceMethod.javadoc;
+					referenceContext = sourceMethod;
+				}
+				break;
+			case ENUM_CONSTANT :
+			case FIELD :
+				VariableElementImpl variableElementImpl = (VariableElementImpl) e;
+				FieldBinding fieldBinding = (FieldBinding) variableElementImpl._binding;
+				FieldDeclaration sourceField = fieldBinding.sourceField();
+				if (sourceField != null) {
+					javadoc = sourceField.javadoc;
+					if (fieldBinding.declaringClass instanceof SourceTypeBinding) {
+						SourceTypeBinding sourceTypeBinding = (SourceTypeBinding) fieldBinding.declaringClass;
+						referenceContext = sourceTypeBinding.scope.referenceContext;
+					}
+				}
+				break;
+			default:
+				return null;
+		}
+		if (javadoc != null && referenceContext != null) {
+			char[] contents = referenceContext.compilationResult().getCompilationUnit().getContents();
+			if (contents != null) {
+				return CharOperation.subarray(contents, javadoc.sourceStart, javadoc.sourceEnd - 1);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Strip the comment characters from a javadoc comment. Assume the comment is already
+	 * missing its closing delimiter.
+	 *
+	 * Javac's behavior with regard to tab expansion and trimming of whitespace and
+	 * asterisks is bizarre and undocumented.  We do our best here to emulate it.
+	 */
+	private static String formatJavadoc(char[] unparsed)
+	{
+		if (unparsed == null || unparsed.length < 5) { // delimiters take 5 chars
+			return null;
+		}
+
+		String[] lines = new String(unparsed).split("\n"); //$NON-NLS-1$
+		Matcher delimiterMatcher = INITIAL_DELIMITER.matcher(lines[0]);
+		if (!delimiterMatcher.find()) {
+			return null;
+		}
+		int iOpener = delimiterMatcher.end();
+		lines[0] = lines[0].substring(iOpener);
+		if (lines.length == 1) {
+			// single-line comment.  Should trim(), but javac doesn't.
+			// we should however remove the starting whitespaces
+			StringBuilder sb = new StringBuilder();
+			char[] chars = lines[0].toCharArray();
+			boolean startingWhitespaces = true;
+			for (char c : chars) {
+				if (Character.isWhitespace(c))
+					if (startingWhitespaces) {
+						continue;
+					} else {
+						sb.append(c);
+				} else {
+					startingWhitespaces = false;
+					sb.append(c);
+				}
+			}
+			return sb.toString();
+		}
+
+		// if the first line ends with spaces after the /** then we want to insert a line separator
+		int firstLine = lines[0].trim().length() > 0 ? 0 : 1;
+
+		// If the last line is now empty, skip it
+		int lastLine = lines[lines.length - 1].trim().length() > 0 ? lines.length - 1 : lines.length - 2;
+
+		StringBuilder sb = new StringBuilder();
+		if (lines[0].length() != 0 && firstLine == 1) {
+			// insert a line separator only if the remaining chars on the line are whitespaces
+			sb.append('\n');
+		}
+		boolean preserveLineSeparator = lines[0].length() == 0;
+		for (int line = firstLine; line <= lastLine; ++line) {
+			char[] chars = lines[line].toCharArray();
+			int starsIndex = getStars(chars);
+			int leadingWhitespaces = 0;
+			boolean recordLeadingWhitespaces = true;
+			for (int i = 0, max = chars.length; i < max; i++) {
+				char c = chars[i];
+				switch(c) {
+					case ' ' :
+						if (starsIndex == -1) {
+							if (recordLeadingWhitespaces) {
+								leadingWhitespaces++;
+							} else {
+								sb.append(c);
+							}
+						} else if (i >= starsIndex) {
+							sb.append(c);
+						}
+						break;
+					default :
+						// convert leadingwhitespaces to spaces
+						recordLeadingWhitespaces = false;
+						if (leadingWhitespaces != 0) {
+							int numberOfTabs = leadingWhitespaces / 8;
+							if (numberOfTabs != 0) {
+								for (int j = 0, max2 = numberOfTabs; j < max2; j++) {
+									sb.append("        "); //$NON-NLS-1$
+								}
+								if ((leadingWhitespaces % 8) >= 1) {
+									sb.append(' ');
+								}
+							} else if (line != 0) {
+								// we don't want to preserve the leading spaces for the first line
+								for (int j = 0, max2 = leadingWhitespaces; j < max2; j++) {
+									sb.append(' ');
+								}
+							}
+							leadingWhitespaces = 0;
+							sb.append(c);
+						} else if (c == '\t') {
+							if (i >= starsIndex) {
+								sb.append(c);
+							}
+						} else if (c != '*' || i > starsIndex) {
+							sb.append(c);
+						}
+				}
+			}
+			
+			// append a newline at the end of each line except the last, even if we skipped the last entirely
+			int end = lines.length - 1;
+			if (line < end) {
+				sb.append('\n');
+			} else if (preserveLineSeparator && line == end) {
+				sb.append('\n');
+			}
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Returns the index of the last leading stars on this line, -1 if none.
+	 * 
+	 * @param line the given line
+	 * @return the computed index
+	 */
+	private static int getStars(char[] line) {
+		loop: for (int i = 0, max = line.length; i < max; i++) {
+			char c = line[i];
+			if (!Character.isWhitespace(c)) {
+				if (c == '*') {
+					// only whitespaces before the first star
+					// consume all stars and return the last index
+					for (int j = i + 1; j < max; j++) {
+						if (line[j] != '*') {
+							return j;
+						}
+					}
+					return max - 1;
+				}
+				// no need to continue
+				break loop;
+			}
+		}
+		return -1;
+	}
+	/**
+	 * @return all the annotation instance's explicitly set values, plus default values
+	 *         for all the annotation members that are not explicitly set but that have
+	 *         defaults. By comparison, {@link AnnotationMirror#getElementValues()} only
+	 *         returns the explicitly set values.
+	 * @see javax.lang.model.util.Elements#getElementValuesWithDefaults(javax.lang.model.element.AnnotationMirror)
+	 */
+	@Override
+	public Map<? extends ExecutableElement, ? extends AnnotationValue> getElementValuesWithDefaults(
+			AnnotationMirror a) {
+		return ((AnnotationMirrorImpl)a).getElementValuesWithDefaults();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.util.Elements#getName(java.lang.CharSequence)
+	 */
+	@Override
+	public Name getName(CharSequence cs) {
+		return new NameImpl(cs);
+	}
+
+	@Override
+	public PackageElement getPackageElement(CharSequence name) {
+		LookupEnvironment le = _env.getLookupEnvironment();
+		if (name.length() == 0) {
+			return new PackageElementImpl(_env, le.defaultPackage);
+		}
+		char[] packageName = name.toString().toCharArray();
+		PackageBinding packageBinding = le.createPackage(CharOperation.splitOn('.', packageName));
+		if (packageBinding == null) {
+			return null;
+		}
+		return new PackageElementImpl(_env, packageBinding);
+	}
+
+	@Override
+	public PackageElement getPackageOf(Element type) {
+		switch(type.getKind()) {
+			case ANNOTATION_TYPE :
+			case CLASS :
+			case ENUM :
+			case INTERFACE :
+				TypeElementImpl typeElementImpl = (TypeElementImpl) type;
+				ReferenceBinding referenceBinding = (ReferenceBinding)typeElementImpl._binding;
+				return (PackageElement) _env.getFactory().newElement(referenceBinding.fPackage);
+			case PACKAGE :
+				return (PackageElement) type;
+			case CONSTRUCTOR :
+			case METHOD :
+				ExecutableElementImpl executableElementImpl = (ExecutableElementImpl) type;
+				MethodBinding methodBinding = (MethodBinding) executableElementImpl._binding;
+				return (PackageElement) _env.getFactory().newElement(methodBinding.declaringClass.fPackage);
+			case ENUM_CONSTANT :
+			case FIELD :
+				VariableElementImpl variableElementImpl = (VariableElementImpl) type;
+				FieldBinding fieldBinding = (FieldBinding) variableElementImpl._binding;
+				return (PackageElement) _env.getFactory().newElement(fieldBinding.declaringClass.fPackage);
+			case PARAMETER :
+				variableElementImpl = (VariableElementImpl) type;
+				LocalVariableBinding localVariableBinding = (LocalVariableBinding) variableElementImpl._binding;
+				return (PackageElement) _env.getFactory().newElement(localVariableBinding.declaringScope.classScope().referenceContext.binding.fPackage);
+			case EXCEPTION_PARAMETER :
+			case INSTANCE_INIT :
+			case OTHER :
+			case STATIC_INIT :
+			case TYPE_PARAMETER :
+			case LOCAL_VARIABLE :
+				return null;
+		}
+		// unreachable
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.util.Elements#getTypeElement(java.lang.CharSequence)
+	 */
+	@Override
+	public TypeElement getTypeElement(CharSequence name) {
+		LookupEnvironment le = _env.getLookupEnvironment();
+		final char[][] compoundName = CharOperation.splitOn('.', name.toString().toCharArray());
+		ReferenceBinding binding = le.getType(compoundName);
+		// If we didn't find the binding, maybe it's a nested type;
+		// try finding the top-level type and then working downwards.
+		if (null == binding) {
+			ReferenceBinding topLevelBinding = null;
+			int topLevelSegments = compoundName.length;
+			while (--topLevelSegments > 0) {
+				char[][] topLevelName = new char[topLevelSegments][];
+				for (int i = 0; i < topLevelSegments; ++i) {
+					topLevelName[i] = compoundName[i];
+				}
+				topLevelBinding = le.getType(topLevelName);
+				if (null != topLevelBinding) {
+					break;
+				}
+			}
+			if (null == topLevelBinding) {
+				return null;
+			}
+			binding = topLevelBinding;
+			for (int i = topLevelSegments; null != binding && i < compoundName.length; ++i) {
+				binding = binding.getMemberType(compoundName[i]);
+			}
+		}
+		if (null == binding) {
+			return null;
+		}
+		return new TypeElementImpl(_env, binding, null);
+	}
+
+	/* (non-Javadoc)
+	 * Element A hides element B if: A and B are both fields, both nested types, or both methods; and
+	 * the enclosing element of B is a superclass or superinterface of the enclosing element of A.
+	 * See JLS 8.3 (for hiding of fields), 8.4.8.2 (hiding of class methods), and 8.5 (for hiding of member types).
+	 * @see javax.lang.model.util.Elements#hides(javax.lang.model.element.Element, javax.lang.model.element.Element)
+	 */
+	@Override
+	public boolean hides(Element hider, Element hidden) {
+		if (hidden == null) {
+			// required by API spec
+			throw new NullPointerException();
+		}
+		return ((ElementImpl)hider).hides(hidden);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.util.Elements#isDeprecated(javax.lang.model.element.Element)
+	 */
+	@Override
+	public boolean isDeprecated(Element e) {
+		if (!(e instanceof ElementImpl)) {
+			return false;
+		}
+		return (((ElementImpl)e)._binding.getAnnotationTagBits() & TagBits.AnnotationDeprecated) != 0;
+	}
+
+	/* (non-Javadoc)
+	 * See JLS 8.4.8.1 for discussion of hiding of methods
+	 * @see javax.lang.model.util.Elements#overrides(javax.lang.model.element.ExecutableElement, javax.lang.model.element.ExecutableElement, javax.lang.model.element.TypeElement)
+	 */
+	@Override
+	public boolean overrides(ExecutableElement overrider, ExecutableElement overridden,
+			TypeElement type) {
+		if (overridden == null || type == null) {
+			throw new NullPointerException();
+		}
+		return ((ExecutableElementImpl)overrider).overrides(overridden, type);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.util.Elements#printElements(java.io.Writer, javax.lang.model.element.Element[])
+	 */
+	@Override
+	public void printElements(Writer w, Element... elements) {
+		String lineSeparator = System.getProperty("line.separator"); //$NON-NLS-1$
+		for (Element element : elements) {
+			try {
+				w.write(element.toString());
+				w.write(lineSeparator);
+			} catch (IOException e) {
+				// ignore
+			}
+		}
+		try {
+			w.flush();
+		} catch (IOException e) {
+			// ignore
+		}
+	}
+
+	public boolean isFunctionalInterface(TypeElement type) {
+		if (type != null && type.getKind() == ElementKind.INTERFACE) {
+			ReferenceBinding binding = (ReferenceBinding)((TypeElementImpl) type)._binding;
+			if (binding instanceof SourceTypeBinding) {
+				return binding.isFunctionalInterface(((SourceTypeBinding) binding).scope);
+			}
+		}
+		return false;
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeElement.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeElement.java
new file mode 100644
index 0000000..fbfdff4
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeElement.java
@@ -0,0 +1,160 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2013 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.NestingKind;
+import javax.lang.model.element.TypeParameterElement;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+
+import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+
+/**
+ * Element corresponding to the Error type mirror
+ */
+public class ErrorTypeElement extends TypeElementImpl {
+	
+	ErrorTypeElement(BaseProcessingEnvImpl env, ReferenceBinding binding) {
+		super(env, binding, null);
+	}
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.TypeElement#getInterfaces()
+	 */
+	@Override
+	public List<? extends TypeMirror> getInterfaces() {
+		return Collections.emptyList();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.TypeElement#getNestingKind()
+	 */
+	@Override
+	public NestingKind getNestingKind() {
+		return NestingKind.TOP_LEVEL;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.TypeElement#getQualifiedName()
+	 */
+	@Override
+	public Name getQualifiedName() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		char[] qName;
+		if (binding.isMemberType()) {
+			qName = CharOperation.concatWith(binding.enclosingType().compoundName, binding.sourceName, '.');
+			CharOperation.replace(qName, '$', '.');
+		} else {
+			qName = CharOperation.concatWith(binding.compoundName, '.');
+		}
+		return new NameImpl(qName);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.TypeElement#getSuperclass()
+	 */
+	@Override
+	public TypeMirror getSuperclass() {
+		return this._env.getFactory().getNoType(TypeKind.NONE);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.TypeElement#getTypeParameters()
+	 */
+	@Override
+	public List<? extends TypeParameterElement> getTypeParameters() {
+		return Collections.emptyList();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.Element#asType()
+	 */
+	@Override
+	public TypeMirror asType() {
+		return this._env.getFactory().getErrorType((ReferenceBinding) this._binding);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.Element#getAnnotation(java.lang.Class)
+	 */
+	@Override
+	public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.Element#getAnnotationMirrors()
+	 */
+	@Override
+	public List<? extends AnnotationMirror> getAnnotationMirrors() {
+		return Collections.emptyList();
+	}
+	
+	@SuppressWarnings("unchecked")
+	public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) {
+		return (A[]) Array.newInstance(annotationType, 0);
+	}
+
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.Element#getEnclosedElements()
+	 */
+	@Override
+	public List<? extends Element> getEnclosedElements() {
+		return Collections.emptyList();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.Element#getEnclosingElement()
+	 */
+	@Override
+	public Element getEnclosingElement() {
+		return this._env.getFactory().newPackageElement(this._env.getLookupEnvironment().defaultPackage);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.Element#getKind()
+	 */
+	@Override
+	public ElementKind getKind() {
+		return ElementKind.CLASS;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.Element#getModifiers()
+	 */
+	@Override
+	public Set<Modifier> getModifiers() {
+		return Collections.emptySet();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.Element#getSimpleName()
+	 */
+	@Override
+	public Name getSimpleName() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		return new NameImpl(binding.sourceName());
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeImpl.java
new file mode 100644
index 0000000..90bea84
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeImpl.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2013 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.type.ErrorType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.TypeVisitor;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
+
+/**
+ * Implementation of the {@link ErrorType} interface.
+ */
+public class ErrorTypeImpl extends DeclaredTypeImpl implements ErrorType {
+
+	/* package */ ErrorTypeImpl(BaseProcessingEnvImpl env, ReferenceBinding binding) {
+		super(env, binding);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.DeclaredType#asElement()
+	 */
+	@Override
+	public Element asElement() {
+		return this._env.getFactory().newElement((ReferenceBinding) this._binding);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.DeclaredType#getEnclosingType()
+	 */
+	@Override
+	public TypeMirror getEnclosingType() {
+		return NoTypeImpl.NO_TYPE_NONE;
+	}
+
+	@Override
+	public List<? extends TypeMirror> getTypeArguments() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		if (binding.isParameterizedType()) {
+			ParameterizedTypeBinding ptb = (ParameterizedTypeBinding)_binding;
+			TypeBinding[] arguments = ptb.arguments;
+			int length = arguments == null ? 0 : arguments.length;
+			if (length == 0) return Collections.emptyList();
+			List<TypeMirror> args = new ArrayList<TypeMirror>(length);
+			for (TypeBinding arg : arguments) {
+				args.add(_env.getFactory().newTypeMirror(arg));
+			}
+			return Collections.unmodifiableList(args);
+		}
+		if (binding.isGenericType()) {
+			TypeVariableBinding[] typeVariables = binding.typeVariables();
+			List<TypeMirror> args = new ArrayList<TypeMirror>(typeVariables.length);
+			for (TypeBinding arg : typeVariables) {
+				args.add(_env.getFactory().newTypeMirror(arg));
+			}
+			return Collections.unmodifiableList(args);
+		}
+		return Collections.emptyList();
+	}
+
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeMirror#accept(javax.lang.model.type.TypeVisitor, java.lang.Object)
+	 */
+	@Override
+	public <R, P> R accept(TypeVisitor<R, P> v, P p) {
+		return v.visitError(this, p);
+	}
+
+	public List<? extends AnnotationMirror> getAnnotationMirrors() {
+		return Factory.EMPTY_ANNOTATION_MIRRORS;
+	}
+
+	public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
+		return null;
+	}
+
+	@SuppressWarnings("unchecked")
+	public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) {
+		return (A[]) Array.newInstance(annotationType, 0);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeMirror#getKind()
+	 */
+	@Override
+	public TypeKind getKind() {
+		return TypeKind.ERROR;
+	}
+	
+	@Override
+	public String toString() {
+		return new String(_binding.readableName());
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableElementImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableElementImpl.java
new file mode 100644
index 0000000..c0e60c4
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableElementImpl.java
@@ -0,0 +1,328 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *    Jesper Steen Moller - Bug 412150 [1.8] [compiler] Enable reflected parameter names during annotation processing
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ElementVisitor;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.TypeParameterElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
+
+import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Argument;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationHolder;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AptBinaryLocalVariableBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodVerifier;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
+
+public class ExecutableElementImpl extends ElementImpl implements
+		ExecutableElement {
+	
+	private Name _name = null;
+	
+	/* package */ ExecutableElementImpl(BaseProcessingEnvImpl env, MethodBinding binding) {
+		super(env, binding);
+	}
+
+	@Override
+	public <R, P> R accept(ElementVisitor<R, P> v, P p)
+	{
+		return v.visitExecutable(this, p);
+	}
+
+	@Override
+	protected AnnotationBinding[] getAnnotationBindings()
+	{
+		return ((MethodBinding)_binding).getAnnotations();
+	}
+
+	@Override
+	public AnnotationValue getDefaultValue() {
+		MethodBinding binding = (MethodBinding)_binding;
+		Object defaultValue = binding.getDefaultValue();
+		if (defaultValue != null) return new AnnotationMemberValue(_env, defaultValue, binding);
+		return null;
+	}
+	
+	@Override
+	public List<? extends Element> getEnclosedElements() {
+		return Collections.emptyList();
+	}
+
+	@Override
+	public Element getEnclosingElement() {
+		MethodBinding binding = (MethodBinding)_binding;
+		if (null == binding.declaringClass) {
+			return null;
+		}
+		return _env.getFactory().newElement(binding.declaringClass);
+	}
+
+	@Override
+	public String getFileName() {
+		ReferenceBinding dc = ((MethodBinding)_binding).declaringClass;
+		char[] name = dc.getFileName();
+		if (name == null)
+			return null;
+		return new String(name);
+	}
+
+	@Override
+	public ElementKind getKind() {
+		MethodBinding binding = (MethodBinding)_binding;
+		if (binding.isConstructor()) {
+			return ElementKind.CONSTRUCTOR;
+		}
+		else if (CharOperation.equals(binding.selector, TypeConstants.CLINIT)) {
+			return ElementKind.STATIC_INIT;
+		}
+		else if (CharOperation.equals(binding.selector, TypeConstants.INIT)) {
+			return ElementKind.INSTANCE_INIT;
+		}
+		else {
+			return ElementKind.METHOD;
+		}
+	}
+
+	@Override
+	public Set<Modifier> getModifiers() {
+		MethodBinding binding = (MethodBinding)_binding;
+		return Factory.getModifiers(binding.modifiers, getKind());
+	}
+
+	@Override
+	PackageElement getPackage()
+	{
+		MethodBinding binding = (MethodBinding)_binding;
+		if (null == binding.declaringClass) {
+			return null;
+		}
+		return _env.getFactory().newPackageElement(binding.declaringClass.fPackage);
+	}
+
+	@Override
+	public List<? extends VariableElement> getParameters() {
+		MethodBinding binding = (MethodBinding)_binding;
+		int length = binding.parameters == null ? 0 : binding.parameters.length;
+		if (0 != length) {
+			AbstractMethodDeclaration methodDeclaration = binding.sourceMethod();
+			List<VariableElement> params = new ArrayList<VariableElement>(length);
+			if (methodDeclaration != null) {
+				for (Argument argument : methodDeclaration.arguments) {
+					VariableElement param = new VariableElementImpl(_env, argument.binding);
+					params.add(param);
+				}
+			} else {
+				// binary method
+				AnnotationBinding[][] parameterAnnotationBindings = null;
+				AnnotationHolder annotationHolder = binding.declaringClass.retrieveAnnotationHolder(binding, false);
+				if (annotationHolder != null) {
+					parameterAnnotationBindings = annotationHolder.getParameterAnnotations();
+				}
+				// we need to filter the synthetic arguments
+				int i = 0;
+				for (TypeBinding typeBinding : binding.parameters) {
+					char name[] = binding.parameterNames.length > i ? binding.parameterNames[i] : null;
+					if (name == null) {
+ 						StringBuilder builder = new StringBuilder("arg");//$NON-NLS-1$
+						builder.append(i);
+						name = String.valueOf(builder).toCharArray();
+					}
+					VariableElement param = new VariableElementImpl(_env,
+							new AptBinaryLocalVariableBinding(
+									name,
+									typeBinding,
+									0,
+									parameterAnnotationBindings != null ? parameterAnnotationBindings[i] : null,
+									binding));
+					params.add(param);
+					i++;
+				}
+			}
+			return Collections.unmodifiableList(params);
+		}
+		return Collections.emptyList();
+	}
+
+	@Override
+	public TypeMirror getReturnType() {
+		MethodBinding binding = (MethodBinding)_binding;
+		if (binding.returnType == null) {
+			return null;
+		}
+		else return _env.getFactory().newTypeMirror(binding.returnType);
+	}
+
+	@Override
+	public Name getSimpleName() {
+		MethodBinding binding = (MethodBinding)_binding;
+		if (_name == null) {
+			_name = new NameImpl(binding.selector);
+		}
+		return _name;
+	}
+	
+	@Override
+	public List<? extends TypeMirror> getThrownTypes() {
+		MethodBinding binding = (MethodBinding)_binding;
+		if (binding.thrownExceptions.length == 0) {
+			return Collections.emptyList();
+		}
+		List<TypeMirror> list = new ArrayList<TypeMirror>(binding.thrownExceptions.length);
+		for (ReferenceBinding exception : binding.thrownExceptions) {
+			list.add(_env.getFactory().newTypeMirror(exception));
+		}
+		return list;
+	}
+
+	@Override
+	public List<? extends TypeParameterElement> getTypeParameters() {
+		MethodBinding binding = (MethodBinding)_binding;
+		TypeVariableBinding[] variables = binding.typeVariables();
+		if (variables.length == 0) {
+			return Collections.emptyList();
+		}
+		List<TypeParameterElement> params = new ArrayList<TypeParameterElement>(variables.length); 
+		for (TypeVariableBinding variable : variables) {
+			params.add(_env.getFactory().newTypeParameterElement(variable, this));
+		}
+		return Collections.unmodifiableList(params);
+	}
+
+	@Override
+	public boolean hides(Element hidden)
+	{
+		if (!(hidden instanceof ExecutableElementImpl)) {
+			return false;
+		}
+		MethodBinding hiderBinding = (MethodBinding)_binding;
+		MethodBinding hiddenBinding = (MethodBinding)((ExecutableElementImpl)hidden)._binding;
+		if (hiderBinding == hiddenBinding) {
+			return false;
+		}
+		if (hiddenBinding.isPrivate()) {
+			return false;
+		}
+		// See JLS 8.4.8: hiding only applies to static methods
+		if (!hiderBinding.isStatic() || !hiddenBinding.isStatic()) {
+			return false;
+		}
+		// check names
+		if (!CharOperation.equals(hiddenBinding.selector, hiderBinding.selector)) {
+			return false;
+		}
+		// check parameters
+		if (!_env.getLookupEnvironment().methodVerifier().isMethodSubsignature(hiderBinding, hiddenBinding)) {
+			return false;
+		}
+		return null != hiderBinding.declaringClass.findSuperTypeOriginatingFrom(hiddenBinding.declaringClass); 
+	}
+
+	@Override
+	public boolean isVarArgs() {
+		return ((MethodBinding) _binding).isVarargs();
+	}
+
+	/**
+	 * Return true if this method overrides {@code overridden} in the context of {@code type}.  For
+	 * instance, consider 
+	 * <pre>
+	 *   interface A { void f(); }
+	 *   class B { void f() {} }
+	 *   class C extends B implements I { }
+	 * </pre> 
+	 * In the context of B, B.f() does not override A.f(); they are unrelated.  But in the context of
+	 * C, B.f() does override A.f().  That is, the copy of B.f() that C inherits overrides A.f().
+	 * This is equivalent to considering two questions: first, does C inherit B.f(); if so, does
+	 * the inherited C.f() override A.f().  If B.f() were private, for instance, then in the context
+	 * of C it would still not override A.f().  
+	 * 
+	 * @see javax.lang.model.util.Elements#overrides(ExecutableElement, ExecutableElement, TypeElement)
+     * @jls3 8.4.8 Inheritance, Overriding, and Hiding
+     * @jls3 9.4.1 Inheritance and Overriding
+	 */
+	public boolean overrides(ExecutableElement overridden, TypeElement type)
+	{
+		MethodBinding overriddenBinding = (MethodBinding)((ExecutableElementImpl) overridden)._binding;
+		ReferenceBinding overriderContext = (ReferenceBinding)((TypeElementImpl)type)._binding;
+		if ((MethodBinding)_binding == overriddenBinding
+				|| overriddenBinding.isStatic()
+				|| overriddenBinding.isPrivate()
+				|| ((MethodBinding)_binding).isStatic()) {
+			return false;
+		}
+		char[] selector = ((MethodBinding)_binding).selector;
+		if (!CharOperation.equals(selector, overriddenBinding.selector))
+			return false;
+		
+		// Construct a binding to the equivalent of this (the overrider) as it would be inherited by 'type'.
+		// Can only do this if 'type' is descended from the overrider.
+		// Second clause of the AND is required to match a peculiar javac behavior.
+		if (null == overriderContext.findSuperTypeOriginatingFrom(((MethodBinding)_binding).declaringClass) &&
+				null == ((MethodBinding)_binding).declaringClass.findSuperTypeOriginatingFrom(overriderContext)) {
+			return false;
+		}
+		MethodBinding overriderBinding = new MethodBinding((MethodBinding)_binding, overriderContext);
+		if (overriderBinding.isPrivate()) {
+			// a private method can never override another method.  The other method would either be
+			// private itself, in which case it would not be visible; or this would be a restriction 
+			// of access, which is a compile-time error.
+			return false;
+		}
+		
+		TypeBinding match = overriderBinding.declaringClass.findSuperTypeOriginatingFrom(overriddenBinding.declaringClass);
+		if (!(match instanceof ReferenceBinding)) return false;
+
+		org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding[] superMethods = ((ReferenceBinding)match).getMethods(selector);
+		LookupEnvironment lookupEnvironment = _env.getLookupEnvironment();
+		if (lookupEnvironment == null) return false;
+		MethodVerifier methodVerifier = lookupEnvironment.methodVerifier();
+		for (int i = 0, length = superMethods.length; i < length; i++) {
+			if (superMethods[i].original() == overriddenBinding) {
+				return methodVerifier.doesMethodOverride(overriderBinding, superMethods[i]);
+			}
+		}
+		return false;
+	}
+
+	public TypeMirror getReceiverType() {
+		return _env.getFactory().getReceiverType((MethodBinding) _binding);
+	}
+
+	public boolean isDefault() {
+		if (_binding != null) {
+			return ((MethodBinding)_binding).isDefaultMethod();
+		}
+		return false;
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableTypeImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableTypeImpl.java
new file mode 100644
index 0000000..2e75bda
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/ExecutableTypeImpl.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2013 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.lang.model.type.ExecutableType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.TypeVariable;
+import javax.lang.model.type.TypeVisitor;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
+
+/**
+ * Implementation of the ExecutableType
+ *
+ */
+public class ExecutableTypeImpl extends TypeMirrorImpl implements ExecutableType {
+	
+	ExecutableTypeImpl(BaseProcessingEnvImpl env, MethodBinding binding) {
+		super(env, binding);
+	}
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.ExecutableType#getParameterTypes()
+	 */
+	@Override
+	public List<? extends TypeMirror> getParameterTypes() {
+		MethodBinding binding = (MethodBinding) this._binding;
+		TypeBinding[] parameters = binding.parameters;
+		int length = parameters.length;
+		boolean isEnumConstructor = binding.isConstructor()
+				&& binding.declaringClass.isEnum()
+				&& binding.declaringClass.isBinaryBinding()
+				&& ((binding.modifiers & ExtraCompilerModifiers.AccGenericSignature) == 0);
+		if (isEnumConstructor) {
+			if (length == 2) {
+				return Collections.emptyList();
+			}
+			ArrayList<TypeMirror> list = new ArrayList<TypeMirror>();
+			for (int i = 2; i < length; i++) {
+				list.add(_env.getFactory().newTypeMirror(parameters[i]));
+			}
+			return Collections.unmodifiableList(list);
+		}
+		if (length != 0) {
+			ArrayList<TypeMirror> list = new ArrayList<TypeMirror>();
+			for (TypeBinding typeBinding : parameters) {
+				list.add(_env.getFactory().newTypeMirror(typeBinding));
+			}
+			return Collections.unmodifiableList(list);
+		}
+		return Collections.emptyList();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.ExecutableType#getReturnType()
+	 */
+	@Override
+	public TypeMirror getReturnType() {
+		return _env.getFactory().newTypeMirror(((MethodBinding) this._binding).returnType);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.ExecutableType#getThrownTypes()
+	 */
+	@Override
+	public List<? extends TypeMirror> getThrownTypes() {
+		ArrayList<TypeMirror> list = new ArrayList<TypeMirror>();
+		ReferenceBinding[] thrownExceptions = ((MethodBinding) this._binding).thrownExceptions;
+		if (thrownExceptions.length != 0) {
+			for (ReferenceBinding referenceBinding : thrownExceptions) {
+				list.add(_env.getFactory().newTypeMirror(referenceBinding));
+			}
+		}
+		return Collections.unmodifiableList(list);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.ExecutableType#getTypeVariables()
+	 */
+	@Override
+	public List<? extends TypeVariable> getTypeVariables() {
+		ArrayList<TypeVariable> list = new ArrayList<TypeVariable>();
+		TypeVariableBinding[] typeVariables = ((MethodBinding) this._binding).typeVariables();
+		if (typeVariables.length != 0) {
+			for (TypeVariableBinding typeVariableBinding : typeVariables) {
+				list.add((TypeVariable) _env.getFactory().newTypeMirror(typeVariableBinding));
+			}
+		}
+		return Collections.unmodifiableList(list);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeMirror#accept(javax.lang.model.type.TypeVisitor, java.lang.Object)
+	 */
+	@Override
+	public <R, P> R accept(TypeVisitor<R, P> v, P p) {
+		return v.visitExecutable(this, p);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeMirror#getKind()
+	 */
+	@Override
+	public TypeKind getKind() {
+		return TypeKind.EXECUTABLE;
+	}
+
+	public TypeMirror getReceiverType() {
+		return _env.getFactory().getReceiverType((MethodBinding) _binding);
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/Factory.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/Factory.java
new file mode 100644
index 0000000..c27a9ce
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/Factory.java
@@ -0,0 +1,878 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2014 BEA Systems, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    IBM Corporation - fix for 342598
+ *    IBM Corporation - Java 8 support
+ *    het@google.com - Bug 427943 - The method org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.Factory.getPrimitiveType does not throw IllegalArgumentException
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
+import java.lang.reflect.Proxy;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeParameterElement;
+import javax.lang.model.type.ErrorType;
+import javax.lang.model.type.NoType;
+import javax.lang.model.type.NullType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+
+import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ArrayBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ElementValuePair;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TagBits;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeIds;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.VariableBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.WildcardBinding;
+
+/**
+ * Creates javax.lang.model wrappers around JDT internal compiler bindings.
+ */
+public class Factory {
+	
+	// using auto-boxing to take advantage of caching, if any.
+	// the dummy value picked here falls within the caching range.
+	public static final Byte DUMMY_BYTE = 0; 
+	public static final Character DUMMY_CHAR = '0'; 
+	public static final Double DUMMY_DOUBLE = 0d;
+	public static final Float DUMMY_FLOAT = 0f;
+	public static final Integer DUMMY_INTEGER = 0;  
+	public static final Long DUMMY_LONG = 0l;
+	public static final Short DUMMY_SHORT = 0;
+
+	private final BaseProcessingEnvImpl _env;
+	public static List<? extends AnnotationMirror> EMPTY_ANNOTATION_MIRRORS = Collections.emptyList();
+	
+	/**
+	 * This object should only be constructed by the BaseProcessingEnvImpl.
+	 */
+	public Factory(BaseProcessingEnvImpl env) {
+		_env = env;
+	}
+
+	/**
+	 * Convert an array of compiler annotation bindings into a list of AnnotationMirror
+	 * @return a non-null, possibly empty, unmodifiable list.
+	 */
+	public List<? extends AnnotationMirror> getAnnotationMirrors(AnnotationBinding[] annotations) {
+		if (null == annotations || 0 == annotations.length) {
+			return Collections.emptyList();
+		}
+		List<AnnotationMirror> list = new ArrayList<AnnotationMirror>(annotations.length);
+		for (AnnotationBinding annotation : annotations) {
+			if (annotation == null) continue;
+			list.add(newAnnotationMirror(annotation));
+		}
+		return Collections.unmodifiableList(list);
+	}
+	
+	@SuppressWarnings("unchecked") // for the cast to A
+	public <A extends Annotation> A[] getAnnotationsByType(AnnotationBinding[] annoInstances, Class<A> annotationClass) {
+		A[] result = getAnnotations(annoInstances, annotationClass, false);
+		return result == null ? (A[]) Array.newInstance(annotationClass, 0) : result;
+	}
+	
+	
+	public <A extends Annotation> A getAnnotation(AnnotationBinding[] annoInstances, Class<A> annotationClass) {
+		A[] result = getAnnotations(annoInstances, annotationClass, true);
+		return result == null ? null : result[0];
+	}
+
+	@SuppressWarnings("unchecked") // for cast of newProxyInstance() to A
+	private <A extends Annotation> A[] getAnnotations(AnnotationBinding[] annoInstances, Class<A> annotationClass, boolean justTheFirst) {
+		if(annoInstances == null || annoInstances.length == 0 || annotationClass == null ) 
+			return null;
+
+		String annoTypeName = annotationClass.getName();
+		if(annoTypeName == null ) return null;
+
+		List<A> list = new ArrayList<A>(annoInstances.length);
+		for(AnnotationBinding annoInstance : annoInstances) {
+			if (annoInstance == null)
+				continue;
+			
+			AnnotationMirrorImpl annoMirror = createAnnotationMirror(annoTypeName, annoInstance);
+			if (annoMirror != null) {
+				list.add((A)Proxy.newProxyInstance(annotationClass.getClassLoader(), new Class[]{ annotationClass }, annoMirror));
+				if (justTheFirst) break;
+			}
+		}
+		A [] result = (A[]) Array.newInstance(annotationClass, list.size());
+		return list.size() > 0 ? (A[]) list.toArray(result) :  null;
+	}
+
+	private AnnotationMirrorImpl createAnnotationMirror(String annoTypeName, AnnotationBinding annoInstance) {
+		ReferenceBinding binding = annoInstance.getAnnotationType();
+		if (binding != null && binding.isAnnotationType() ) {
+			char[] qName;
+			if (binding.isMemberType()) {
+				annoTypeName = annoTypeName.replace('$', '.');
+				qName = CharOperation.concatWith(binding.enclosingType().compoundName, binding.sourceName, '.');
+				CharOperation.replace(qName, '$', '.');
+			} else {
+				qName = CharOperation.concatWith(binding.compoundName, '.');
+			}
+			if(annoTypeName.equals(new String(qName)) ){
+				return (AnnotationMirrorImpl)_env.getFactory().newAnnotationMirror(annoInstance);
+			}
+		}
+		return null;
+	}
+
+	private static void appendModifier(Set<Modifier> result, int modifiers, int modifierConstant, Modifier modifier) {
+		if ((modifiers & modifierConstant) != 0) {
+			result.add(modifier);
+		}
+	}
+	
+	private static void decodeModifiers(Set<Modifier> result, int modifiers, int[] checkBits) {
+		if (checkBits == null) return;
+		for (int i = 0, max = checkBits.length; i < max; i++) {
+			switch(checkBits[i]) {
+				case ClassFileConstants.AccPublic :
+					appendModifier(result, modifiers, checkBits[i], Modifier.PUBLIC);
+					break;
+				case ClassFileConstants.AccProtected:
+					appendModifier(result, modifiers, checkBits[i], Modifier.PROTECTED);
+					break;
+				case ClassFileConstants.AccPrivate :
+					appendModifier(result, modifiers, checkBits[i], Modifier.PRIVATE);
+					break;
+				case ClassFileConstants.AccAbstract :
+					appendModifier(result, modifiers, checkBits[i], Modifier.ABSTRACT);
+					break;
+				case ExtraCompilerModifiers.AccDefaultMethod :
+					try {
+						appendModifier(result, modifiers, checkBits[i], Modifier.valueOf("DEFAULT")); //$NON-NLS-1$
+					} catch(IllegalArgumentException iae) {
+						// Don't have JDK 1.8, just ignore and proceed.
+					}
+					break;
+				case ClassFileConstants.AccStatic :
+					appendModifier(result, modifiers, checkBits[i], Modifier.STATIC);
+					break;
+				case ClassFileConstants.AccFinal :
+					appendModifier(result, modifiers, checkBits[i], Modifier.FINAL);
+					break;
+				case ClassFileConstants.AccSynchronized :
+					appendModifier(result, modifiers, checkBits[i], Modifier.SYNCHRONIZED);
+					break;
+				case ClassFileConstants.AccNative :
+					appendModifier(result, modifiers, checkBits[i], Modifier.NATIVE);
+					break;
+				case ClassFileConstants.AccStrictfp :
+					appendModifier(result, modifiers, checkBits[i], Modifier.STRICTFP);
+					break;
+				case ClassFileConstants.AccTransient :
+					appendModifier(result, modifiers, checkBits[i], Modifier.TRANSIENT);
+					break;
+				case ClassFileConstants.AccVolatile :
+					appendModifier(result, modifiers, checkBits[i], Modifier.VOLATILE);
+					break;
+			}
+		}
+	}
+	
+    public static Object getMatchingDummyValue(final Class<?> expectedType){
+    	if( expectedType.isPrimitive() ){
+    		if(expectedType == boolean.class)
+    			return Boolean.FALSE;
+    		else if( expectedType == byte.class )
+    			return DUMMY_BYTE;
+    		else if( expectedType == char.class )
+    			return DUMMY_CHAR;
+    		else if( expectedType == double.class)
+    			return DUMMY_DOUBLE;
+    		else if( expectedType == float.class )
+    			return DUMMY_FLOAT;
+    		else if( expectedType == int.class )
+    			return DUMMY_INTEGER;
+    		else if( expectedType == long.class )
+    			return DUMMY_LONG;
+    		else if(expectedType == short.class)
+    			return DUMMY_SHORT;
+    		else // expectedType == void.class. can this happen?
+    			return DUMMY_INTEGER; // anything would work
+    	}
+    	else
+    		return null;
+    }
+    
+	public TypeMirror getReceiverType(MethodBinding binding) {
+		if (binding != null) {
+			if (binding.receiver != null) {
+				return _env.getFactory().newTypeMirror(binding.receiver);
+			}
+			if (binding.declaringClass != null) {
+				if (!binding.isStatic() && (!binding.isConstructor() || binding.declaringClass.isMemberType())) {
+					return _env.getFactory().newTypeMirror(binding.declaringClass);	
+				}
+			}
+		}
+		return NoTypeImpl.NO_TYPE_NONE;
+	}
+    
+	public static Set<Modifier> getModifiers(int modifiers, ElementKind kind) {
+		return getModifiers(modifiers, kind, false);
+	}
+	/**
+	 * Convert from the JDT's ClassFileConstants flags to the Modifier enum.
+	 */
+	public static Set<Modifier> getModifiers(int modifiers, ElementKind kind, boolean isFromBinary)
+	{
+		EnumSet<Modifier> result = EnumSet.noneOf(Modifier.class);
+		switch(kind) {
+			case CONSTRUCTOR :
+			case METHOD :
+				// modifiers for methods
+				decodeModifiers(result, modifiers, new int[] {
+					ClassFileConstants.AccPublic,
+					ClassFileConstants.AccProtected,
+					ClassFileConstants.AccPrivate,
+					ClassFileConstants.AccAbstract,
+					ClassFileConstants.AccStatic,
+					ClassFileConstants.AccFinal,
+					ClassFileConstants.AccSynchronized,
+					ClassFileConstants.AccNative,
+					ClassFileConstants.AccStrictfp,
+					ExtraCompilerModifiers.AccDefaultMethod
+				});
+				break;
+			case FIELD :
+			case ENUM_CONSTANT :
+				// for fields
+				decodeModifiers(result, modifiers, new int[] {
+					ClassFileConstants.AccPublic,
+					ClassFileConstants.AccProtected,
+					ClassFileConstants.AccPrivate,
+					ClassFileConstants.AccStatic,
+					ClassFileConstants.AccFinal,
+					ClassFileConstants.AccTransient,
+					ClassFileConstants.AccVolatile
+				});
+				break;
+			case ENUM :
+				if (isFromBinary) {
+					decodeModifiers(result, modifiers, new int[] {
+						ClassFileConstants.AccPublic,
+						ClassFileConstants.AccProtected,
+						ClassFileConstants.AccFinal,
+						ClassFileConstants.AccPrivate,
+						ClassFileConstants.AccAbstract,
+						ClassFileConstants.AccStatic,
+						ClassFileConstants.AccStrictfp
+					});
+				} else {
+					// enum from source cannot be explicitly abstract
+					decodeModifiers(result, modifiers, new int[] {
+						ClassFileConstants.AccPublic,
+						ClassFileConstants.AccProtected,
+						ClassFileConstants.AccFinal,
+						ClassFileConstants.AccPrivate,
+						ClassFileConstants.AccStatic,
+						ClassFileConstants.AccStrictfp
+					});
+				}
+				break;
+			case ANNOTATION_TYPE :
+			case INTERFACE :
+			case CLASS :
+				// for type
+				decodeModifiers(result, modifiers, new int[] {
+					ClassFileConstants.AccPublic,
+					ClassFileConstants.AccProtected,
+					ClassFileConstants.AccAbstract,
+					ClassFileConstants.AccFinal,
+					ClassFileConstants.AccPrivate,
+					ClassFileConstants.AccStatic,
+					ClassFileConstants.AccStrictfp
+				});
+				break;
+			default:
+				break;
+		}
+		return Collections.unmodifiableSet(result);
+	}
+
+	public AnnotationMirror newAnnotationMirror(AnnotationBinding binding)
+	{
+		return new AnnotationMirrorImpl(_env, binding);
+	}
+	
+	/**
+	 * Create a new element that knows what kind it is even if the binding is unresolved.
+	 */
+	public Element newElement(Binding binding, ElementKind kindHint) {
+		if (binding == null)
+			return null;
+		switch (binding.kind()) {
+		case Binding.FIELD:
+		case Binding.LOCAL:
+		case Binding.VARIABLE:
+			return new VariableElementImpl(_env, (VariableBinding) binding);
+		case Binding.TYPE:
+		case Binding.GENERIC_TYPE:
+			ReferenceBinding referenceBinding = (ReferenceBinding)binding;
+			if ((referenceBinding.tagBits & TagBits.HasMissingType) != 0) {
+				return new ErrorTypeElement(this._env, referenceBinding);
+			}
+			if (CharOperation.equals(referenceBinding.sourceName, TypeConstants.PACKAGE_INFO_NAME)) {
+				return new PackageElementImpl(_env, referenceBinding.fPackage);
+			}
+			return new TypeElementImpl(_env, referenceBinding, kindHint);
+		case Binding.METHOD:
+			return new ExecutableElementImpl(_env, (MethodBinding)binding);
+		case Binding.RAW_TYPE:
+		case Binding.PARAMETERIZED_TYPE:
+			return new TypeElementImpl(_env, ((ParameterizedTypeBinding)binding).genericType(), kindHint);
+		case Binding.PACKAGE:
+			return new PackageElementImpl(_env, (PackageBinding)binding);
+		case Binding.TYPE_PARAMETER:
+			return new TypeParameterElementImpl(_env, (TypeVariableBinding)binding);
+			// TODO: fill in the rest of these
+		case Binding.IMPORT:
+		case Binding.ARRAY_TYPE:
+		case Binding.BASE_TYPE:
+		case Binding.WILDCARD_TYPE:
+		case Binding.INTERSECTION_TYPE:
+			throw new UnsupportedOperationException("NYI: binding type " + binding.kind()); //$NON-NLS-1$
+		}
+		return null;
+	}
+	
+	public Element newElement(Binding binding) {
+		return newElement(binding, null);
+	}
+
+	/**
+	 * Convenience method - equivalent to {@code (PackageElement)Factory.newElement(binding)}
+	 */
+	public PackageElement newPackageElement(PackageBinding binding)
+	{
+		return new PackageElementImpl(_env, binding);
+	}
+	
+	public NullType getNullType() {
+		return NoTypeImpl.NULL_TYPE;
+	}
+
+	public NoType getNoType(TypeKind kind)
+	{
+		switch (kind) {
+		case NONE:
+			return NoTypeImpl.NO_TYPE_NONE;
+		case VOID:
+			return NoTypeImpl.NO_TYPE_VOID;
+		case PACKAGE:
+			return NoTypeImpl.NO_TYPE_PACKAGE;
+		default:
+			throw new IllegalArgumentException();
+		}
+	}
+
+	/**
+	 * Get a type mirror object representing the specified primitive type kind.
+	 * @throw IllegalArgumentException if a non-primitive TypeKind is requested
+	 */
+	public PrimitiveTypeImpl getPrimitiveType(TypeKind kind)
+	{
+		switch (kind) {
+		case BOOLEAN:
+			return PrimitiveTypeImpl.BOOLEAN;
+		case BYTE:
+			return PrimitiveTypeImpl.BYTE;
+		case CHAR:
+			return PrimitiveTypeImpl.CHAR;
+		case DOUBLE:
+			return PrimitiveTypeImpl.DOUBLE;
+		case FLOAT:
+			return PrimitiveTypeImpl.FLOAT;
+		case INT:
+			return PrimitiveTypeImpl.INT;
+		case LONG:
+			return PrimitiveTypeImpl.LONG;
+		case SHORT:
+			return PrimitiveTypeImpl.SHORT;
+		default:
+			throw new IllegalArgumentException();
+		}
+	}
+	
+	public PrimitiveTypeImpl getPrimitiveType(BaseTypeBinding binding) {
+		AnnotationBinding[] annotations = binding.getTypeAnnotations();
+		if (annotations == null || annotations.length == 0) {
+			return getPrimitiveType(PrimitiveTypeImpl.getKind(binding));
+		}
+		return new PrimitiveTypeImpl(_env, binding);
+	}
+
+	/**
+	 * Given a binding of uncertain type, try to create the right sort of TypeMirror for it.
+	 */
+	public TypeMirror newTypeMirror(Binding binding) {
+		switch (binding.kind()) {
+		case Binding.FIELD:
+		case Binding.LOCAL:
+		case Binding.VARIABLE:
+			// For variables, return the type of the variable
+			return newTypeMirror(((VariableBinding)binding).type);
+			
+		case Binding.PACKAGE:
+			return getNoType(TypeKind.PACKAGE);
+			
+		case Binding.IMPORT:
+			throw new UnsupportedOperationException("NYI: import type " + binding.kind()); //$NON-NLS-1$
+
+		case Binding.METHOD:
+			return new ExecutableTypeImpl(_env, (MethodBinding) binding);
+			
+		case Binding.TYPE:
+		case Binding.RAW_TYPE:
+		case Binding.GENERIC_TYPE:
+		case Binding.PARAMETERIZED_TYPE:
+			ReferenceBinding referenceBinding = (ReferenceBinding) binding;
+			if ((referenceBinding.tagBits & TagBits.HasMissingType) != 0) {
+				return getErrorType(referenceBinding);
+			}
+			return new DeclaredTypeImpl(_env, (ReferenceBinding)binding);
+			
+		case Binding.ARRAY_TYPE:
+			return new ArrayTypeImpl(_env, (ArrayBinding)binding);
+			
+		case Binding.BASE_TYPE:
+			BaseTypeBinding btb = (BaseTypeBinding)binding;
+			switch (btb.id) {
+				case TypeIds.T_void:
+					return getNoType(TypeKind.VOID);
+				case TypeIds.T_null:
+					return getNullType();
+				default:
+					return getPrimitiveType(btb);
+			}
+
+		case Binding.WILDCARD_TYPE:
+		case Binding.INTERSECTION_TYPE: // TODO compatible, but shouldn't it really be an intersection type?
+			return new WildcardTypeImpl(_env, (WildcardBinding) binding);
+
+		case Binding.TYPE_PARAMETER:
+			return new TypeVariableImpl(_env, (TypeVariableBinding) binding);
+		}
+		return null;
+	}
+
+	/**
+	 * @param declaringElement the class, method, etc. that is parameterized by this parameter.
+	 */
+	public TypeParameterElement newTypeParameterElement(TypeVariableBinding variable, Element declaringElement)
+	{
+		return new TypeParameterElementImpl(_env, variable, declaringElement);
+	}
+
+    public ErrorType getErrorType(ReferenceBinding binding) {
+		return new ErrorTypeImpl(this._env, binding);
+	}
+
+	/**
+     * This method is derived from code in org.aspectj.org.eclipse.jdt.apt.core.
+     * 
+     * This method is designed to be invoked by the invocation handler and anywhere that requires
+     * a AnnotationValue (AnnotationMirror member values and default values from annotation member).
+     * 
+     * Regardless of the path, there are common primitive type conversion that needs to take place. 
+     * The type conversions respect the type widening and narrowing rules from JLS 5.1.2 and 5.1.2.
+     * 
+     * The only question remains is what is the type of the return value when the type conversion fails?
+     * When <code>avoidReflectException</code> is set to <code>true</code> 
+     * Return <code>false</code> if the expected type is <code>boolean</code>
+     * Return numeric 0 for all numeric primitive types and '0' for <code>char</code>
+     * 
+     * Otherwise:
+     * Return the value unchanged. 
+     *  
+     * In the invocation handler case: 
+     * The value returned by {@link java.lang.reflect.InvocationHandler#invoke} 
+     * will be converted into the expected type by the {@link java.lang.reflect.Proxy}. 
+     * If the value and the expected type does not agree, and the value is not null, 
+     * a ClassCastException will be thrown. A NullPointerException will result if the 
+     * expected type is a primitive type and the value is null.
+     * This behavior causes annotation processors a lot of pain and the decision is
+     * to not throw such unchecked exception. In the case where a ClassCastException or 
+     * NullPointerException will be thrown return some dummy value. Otherwise, return 
+     * the original value.
+     * Chosen dummy values:  
+     * Return <code>false</code> if the expected type is <code>boolean</code>
+     * Return numeric 0 for all numeric primitive types and '0' for <code>char</code>
+     * 
+     * This behavior is triggered by setting <code>avoidReflectException</code> to <code>true</code>
+     * 
+     * Note: the new behavior deviates from what's documented in
+     * {@link java.lang.reflect.InvocationHandler#invoke} and also deviates from 
+     * Sun's implementation.
+     *
+     * @param value the current value from the annotation instance.
+     * @param expectedType the expected type of the value.
+     * 
+     */
+    public static Object performNecessaryPrimitiveTypeConversion(
+    		final Class<?> expectedType,
+    		final Object value,
+    		final boolean avoidReflectException)
+    {
+    	assert expectedType.isPrimitive() : "expectedType is not a primitive type: " + expectedType.getName(); //$NON-NLS-1$
+    	if( value == null)
+    		return avoidReflectException ? getMatchingDummyValue(expectedType) : null;
+    	// apply widening conversion based on JLS 5.1.2 and 5.1.3
+    	final String typeName = expectedType.getName();
+		final char expectedTypeChar = typeName.charAt(0);
+		final int nameLen = typeName.length();
+		// widening byte -> short, int, long, float or double
+		// narrowing byte -> char
+		if( value instanceof Byte )
+		{
+			final byte b = ((Byte)value).byteValue();
+			switch( expectedTypeChar )
+			{
+			case 'b':
+				if(nameLen == 4) // byte
+					return value; // exact match.
+				else 
+					return avoidReflectException ? Boolean.FALSE : value;
+			case 'c':
+				return new Character((char)b); // narrowing.
+			case 'd':
+				return new Double(b); // widening.
+			case 'f':
+				return new Float(b); // widening.
+			case 'i':
+				return new Integer(b); // widening.
+			case 'l':
+				return new Long(b); // widening.
+			case 's':
+				return new Short(b); // widening.
+			default:  				
+				throw new IllegalStateException("unknown type " + expectedTypeChar); //$NON-NLS-1$
+			}
+		}
+		// widening short -> int, long, float, or double 
+		// narrowing short -> byte or char
+		else if( value instanceof Short )
+		{
+			final short s = ((Short)value).shortValue();
+			switch( expectedTypeChar )
+			{
+			case 'b':
+				if(nameLen == 4) // byte
+					return new Byte((byte)s); // narrowing.
+				else
+					return avoidReflectException ? Boolean.FALSE : value; // completely wrong.
+			case 'c':
+				return new Character((char)s); // narrowing.
+			case 'd':
+				return new Double(s); // widening.
+			case 'f':
+				return new Float(s); // widening.
+			case 'i':
+				return new Integer(s); // widening.
+			case 'l':
+				return new Long(s); // widening.
+			case 's':
+				return value; // exact match
+			default:  				
+				throw new IllegalStateException("unknown type " + expectedTypeChar); //$NON-NLS-1$
+			}
+		}
+		// widening char -> int, long, float, or double 
+		// narrowing char -> byte or short
+		else if( value instanceof Character )
+		{
+			final char c = ((Character)value).charValue();
+			switch( expectedTypeChar )
+			{
+			case 'b':
+				if(nameLen == 4) // byte
+					return new Byte((byte)c); // narrowing.
+				else
+					return avoidReflectException ? Boolean.FALSE : value; // completely wrong.
+			case 'c':
+				return value; // exact match
+			case 'd':
+				return new Double(c); // widening.
+			case 'f':
+				return new Float(c); // widening.
+			case 'i':
+				return new Integer(c); // widening.
+			case 'l':
+				return new Long(c); // widening.
+			case 's':
+				return new Short((short)c); // narrowing.
+			default:  				
+				throw new IllegalStateException("unknown type " + expectedTypeChar); //$NON-NLS-1$
+			}
+		}
+		
+		// widening int -> long, float, or double 
+		// narrowing int -> byte, short, or char 
+		else if( value instanceof Integer )
+		{
+			final int i = ((Integer)value).intValue();
+			switch( expectedTypeChar )
+			{    
+			case 'b':
+				if(nameLen == 4) // byte
+					return new Byte((byte)i); // narrowing.
+				else
+					return avoidReflectException ? Boolean.FALSE : value; // completely wrong.
+			case 'c':
+				return new Character((char)i); // narrowing
+			case 'd':
+				return new Double(i); // widening.
+			case 'f':
+				return new Float(i); // widening.
+			case 'i':
+				return value; // exact match
+			case 'l':
+				return new Long(i); // widening.
+			case 's':
+				return new Short((short)i); // narrowing.
+			default:  				
+				throw new IllegalStateException("unknown type " + expectedTypeChar); //$NON-NLS-1$
+			}
+		}
+		// widening long -> float or double
+		else if( value instanceof Long )
+		{
+			final long l = ((Long)value).longValue();
+			switch( expectedTypeChar )
+			{
+			case 'b': // both byte and boolean
+			case 'c': 
+			case 'i':
+			case 's':
+				// completely wrong.
+				return avoidReflectException ? getMatchingDummyValue(expectedType) : value;
+			case 'd':
+				return new Double(l); // widening.
+			case 'f':
+				return new Float(l); // widening.			
+			case 'l': 
+				return value; // exact match.
+		
+			default:  				
+				throw new IllegalStateException("unknown type " + expectedTypeChar); //$NON-NLS-1$
+			}
+		}
+		
+		// widening float -> double    		 
+		else if( value instanceof Float )
+		{
+			final float f = ((Float)value).floatValue();
+			switch( expectedTypeChar )
+			{    		
+			case 'b': // both byte and boolean
+			case 'c': 
+			case 'i':
+			case 's':
+			case 'l':
+				// completely wrong.
+				return avoidReflectException ? getMatchingDummyValue(expectedType) : value;
+			case 'd':
+				return new Double(f); // widening.
+			case 'f':
+				return value; // exact match.
+			default:  				
+				throw new IllegalStateException("unknown type " + expectedTypeChar); //$NON-NLS-1$
+			}
+		}
+		else if( value instanceof Double ){
+			if(expectedTypeChar == 'd' )
+				return value; // exact match
+			else{
+				return avoidReflectException ? getMatchingDummyValue(expectedType) : value; // completely wrong.
+			}
+		}
+		else if( value instanceof Boolean ){
+			if( expectedTypeChar == 'b' && nameLen == 7) // "boolean".length() == 7
+				return value;
+			else
+				return avoidReflectException ? getMatchingDummyValue(expectedType) : value; // completely wrong.
+		}
+		else // can't convert
+			return avoidReflectException ? getMatchingDummyValue(expectedType) : value;
+    }
+
+    /**
+     * Set an element of an array to the appropriate dummy value type
+     * @param array
+     * @param i
+     * @param expectedLeafType
+     */
+	public static void setArrayMatchingDummyValue(Object array, int i, Class<?> expectedLeafType)
+	{
+		if (boolean.class.equals(expectedLeafType)) {
+			Array.setBoolean(array, i, false);
+		}
+		else if (byte.class.equals(expectedLeafType)) {
+			Array.setByte(array, i, DUMMY_BYTE);
+		}
+		else if (char.class.equals(expectedLeafType)) {
+			Array.setChar(array, i, DUMMY_CHAR);
+		}
+		else if (double.class.equals(expectedLeafType)) {
+			Array.setDouble(array, i, DUMMY_DOUBLE);
+		}
+		else if (float.class.equals(expectedLeafType)) {
+			Array.setFloat(array, i, DUMMY_FLOAT);
+		}
+		else if (int.class.equals(expectedLeafType)) {
+			Array.setInt(array, i, DUMMY_INTEGER);
+		}
+		else if (long.class.equals(expectedLeafType)) {
+			Array.setLong(array, i, DUMMY_LONG);
+		}
+		else if (short.class.equals(expectedLeafType)) {
+			Array.setShort(array, i, DUMMY_SHORT);
+		}
+		else {
+			Array.set(array, i, null);
+		}
+	}
+
+	/* Wrap repeating annotations into their container, return an array of bindings.
+	   Incoming array is not modified.
+	*/
+	public static AnnotationBinding [] getPackedAnnotationBindings(AnnotationBinding [] annotations) {
+		
+		int length = annotations == null ? 0 : annotations.length;
+		if (length == 0)
+			return annotations;
+		
+		AnnotationBinding[] repackagedBindings = annotations; // only replicate if repackaging.
+		for (int i = 0; i < length; i++) {
+			AnnotationBinding annotation = repackagedBindings[i];
+			if (annotation == null) continue;
+			ReferenceBinding annotationType = annotation.getAnnotationType();
+			if (!annotationType.isRepeatableAnnotationType())
+				continue;
+			ReferenceBinding containerType = annotationType.containerAnnotationType();
+			if (containerType == null)
+				continue; // FUBAR.
+			MethodBinding [] values = containerType.getMethods(TypeConstants.VALUE);
+			if (values == null || values.length != 1)
+				continue; // FUBAR.
+			MethodBinding value = values[0];
+			if (value.returnType == null || value.returnType.dimensions() != 1 || TypeBinding.notEquals(value.returnType.leafComponentType(), annotationType))
+				continue; // FUBAR
+			
+			// We have a kosher repeatable annotation with a kosher containing type. See if actually repeats.
+			List<AnnotationBinding> containees = null;
+			for (int j = i + 1; j < length; j++) {
+				AnnotationBinding otherAnnotation = repackagedBindings[j];
+				if (otherAnnotation == null) continue;
+				if (otherAnnotation.getAnnotationType() == annotationType) { //$IDENTITY-COMPARISON$
+					if (repackagedBindings == annotations)
+						System.arraycopy(repackagedBindings, 0, repackagedBindings = new AnnotationBinding[length], 0, length);
+					repackagedBindings[j] = null; // so it is not double packed.
+					if (containees == null) {
+						containees = new ArrayList<AnnotationBinding>();
+						containees.add(annotation);
+					}
+					containees.add(otherAnnotation);
+				}
+			}
+			if (containees != null) {
+				ElementValuePair [] elementValuePairs = new ElementValuePair [] { new ElementValuePair(TypeConstants.VALUE, containees.toArray(), value) };
+				repackagedBindings[i] = new AnnotationBinding(containerType, elementValuePairs);
+			}
+		}
+		if (repackagedBindings == annotations)
+			return annotations;
+		
+		int finalTally = 0;
+		for (int i = 0; i < length; i++) {
+			if (repackagedBindings[i] != null)
+				finalTally++;
+		}
+		annotations = new AnnotationBinding [finalTally];
+		for (int i = 0, j = 0; i < length; i++) {
+			if (repackagedBindings[i] != null)
+				annotations[j++] = repackagedBindings[i];
+		}
+		return annotations;
+	}
+	
+	/* Unwrap container annotations into the repeated annotations, return an array of bindings that includes the container and the containees.
+	*/
+	public static AnnotationBinding [] getUnpackedAnnotationBindings(AnnotationBinding [] annotations) {
+		
+		int length = annotations == null ? 0 : annotations.length;
+		if (length == 0)
+			return annotations;
+		
+		List<AnnotationBinding> unpackedAnnotations = new ArrayList<AnnotationBinding>();
+		for (int i = 0; i < length; i++) {
+			AnnotationBinding annotation = annotations[i];
+			if (annotation == null) continue;
+			unpackedAnnotations.add(annotation);
+			ReferenceBinding annotationType = annotation.getAnnotationType();
+			
+			MethodBinding [] values = annotationType.getMethods(TypeConstants.VALUE);
+			if (values == null || values.length != 1)
+				continue;
+			MethodBinding value = values[0];
+			
+			if (value.returnType.dimensions() != 1)
+				continue;
+			
+			TypeBinding containeeType = value.returnType.leafComponentType();
+			if (containeeType == null || !containeeType.isAnnotationType() || !containeeType.isRepeatableAnnotationType())
+				continue;
+			
+			if (containeeType.containerAnnotationType() != annotationType) //$IDENTITY-COMPARISON$
+				continue;
+			
+			// We have a kosher container: unwrap the contained annotations.
+			ElementValuePair [] elementValuePairs = annotation.getElementValuePairs();
+			for (ElementValuePair elementValuePair : elementValuePairs) {
+				if (CharOperation.equals(elementValuePair.getName(), TypeConstants.VALUE)) {
+					Object [] containees = (Object []) elementValuePair.getValue();
+					for (Object object : containees) {
+						unpackedAnnotations.add((AnnotationBinding) object);
+					}
+					break;
+				}
+			}
+		}
+		return (AnnotationBinding[]) unpackedAnnotations.toArray(new AnnotationBinding [unpackedAnnotations.size()]);
+	}	
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/IElementInfo.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/IElementInfo.java
new file mode 100644
index 0000000..3b2b14e
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/IElementInfo.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 BEA Systems, Inc. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+/**
+ * Additional information available for Elements that are implemented 
+ * within the Eclipse APT framework.
+ * @see javax.lang.model.element.Element
+ * @since 3.3
+ */
+public interface IElementInfo {
+	/**
+	 * Get the project-relative path to the source file that contains this element.
+	 * If the element is a PackageElement, the "source file" is package-info.java.
+	 * If the element is not recognized or does not exist in the project for some
+	 * reason, returns null.
+	 * @return the project-relative path, or null.
+	 */
+	public String getFileName();
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NameImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NameImpl.java
new file mode 100644
index 0000000..2ce0313
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NameImpl.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 BEA Systems, Inc. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import javax.lang.model.element.Name;
+
+/**
+ * A String-based implementation of the type used to return strings in javax.lang.model.
+ */
+public class NameImpl implements Name {
+	
+	private final String _name;
+	
+	/** nullary constructor is prohibited */
+	@SuppressWarnings("unused")
+	private NameImpl() 
+	{
+		_name = null;
+	}
+	
+	public NameImpl(CharSequence cs)
+	{
+		_name = cs.toString();
+	}
+	
+	public NameImpl(char[] chars)
+	{
+		_name = String.valueOf(chars);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.element.Name#contentEquals(java.lang.CharSequence)
+	 */
+	@Override
+	public boolean contentEquals(CharSequence cs) {
+		return _name.equals(cs.toString());
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.CharSequence#charAt(int)
+	 */
+	@Override
+	public char charAt(int index) {
+		return _name.charAt(index);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.CharSequence#length()
+	 */
+	@Override
+	public int length() {
+		return _name.length();
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.CharSequence#subSequence(int, int)
+	 */
+	@Override
+	public CharSequence subSequence(int start, int end) {
+		return _name.subSequence(start, end);
+	}
+
+	@Override
+	public String toString() {
+		return _name;
+	}
+
+	@Override
+	public int hashCode() {
+		return _name.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		final NameImpl other = (NameImpl) obj;
+		return _name.equals(other._name);
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NoTypeImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NoTypeImpl.java
new file mode 100644
index 0000000..6b3b128
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/NoTypeImpl.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2013 BEA Systems, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    IBM Corporation - Java 8 support
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
+import java.util.List;
+
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.type.NoType;
+import javax.lang.model.type.NullType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeVisitor;
+
+/**
+ * An implementation of NoType, which is used to represent certain psuedo-types.
+ * @see NoType
+ */
+public class NoTypeImpl implements NoType, NullType
+{
+	private final TypeKind _kind;
+	
+	public static final NoType NO_TYPE_NONE = new NoTypeImpl(TypeKind.NONE);
+	public static final NoType NO_TYPE_VOID = new NoTypeImpl(TypeKind.VOID);
+	public static final NoType NO_TYPE_PACKAGE = new NoTypeImpl(TypeKind.PACKAGE);
+	public static final NullType NULL_TYPE = new NoTypeImpl(TypeKind.NULL);
+	
+	private NoTypeImpl(TypeKind kind) {
+		_kind = kind;
+	}
+
+	@Override
+	public <R, P> R accept(TypeVisitor<R, P> v, P p)
+	{
+		switch(this.getKind())
+		{
+			case NULL :
+				return v.visitNull(this, p);
+			default: 
+				return v.visitNoType(this, p);
+		}
+	}
+
+	@Override
+	public TypeKind getKind()
+	{
+		return _kind;
+	}
+	
+	public String toString()
+	{
+		switch (_kind) {
+		default:
+		case NONE:
+			return "<none>"; //$NON-NLS-1$
+		case NULL:
+			return "null"; //$NON-NLS-1$
+		case VOID:
+			return "void"; //$NON-NLS-1$
+		case PACKAGE:
+			return "package"; //$NON-NLS-1$
+		}
+	}
+
+	public List<? extends AnnotationMirror> getAnnotationMirrors() {
+		return Factory.EMPTY_ANNOTATION_MIRRORS;
+	}
+
+	public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
+		return null;
+	}
+
+	@SuppressWarnings("unchecked")
+	public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) {
+		return (A[]) Array.newInstance(annotationType, 0);
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PackageElementImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PackageElementImpl.java
new file mode 100644
index 0000000..872109b
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PackageElementImpl.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2007 BEA Systems, Inc. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ElementVisitor;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.PackageElement;
+
+import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.batch.FileSystem;
+import org.aspectj.org.eclipse.jdt.internal.compiler.env.INameEnvironment;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
+
+/**
+ * Implementation of PackageElement, which represents a package
+ */
+public class PackageElementImpl extends ElementImpl implements PackageElement {
+
+	PackageElementImpl(BaseProcessingEnvImpl env, PackageBinding binding) {
+		super(env, binding);
+	}
+	
+	@Override
+	public <R, P> R accept(ElementVisitor<R, P> v, P p)
+	{
+		return v.visitPackage(this, p);
+	}
+
+	@Override
+	protected AnnotationBinding[] getAnnotationBindings()
+	{
+		PackageBinding packageBinding = (PackageBinding) this._binding;
+		char[][] compoundName = CharOperation.arrayConcat(packageBinding.compoundName, TypeConstants.PACKAGE_INFO_NAME);
+		ReferenceBinding type = this._env.getLookupEnvironment().getType(compoundName);
+		AnnotationBinding[] annotations = null;
+		if (type != null && type.isValidBinding()) {
+			annotations = type.getAnnotations();
+		}
+		return annotations;
+	}
+
+	@Override
+	public List<? extends Element> getEnclosedElements() {
+		PackageBinding binding = (PackageBinding)_binding;
+		LookupEnvironment environment = binding.environment;
+		char[][][] typeNames = null;
+		INameEnvironment nameEnvironment = binding.environment.nameEnvironment;
+		if (nameEnvironment instanceof FileSystem) {
+			typeNames = ((FileSystem) nameEnvironment).findTypeNames(binding.compoundName);
+		}
+		HashSet<Element> set = new HashSet<Element>(); 
+		if (typeNames != null) {
+			for (char[][] typeName : typeNames) {
+				ReferenceBinding type = environment.getType(typeName);
+				if (type != null && type.isValidBinding()) {
+					set.add(_env.getFactory().newElement(type));
+				}
+			}
+		}
+		ArrayList<Element> list = new ArrayList<Element>(set.size());
+		list.addAll(set);
+		return Collections.unmodifiableList(list);
+	}
+
+	@Override
+	public Element getEnclosingElement() {
+		// packages have no enclosing element
+		return null;
+	}
+
+	@Override
+	public ElementKind getKind() {
+		return ElementKind.PACKAGE;
+	}
+
+	@Override
+	PackageElement getPackage()
+	{
+		return this;
+	}
+
+	@Override
+	public Name getSimpleName() {
+		char[][] compoundName = ((PackageBinding)_binding).compoundName;
+		int length = compoundName.length;
+		if (length == 0) {
+			return new NameImpl(CharOperation.NO_CHAR);
+		}
+		return new NameImpl(compoundName[length - 1]);
+	}
+
+	@Override
+	public Name getQualifiedName() {
+		return new NameImpl(CharOperation.concatWith(((PackageBinding)_binding).compoundName, '.'));
+	}
+
+	@Override
+	public boolean isUnnamed() {
+		PackageBinding binding = (PackageBinding)_binding;
+		return binding.compoundName == CharOperation.NO_CHAR_CHAR;
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PrimitiveTypeImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PrimitiveTypeImpl.java
new file mode 100644
index 0000000..b511fc5
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/PrimitiveTypeImpl.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2013 BEA Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    IBM Corporation - Java 8 support
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import javax.lang.model.type.PrimitiveType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeVisitor;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeIds;
+
+/**
+ * 
+ * @since 3.3
+ */
+public class PrimitiveTypeImpl extends TypeMirrorImpl implements PrimitiveType {
+	
+	public final static PrimitiveTypeImpl BOOLEAN = new PrimitiveTypeImpl(TypeBinding.BOOLEAN);
+	public final static PrimitiveTypeImpl BYTE = new PrimitiveTypeImpl(TypeBinding.BYTE);
+	public final static PrimitiveTypeImpl CHAR = new PrimitiveTypeImpl(TypeBinding.CHAR);
+	public final static PrimitiveTypeImpl DOUBLE = new PrimitiveTypeImpl(TypeBinding.DOUBLE);
+	public final static PrimitiveTypeImpl FLOAT = new PrimitiveTypeImpl(TypeBinding.FLOAT);
+	public final static PrimitiveTypeImpl INT = new PrimitiveTypeImpl(TypeBinding.INT);
+	public final static PrimitiveTypeImpl LONG = new PrimitiveTypeImpl(TypeBinding.LONG);
+	public final static PrimitiveTypeImpl SHORT = new PrimitiveTypeImpl(TypeBinding.SHORT);
+	
+	/**
+	 * Clients should call {@link Factory#getPrimitiveType(TypeKind)},
+	 * rather than creating new objects.
+	 */
+	private PrimitiveTypeImpl(BaseTypeBinding binding) {
+		// Primitive types do not need an environment!
+		super(null, binding);
+	}
+	
+	PrimitiveTypeImpl(BaseProcessingEnvImpl env, BaseTypeBinding binding) {
+		// From Java 8, base type bindings can hold annotations and hence need the environment.
+		super(env, binding);
+	}
+	
+	@Override
+	public <R, P> R accept(TypeVisitor<R, P> v, P p)
+	{
+		return v.visitPrimitive(this, p);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.TypeMirrorImpl#getKind()
+	 */
+	@Override
+	public TypeKind getKind() {
+		return getKind((BaseTypeBinding)_binding);
+	}
+
+	public static TypeKind getKind(BaseTypeBinding binding) {
+		switch (binding.id) {
+		case TypeIds.T_boolean:
+			return TypeKind.BOOLEAN;
+		case TypeIds.T_byte:
+			return TypeKind.BYTE;
+		case TypeIds.T_char:
+			return TypeKind.CHAR;
+		case TypeIds.T_double:
+			return TypeKind.DOUBLE;
+		case TypeIds.T_float:
+			return TypeKind.FLOAT;
+		case TypeIds.T_int:
+			return TypeKind.INT;
+		case TypeIds.T_long:
+			return TypeKind.LONG;
+		case TypeIds.T_short:
+			return TypeKind.SHORT;
+		default:
+			throw new IllegalArgumentException("BaseTypeBinding of unexpected id " + binding.id); //$NON-NLS-1$
+		}
+	}
+	
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeElementImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeElementImpl.java
new file mode 100644
index 0000000..ac768ad
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeElementImpl.java
@@ -0,0 +1,275 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ElementVisitor;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.NestingKind;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.TypeParameterElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+
+import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
+
+public class TypeElementImpl extends ElementImpl implements TypeElement {
+	
+	private final ElementKind _kindHint;
+	
+	/**
+	 * In general, clients should call {@link Factory#newDeclaredType(ReferenceBinding)} or
+	 * {@link Factory#newElement(org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding)} to
+	 * create new instances.
+	 */
+	TypeElementImpl(BaseProcessingEnvImpl env, ReferenceBinding binding, ElementKind kindHint) {
+		super(env, binding);
+		_kindHint = kindHint;
+	}
+	
+	@Override
+	public <R, P> R accept(ElementVisitor<R, P> v, P p)
+	{
+		return v.visitType(this, p);
+	}
+
+	@Override
+	protected AnnotationBinding[] getAnnotationBindings()
+	{
+		return ((ReferenceBinding)_binding).getAnnotations();
+	}
+
+	@Override
+	public List<? extends Element> getEnclosedElements() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		List<Element> enclosed = new ArrayList<Element>(binding.fieldCount() + binding.methods().length);
+		for (MethodBinding method : binding.methods()) {
+			ExecutableElement executable = new ExecutableElementImpl(_env, method);
+			enclosed.add(executable);
+		}
+		for (FieldBinding field : binding.fields()) {
+			// TODO no field should be excluded according to the JLS
+			if (!field.isSynthetic()) {
+				 VariableElement variable = new VariableElementImpl(_env, field);
+				 enclosed.add(variable);
+			}
+		}
+		for (ReferenceBinding memberType : binding.memberTypes()) {
+			TypeElement type = new TypeElementImpl(_env, memberType, null);
+			enclosed.add(type);
+		}
+		return Collections.unmodifiableList(enclosed);
+	}
+
+	@Override
+	public Element getEnclosingElement() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		ReferenceBinding enclosingType = binding.enclosingType();
+		if (null == enclosingType) {
+			// this is a top level type; get its package
+			return _env.getFactory().newPackageElement(binding.fPackage);
+		}
+		else {
+			return _env.getFactory().newElement(binding.enclosingType());
+		}
+	}
+
+	@Override
+	public String getFileName() {
+		char[] name = ((ReferenceBinding)_binding).getFileName();
+		if (name == null)
+			return null;
+		return new String(name);
+	}
+	
+	@Override
+	public List<? extends TypeMirror> getInterfaces() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		if (null == binding.superInterfaces() || binding.superInterfaces().length == 0) {
+			return Collections.emptyList();
+		}
+		List<TypeMirror> interfaces = new ArrayList<TypeMirror>(binding.superInterfaces().length);
+		for (ReferenceBinding interfaceBinding : binding.superInterfaces()) {
+			TypeMirror interfaceType = _env.getFactory().newTypeMirror(interfaceBinding);
+			if (interfaceType.getKind() == TypeKind.ERROR) {
+				if (this._env.getSourceVersion().compareTo(SourceVersion.RELEASE_6) > 0) {
+					// for jdk 7 and above, add error types
+					interfaces.add(interfaceType);
+				}
+			} else {
+				interfaces.add(interfaceType);
+			}
+		}
+		return Collections.unmodifiableList(interfaces);
+	}
+
+	@Override
+	public ElementKind getKind() {
+		if (null != _kindHint) {
+			return _kindHint;
+		}
+		ReferenceBinding refBinding = (ReferenceBinding)_binding;
+		// The order of these comparisons is important: e.g., enum is subset of class
+		if (refBinding.isEnum()) {
+			return ElementKind.ENUM;
+		}
+		else if (refBinding.isAnnotationType()) {
+			return ElementKind.ANNOTATION_TYPE;
+		}
+		else if (refBinding.isInterface()) {
+			return ElementKind.INTERFACE;
+		}
+		else if (refBinding.isClass()) {
+			return ElementKind.CLASS;
+		}
+		else {
+			throw new IllegalArgumentException("TypeElement " + new String(refBinding.shortReadableName()) +  //$NON-NLS-1$
+					" has unexpected attributes " + refBinding.modifiers); //$NON-NLS-1$
+		}
+	}
+
+	@Override
+	public Set<Modifier> getModifiers()
+	{
+		ReferenceBinding refBinding = (ReferenceBinding)_binding;
+		int modifiers = refBinding.modifiers;
+		if (refBinding.isInterface() && refBinding.isNestedType()) {
+			modifiers |= ClassFileConstants.AccStatic;
+		}
+		return Factory.getModifiers(modifiers, getKind(), refBinding.isBinaryBinding());
+	}
+
+	@Override
+	public NestingKind getNestingKind() {
+		ReferenceBinding refBinding = (ReferenceBinding)_binding;
+		if (refBinding.isAnonymousType()) {
+			return NestingKind.ANONYMOUS;
+		} else if (refBinding.isLocalType()) {
+			return NestingKind.LOCAL;
+		} else if (refBinding.isMemberType()) {
+			return NestingKind.MEMBER;
+		}
+		return NestingKind.TOP_LEVEL;
+	}
+
+	@Override
+	PackageElement getPackage()
+	{
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		return _env.getFactory().newPackageElement((PackageBinding)binding.fPackage);
+	}
+
+	@Override
+	public Name getQualifiedName() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		char[] qName;
+		if (binding.isMemberType()) {
+			qName = CharOperation.concatWith(binding.enclosingType().compoundName, binding.sourceName, '.');
+			CharOperation.replace(qName, '$', '.');
+		} else {
+			qName = CharOperation.concatWith(binding.compoundName, '.');
+		}
+		return new NameImpl(qName);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.ElementImpl#getSimpleName()
+	 * @return last segment of name, e.g. for pa.pb.X.Y return Y.
+	 */
+	@Override
+	public Name getSimpleName()
+	{
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		return new NameImpl(binding.sourceName());
+	}
+
+	@Override
+	public TypeMirror getSuperclass() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		ReferenceBinding superBinding = binding.superclass();
+		if (null == superBinding || binding.isInterface()) {
+			return _env.getFactory().getNoType(TypeKind.NONE);
+		}
+		// superclass of a type must be a DeclaredType
+		return _env.getFactory().newTypeMirror(superBinding);
+	}
+	
+	@Override
+	public List<? extends TypeParameterElement> getTypeParameters() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		TypeVariableBinding[] variables = binding.typeVariables();
+		if (variables.length == 0) {
+			return Collections.emptyList();
+		}
+		List<TypeParameterElement> params = new ArrayList<TypeParameterElement>(variables.length); 
+		for (TypeVariableBinding variable : variables) {
+			params.add(_env.getFactory().newTypeParameterElement(variable, this));
+		}
+		return Collections.unmodifiableList(params);
+	}
+
+	@Override
+	public boolean hides(Element hidden)
+	{
+		if (!(hidden instanceof TypeElementImpl)) {
+			return false;
+		}
+		ReferenceBinding hiddenBinding = (ReferenceBinding)((TypeElementImpl)hidden)._binding;
+		if (hiddenBinding.isPrivate()) {
+			return false;
+		}
+		ReferenceBinding hiderBinding = (ReferenceBinding)_binding;
+		if (TypeBinding.equalsEquals(hiddenBinding, hiderBinding)) {
+			return false;
+		}
+		if (!hiddenBinding.isMemberType() || !hiderBinding.isMemberType()) {
+			return false;
+		}
+		if (!CharOperation.equals(hiddenBinding.sourceName, hiderBinding.sourceName)) {
+			return false;
+		}
+		return null != hiderBinding.enclosingType().findSuperTypeOriginatingFrom(hiddenBinding.enclosingType()); 
+	}
+
+	@Override
+	public String toString() {
+		ReferenceBinding binding = (ReferenceBinding) this._binding;
+		char[] concatWith = CharOperation.concatWith(binding.compoundName, '.');
+		if (binding.isNestedType()) {
+			CharOperation.replace(concatWith, '$', '.');
+			return new String(concatWith);
+		}
+		return new String(concatWith);
+
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeMirrorImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeMirrorImpl.java
new file mode 100644
index 0000000..2a34b33
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeMirrorImpl.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2013 BEA Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    IBM Corporation - Java 8 support
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
+import java.util.List;
+
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.TypeVisitor;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+
+/**
+ * Implementation of a TypeMirror.  TypeMirror represents a type, including
+ * types that have no declaration, such as primitives (int, boolean) and
+ * types that are specializations of declarations (List<String>).
+ */
+public class TypeMirrorImpl implements TypeMirror {
+
+	// Caution: _env will be NULL for unannotated primitive types (PrimitiveTypeImpl).
+	protected final BaseProcessingEnvImpl _env;
+	protected final Binding _binding;
+	
+	/* package */ TypeMirrorImpl(BaseProcessingEnvImpl env, Binding binding) {
+		_env = env;
+		_binding = binding;
+	}
+	
+	/* package */ Binding binding() {
+		return _binding;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeMirror#accept(javax.lang.model.type.TypeVisitor, java.lang.Object)
+	 */
+	@Override
+	public <R, P> R accept(TypeVisitor<R, P> v, P p) {
+		return v.visit(this, p);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeMirror#getKind()
+	 */
+	@Override
+	public TypeKind getKind() {
+		switch (_binding.kind()) {
+		// case Binding.TYPE: 
+		// case Binding.RAW_TYPE:
+		// case Binding.GENERIC_TYPE:
+		// case Binding.PARAMETERIZED_TYPE:
+		// handled by DeclaredTypeImpl, etc.
+		// case Binding.BASE_TYPE: handled by PrimitiveTypeImpl
+		// case Binding.METHOD: handled by ExecutableTypeImpl
+		// case Binding.PACKAGE: handled by NoTypeImpl
+		// case Binding.WILDCARD_TYPE: handled by WildcardTypeImpl
+		// case Binding.ARRAY_TYPE: handled by ArrayTypeImpl
+		// case Binding.TYPE_PARAMETER: handled by TypeVariableImpl
+		// TODO: fill in the rest of these
+		case Binding.FIELD:
+		case Binding.LOCAL:
+		case Binding.VARIABLE:
+		case Binding.IMPORT:
+			throw new IllegalArgumentException("Invalid binding kind: " + _binding.kind()); //$NON-NLS-1$
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		return new String(_binding.readableName());
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 */
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((_binding == null) ? 0 : _binding.hashCode());
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (!(obj instanceof TypeMirrorImpl))
+			return false;
+		final TypeMirrorImpl other = (TypeMirrorImpl) obj;
+		return _binding == other._binding;
+	}
+
+	/* Package any repeating annotations into containers, return others as is.
+	   In the compiler bindings repeating annotations are left in as is, hence
+	   this step. The return value would match what one would expect to see in
+	   a class file.
+	*/
+	public final AnnotationBinding [] getPackedAnnotationBindings() {
+		return Factory.getPackedAnnotationBindings(getAnnotationBindings());
+	}
+	
+	protected AnnotationBinding[] getAnnotationBindings() {
+		return ((TypeBinding)_binding).getTypeAnnotations();
+	}
+
+	public List<? extends AnnotationMirror> getAnnotationMirrors() {
+		return _env == null ? Factory.EMPTY_ANNOTATION_MIRRORS : 
+								_env.getFactory().getAnnotationMirrors(getPackedAnnotationBindings());
+	}
+
+	public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
+		return _env == null ? null : _env.getFactory().getAnnotation(getPackedAnnotationBindings(), annotationType);
+	}
+
+	@SuppressWarnings("unchecked")
+	public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) {
+		if (_env == null)
+			return (A[]) Array.newInstance(annotationType, 0);
+		return _env.getFactory().getAnnotationsByType(Factory.getUnpackedAnnotationBindings(getPackedAnnotationBindings()), annotationType);
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeParameterElementImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeParameterElementImpl.java
new file mode 100644
index 0000000..32b0610
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeParameterElementImpl.java
@@ -0,0 +1,220 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2013 BEA Systems, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    IBM Corporation - fix for 342470
+ *    IBM Corporation - fix for 342598
+ *    IBM Corporation - Java 8 support
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ElementVisitor;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeParameterElement;
+import javax.lang.model.type.TypeMirror;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
+
+/**
+ * 
+ */
+public class TypeParameterElementImpl extends ElementImpl implements TypeParameterElement
+{
+	private final Element _declaringElement;
+	
+	// Cache the bounds, because they're expensive to compute
+	private List<? extends TypeMirror> _bounds = null;
+	
+	/* package */ TypeParameterElementImpl(BaseProcessingEnvImpl env, TypeVariableBinding binding, Element declaringElement) {
+		super(env, binding);
+		_declaringElement = declaringElement;
+	}
+
+	/* package */ TypeParameterElementImpl(BaseProcessingEnvImpl env, TypeVariableBinding binding) {
+		super(env, binding);
+		_declaringElement = _env.getFactory().newElement(binding.declaringElement);
+	}
+
+	@Override
+	public List<? extends TypeMirror> getBounds()
+	{
+		if (null == _bounds) {
+			_bounds = calculateBounds();
+		}
+		return _bounds;
+	}
+	
+	// This code is drawn from org.aspectj.org.eclipse.jdt.core.dom.TypeBinding.getTypeBounds()
+	private List<? extends TypeMirror> calculateBounds() {
+		TypeVariableBinding typeVariableBinding = (TypeVariableBinding)_binding;
+		ReferenceBinding varSuperclass = typeVariableBinding.superclass();
+		TypeBinding firstClassOrArrayBound = typeVariableBinding.firstBound;
+		int boundsLength = 0;
+		boolean isFirstBoundATypeVariable = false;
+		if (firstClassOrArrayBound != null) {
+			if (firstClassOrArrayBound.isTypeVariable()) {
+				isFirstBoundATypeVariable = true;
+			}
+			if (TypeBinding.equalsEquals(firstClassOrArrayBound, varSuperclass)) {
+				boundsLength++;
+				if (firstClassOrArrayBound.isTypeVariable()) {
+					isFirstBoundATypeVariable = true;
+				}
+			} else if (firstClassOrArrayBound.isArrayType()) { // capture of ? extends/super arrayType
+				boundsLength++;
+			} else {
+				firstClassOrArrayBound = null;
+			}
+		}
+		ReferenceBinding[] superinterfaces = typeVariableBinding.superInterfaces();
+		int superinterfacesLength = 0;
+		if (superinterfaces != null) {
+			superinterfacesLength = superinterfaces.length;
+			boundsLength += superinterfacesLength;
+		}
+		List<TypeMirror> typeBounds = new ArrayList<TypeMirror>(boundsLength);
+		if (boundsLength != 0) {
+			if (firstClassOrArrayBound != null) {
+				TypeMirror typeBinding = _env.getFactory().newTypeMirror(firstClassOrArrayBound);
+				if (typeBinding == null) {
+					return Collections.emptyList();
+				}
+				typeBounds.add(typeBinding);
+			}
+			// we need to filter out remaining bounds if the first bound is a type variable
+			if (superinterfaces != null && !isFirstBoundATypeVariable) {
+				for (int i = 0; i < superinterfacesLength; i++) {
+					TypeMirror typeBinding = _env.getFactory().newTypeMirror(superinterfaces[i]);
+					if (typeBinding == null) {
+						return Collections.emptyList();
+					}
+					typeBounds.add(typeBinding);
+				}
+			}
+		} else {
+			// at least we must add java.lang.Object
+			typeBounds.add(_env.getFactory().newTypeMirror(_env.getLookupEnvironment().getType(LookupEnvironment.JAVA_LANG_OBJECT)));
+		}
+		return Collections.unmodifiableList(typeBounds);
+	}
+
+	@Override
+	public Element getGenericElement()
+	{
+		return _declaringElement;
+	}
+
+	@Override
+	public <R, P> R accept(ElementVisitor<R, P> v, P p)
+	{
+		return v.visitTypeParameter(this, p);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * Java supports annotations on type parameters from JLS8
+	 * @see javax.lang.model.element.Element#getAnnotationMirrors()
+	 */
+	@Override
+	protected AnnotationBinding[] getAnnotationBindings()
+	{
+		return ((TypeVariableBinding)_binding).getTypeAnnotations();
+	}
+	
+	private boolean shouldEmulateJavacBug() {
+		if (_env.getLookupEnvironment().globalOptions.emulateJavacBug8031744) {
+			AnnotationBinding [] annotations = getAnnotationBindings();
+			for (int i = 0, length = annotations.length; i < length; i++) {
+				ReferenceBinding firstAnnotationType = annotations[i].getAnnotationType();
+				for (int j = i+1; j < length; j++) {
+					ReferenceBinding secondAnnotationType = annotations[j].getAnnotationType();
+					if (firstAnnotationType == secondAnnotationType) //$IDENTITY-COMPARISON$
+						return true;
+				}
+			}
+		}
+		return false;
+	}
+	
+	@Override
+	public List<? extends AnnotationMirror> getAnnotationMirrors() {
+		if (shouldEmulateJavacBug())
+			return Collections.emptyList();
+		return super.getAnnotationMirrors();
+	}
+	
+	@Override
+	@SuppressWarnings("unchecked") // for the cast to A
+	public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) {
+		if (shouldEmulateJavacBug())
+			return (A[]) Array.newInstance(annotationType, 0);
+		return super.getAnnotationsByType(annotationType);
+	}
+	
+	@Override
+	public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
+		if (shouldEmulateJavacBug())
+			return null;
+		return super.getAnnotation(annotationType);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * Always return an empty list; type parameters do not enclose other elements.
+	 * @see javax.lang.model.element.Element#getEnclosedElements()
+	 */
+	@Override
+	public List<? extends Element> getEnclosedElements()
+	{
+		return Collections.emptyList();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * Always return null.
+	 * @see javax.lang.model.element.Element#getEnclosingElement()
+	 */
+	@Override
+	public Element getEnclosingElement()
+	{
+		return getGenericElement();
+	}
+
+	@Override
+	public ElementKind getKind()
+	{
+		return ElementKind.TYPE_PARAMETER;
+	}
+
+	@Override
+	PackageElement getPackage()
+	{
+		// TODO what is the package of a type parameter?
+		return null;
+	}
+	
+	@Override
+	public String toString() {
+		return new String(_binding.readableName());
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeVariableImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeVariableImpl.java
new file mode 100644
index 0000000..32d7f0b
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypeVariableImpl.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import javax.lang.model.element.Element;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.TypeVariable;
+import javax.lang.model.type.TypeVisitor;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
+
+/**
+ * Implementation of TypeVariable
+ */
+public class TypeVariableImpl extends TypeMirrorImpl implements TypeVariable {
+	
+	TypeVariableImpl(BaseProcessingEnvImpl env, TypeVariableBinding binding) {
+		super(env, binding);
+	}
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeVariable#asElement()
+	 */
+	@Override
+	public Element asElement() {
+		return _env.getFactory().newElement(this._binding);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeVariable#getLowerBound()
+	 */
+	@Override
+	public TypeMirror getLowerBound() {
+		// TODO might be more complex than this
+		return this._env.getFactory().getNullType();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeVariable#getUpperBound()
+	 */
+	@Override
+	public TypeMirror getUpperBound() {
+		TypeVariableBinding typeVariableBinding = (TypeVariableBinding) this._binding;
+		TypeBinding firstBound = typeVariableBinding.firstBound;
+		ReferenceBinding[] superInterfaces = typeVariableBinding.superInterfaces;
+		if (firstBound == null || superInterfaces.length == 0) {
+			// no explicit bound
+			return _env.getFactory().newTypeMirror(typeVariableBinding.upperBound());
+		}
+		if (firstBound != null && superInterfaces.length == 1 && TypeBinding.equalsEquals(superInterfaces[0], firstBound)) {
+			// only one bound that is an interface
+			return _env.getFactory().newTypeMirror(typeVariableBinding.upperBound());
+		}
+		return this._env.getFactory().newTypeMirror((TypeVariableBinding) this._binding);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeMirror#accept(javax.lang.model.type.TypeVisitor, java.lang.Object)
+	 */
+	@Override
+	public <R, P> R accept(TypeVisitor<R, P> v, P p) {
+		return v.visitTypeVariable(this, p);
+	}
+	
+	@Override
+	public TypeKind getKind() {
+		return TypeKind.TYPEVAR;
+	}
+	
+	
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypesImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypesImpl.java
new file mode 100644
index 0000000..68b348b
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/TypesImpl.java
@@ -0,0 +1,479 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 BEA Systems, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    IBM Corporation - fix for 342598
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.ExecutableType;
+import javax.lang.model.type.NoType;
+import javax.lang.model.type.NullType;
+import javax.lang.model.type.PrimitiveType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.WildcardType;
+import javax.lang.model.util.Types;
+
+import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Wildcard;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ArrayBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
+
+/**
+ * Utilities for working with types (as opposed to elements).
+ * There is one of these for every ProcessingEnvironment.
+ */
+public class TypesImpl implements Types {
+
+    private final BaseProcessingEnvImpl _env;
+
+    /*
+     * The processing env creates and caches a TypesImpl.  Other clients should
+     * not create their own; they should ask the env for it.
+     */
+    public TypesImpl(BaseProcessingEnvImpl env) {
+        _env = env;
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#asElement(javax.lang.model.type.TypeMirror)
+     */
+    @Override
+    public Element asElement(TypeMirror t) {
+        switch(t.getKind()) {
+            case DECLARED :
+            case TYPEVAR :
+                return _env.getFactory().newElement(((TypeMirrorImpl)t).binding());
+            default:
+            	break;
+        }
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#asMemberOf(javax.lang.model.type.DeclaredType, javax.lang.model.element.Element)
+     */
+    @Override
+    public TypeMirror asMemberOf(DeclaredType containing, Element element) {
+//        throw new UnsupportedOperationException("NYI: TypesImpl.asMemberOf(" + containing + ", " + element + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+    	ElementImpl elementImpl = (ElementImpl) element;
+    	DeclaredTypeImpl declaredTypeImpl = (DeclaredTypeImpl) containing;
+    	ReferenceBinding referenceBinding = (ReferenceBinding) declaredTypeImpl._binding;
+    	switch(element.getKind()) {
+    		case CONSTRUCTOR :
+    		case METHOD :
+    			MethodBinding methodBinding = (MethodBinding) elementImpl._binding;
+    			if (TypeBinding.notEquals(methodBinding.declaringClass, referenceBinding)) {
+    				throw new IllegalArgumentException("element is not valid for the containing declared type"); //$NON-NLS-1$
+    			}
+    			for (MethodBinding method : referenceBinding.methods()) {
+    				if (CharOperation.equals(method.selector, methodBinding.selector)
+    						&& method.areParameterErasuresEqual(methodBinding)) {
+    					return this._env.getFactory().newTypeMirror(method);
+    				}
+    			}
+    			break;
+    		case FIELD :
+    		case ENUM_CONSTANT:
+    			FieldBinding fieldBinding = (FieldBinding) elementImpl._binding;
+    			if (TypeBinding.notEquals(fieldBinding.declaringClass, referenceBinding)) {
+    				throw new IllegalArgumentException("element is not valid for the containing declared type"); //$NON-NLS-1$
+    			}
+    			for (FieldBinding field : referenceBinding.fields()) {
+    				if (CharOperation.equals(field.name, fieldBinding.name)) {
+    					return this._env.getFactory().newTypeMirror(field);
+    				}
+    			}
+    			break;
+    		case ENUM :
+    		case ANNOTATION_TYPE :
+    		case INTERFACE :
+    		case CLASS :
+    			ReferenceBinding referenceBinding2 = (ReferenceBinding) elementImpl._binding;
+    			if (TypeBinding.notEquals(referenceBinding2.enclosingType(), referenceBinding)) {
+    				throw new IllegalArgumentException("element is not valid for the containing declared type"); //$NON-NLS-1$
+    			}
+    			for (ReferenceBinding referenceBinding3 : referenceBinding.memberTypes()) {
+    				if (CharOperation.equals(referenceBinding3.compoundName, referenceBinding3.compoundName)) {
+    					return this._env.getFactory().newTypeMirror(referenceBinding3);
+    				}
+    			}
+    			break;
+    		default:
+    			break;
+    	}
+		throw new IllegalArgumentException("element is not valid for the containing declared type: element kind " + element.getKind()); //$NON-NLS-1$
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#boxedClass(javax.lang.model.type.PrimitiveType)
+     */
+    @Override
+    public TypeElement boxedClass(PrimitiveType p) {
+        PrimitiveTypeImpl primitiveTypeImpl = (PrimitiveTypeImpl) p;
+        BaseTypeBinding baseTypeBinding = (BaseTypeBinding)primitiveTypeImpl._binding;
+        TypeBinding boxed = _env.getLookupEnvironment().computeBoxingType(baseTypeBinding);
+        return (TypeElement) _env.getFactory().newElement(boxed);
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#capture(javax.lang.model.type.TypeMirror)
+     */
+    @Override
+    public TypeMirror capture(TypeMirror t) {
+        throw new UnsupportedOperationException("NYI: TypesImpl.capture(...)"); //$NON-NLS-1$
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#contains(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror)
+     */
+    @Override
+    public boolean contains(TypeMirror t1, TypeMirror t2) {
+    	switch(t1.getKind()) {
+    		case EXECUTABLE :
+    		case PACKAGE :
+    			throw new IllegalArgumentException("Executable and package are illegal argument for Types.contains(..)"); //$NON-NLS-1$
+    		default:
+    			break;
+    	}
+    	switch(t2.getKind()) {
+    		case EXECUTABLE :
+    		case PACKAGE :
+    			throw new IllegalArgumentException("Executable and package are illegal argument for Types.contains(..)"); //$NON-NLS-1$
+    		default:
+    			break;
+    	}
+        throw new UnsupportedOperationException("NYI: TypesImpl.contains(" + t1 + ", " + t2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#directSupertypes(javax.lang.model.type.TypeMirror)
+     */
+    @Override
+    public List<? extends TypeMirror> directSupertypes(TypeMirror t) {
+        switch(t.getKind()) {
+            case PACKAGE :
+            case EXECUTABLE :
+                throw new IllegalArgumentException("Invalid type mirror for directSupertypes"); //$NON-NLS-1$
+            default:
+                break;
+        }
+        TypeMirrorImpl typeMirrorImpl = (TypeMirrorImpl) t;
+        Binding binding = typeMirrorImpl._binding;
+        if (binding instanceof ReferenceBinding) {
+        	ReferenceBinding referenceBinding = (ReferenceBinding) binding;
+        	ArrayList<TypeMirror> list = new ArrayList<TypeMirror>();
+        	ReferenceBinding superclass = referenceBinding.superclass();
+			if (superclass != null) {
+        		list.add(this._env.getFactory().newTypeMirror(superclass));
+        	}
+			for (ReferenceBinding interfaceBinding : referenceBinding.superInterfaces()) {
+        		list.add(this._env.getFactory().newTypeMirror(interfaceBinding));
+			}
+			return Collections.unmodifiableList(list);
+        }
+        return Collections.emptyList();
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#erasure(javax.lang.model.type.TypeMirror)
+     */
+    @Override
+    public TypeMirror erasure(TypeMirror t) {
+    	TypeMirrorImpl typeMirrorImpl = (TypeMirrorImpl) t;
+    	Binding binding = typeMirrorImpl._binding;
+    	if (binding instanceof ReferenceBinding) {
+    		return _env.getFactory().newTypeMirror(((ReferenceBinding) binding).erasure());
+    	}
+    	if (binding instanceof ArrayBinding) {
+    		TypeBinding typeBinding = (TypeBinding) binding;
+    		return _env.getFactory().newTypeMirror(
+    				this._env.getLookupEnvironment().createArrayType(
+    						typeBinding.leafComponentType().erasure(),
+    						typeBinding.dimensions()));
+    	}
+    	return t;
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#getArrayType(javax.lang.model.type.TypeMirror)
+     */
+    @Override
+    public ArrayType getArrayType(TypeMirror componentType) {
+        TypeMirrorImpl typeMirrorImpl = (TypeMirrorImpl) componentType;
+        TypeBinding typeBinding = (TypeBinding) typeMirrorImpl._binding;
+        return (ArrayType) _env.getFactory().newTypeMirror(
+        		this._env.getLookupEnvironment().createArrayType(
+        				typeBinding.leafComponentType(),
+        				typeBinding.dimensions() + 1));
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#getDeclaredType(javax.lang.model.element.TypeElement, javax.lang.model.type.TypeMirror[])
+     */
+    @Override
+    public DeclaredType getDeclaredType(TypeElement typeElem, TypeMirror... typeArgs) {
+        int typeArgsLength = typeArgs.length;
+        TypeElementImpl typeElementImpl = (TypeElementImpl) typeElem;
+        ReferenceBinding referenceBinding = (ReferenceBinding) typeElementImpl._binding;
+        TypeVariableBinding[] typeVariables = referenceBinding.typeVariables();
+        int typeVariablesLength = typeVariables.length;
+        if (typeArgsLength == 0) {
+            if (referenceBinding.isGenericType()) {
+                // must return a raw type
+                return (DeclaredType) _env.getFactory().newTypeMirror(this._env.getLookupEnvironment().createRawType(referenceBinding, null));
+            }
+            return (DeclaredType)typeElem.asType();
+        } else if (typeArgsLength != typeVariablesLength) {
+            throw new IllegalArgumentException("Number of typeArguments doesn't match the number of formal parameters of typeElem"); //$NON-NLS-1$
+        }
+        TypeBinding[] typeArguments = new TypeBinding[typeArgsLength];
+        for (int i = 0; i < typeArgsLength; i++) {
+            TypeMirrorImpl typeMirrorImpl = (TypeMirrorImpl) typeArgs[i];
+            Binding binding = typeMirrorImpl._binding;
+            if (!(binding instanceof TypeBinding)) {
+                throw new IllegalArgumentException("Invalid type argument: " + typeMirrorImpl); //$NON-NLS-1$
+            }
+            typeArguments[i] = (TypeBinding) binding;
+        }
+        return (DeclaredType) _env.getFactory().newTypeMirror(
+                this._env.getLookupEnvironment().createParameterizedType(referenceBinding, typeArguments, null));
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#getDeclaredType(javax.lang.model.type.DeclaredType, javax.lang.model.element.TypeElement, javax.lang.model.type.TypeMirror[])
+     */
+    @Override
+    public DeclaredType getDeclaredType(DeclaredType containing, TypeElement typeElem,
+            TypeMirror... typeArgs) {
+        int typeArgsLength = typeArgs.length;
+        TypeElementImpl typeElementImpl = (TypeElementImpl) typeElem;
+        ReferenceBinding referenceBinding = (ReferenceBinding) typeElementImpl._binding;
+        TypeVariableBinding[] typeVariables = referenceBinding.typeVariables();
+        int typeVariablesLength = typeVariables.length;
+        DeclaredTypeImpl declaredTypeImpl = (DeclaredTypeImpl) containing;
+        ReferenceBinding enclosingType = (ReferenceBinding) declaredTypeImpl._binding;
+        if (typeArgsLength == 0) {
+            if (referenceBinding.isGenericType()) {
+                // must return a raw type
+                return (DeclaredType) _env.getFactory().newTypeMirror(this._env.getLookupEnvironment().createRawType(referenceBinding, enclosingType));
+            }
+            // TODO (see how to create a member type binding
+            throw new UnsupportedOperationException("NYI: TypesImpl.getDeclaredType(...) for member types"); //$NON-NLS-1$
+        } else if (typeArgsLength != typeVariablesLength) {
+            throw new IllegalArgumentException("Number of typeArguments doesn't match the number of formal parameters of typeElem"); //$NON-NLS-1$
+        }
+        TypeBinding[] typeArguments = new TypeBinding[typeArgsLength];
+        for (int i = 0; i < typeArgsLength; i++) {
+            TypeMirrorImpl typeMirrorImpl = (TypeMirrorImpl) typeArgs[i];
+            Binding binding = typeMirrorImpl._binding;
+            if (!(binding instanceof TypeBinding)) {
+                throw new IllegalArgumentException("Invalid type for a type arguments : " + typeMirrorImpl); //$NON-NLS-1$
+            }
+            typeArguments[i] = (TypeBinding) binding;
+        }
+        return (DeclaredType) _env.getFactory().newTypeMirror(
+                this._env.getLookupEnvironment().createParameterizedType(referenceBinding, typeArguments, enclosingType));
+    }
+
+    @Override
+    public NoType getNoType(TypeKind kind) {
+        return _env.getFactory().getNoType(kind);
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#getNullType()
+     */
+    @Override
+    public NullType getNullType() {
+        return _env.getFactory().getNullType();
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#getPrimitiveType(javax.lang.model.type.TypeKind)
+     */
+    @Override
+    public PrimitiveType getPrimitiveType(TypeKind kind) {
+        return _env.getFactory().getPrimitiveType(kind);
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#getWildcardType(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror)
+     */
+    @Override
+    public WildcardType getWildcardType(TypeMirror extendsBound, TypeMirror superBound) {
+        if (extendsBound != null && superBound != null) {
+            throw new IllegalArgumentException("Extends and super bounds cannot be set at the same time"); //$NON-NLS-1$
+        }
+        if (extendsBound != null) {
+            TypeMirrorImpl extendsBoundMirrorType = (TypeMirrorImpl) extendsBound;
+            TypeBinding typeBinding = (TypeBinding) extendsBoundMirrorType._binding;
+            return (WildcardType) _env.getFactory().newTypeMirror(
+            		this._env.getLookupEnvironment().createWildcard(
+	                    null,
+	                    0,
+	                    typeBinding,
+	                    null,
+	                    Wildcard.EXTENDS));
+        }
+        if (superBound != null) {
+            TypeMirrorImpl superBoundMirrorType = (TypeMirrorImpl) superBound;
+            TypeBinding typeBinding = (TypeBinding) superBoundMirrorType._binding;
+            return new WildcardTypeImpl(_env, this._env.getLookupEnvironment().createWildcard(
+                    null,
+                    0,
+                    typeBinding,
+                    null,
+                    Wildcard.SUPER));
+        }
+        return new WildcardTypeImpl(_env, this._env.getLookupEnvironment().createWildcard(
+                null,
+                0,
+                null,
+                null,
+                Wildcard.UNBOUND));
+    }
+
+    /**
+     * @return true if a value of type t1 can be assigned to a variable of type t2, i.e., t2 = t1.
+     */
+    @Override
+    public boolean isAssignable(TypeMirror t1, TypeMirror t2) {
+        if (!(t1 instanceof TypeMirrorImpl) || !(t2 instanceof TypeMirrorImpl)) {
+            return false;
+        }
+        Binding b1 = ((TypeMirrorImpl)t1).binding();
+        Binding b2 = ((TypeMirrorImpl)t2).binding();
+        if (!(b1 instanceof TypeBinding) || !(b2 instanceof TypeBinding)) {
+            // package, method, import, etc.
+            throw new IllegalArgumentException();
+        }
+        if (((TypeBinding)b1).isCompatibleWith((TypeBinding)b2)) {
+            return true;
+        }
+
+        TypeBinding convertedType = _env.getLookupEnvironment().computeBoxingType((TypeBinding)b1);
+        return null != convertedType && convertedType.isCompatibleWith((TypeBinding)b2);
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#isSameType(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror)
+     */
+    @Override
+    public boolean isSameType(TypeMirror t1, TypeMirror t2) {
+    	if (t1.getKind() == TypeKind.WILDCARD || t2.getKind() == TypeKind.WILDCARD) {
+            // Wildcard types are never equal, according to the spec of this method
+    		return false;
+    	}
+        if (t1 == t2) {
+            return true;
+        }
+        if (!(t1 instanceof TypeMirrorImpl) || !(t2 instanceof TypeMirrorImpl)) {
+            return false;
+        }
+        Binding b1 = ((TypeMirrorImpl)t1).binding();
+        Binding b2 = ((TypeMirrorImpl)t2).binding();
+
+        if (b1 == b2) {
+            return true;
+        }
+        if (!(b1 instanceof TypeBinding) || !(b2 instanceof TypeBinding)) {
+            return false;
+        }
+        TypeBinding type1 = ((TypeBinding) b1);
+        TypeBinding type2 = ((TypeBinding) b2);
+        if (TypeBinding.equalsEquals(type1,  type2))
+        	return true;
+        return CharOperation.equals(type1.computeUniqueKey(), type2.computeUniqueKey());
+    }
+
+    /* (non-Javadoc)
+     * @see javax.lang.model.util.Types#isSubsignature(javax.lang.model.type.ExecutableType, javax.lang.model.type.ExecutableType)
+     */
+    @Override
+    public boolean isSubsignature(ExecutableType m1, ExecutableType m2) {
+		MethodBinding methodBinding1 = (MethodBinding) ((ExecutableTypeImpl) m1)._binding;
+		MethodBinding methodBinding2 = (MethodBinding) ((ExecutableTypeImpl) m2)._binding;
+		if (!CharOperation.equals(methodBinding1.selector, methodBinding2.selector))
+			return false;
+		return methodBinding1.areParameterErasuresEqual(methodBinding2) && methodBinding1.areTypeVariableErasuresEqual(methodBinding2);
+	}
+
+    /**
+     * @return true if t1 is a subtype of t2, or if t1 == t2.
+     */
+    @Override
+    public boolean isSubtype(TypeMirror t1, TypeMirror t2) {
+    	if (t1 instanceof NoTypeImpl) {
+    		if (t2 instanceof NoTypeImpl) {
+    			return ((NoTypeImpl) t1).getKind() == ((NoTypeImpl) t2).getKind();
+    		}
+    		return false;
+    	} else if (t2 instanceof NoTypeImpl) {
+    		return false;
+    	}
+        if (!(t1 instanceof TypeMirrorImpl) || !(t2 instanceof TypeMirrorImpl)) {
+            return false;
+        }
+        if (t1 == t2) {
+            return true;
+        }
+        Binding b1 = ((TypeMirrorImpl)t1).binding();
+        Binding b2 = ((TypeMirrorImpl)t2).binding();
+        if (b1 == b2) {
+            return true;
+        }
+        if (!(b1 instanceof TypeBinding) || !(b2 instanceof TypeBinding)) {
+            // package, method, import, etc.
+            return false;
+        }
+        if (b1.kind() == Binding.BASE_TYPE || b2.kind() == Binding.BASE_TYPE) {
+            if (b1.kind() != b2.kind()) {
+                return false;
+            }
+            else {
+                // for primitives, compatibility implies subtype
+                return ((TypeBinding)b1).isCompatibleWith((TypeBinding)b2);
+            }
+        }
+        return ((TypeBinding)b1).isCompatibleWith((TypeBinding)b2);
+    }
+
+    @Override
+    public PrimitiveType unboxedType(TypeMirror t) {
+        if (!(((TypeMirrorImpl)t)._binding instanceof ReferenceBinding)) {
+            // Not an unboxable type - could be primitive, array, not a type at all, etc.
+            throw new IllegalArgumentException("Given type mirror cannot be unboxed"); //$NON-NLS-1$
+        }
+        ReferenceBinding boxed = (ReferenceBinding)((TypeMirrorImpl)t)._binding;
+        TypeBinding unboxed = _env.getLookupEnvironment().computeBoxingType(boxed);
+        if (unboxed.kind() != Binding.BASE_TYPE) {
+            // No boxing conversion was found
+            throw new IllegalArgumentException();
+        }
+        return (PrimitiveType) _env.getFactory().newTypeMirror((BaseTypeBinding)unboxed);
+    }
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/VariableElementImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/VariableElementImpl.java
new file mode 100644
index 0000000..a773b1b
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/VariableElementImpl.java
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 BEA Systems, Inc. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *    
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ElementVisitor;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.VariableElement;
+
+import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.Constant;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AptBinaryLocalVariableBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AptSourceLocalVariableBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeIds;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.VariableBinding;
+
+/**
+ * Implementation of VariableElement, which represents a a field, enum constant, 
+ * method or constructor parameter, local variable, or exception parameter.
+ */
+public class VariableElementImpl extends ElementImpl implements VariableElement {
+
+	/**
+	 * @param binding might be a FieldBinding (for a field) or a LocalVariableBinding (for a method param)
+	 */
+	VariableElementImpl(BaseProcessingEnvImpl env, VariableBinding binding) {
+		super(env, binding);
+	}
+	
+	@Override
+	public <R, P> R accept(ElementVisitor<R, P> v, P p)
+	{
+		return v.visitVariable(this, p);
+	}
+
+	@Override
+	protected AnnotationBinding[] getAnnotationBindings()
+	{
+		return ((VariableBinding)_binding).getAnnotations();
+	}
+
+	@Override
+	public Object getConstantValue() {
+		VariableBinding variableBinding = (VariableBinding) _binding;
+		Constant constant = variableBinding.constant();
+		if (constant == null || constant == Constant.NotAConstant) return null;
+		TypeBinding type = variableBinding.type;
+		switch (type.id) {
+			case TypeIds.T_boolean:
+				return constant.booleanValue();
+			case TypeIds.T_byte:
+				return constant.byteValue();
+			case TypeIds.T_char:
+				return constant.charValue();
+			case TypeIds.T_double:
+				return constant.doubleValue();
+			case TypeIds.T_float:
+				return constant.floatValue();
+			case TypeIds.T_int:
+				return constant.intValue();
+			case TypeIds.T_JavaLangString:
+				return constant.stringValue();
+			case TypeIds.T_long:
+				return constant.longValue();
+			case TypeIds.T_short:
+				return constant.shortValue();
+		}
+		return null;
+	}
+	
+	@Override
+	public List<? extends Element> getEnclosedElements() {
+		return Collections.emptyList();
+	}
+
+	@Override
+	public Element getEnclosingElement() {
+		if (_binding instanceof FieldBinding) {
+			return _env.getFactory().newElement(((FieldBinding)_binding).declaringClass);
+		}
+		else if (_binding instanceof AptSourceLocalVariableBinding){
+			return _env.getFactory().newElement(((AptSourceLocalVariableBinding) _binding).methodBinding);
+		} else if (_binding instanceof AptBinaryLocalVariableBinding) {
+			return _env.getFactory().newElement(((AptBinaryLocalVariableBinding) _binding).methodBinding);
+		}
+		return null;
+	}
+
+	@Override
+	public ElementKind getKind() {
+		if (_binding instanceof FieldBinding) {
+			if (((FieldBinding)_binding).declaringClass.isEnum()) {
+				return ElementKind.ENUM_CONSTANT;
+			}
+			else {
+				return ElementKind.FIELD;
+			}
+		}
+		else {
+			return ElementKind.PARAMETER;
+		}
+	}
+
+	@Override
+	public Set<Modifier> getModifiers()
+	{
+		if (_binding instanceof VariableBinding) {
+			return Factory.getModifiers(((VariableBinding)_binding).modifiers, getKind());
+		}
+		return Collections.emptySet();
+	}
+
+	@Override
+	PackageElement getPackage()
+	{
+		if (_binding instanceof FieldBinding) {
+			PackageBinding pkgBinding = ((FieldBinding)_binding).declaringClass.fPackage;
+			return _env.getFactory().newPackageElement(pkgBinding);
+		}
+		else {
+			// TODO: what is the package of a method parameter?
+			throw new UnsupportedOperationException("NYI: VariableElmentImpl.getPackage() for method parameter"); //$NON-NLS-1$
+		}
+	}
+	
+	@Override
+	public Name getSimpleName() {
+		return new NameImpl(((VariableBinding)_binding).name);
+	}
+
+	@Override
+	public boolean hides(Element hiddenElement)
+	{
+		if (_binding instanceof FieldBinding) {
+			if (!(((ElementImpl)hiddenElement)._binding instanceof FieldBinding)) {
+				return false;
+			}
+			FieldBinding hidden = (FieldBinding)((ElementImpl)hiddenElement)._binding;
+			if (hidden.isPrivate()) {
+				return false;
+			}
+			FieldBinding hider = (FieldBinding)_binding;
+			if (hidden == hider) {
+				return false;
+			}
+			if (!CharOperation.equals(hider.name, hidden.name)) {
+				return false;
+			}
+			return null != hider.declaringClass.findSuperTypeOriginatingFrom(hidden.declaringClass);
+		}
+		// TODO: should we implement hides() for method parameters?
+		return false;
+	}
+
+	@Override
+	public String toString() {
+		return new String(((VariableBinding) _binding).name);
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/WildcardTypeImpl.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/WildcardTypeImpl.java
new file mode 100644
index 0000000..5847782
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/model/WildcardTypeImpl.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.model;
+
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.TypeVisitor;
+import javax.lang.model.type.WildcardType;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Wildcard;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.WildcardBinding;
+
+/**
+ * Implementation of the WildcardType
+ */
+public class WildcardTypeImpl extends TypeMirrorImpl implements WildcardType {
+	
+	WildcardTypeImpl(BaseProcessingEnvImpl env, WildcardBinding binding) {
+		super(env, binding);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.WildcardType#getExtendsBound()
+	 */
+	@Override
+	public TypeMirror getExtendsBound() {
+		WildcardBinding wildcardBinding = (WildcardBinding) this._binding;
+		if (wildcardBinding.boundKind != Wildcard.EXTENDS) return null;
+		TypeBinding bound = wildcardBinding.bound;
+		if (bound == null) return null;
+		return _env.getFactory().newTypeMirror(bound);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.TypeMirror#getKind()
+	 */
+	@Override
+	public TypeKind getKind() {
+		return TypeKind.WILDCARD;
+	}
+	/* (non-Javadoc)
+	 * @see javax.lang.model.type.WildcardType#getSuperBound()
+	 */
+	@Override
+	public TypeMirror getSuperBound() {
+		WildcardBinding wildcardBinding = (WildcardBinding) this._binding;
+		if (wildcardBinding.boundKind != Wildcard.SUPER) return null;
+		TypeBinding bound = wildcardBinding.bound;
+		if (bound == null) return null;
+		return _env.getFactory().newTypeMirror(bound);
+	}
+	
+	@Override
+	public <R, P> R accept(TypeVisitor<R, P> v, P p) {
+		return v.visitWildcard(this, p);
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Archive.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Archive.java
new file mode 100644
index 0000000..fdd7f04
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Archive.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+/**
+ * Used as a zip file cache.
+ */
+public class Archive {
+
+	public static final Archive UNKNOWN_ARCHIVE = new Archive();
+	
+	ZipFile zipFile;
+	File file;
+	protected Hashtable<String, ArrayList<String>> packagesCache;
+	
+	private Archive() {
+	}
+
+	public Archive(File file) throws ZipException, IOException {
+		this.file = file;
+		this.zipFile = new ZipFile(file);
+		initialize();		
+	}
+
+	private void initialize() {
+		// initialize packages
+		this.packagesCache = new Hashtable<String, ArrayList<String>>();
+		nextEntry : for (Enumeration<? extends ZipEntry> e = this.zipFile.entries(); e.hasMoreElements(); ) {
+			String fileName = ((ZipEntry) e.nextElement()).getName();
+
+			// add the package name & all of its parent packages
+			int last = fileName.lastIndexOf('/');
+			// extract the package name
+			String packageName = fileName.substring(0, last + 1);
+			String typeName = fileName.substring(last + 1);
+			ArrayList<String> types = this.packagesCache.get(packageName);
+			if (types == null) {
+				// might be empty if this is a directory entry
+				if (typeName.length() == 0) {
+					continue nextEntry;
+				}
+				types = new ArrayList<String>();
+				types.add(typeName);
+				this.packagesCache.put(packageName, types);
+			} else {
+				types.add(typeName);
+			}
+		}
+	}
+	
+	public ArchiveFileObject getArchiveFileObject(String entryName, Charset charset) {
+		return new ArchiveFileObject(this.file, this.zipFile, entryName, charset);
+	}
+	
+	public boolean contains(String entryName) {
+		return this.zipFile.getEntry(entryName) != null;
+	}
+	
+	public Set<String> allPackages() {
+		if (this.packagesCache == null) {
+			this.initialize();
+		}
+		return this.packagesCache.keySet();
+	}
+	
+	public ArrayList<String> getTypes(String packageName) {
+		// package name is expected to ends with '/'
+		return this.packagesCache.get(packageName);
+	}
+	
+	public void flush() {
+		this.packagesCache = null;
+	}
+
+	public void close() {
+		try {
+			if (this.zipFile != null) this.zipFile.close();
+			this.packagesCache = null;
+		} catch (IOException e) {
+			// ignore
+		}
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ArchiveFileObject.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ArchiveFileObject.java
new file mode 100644
index 0000000..488c709
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ArchiveFileObject.java
@@ -0,0 +1,222 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.charset.Charset;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.NestingKind;
+import javax.tools.JavaFileObject;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
+
+/**
+ * Implementation of a Java file object that corresponds to an entry in a zip/jar file
+ */
+public class ArchiveFileObject implements JavaFileObject {
+	private ZipEntry zipEntry;
+	private ZipFile zipFile;
+	private String entryName;
+	private File file;
+	private Charset charset;
+	
+	public ArchiveFileObject(File file, ZipFile zipFile, String entryName, Charset charset) {
+		this.zipFile = zipFile;
+		this.zipEntry = zipFile.getEntry(entryName);
+		this.entryName = entryName;
+		this.file = file;
+		this.charset = charset;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileObject#getAccessLevel()
+	 */
+	public Modifier getAccessLevel() {
+		// cannot express multiple modifier
+		if (getKind() != Kind.CLASS) {
+			return null;
+		}
+		ClassFileReader reader = null;
+		try {
+			reader = ClassFileReader.read(this.zipFile, this.entryName);
+		} catch (ClassFormatException e) {
+			// ignore
+		} catch (IOException e) {
+			// ignore
+		}
+		if (reader == null) {
+			return null;
+		}
+		final int accessFlags = reader.accessFlags();
+		if ((accessFlags & ClassFileConstants.AccPublic) != 0) {
+			return Modifier.PUBLIC;
+		}
+		if ((accessFlags & ClassFileConstants.AccAbstract) != 0) {
+			return Modifier.ABSTRACT;
+		}
+		if ((accessFlags & ClassFileConstants.AccFinal) != 0) {
+			return Modifier.FINAL;
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileObject#getKind()
+	 */
+	public Kind getKind() {
+		String name = this.entryName.toLowerCase();
+		if (name.endsWith(Kind.CLASS.extension)) {
+			return Kind.CLASS;
+		} else if (name.endsWith(Kind.SOURCE.extension)) {
+			return Kind.SOURCE;
+		} else if (name.endsWith(Kind.HTML.extension)) {
+			return Kind.HTML;
+		}
+		return Kind.OTHER;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileObject#getNestingKind()
+	 */
+	public NestingKind getNestingKind() {
+		switch(getKind()) {
+			case SOURCE :
+				return NestingKind.TOP_LEVEL;
+			case CLASS :
+        		ClassFileReader reader = null;
+        		try {
+        			reader = ClassFileReader.read(this.zipFile, this.entryName);
+        		} catch (ClassFormatException e) {
+        			// ignore
+        		} catch (IOException e) {
+        			// ignore
+        		}
+        		if (reader == null) {
+        			return null;
+        		}
+        		if (reader.isAnonymous()) {
+        			return NestingKind.ANONYMOUS;
+        		}
+        		if (reader.isLocal()) {
+        			return NestingKind.LOCAL;
+        		}
+        		if (reader.isMember()) {
+        			return NestingKind.MEMBER;
+        		}
+        		return NestingKind.TOP_LEVEL;
+        	default:
+        		return null;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileObject#isNameCompatible(java.lang.String, javax.tools.JavaFileObject.Kind)
+	 */
+	public boolean isNameCompatible(String simpleName, Kind kind) {
+		return this.zipEntry.getName().endsWith(simpleName + kind.extension);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#delete()
+	 */
+	public boolean delete() {
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean equals(Object o) {
+		if (!(o instanceof ArchiveFileObject)) {
+			return false;
+		}
+		ArchiveFileObject archiveFileObject = (ArchiveFileObject) o;
+		return archiveFileObject.toUri().equals(this.toUri());
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#getCharContent(boolean)
+	 */
+	public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
+		if (getKind() == Kind.SOURCE) {
+			return Util.getCharContents(this, ignoreEncodingErrors, org.aspectj.org.eclipse.jdt.internal.compiler.util.Util.getZipEntryByteContent(this.zipEntry, this.zipFile), this.charset.name());
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#getLastModified()
+	 */
+	public long getLastModified() {
+		return this.zipEntry.getTime(); // looks the closest from the last modification
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#getName()
+	 */
+	public String getName() {
+		return this.zipEntry.getName();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#openInputStream()
+	 */
+	public InputStream openInputStream() throws IOException {
+		return this.zipFile.getInputStream(this.zipEntry);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#openOutputStream()
+	 */
+	public OutputStream openOutputStream() throws IOException {
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#openReader(boolean)
+	 */
+	public Reader openReader(boolean ignoreEncodingErrors) throws IOException {
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#openWriter()
+	 */
+	public Writer openWriter() throws IOException {
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#toUri()
+	 */
+	public URI toUri() {
+		try {
+			return new URI("jar:" + this.file.toURI().getPath() + "!" + this.zipEntry.getName()); //$NON-NLS-1$//$NON-NLS-2$
+		} catch (URISyntaxException e) {
+			return null;
+		}
+	}
+	
+
+    @Override
+    public String toString() {
+        return this.file.getAbsolutePath() + "[" + this.zipEntry.getName() + "]";//$NON-NLS-1$//$NON-NLS-2$
+    }	
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileManager.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileManager.java
new file mode 100644
index 0000000..cc8c787
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileManager.java
@@ -0,0 +1,1147 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.charset.Charset;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.zip.ZipException;
+
+import javax.tools.FileObject;
+import javax.tools.JavaFileObject;
+import javax.tools.StandardJavaFileManager;
+import javax.tools.StandardLocation;
+import javax.tools.JavaFileObject.Kind;
+
+import org.aspectj.org.eclipse.jdt.core.compiler.IProblem;
+import org.aspectj.org.eclipse.jdt.internal.compiler.batch.FileSystem;
+import org.aspectj.org.eclipse.jdt.internal.compiler.batch.Main;
+import org.aspectj.org.eclipse.jdt.internal.compiler.batch.Main.ResourceBundleFactory;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
+import org.aspectj.org.eclipse.jdt.internal.compiler.env.AccessRestriction;
+import org.aspectj.org.eclipse.jdt.internal.compiler.env.AccessRule;
+import org.aspectj.org.eclipse.jdt.internal.compiler.env.AccessRuleSet;
+import org.aspectj.org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
+
+/**
+ * Implementation of the Standard Java File Manager
+ */
+public class EclipseFileManager implements StandardJavaFileManager {
+	private static final String NO_EXTENSION = "";//$NON-NLS-1$
+	static final int HAS_EXT_DIRS = 1;
+	static final int HAS_BOOTCLASSPATH = 2;
+	static final int HAS_ENDORSED_DIRS = 4;
+	static final int HAS_PROCESSORPATH = 8;
+
+	Map<File, Archive> archivesCache;
+	Charset charset;
+	Locale locale;
+	Map<String, Iterable<? extends File>> locations;
+	int flags;
+	public ResourceBundle bundle;
+	
+	public EclipseFileManager(Locale locale, Charset charset) {
+		this.locale = locale == null ? Locale.getDefault() : locale;
+		this.charset = charset == null ? Charset.defaultCharset() : charset;
+		this.locations = new HashMap<String, Iterable<? extends File>>();
+		this.archivesCache = new HashMap<File, Archive>();
+		try {
+			this.setLocation(StandardLocation.PLATFORM_CLASS_PATH, getDefaultBootclasspath());
+			Iterable<? extends File> defaultClasspath = getDefaultClasspath();
+			this.setLocation(StandardLocation.CLASS_PATH, defaultClasspath);
+			this.setLocation(StandardLocation.ANNOTATION_PROCESSOR_PATH, defaultClasspath);
+		} catch (IOException e) {
+			// ignore
+		}
+		try {
+			this.bundle = ResourceBundleFactory.getBundle(this.locale);
+		} catch(MissingResourceException e) {
+			System.out.println("Missing resource : " + Main.bundleName.replace('.', '/') + ".properties for locale " + locale); //$NON-NLS-1$//$NON-NLS-2$
+		}
+	}
+
+	private void addFiles(File[][] jars, ArrayList<File> files) {
+		if (jars != null) {
+			for (File[] currentJars : jars) {
+				if (currentJars != null) {
+					for (File currentJar : currentJars) {
+						if (currentJar.exists()) {
+							files.add(currentJar);
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	
+	private void addFilesFrom(File javaHome, String propertyName, String defaultPath, ArrayList<File> files) {
+		String extdirsStr = System.getProperty(propertyName);
+		File[] directoriesToCheck = null;
+		if (extdirsStr == null) {
+			if (javaHome != null) {
+				directoriesToCheck = new File[] { new File(javaHome, defaultPath) };
+			}
+		} else {
+			StringTokenizer tokenizer = new StringTokenizer(extdirsStr, File.pathSeparator);
+			ArrayList<String> paths = new ArrayList<String>();
+			while (tokenizer.hasMoreTokens()) {
+				paths.add(tokenizer.nextToken());
+			}
+			if (paths.size() != 0) {
+				directoriesToCheck = new File[paths.size()];
+				for (int i = 0; i < directoriesToCheck.length; i++)  {
+					directoriesToCheck[i] = new File(paths.get(i));
+				}
+			}
+		}
+		if (directoriesToCheck != null) {
+			addFiles(Main.getLibrariesFiles(directoriesToCheck), files);
+		}
+		
+	}
+	
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileManager#close()
+	 */
+	public void close() throws IOException {
+		this.locations = null;
+		for (Archive archive : this.archivesCache.values()) {
+			archive.close();
+		}
+	}
+	
+	private void collectAllMatchingFiles(File file, String normalizedPackageName, Set<Kind> kinds, boolean recurse, ArrayList<JavaFileObject> collector) {
+		if (!isArchive(file)) {
+			// we must have a directory
+			File currentFile = new File(file, normalizedPackageName);
+			if (!currentFile.exists()) return;
+			String path;
+			try {
+				path = currentFile.getCanonicalPath();
+			} catch (IOException e) {
+				return;
+			}
+			if (File.separatorChar == '/') {
+				if (!path.endsWith(normalizedPackageName)) return;
+			} else if (!path.endsWith(normalizedPackageName.replace('/', File.separatorChar))) return;
+			File[] files = currentFile.listFiles();
+			if (files != null) {
+				// this was a directory
+				for (File f : files) {
+					if (f.isDirectory() && recurse) {
+						collectAllMatchingFiles(file, normalizedPackageName + '/' + f.getName(), kinds, recurse, collector);
+					} else {
+						final Kind kind = getKind(f);
+						if (kinds.contains(kind)) {
+							collector.add(new EclipseFileObject(normalizedPackageName + f.getName(), f.toURI(), kind, this.charset));
+						}
+					}
+				}
+			}
+		} else {
+			Archive archive = this.getArchive(file);
+			String key = normalizedPackageName;
+			if (!normalizedPackageName.endsWith("/")) {//$NON-NLS-1$
+				key += '/';
+			}
+			// we have an archive file
+			if (recurse) {
+				for (String packageName : archive.allPackages()) {
+					if (packageName.startsWith(key)) {
+						ArrayList<String> types = archive.getTypes(packageName);
+						if (types != null) {
+							for (String typeName : types) {
+								final Kind kind = getKind(getExtension(typeName));
+								if (kinds.contains(kind)) {
+									collector.add(archive.getArchiveFileObject(packageName + typeName, this.charset));
+								}
+							}
+						}
+					}
+				}
+			} else {
+				ArrayList<String> types = archive.getTypes(key);
+				if (types != null) {
+					for (String typeName : types) {
+						final Kind kind = getKind(typeName);
+						if (kinds.contains(kind)) {
+							collector.add(archive.getArchiveFileObject(normalizedPackageName + typeName, this.charset));
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private Iterable<? extends File> concatFiles(Iterable<? extends File> iterable, Iterable<? extends File> iterable2) {
+		ArrayList<File> list = new ArrayList<File>();
+		if (iterable2 == null) return iterable;
+		for (Iterator<? extends File> iterator = iterable.iterator(); iterator.hasNext(); ) {
+			list.add(iterator.next());
+		}
+		for (Iterator<? extends File> iterator = iterable2.iterator(); iterator.hasNext(); ) {
+			list.add(iterator.next());
+		}
+		return list;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileManager#flush()
+	 */
+	public void flush() throws IOException {
+		for (Archive archive : this.archivesCache.values()) {
+			archive.flush();
+		}
+	}
+
+	private Archive getArchive(File f) {
+		// check the archive (jar/zip) cache
+		Archive archive = this.archivesCache.get(f);
+		if (archive == null) {
+			// create a new archive
+			if (f.exists()) {
+    			try {
+    				archive = new Archive(f);
+    			} catch (ZipException e) {
+    				// ignore
+    			} catch (IOException e) {
+    				// ignore
+    			}
+    			if (archive != null) {
+    				this.archivesCache.put(f, archive);
+    			} else {
+    				this.archivesCache.put(f, Archive.UNKNOWN_ARCHIVE);
+    			}
+			} else {
+				this.archivesCache.put(f, Archive.UNKNOWN_ARCHIVE);
+			}
+		}
+		return archive;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileManager#getClassLoader(javax.tools.JavaFileManager.Location)
+	 */
+	public ClassLoader getClassLoader(Location location) {
+		Iterable<? extends File> files = getLocation(location);
+		if (files == null) {
+			// location is unknown
+			return null;
+		}
+		ArrayList<URL> allURLs = new ArrayList<URL>();
+		for (File f : files) {
+			try {
+				allURLs.add(f.toURI().toURL());
+			} catch (MalformedURLException e) {
+				// the url is malformed - this should not happen
+				throw new RuntimeException(e);
+			}
+		}
+		URL[] result = new URL[allURLs.size()];
+		return new URLClassLoader(allURLs.toArray(result), getClass().getClassLoader());
+	}
+
+	private Iterable<? extends File> getPathsFrom(String path) {
+		ArrayList<FileSystem.Classpath> paths = new ArrayList<FileSystem.Classpath>();
+		ArrayList<File> files = new ArrayList<File>();
+		try {
+			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.name(), false, false);
+		} catch (IllegalArgumentException e) {
+			return null;
+		}
+		for (FileSystem.Classpath classpath : paths) {
+			files.add(new File(classpath.getPath()));
+		}
+		return files;
+	}
+
+	Iterable<? extends File> getDefaultBootclasspath() {
+		ArrayList<File> files = new ArrayList<File>();
+		String javaversion = System.getProperty("java.version");//$NON-NLS-1$
+		if(javaversion.length() > 3)
+			javaversion = javaversion.substring(0, 3);
+		long jdkLevel = CompilerOptions.versionToJdkLevel(javaversion);
+		if (jdkLevel < ClassFileConstants.JDK1_6) {
+			// wrong jdk - 1.6 or above is required
+			return null;
+		}
+
+		/*
+		 * Handle >= JDK 1.6
+		 */
+		String javaHome = System.getProperty("java.home"); //$NON-NLS-1$
+		File javaHomeFile = null;
+		if (javaHome != null) {
+			javaHomeFile = new File(javaHome);
+			if (!javaHomeFile.exists())
+				javaHomeFile = null;
+		}
+
+		addFilesFrom(javaHomeFile, "java.endorsed.dirs", "/lib/endorsed", files);//$NON-NLS-1$//$NON-NLS-2$
+		if (javaHomeFile != null) {
+			File[] directoriesToCheck = null;
+			if (System.getProperty("os.name").startsWith("Mac")) {//$NON-NLS-1$//$NON-NLS-2$
+				directoriesToCheck = new File[] { new File(javaHomeFile, "../Classes"), //$NON-NLS-1$
+				};
+			} else {
+				directoriesToCheck = new File[] { new File(javaHomeFile, "lib") //$NON-NLS-1$
+				};
+			}
+			File[][] jars = Main.getLibrariesFiles(directoriesToCheck);
+			addFiles(jars, files);
+		}
+		addFilesFrom(javaHomeFile, "java.ext.dirs", "/lib/ext", files);//$NON-NLS-1$//$NON-NLS-2$
+		return files;
+	}
+
+	Iterable<? extends File> getDefaultClasspath() {
+		// default classpath
+		ArrayList<File> files = new ArrayList<File>();
+		String classProp = System.getProperty("java.class.path"); //$NON-NLS-1$
+		if ((classProp == null) || (classProp.length() == 0)) {
+			return null;
+		} else {
+			StringTokenizer tokenizer = new StringTokenizer(classProp, File.pathSeparator);
+			String token;
+			while (tokenizer.hasMoreTokens()) {
+				token = tokenizer.nextToken();
+				File file = new File(token);
+				if (file.exists()) {
+					files.add(file);
+				}
+			}
+		}
+		return files;
+	}
+
+	private Iterable<? extends File> getEndorsedDirsFrom(String path) {
+		ArrayList<FileSystem.Classpath> paths = new ArrayList<FileSystem.Classpath>();
+		ArrayList<File> files = new ArrayList<File>();
+		try {
+			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.name(), false, false);
+		} catch (IllegalArgumentException e) {
+			return null;
+		}
+		for (FileSystem.Classpath classpath : paths) {
+			files.add(new File(classpath.getPath()));
+		}
+		return files;
+	}
+
+	private Iterable<? extends File> getExtdirsFrom(String path) {
+		ArrayList<FileSystem.Classpath> paths = new ArrayList<FileSystem.Classpath>();
+		ArrayList<File> files = new ArrayList<File>();
+		try {
+			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.name(), false, false);
+		} catch (IllegalArgumentException e) {
+			return null;
+		}
+		for (FileSystem.Classpath classpath : paths) {
+			files.add(new File(classpath.getPath()));
+		}
+		return files;
+	}
+
+	private String getExtension(File file) {
+		String name = file.getName();
+		return getExtension(name);
+	}
+	private String getExtension(String name) {
+		int index = name.lastIndexOf('.');
+		if (index == -1) {
+			return EclipseFileManager.NO_EXTENSION;
+		}
+		return name.substring(index);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileManager#getFileForInput(javax.tools.JavaFileManager.Location, java.lang.String, java.lang.String)
+	 */
+	public FileObject getFileForInput(Location location, String packageName, String relativeName) throws IOException {
+		Iterable<? extends File> files = getLocation(location);
+		if (files == null) {
+			throw new IllegalArgumentException("Unknown location : " + location);//$NON-NLS-1$
+		}
+		String normalizedFileName = normalized(packageName) + '/' + relativeName.replace('\\', '/');
+		for (File file : files) {
+			if (file.isDirectory()) {
+				// handle directory
+				File f = new File(file, normalizedFileName);
+				if (f.exists()) {
+					return new EclipseFileObject(packageName + File.separator + relativeName, f.toURI(), getKind(f), this.charset);
+				} else {
+					continue; // go to next entry in the location
+				}
+			} else if (isArchive(file)) {
+				// handle archive file
+				Archive archive = getArchive(file);
+				if (archive != Archive.UNKNOWN_ARCHIVE) {
+					if (archive.contains(normalizedFileName)) {
+						return archive.getArchiveFileObject(normalizedFileName, this.charset);
+					}
+				}
+			}
+		}
+		return null;
+	}
+	
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileManager#getFileForOutput(javax.tools.JavaFileManager.Location, java.lang.String, java.lang.String, javax.tools.FileObject)
+	 */
+	public FileObject getFileForOutput(Location location, String packageName, String relativeName, FileObject sibling)
+			throws IOException {
+		Iterable<? extends File> files = getLocation(location);
+		if (files == null) {
+			throw new IllegalArgumentException("Unknown location : " + location);//$NON-NLS-1$
+		}
+		final Iterator<? extends File> iterator = files.iterator();
+		if (iterator.hasNext()) {
+			File file = iterator.next();
+			String normalizedFileName = normalized(packageName) + '/' + relativeName.replace('\\', '/');
+			File f = new File(file, normalizedFileName);
+			return new EclipseFileObject(packageName + File.separator + relativeName, f.toURI(), getKind(f), this.charset);
+		} else {
+			throw new IllegalArgumentException("location is empty : " + location);//$NON-NLS-1$
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileManager#getJavaFileForInput(javax.tools.JavaFileManager.Location, java.lang.String, javax.tools.JavaFileObject.Kind)
+	 */
+	public JavaFileObject getJavaFileForInput(Location location, String className, Kind kind) throws IOException {
+		if (kind != Kind.CLASS && kind != Kind.SOURCE) {
+			throw new IllegalArgumentException("Invalid kind : " + kind);//$NON-NLS-1$
+		}
+		Iterable<? extends File> files = getLocation(location);
+		if (files == null) {
+			throw new IllegalArgumentException("Unknown location : " + location);//$NON-NLS-1$
+		}
+		String normalizedFileName = normalized(className);
+		normalizedFileName += kind.extension;
+		for (File file : files) {
+			if (file.isDirectory()) {
+				// handle directory
+				File f = new File(file, normalizedFileName);
+				if (f.exists()) {
+					return new EclipseFileObject(className, f.toURI(), kind, this.charset);
+				} else {
+					continue; // go to next entry in the location
+				}
+			} else if (isArchive(file)) {
+				// handle archive file
+				Archive archive = getArchive(file);
+				if (archive != Archive.UNKNOWN_ARCHIVE) {
+					if (archive.contains(normalizedFileName)) {
+						return archive.getArchiveFileObject(normalizedFileName, this.charset);
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileManager#getJavaFileForOutput(javax.tools.JavaFileManager.Location, java.lang.String, javax.tools.JavaFileObject.Kind, javax.tools.FileObject)
+	 */
+	public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling)
+			throws IOException {
+		if (kind != Kind.CLASS && kind != Kind.SOURCE) {
+			throw new IllegalArgumentException("Invalid kind : " + kind);//$NON-NLS-1$
+		}
+		Iterable<? extends File> files = getLocation(location);
+		if (files == null) {
+			if (!location.equals(StandardLocation.CLASS_OUTPUT)
+					&& !location.equals(StandardLocation.SOURCE_OUTPUT))
+				throw new IllegalArgumentException("Unknown location : " + location);//$NON-NLS-1$
+			// we will use either the sibling or user.dir
+			if (sibling != null) {
+				String normalizedFileName = normalized(className);
+				int index = normalizedFileName.lastIndexOf('/');
+				if (index != -1) {
+					normalizedFileName = normalizedFileName.substring(index + 1);
+				}
+				normalizedFileName += kind.extension;
+				URI uri = sibling.toUri();
+				URI uri2 = null;
+				try {
+					String path = uri.getPath();
+					index = path.lastIndexOf('/');
+					if (index != -1) {
+						path = path.substring(0, index + 1);
+						path += normalizedFileName;
+					}
+					uri2 = new URI(uri.getScheme(), uri.getHost(), path, uri.getFragment());
+				} catch (URISyntaxException e) {
+					throw new IllegalArgumentException("invalid sibling");//$NON-NLS-1$
+				}
+				return new EclipseFileObject(className, uri2, kind, this.charset);
+			} else {
+				String normalizedFileName = normalized(className);
+				normalizedFileName += kind.extension;
+				File f = new File(System.getProperty("user.dir"), normalizedFileName);//$NON-NLS-1$
+				return new EclipseFileObject(className, f.toURI(), kind, this.charset);
+			}
+		}
+		final Iterator<? extends File> iterator = files.iterator();
+		if (iterator.hasNext()) {
+			File file = iterator.next();
+			String normalizedFileName = normalized(className);
+			normalizedFileName += kind.extension;
+			File f = new File(file, normalizedFileName);
+			return new EclipseFileObject(className, f.toURI(), kind, this.charset);
+		} else {
+			throw new IllegalArgumentException("location is empty : " + location);//$NON-NLS-1$
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.StandardJavaFileManager#getJavaFileObjects(java.io.File[])
+	 */
+	public Iterable<? extends JavaFileObject> getJavaFileObjects(File... files) {
+		return getJavaFileObjectsFromFiles(Arrays.asList(files));
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.StandardJavaFileManager#getJavaFileObjects(java.lang.String[])
+	 */
+	public Iterable<? extends JavaFileObject> getJavaFileObjects(String... names) {
+		return getJavaFileObjectsFromStrings(Arrays.asList(names));
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.StandardJavaFileManager#getJavaFileObjectsFromFiles(java.lang.Iterable)
+	 */
+	public Iterable<? extends JavaFileObject> getJavaFileObjectsFromFiles(Iterable<? extends File> files) {
+		ArrayList<JavaFileObject> javaFileArrayList = new ArrayList<JavaFileObject>();
+		for (File f : files) {
+			if (f.isDirectory()) {
+				throw new IllegalArgumentException("file : " + f.getAbsolutePath() + " is a directory"); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			javaFileArrayList.add(new EclipseFileObject(f.getAbsolutePath(), f.toURI(), getKind(f), this.charset));
+		}
+		return javaFileArrayList;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.StandardJavaFileManager#getJavaFileObjectsFromStrings(java.lang.Iterable)
+	 */
+	public Iterable<? extends JavaFileObject> getJavaFileObjectsFromStrings(Iterable<String> names) {
+		ArrayList<File> files = new ArrayList<File>();
+		for (String name : names) {
+			files.add(new File(name));
+		}
+		return getJavaFileObjectsFromFiles(files);
+	}
+
+	public Kind getKind(File f) {
+		return getKind(getExtension(f));
+	}
+
+	private Kind getKind(String extension) {
+		if (Kind.CLASS.extension.equals(extension)) {
+			return Kind.CLASS;
+		} else if (Kind.SOURCE.extension.equals(extension)) {
+			return Kind.SOURCE;
+		} else if (Kind.HTML.extension.equals(extension)) {
+			return Kind.HTML;
+		}
+		return Kind.OTHER;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.StandardJavaFileManager#getLocation(javax.tools.JavaFileManager.Location)
+	 */
+	public Iterable<? extends File> getLocation(Location location) {
+		if (this.locations == null) return null;
+		return this.locations.get(location.getName());
+	}
+
+	private Iterable<? extends File> getOutputDir(String string) {
+		if ("none".equals(string)) {//$NON-NLS-1$
+			return null;
+		}
+		File file = new File(string);
+		if (file.exists() && !file.isDirectory()) {
+			throw new IllegalArgumentException("file : " + file.getAbsolutePath() + " is not a directory");//$NON-NLS-1$//$NON-NLS-2$
+		}
+		ArrayList<File> list = new ArrayList<File>(1);
+		list.add(file);
+		return list;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileManager#handleOption(java.lang.String, java.util.Iterator)
+	 */
+	public boolean handleOption(String current, Iterator<String> remaining) {
+		try {
+			if ("-bootclasspath".equals(current)) {//$NON-NLS-1$
+				remaining.remove(); // remove the current option
+				if (remaining.hasNext()) {
+					final Iterable<? extends File> bootclasspaths = getPathsFrom(remaining.next());
+					if (bootclasspaths != null) {
+						Iterable<? extends File> iterable = getLocation(StandardLocation.PLATFORM_CLASS_PATH);
+						if ((this.flags & HAS_ENDORSED_DIRS) == 0
+								&& (this.flags & HAS_EXT_DIRS) == 0) {
+							// override default bootclasspath
+							setLocation(StandardLocation.PLATFORM_CLASS_PATH, bootclasspaths);
+						} else if ((this.flags & HAS_ENDORSED_DIRS) != 0) {
+							// endorseddirs have been processed first
+							setLocation(StandardLocation.PLATFORM_CLASS_PATH, 
+									concatFiles(iterable, bootclasspaths));
+						} else {
+							// extdirs have been processed first
+							setLocation(StandardLocation.PLATFORM_CLASS_PATH, 
+									prependFiles(iterable, bootclasspaths));
+						}
+					}
+					remaining.remove();
+					this.flags |= HAS_BOOTCLASSPATH;
+					return true;
+				} else {
+					throw new IllegalArgumentException();
+				}
+			}
+			if ("-classpath".equals(current) || "-cp".equals(current)) {//$NON-NLS-1$//$NON-NLS-2$
+				remaining.remove(); // remove the current option
+				if (remaining.hasNext()) {
+					final Iterable<? extends File> classpaths = getPathsFrom(remaining.next());
+					if (classpaths != null) {
+						Iterable<? extends File> iterable = getLocation(StandardLocation.CLASS_PATH);
+						if (iterable != null) {
+							setLocation(StandardLocation.CLASS_PATH,
+								concatFiles(iterable, classpaths));
+						} else {
+							setLocation(StandardLocation.CLASS_PATH, classpaths);
+						}
+						if ((this.flags & HAS_PROCESSORPATH) == 0) {
+							setLocation(StandardLocation.ANNOTATION_PROCESSOR_PATH, classpaths);
+						}
+					}
+					remaining.remove();
+					return true;
+				} else {
+					throw new IllegalArgumentException();
+				}
+			}
+			if ("-encoding".equals(current)) {//$NON-NLS-1$
+				remaining.remove(); // remove the current option
+				if (remaining.hasNext()) {
+					this.charset = Charset.forName(remaining.next());
+					remaining.remove();
+					return true;
+				} else {
+					throw new IllegalArgumentException();
+				}
+			}
+			if ("-sourcepath".equals(current)) {//$NON-NLS-1$
+				remaining.remove(); // remove the current option
+				if (remaining.hasNext()) {
+					final Iterable<? extends File> sourcepaths = getPathsFrom(remaining.next());
+					if (sourcepaths != null) setLocation(StandardLocation.SOURCE_PATH, sourcepaths);
+					remaining.remove();
+					return true;
+				} else {
+					throw new IllegalArgumentException();
+				}
+			}
+			if ("-extdirs".equals(current)) {//$NON-NLS-1$
+				remaining.remove(); // remove the current option
+				if (remaining.hasNext()) {
+					Iterable<? extends File> iterable = getLocation(StandardLocation.PLATFORM_CLASS_PATH);
+					setLocation(StandardLocation.PLATFORM_CLASS_PATH, 
+							concatFiles(iterable, getExtdirsFrom(remaining.next())));
+					remaining.remove();
+					this.flags |= HAS_EXT_DIRS;
+					return true;
+				} else {
+					throw new IllegalArgumentException();
+				}
+			}
+			if ("-endorseddirs".equals(current)) {//$NON-NLS-1$
+				remaining.remove(); // remove the current option
+				if (remaining.hasNext()) {
+					Iterable<? extends File> iterable = getLocation(StandardLocation.PLATFORM_CLASS_PATH);
+					setLocation(StandardLocation.PLATFORM_CLASS_PATH, 
+							prependFiles(iterable, getEndorsedDirsFrom(remaining.next())));
+					remaining.remove();
+					this.flags |= HAS_ENDORSED_DIRS;
+					return true;
+				} else {
+					throw new IllegalArgumentException();
+				}
+			}
+			if ("-d".equals(current)) { //$NON-NLS-1$
+				remaining.remove(); // remove the current option
+				if (remaining.hasNext()) {
+					final Iterable<? extends File> outputDir = getOutputDir(remaining.next());
+					if (outputDir != null) {
+						setLocation(StandardLocation.CLASS_OUTPUT, outputDir);
+					}
+					remaining.remove();
+					return true;
+				} else {
+					throw new IllegalArgumentException();
+				}
+			}
+			if ("-s".equals(current)) { //$NON-NLS-1$
+				remaining.remove(); // remove the current option
+				if (remaining.hasNext()) {
+					final Iterable<? extends File> outputDir = getOutputDir(remaining.next());
+					if (outputDir != null) {
+						setLocation(StandardLocation.SOURCE_OUTPUT, outputDir);
+					}
+					remaining.remove();
+					return true;
+				} else {
+					throw new IllegalArgumentException();
+				}				
+			}
+			if ("-processorpath".equals(current)) {//$NON-NLS-1$
+				remaining.remove(); // remove the current option
+				if (remaining.hasNext()) {
+					final Iterable<? extends File> processorpaths = getPathsFrom(remaining.next());
+					if (processorpaths != null) {
+						setLocation(StandardLocation.ANNOTATION_PROCESSOR_PATH, processorpaths);
+					}
+					remaining.remove();
+					this.flags |= HAS_PROCESSORPATH;
+					return true;
+				} else {
+					throw new IllegalArgumentException();
+				}
+			}
+		} catch (IOException e) {
+			// ignore
+		}
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileManager#hasLocation(javax.tools.JavaFileManager.Location)
+	 */
+	public boolean hasLocation(Location location) {
+		return this.locations != null && this.locations.containsKey(location.getName());
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileManager#inferBinaryName(javax.tools.JavaFileManager.Location, javax.tools.JavaFileObject)
+	 */
+	public String inferBinaryName(Location location, JavaFileObject file) {
+		String name = file.getName();
+		JavaFileObject javaFileObject = null;
+		int index = name.lastIndexOf('.');
+		if (index != -1) {
+			name = name.substring(0, index);
+		}
+		try {
+			javaFileObject = getJavaFileForInput(location, name, file.getKind());
+		} catch (IOException e) {
+			// ignore
+		} catch (IllegalArgumentException iae) {
+			return null; // Either unknown kind or location not present
+		}
+		if (javaFileObject == null) {
+			return null;
+		}
+		return normalized(name);
+	}
+
+	private boolean isArchive(File f) {
+		String extension = getExtension(f);
+		return extension.equalsIgnoreCase(".jar") || extension.equalsIgnoreCase(".zip");//$NON-NLS-1$//$NON-NLS-2$
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.StandardJavaFileManager#isSameFile(javax.tools.FileObject, javax.tools.FileObject)
+	 */
+	public boolean isSameFile(FileObject fileObject1, FileObject fileObject2) {
+		// EclipseFileManager creates only EcliseFileObject
+		if (!(fileObject1 instanceof EclipseFileObject)) throw new IllegalArgumentException("Unsupported file object class : " + fileObject1.getClass());//$NON-NLS-1$
+		if (!(fileObject2 instanceof EclipseFileObject)) throw new IllegalArgumentException("Unsupported file object class : " + fileObject2.getClass());//$NON-NLS-1$
+		return fileObject1.equals(fileObject2);
+	}
+	/* (non-Javadoc)
+	 * @see javax.tools.OptionChecker#isSupportedOption(java.lang.String)
+	 */
+	public int isSupportedOption(String option) {
+		return Options.processOptionsFileManager(option);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileManager#list(javax.tools.JavaFileManager.Location, java.lang.String, java.util.Set, boolean)
+	 */
+	public Iterable<JavaFileObject> list(Location location, String packageName, Set<Kind> kinds, boolean recurse)
+			throws IOException {
+		
+		Iterable<? extends File> allFilesInLocations = getLocation(location);
+		if (allFilesInLocations == null) {
+			throw new IllegalArgumentException("Unknown location : " + location);//$NON-NLS-1$
+		}
+		
+		ArrayList<JavaFileObject> collector = new ArrayList<JavaFileObject>();
+		String normalizedPackageName = normalized(packageName);
+		for (File file : allFilesInLocations) {
+			collectAllMatchingFiles(file, normalizedPackageName, kinds, recurse, collector);
+		}
+		return collector;
+	}
+
+	private String normalized(String className) {
+		char[] classNameChars = className.toCharArray();
+		for (int i = 0, max = classNameChars.length; i < max; i++) {
+			switch(classNameChars[i]) {
+				case '\\' :
+					classNameChars[i] = '/';
+					break;
+				case '.' :
+					classNameChars[i] = '/';
+			}
+		}
+		return new String(classNameChars);
+	}
+
+	private Iterable<? extends File> prependFiles(Iterable<? extends File> iterable,
+			Iterable<? extends File> iterable2) {
+		if (iterable2 == null) return iterable;
+		ArrayList<File> list = new ArrayList<File>();
+		for (Iterator<? extends File> iterator = iterable2.iterator(); iterator.hasNext(); ) {
+			list.add(iterator.next());
+		}
+		for (Iterator<? extends File> iterator = iterable.iterator(); iterator.hasNext(); ) {
+			list.add(iterator.next());
+		}
+		return list;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.StandardJavaFileManager#setLocation(javax.tools.JavaFileManager.Location, java.lang.Iterable)
+	 */
+	public void setLocation(Location location, Iterable<? extends File> path) throws IOException {
+		if (path != null) {
+			if (location.isOutputLocation()) {
+				// output location
+				int count = 0;
+				for (Iterator<? extends File> iterator = path.iterator(); iterator.hasNext(); ) {
+					iterator.next();
+					count++;
+				}
+				if (count != 1) {
+					throw new IllegalArgumentException("output location can only have one path");//$NON-NLS-1$
+				}
+			}
+			this.locations.put(location.getName(), path);
+		}
+	}
+	
+	public void setLocale(Locale locale) {
+		this.locale = locale == null ? Locale.getDefault() : locale;
+		try {
+			this.bundle = ResourceBundleFactory.getBundle(this.locale);
+		} catch(MissingResourceException e) {
+			System.out.println("Missing resource : " + Main.bundleName.replace('.', '/') + ".properties for locale " + locale); //$NON-NLS-1$//$NON-NLS-2$
+			throw e;
+		}
+	}
+
+	@SuppressWarnings({"rawtypes", "unchecked"})
+	public void processPathEntries(final int defaultSize, final ArrayList paths,
+			final String currentPath, String customEncoding, boolean isSourceOnly,
+			boolean rejectDestinationPathOnJars) {
+
+		String currentClasspathName = null;
+		String currentDestinationPath = null;
+		ArrayList currentRuleSpecs = new ArrayList(defaultSize);
+		StringTokenizer tokenizer = new StringTokenizer(currentPath,
+				File.pathSeparator + "[]", true); //$NON-NLS-1$
+		ArrayList tokens = new ArrayList();
+		while (tokenizer.hasMoreTokens()) {
+			tokens.add(tokenizer.nextToken());
+		}
+		// state machine
+		final int start = 0;
+		final int readyToClose = 1;
+		// 'path' 'path1[rule];path2'
+		final int readyToCloseEndingWithRules = 2;
+		// 'path[rule]' 'path1;path2[rule]'
+		final int readyToCloseOrOtherEntry = 3;
+		// 'path[rule];' 'path;' 'path1;path2;'
+		final int rulesNeedAnotherRule = 4;
+		// 'path[rule1;'
+		final int rulesStart = 5;
+		// 'path[' 'path1;path2['
+		final int rulesReadyToClose = 6;
+		// 'path[rule' 'path[rule1;rule2'
+		final int destinationPathReadyToClose = 7;
+		// 'path[-d bin'
+		final int readyToCloseEndingWithDestinationPath = 8;
+		// 'path[-d bin]' 'path[rule][-d bin]'
+		final int destinationPathStart = 9;
+		// 'path[rule]['
+		final int bracketOpened = 10;
+		// '.*[.*'
+		final int bracketClosed = 11;
+		// '.*([.*])+'
+	
+		final int error = 99;
+		int state = start;
+		String token = null;
+		int cursor = 0, tokensNb = tokens.size(), bracket = -1;
+		while (cursor < tokensNb && state != error) {
+			token = (String) tokens.get(cursor++);
+			if (token.equals(File.pathSeparator)) {
+				switch (state) {
+				case start:
+				case readyToCloseOrOtherEntry:
+				case bracketOpened:
+					break;
+				case readyToClose:
+				case readyToCloseEndingWithRules:
+				case readyToCloseEndingWithDestinationPath:
+					state = readyToCloseOrOtherEntry;
+					addNewEntry(paths, currentClasspathName, currentRuleSpecs,
+							customEncoding, currentDestinationPath, isSourceOnly,
+							rejectDestinationPathOnJars);
+					currentRuleSpecs.clear();
+					break;
+				case rulesReadyToClose:
+					state = rulesNeedAnotherRule;
+					break;
+				case destinationPathReadyToClose:
+					throw new IllegalArgumentException(
+							this.bind("configure.incorrectDestinationPathEntry", //$NON-NLS-1$
+									currentPath));
+				case bracketClosed:
+					cursor = bracket + 1;
+					state = rulesStart;
+					break;
+				default:
+					state = error;
+				}
+			} else if (token.equals("[")) { //$NON-NLS-1$
+				switch (state) {
+				case start:
+					currentClasspathName = ""; //$NON-NLS-1$
+					//$FALL-THROUGH$
+				case readyToClose:
+					bracket = cursor - 1;
+					//$FALL-THROUGH$
+				case bracketClosed:
+					state = bracketOpened;
+					break;
+				case readyToCloseEndingWithRules:
+					state = destinationPathStart;
+					break;
+				case readyToCloseEndingWithDestinationPath:
+					state = rulesStart;
+					break;
+				case bracketOpened:
+				default:
+					state = error;
+				}
+			} else if (token.equals("]")) { //$NON-NLS-1$
+				switch (state) {
+				case rulesReadyToClose:
+					state = readyToCloseEndingWithRules;
+					break;
+				case destinationPathReadyToClose:
+					state = readyToCloseEndingWithDestinationPath;
+					break;
+				case bracketOpened:
+					state = bracketClosed;
+					break;
+				case bracketClosed:
+				default:
+					state = error;
+				}
+			} else {
+				// regular word
+				switch (state) {
+				case start:
+				case readyToCloseOrOtherEntry:
+					state = readyToClose;
+					currentClasspathName = token;
+					break;
+				case rulesStart:
+					if (token.startsWith("-d ")) { //$NON-NLS-1$
+						if (currentDestinationPath != null) {
+							throw new IllegalArgumentException(
+									this.bind("configure.duplicateDestinationPathEntry", //$NON-NLS-1$
+											currentPath));
+						}
+						currentDestinationPath = token.substring(3).trim();
+						state = destinationPathReadyToClose;
+						break;
+					} // else we proceed with a rule
+					//$FALL-THROUGH$
+				case rulesNeedAnotherRule:
+					if (currentDestinationPath != null) {
+						throw new IllegalArgumentException(
+								this.bind("configure.accessRuleAfterDestinationPath", //$NON-NLS-1$
+									currentPath));
+					}
+					state = rulesReadyToClose;
+					currentRuleSpecs.add(token);
+					break;
+				case destinationPathStart:
+					if (!token.startsWith("-d ")) { //$NON-NLS-1$
+						state = error;
+					} else {
+						currentDestinationPath = token.substring(3).trim();
+						state = destinationPathReadyToClose;
+					}
+					break;
+				case bracketClosed:
+					for (int i = bracket; i < cursor ; i++) {
+						currentClasspathName += (String) tokens.get(i);
+					}
+					state = readyToClose;
+					break;
+				case bracketOpened:
+					break;
+				default:
+					state = error;
+				}
+			}
+			if (state == bracketClosed && cursor == tokensNb) {
+				cursor = bracket + 1;
+				state = rulesStart;
+			}
+		}
+		switch(state) {
+			case readyToCloseOrOtherEntry:
+				break;
+			case readyToClose:
+			case readyToCloseEndingWithRules:
+			case readyToCloseEndingWithDestinationPath:
+				addNewEntry(paths, currentClasspathName, currentRuleSpecs,
+					customEncoding, currentDestinationPath, isSourceOnly,
+					rejectDestinationPathOnJars);
+				break;
+			case bracketOpened:
+			case bracketClosed:
+			default :
+				// we go on anyway
+		}
+	}
+	@SuppressWarnings({"rawtypes", "unchecked"})
+	protected void addNewEntry(ArrayList paths, String currentClasspathName,
+			ArrayList currentRuleSpecs, String customEncoding,
+			String destPath, boolean isSourceOnly,
+			boolean rejectDestinationPathOnJars) {
+
+		int rulesSpecsSize = currentRuleSpecs.size();
+		AccessRuleSet accessRuleSet = null;
+		if (rulesSpecsSize != 0) {
+			AccessRule[] accessRules = new AccessRule[currentRuleSpecs.size()];
+			boolean rulesOK = true;
+			Iterator i = currentRuleSpecs.iterator();
+			int j = 0;
+			while (i.hasNext()) {
+				String ruleSpec = (String) i.next();
+				char key = ruleSpec.charAt(0);
+				String pattern = ruleSpec.substring(1);
+				if (pattern.length() > 0) {
+					switch (key) {
+						case '+':
+							accessRules[j++] = new AccessRule(pattern
+									.toCharArray(), 0);
+							break;
+						case '~':
+							accessRules[j++] = new AccessRule(pattern
+									.toCharArray(),
+									IProblem.DiscouragedReference);
+							break;
+						case '-':
+							accessRules[j++] = new AccessRule(pattern
+									.toCharArray(),
+									IProblem.ForbiddenReference);
+							break;
+						case '?':
+							accessRules[j++] = new AccessRule(pattern
+									.toCharArray(),
+									IProblem.ForbiddenReference, true/*keep looking for accessible type*/);
+							break;
+						default:
+							rulesOK = false;
+					}
+				} else {
+					rulesOK = false;
+				}
+			}
+			if (rulesOK) {
+	    		accessRuleSet = new AccessRuleSet(accessRules, AccessRestriction.COMMAND_LINE, currentClasspathName);
+			} else {
+				return;
+			}
+		}
+		if (Main.NONE.equals(destPath)) {
+			destPath = Main.NONE; // keep == comparison valid
+		}
+		if (rejectDestinationPathOnJars && destPath != null &&
+				(currentClasspathName.endsWith(".jar") || //$NON-NLS-1$
+					currentClasspathName.endsWith(".zip"))) { //$NON-NLS-1$
+			throw new IllegalArgumentException(
+					this.bind("configure.unexpectedDestinationPathEntryFile", //$NON-NLS-1$
+								currentClasspathName));
+			}
+		FileSystem.Classpath currentClasspath = FileSystem.getClasspath(
+				currentClasspathName,
+				customEncoding,
+				isSourceOnly,
+				accessRuleSet,
+				destPath);
+		if (currentClasspath != null) {
+			paths.add(currentClasspath);
+		}
+	}
+	/*
+	 * Lookup the message with the given ID in this catalog and bind its
+	 * substitution locations with the given string.
+	 */
+	private String bind(String id, String binding) {
+		return bind(id, new String[] { binding });
+	}
+
+	/*
+	 * Lookup the message with the given ID in this catalog and bind its
+	 * substitution locations with the given string values.
+	 */
+	private String bind(String id, String[] arguments) {
+		if (id == null)
+			return "No message available"; //$NON-NLS-1$
+		String message = null;
+		try {
+			message = this.bundle.getString(id);
+		} catch (MissingResourceException e) {
+			// If we got an exception looking for the message, fail gracefully by just returning
+			// the id we were looking for.  In most cases this is semi-informative so is not too bad.
+			return "Missing message: " + id + " in: " + Main.bundleName; //$NON-NLS-2$ //$NON-NLS-1$
+		}
+		return MessageFormat.format(message, (Object[]) arguments);
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileObject.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileObject.java
new file mode 100644
index 0000000..f2c5856
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileObject.java
@@ -0,0 +1,205 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Walter Harley   - Patch for ensuring the parent folders are created
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.net.URI;
+import java.nio.charset.Charset;
+
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.NestingKind;
+import javax.tools.SimpleJavaFileObject;
+
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
+
+/**
+ * Implementation of a Java file object that corresponds to a file on the file system
+ */
+public class EclipseFileObject extends SimpleJavaFileObject {
+	private File f;
+	private Charset charset;
+	private boolean parentsExist; // parent directories exist
+	
+	public EclipseFileObject(String className, URI uri, Kind kind, Charset charset) {
+		super(uri, kind);
+		this.f = new File(this.uri);
+		this.charset = charset;
+		this.parentsExist = false;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileObject#getAccessLevel()
+	 */
+	public Modifier getAccessLevel() {
+		// cannot express multiple modifier
+		if (getKind() != Kind.CLASS) {
+			return null;
+		}
+		ClassFileReader reader = null;
+   		try {
+			reader = ClassFileReader.read(this.f);
+		} catch (ClassFormatException e) {
+			// ignore
+		} catch (IOException e) {
+			// ignore
+		}
+		if (reader == null) {
+			return null;
+		}
+		final int accessFlags = reader.accessFlags();
+		if ((accessFlags & ClassFileConstants.AccPublic) != 0) {
+			return Modifier.PUBLIC;
+		}
+		if ((accessFlags & ClassFileConstants.AccAbstract) != 0) {
+			return Modifier.ABSTRACT;
+		}
+		if ((accessFlags & ClassFileConstants.AccFinal) != 0) {
+			return Modifier.FINAL;
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.JavaFileObject#getNestingKind()
+	 */
+	public NestingKind getNestingKind() {
+		switch(kind) {
+			case SOURCE :
+				return NestingKind.TOP_LEVEL;
+			case CLASS :
+        		ClassFileReader reader = null;
+        		try {
+        			reader = ClassFileReader.read(this.f);
+        		} catch (ClassFormatException e) {
+        			// ignore
+        		} catch (IOException e) {
+        			// ignore
+        		}
+        		if (reader == null) {
+        			return null;
+        		}
+        		if (reader.isAnonymous()) {
+        			return NestingKind.ANONYMOUS;
+        		}
+        		if (reader.isLocal()) {
+        			return NestingKind.LOCAL;
+        		}
+        		if (reader.isMember()) {
+        			return NestingKind.MEMBER;
+        		}
+        		return NestingKind.TOP_LEVEL;
+        	default:
+        		return null;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#delete()
+	 */
+	public boolean delete() {
+		return this.f.delete();
+	}
+	
+	public boolean equals(Object o) {
+		if (!(o instanceof EclipseFileObject)) {
+			return false;
+		}
+		EclipseFileObject eclipseFileObject = (EclipseFileObject) o;
+		return eclipseFileObject.toUri().equals(this.uri);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#getCharContent(boolean)
+	 */
+	public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
+		return Util.getCharContents(this, ignoreEncodingErrors, org.aspectj.org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(this.f), this.charset.name());
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#getLastModified()
+	 */
+	public long getLastModified() {
+		return this.f.lastModified();
+	}
+
+	public String getName() {
+        return this.f.getPath();
+    }
+    
+	public int hashCode() {
+		return f.hashCode();
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#openInputStream()
+	 */
+	public InputStream openInputStream() throws IOException {
+		// TODO (olivier) should be used buffered input stream
+		return new FileInputStream(this.f);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#openOutputStream()
+	 */
+	public OutputStream openOutputStream() throws IOException {
+		ensureParentDirectoriesExist();
+		return new FileOutputStream(this.f);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#openReader(boolean)
+	 */
+	public Reader openReader(boolean ignoreEncodingErrors) throws IOException {
+		return new FileReader(this.f);
+	}
+
+	/* (non-Javadoc)
+	 * @see javax.tools.FileObject#openWriter()
+	 */
+	public Writer openWriter() throws IOException {
+		ensureParentDirectoriesExist();
+		return new FileWriter(this.f);
+	}
+	
+	@Override
+	public String toString() {
+		return this.f.getAbsolutePath();
+	}
+	
+    private void ensureParentDirectoriesExist() throws IOException {
+        if (!this.parentsExist) {
+            File parent = f.getParentFile();
+            if (parent != null && !parent.exists()) {
+                if (!parent.mkdirs()) {
+                    // could have been concurrently created
+                    if (!parent.exists() || !parent.isDirectory())
+                        throw new IOException("Unable to create parent directories for " + f); //$NON-NLS-1$
+                }
+            }
+            this.parentsExist = true;
+        }
+    }
+
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ManyToMany.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ManyToMany.java
new file mode 100644
index 0000000..f88866a
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/ManyToMany.java
@@ -0,0 +1,364 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 BEA Systems, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation 
+ *                      (originally in org.aspectj.org.eclipse.jdt.apt.core)
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.util;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Manage a Map<T1, Set<T2>>, with reverse links so that it is possible to
+ * efficiently find all T1s that have a particular T2 associated with them.
+ * Access to the map is synchronized, so that it is possible to read and
+ * write simultaneously from multiple threads.
+ * <p>
+ * The map permits the null value for keys nor for value elements. 
+ * <p>
+ * Design invariants preserved by all operations on this map are as follows:
+ * <ul>
+ * <li> If a key exists, it has at least one value associated with it; that is,
+ * for all k such that null != containsKey(k), getValues(k) returns a non-empty
+ * set.</li>
+ * <li> If a value exists, it has at least one key associated with it; that is,
+ * for all v such that null != containsValue(v), getKeys(v) returns a non-empty
+ * set.</li>
+ */
+public class ManyToMany<T1, T2> {
+	
+	private final Map<T1, Set<T2>> _forward = new HashMap<T1, Set<T2>>();
+	private final Map<T2, Set<T1>> _reverse = new HashMap<T2, Set<T1>>();
+	private boolean _dirty = false;
+	
+	/**
+	 * Empty all maps.  If the maps previously contained entries, 
+	 * this will set the dirty bit.
+	 * @return true if the maps contained any entries prior to being cleared
+	 */
+	public synchronized boolean clear() {
+		boolean hadContent = !_forward.isEmpty() || !_reverse.isEmpty();
+		_reverse.clear();
+		_forward.clear();
+		_dirty |= hadContent;
+		return hadContent;
+	}
+	
+	/**
+	 * Sets the dirty bit to false.  Internal operations do not use the dirty 
+	 * bit; clearing it will not affect behavior of the map.  It's just there
+	 * for the convenience of callers who don't want to keep track of every
+	 * put() and remove().
+	 */
+	public synchronized void clearDirtyBit() {
+		_dirty = false;
+	}
+	
+	/**
+	 * Equivalent to keySet().contains(key).
+	 * @return true if the map contains the specified key.
+	 */
+	public synchronized boolean containsKey(T1 key) {
+		return _forward.containsKey(key);
+	}
+	
+	/**
+	 * Is there a key that is mapped to the specified value?
+	 * Search within the forward map.
+	 * @return true if such a key exists
+	 */
+	public synchronized boolean containsKeyValuePair(T1 key, T2 value) {
+		Set<T2> values = _forward.get(key);
+		if (null == values) {
+			return false;
+		}
+		return values.contains(value);
+	}
+	
+	/**
+	 * Equivalent to values().contains(value).
+	 * @return true if the map contains the specified value (regardless
+	 * of what key it might be associated with).
+	 */
+	public synchronized boolean containsValue(T2 value) {
+		return _reverse.containsKey(value);
+	}
+	
+	/**
+	 * Search the reverse map for all keys that have been associated with
+	 * a particular value.
+	 * @return the set of keys that are associated with the specified value,
+	 * or an empty set if the value does not exist in the map.
+	 */
+	public synchronized Set<T1> getKeys(T2 value) {
+		Set<T1> keys = _reverse.get(value);
+		if (null == keys) {
+			return Collections.emptySet();
+		}
+		return new HashSet<T1>(keys);
+	}
+	
+	/**
+	 * Search the forward map for all values associated with a particular key.
+	 * Returns a copy of the set of values.
+	 * @return a copy of the set of values that are associated with the 
+	 * specified key, or an empty set if the key does not exist in the map.
+	 */
+	public synchronized Set<T2> getValues(T1 key) {
+		Set<T2> values = _forward.get(key);
+		if (null == values) {
+			return Collections.emptySet();
+		}
+		return new HashSet<T2>(values);
+	}
+
+	/**
+	 * @return a copy of the set of all keys (that is, all items of type T1).
+	 * If the maps are empty, the returned set will be empty, not null.  The
+	 * returned set can be modified by the caller without affecting the map.
+	 * @see #getValueSet()
+	 */
+	public synchronized Set<T1> getKeySet() {
+		Set<T1> keys = new HashSet<T1>(_forward.keySet());
+		return keys;
+	}
+	
+	/**
+	 * @return a copy of the set of all values (that is, all items of type T2).
+	 * If the maps are empty, the returned set will be empty, not null.  The
+	 * returned set can be modified by the caller without affecting the map.
+	 * @see #getKeySet()
+	 */
+	public synchronized Set<T2> getValueSet() {
+		Set<T2> values = new HashSet<T2>(_reverse.keySet());
+		return values;
+	}
+	
+	/**
+	 * Return the state of the dirty bit.  All operations that change the state
+	 * of the maps, including @see #clear(), set the dirty bit if any content actually
+	 * changed.  The only way to clear the dirty bit is to call @see #clearDirtyBit().
+	 * @return true if the map content has changed since it was created or since
+	 * the last call to clearDirtyBit().
+	 * @see #clearDirtyBit()
+	 */
+	public synchronized boolean isDirty() {
+		return _dirty;
+	}
+	
+	/**
+	 * Check whether <code>key</code> has an association to any values other
+	 * than <code>value</code> - that is, whether the same key has been added
+	 * with multiple values.  Equivalent to asking whether the intersection of
+	 * <code>getValues(key)</code> and the set containing <code>value</code> is 
+	 * non-empty. 
+	 * @return true iff <code>key</code> is in the map and is associated 
+	 * with values other than <code>value</code>. 
+	 * @see #valueHasOtherKeys(Object, Object)
+	 */
+	public synchronized boolean keyHasOtherValues(T1 key, T2 value) {
+		Set<T2> values = _forward.get(key);
+		if (values == null)
+			return false;
+		int size = values.size();
+		if (size == 0)
+			return false;
+		else if (size > 1)
+			return true;
+		else // size == 1
+			return !values.contains(value);
+	}
+
+	/**
+	 * Associate the specified value with the key.  Adds the entry
+	 * to both the forward and reverse maps.  Adding the same value
+	 * twice to a particular key has no effect.  Because this is a
+	 * many-to-many map, adding a new value for an existing key does
+	 * not change the existing association, it adds a new one.
+	 * @param key can be null
+	 * @param value can be null
+	 * @return true if the key/value pair did not exist prior to being added
+	 */
+	public synchronized boolean put(T1 key, T2 value) {
+		// Add to forward map
+		Set<T2> values = _forward.get(key);
+		if (null == values) {
+			values = new HashSet<T2>();
+			_forward.put(key, values);
+		}
+		boolean added = values.add(value);
+		_dirty |= added;
+		
+		// Add to reverse map
+		Set<T1> keys = _reverse.get(value);
+		if (null == keys) {
+			keys = new HashSet<T1>();
+			_reverse.put(value, keys);
+		}
+		keys.add(key);
+		
+		assert checkIntegrity();
+		return added;
+	}
+	
+	/**
+	 * Remove a particular key-value association.  This is the inverse
+	 * of put(key, value).  If the key does not exist, or the value
+	 * does not exist, or the association does not exist, this call
+	 * has no effect.
+	 * @return true if the key/value pair existed in the map prior to removal
+	 */
+	public synchronized boolean remove(T1 key, T2 value) {
+		Set<T2> values = _forward.get(key);
+		if (values == null) {
+			assert checkIntegrity();
+			return false;
+		}
+		boolean removed = values.remove(value);
+		if (values.isEmpty()) {
+			_forward.remove(key);
+		}
+		if (removed) {
+			_dirty = true;
+			// it existed, so we need to remove from reverse map as well
+			Set<T1> keys = _reverse.get(value);
+			keys.remove(key);
+			if (keys.isEmpty()) {
+				_reverse.remove(value);
+			}
+		}
+		assert checkIntegrity();
+		return removed;
+	}
+
+	/**
+	 * Remove the key and its associated key/value entries.
+	 * Calling removeKey(k) is equivalent to calling remove(k,v) 
+	 * for every v in getValues(k).
+	 * @return true if the key existed in the map prior to removal
+	 */
+	public synchronized boolean removeKey(T1 key) {
+		// Remove all back-references to key.
+		Set<T2> values = _forward.get(key);
+		if (null == values) {
+			// key does not exist in map.
+			assert checkIntegrity();
+			return false;
+		}
+		for (T2 value : values) {
+			Set<T1> keys = _reverse.get(value);
+			if (null != keys) {
+				keys.remove(key);
+				if (keys.isEmpty()) {
+					_reverse.remove(value);
+				}
+			}
+		}
+		// Now remove the forward references from key.
+		_forward.remove(key);
+		_dirty = true;
+		assert checkIntegrity();
+		return true;
+	}
+	
+	/**
+	 * Remove the value and its associated key/value entries.
+	 * Calling removeValue(v) is equivalent to calling remove(k,v)
+	 * for every k in getKeys(v).
+	 * @return true if the value existed in the map prior to removal.
+	 */
+	public synchronized boolean removeValue(T2 value) {
+		// Remove any forward references to value
+		Set<T1> keys = _reverse.get(value);
+		if (null == keys) {
+			// value does not exist in map.
+			assert checkIntegrity();
+			return false;
+		}
+		for (T1 key : keys) {
+			Set<T2> values = _forward.get(key);
+			if (null != values) {
+				values.remove(value);
+				if (values.isEmpty()) {
+					_forward.remove(key);
+				}
+			}
+		}
+		// Now remove the reverse references from value.
+		_reverse.remove(value);
+		_dirty = true;
+		assert checkIntegrity();
+		return true;
+	}
+	
+	/**
+	 * Check whether <code>value</code> has an association from any keys other
+	 * than <code>key</code> - that is, whether the same value has been added
+	 * with multiple keys.  Equivalent to asking whether the intersection of
+	 * <code>getKeys(value)</code> and the set containing <code>key</code> is 
+	 * non-empty. 
+	 * @return true iff <code>value</code> is in the map and is associated 
+	 * with keys other than <code>key</code>. 
+	 * @see #keyHasOtherValues(Object, Object)
+	 */
+	public synchronized boolean valueHasOtherKeys(T2 value, T1 key) {
+		Set<T1> keys = _reverse.get(key);
+		if (keys == null)
+			return false;
+		int size = keys.size();
+		if (size == 0)
+			return false;
+		else if (size > 1)
+			return true;
+		else // size == 1
+			return !keys.contains(key);
+	}
+
+	/**
+	 * Check the integrity of the internal data structures.  This is intended to
+	 * be called within an assert, so that if asserts are disabled the integrity
+	 * checks will not cause a performance impact.
+	 * @return true if everything is okay.
+	 * @throws IllegalStateException if there is a problem.
+	 */
+	private boolean checkIntegrity() {
+		// For every T1->T2 mapping in the forward map, there should be a corresponding
+		// T2->T1 mapping in the reverse map.
+		for (Map.Entry<T1, Set<T2>> entry : _forward.entrySet()) {
+			Set<T2> values = entry.getValue();
+			if (values.isEmpty()) {
+				throw new IllegalStateException("Integrity compromised: forward map contains an empty set"); //$NON-NLS-1$
+			}
+			for (T2 value : values) {
+				Set<T1> keys = _reverse.get(value);
+				if (null == keys || !keys.contains(entry.getKey())) {
+					throw new IllegalStateException("Integrity compromised: forward map contains an entry missing from reverse map: " + value); //$NON-NLS-1$
+				}
+			}
+		}
+		// And likewise in the other direction.
+		for (Map.Entry<T2, Set<T1>> entry : _reverse.entrySet()) {
+			Set<T1> keys = entry.getValue();
+			if (keys.isEmpty()) {
+				throw new IllegalStateException("Integrity compromised: reverse map contains an empty set"); //$NON-NLS-1$
+			}
+			for (T1 key : keys) {
+				Set<T2> values = _forward.get(key);
+				if (null == values || !values.contains(entry.getKey())) {
+					throw new IllegalStateException("Integrity compromised: reverse map contains an entry missing from forward map: " + key); //$NON-NLS-1$
+				}
+			}
+		}
+		return true;
+	}
+
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Options.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Options.java
new file mode 100644
index 0000000..677c360
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Options.java
@@ -0,0 +1,235 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.util;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/**
+ * Class used to handle options in the EclipseFileManager and the EclipseCompiler
+ */
+public final class Options {
+	private static final Set<String> ZERO_ARGUMENT_OPTIONS;
+	private static final Set<String> ONE_ARGUMENT_OPTIONS;
+	private static final Set<String> FILE_MANAGER_OPTIONS;
+	static {
+		ZERO_ARGUMENT_OPTIONS = new HashSet<String>();
+		ZERO_ARGUMENT_OPTIONS.add("-progress");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-proceedOnError");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-time");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-v");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-version");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-showversion");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-deprecation");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-help");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-?");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-help:warn");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-?:warn");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-noExit");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-verbose");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-referenceInfo");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-inlineJSR");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-g");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-g:none");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-nowarn");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-warn:none");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-preserveAllLocals");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-enableJavadoc");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-Xemacs");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-X");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-O");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-1.3");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-1.4");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-1.5");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-5");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-5.0");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-1.6");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-6");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-6.0");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-proc:only");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-proc:none");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-XprintProcessorInfo");//$NON-NLS-1$
+		ZERO_ARGUMENT_OPTIONS.add("-XprintRounds");//$NON-NLS-1$
+
+		FILE_MANAGER_OPTIONS = new HashSet<String>();
+		FILE_MANAGER_OPTIONS.add("-bootclasspath");//$NON-NLS-1$
+		FILE_MANAGER_OPTIONS.add("-encoding");//$NON-NLS-1$
+		FILE_MANAGER_OPTIONS.add("-d");//$NON-NLS-1$
+		FILE_MANAGER_OPTIONS.add("-classpath");//$NON-NLS-1$
+		FILE_MANAGER_OPTIONS.add("-cp");//$NON-NLS-1$
+		FILE_MANAGER_OPTIONS.add("-sourcepath");//$NON-NLS-1$
+		FILE_MANAGER_OPTIONS.add("-extdirs");//$NON-NLS-1$
+		FILE_MANAGER_OPTIONS.add("-endorseddirs");//$NON-NLS-1$
+		FILE_MANAGER_OPTIONS.add("-s");//$NON-NLS-1$
+		FILE_MANAGER_OPTIONS.add("-processorpath");//$NON-NLS-1$
+
+		ONE_ARGUMENT_OPTIONS = new HashSet<String>();
+		ONE_ARGUMENT_OPTIONS.addAll(FILE_MANAGER_OPTIONS);
+		ONE_ARGUMENT_OPTIONS.add("-log");//$NON-NLS-1$
+		ONE_ARGUMENT_OPTIONS.add("-repeat");//$NON-NLS-1$
+		ONE_ARGUMENT_OPTIONS.add("-maxProblems");//$NON-NLS-1$
+		ONE_ARGUMENT_OPTIONS.add("-source");//$NON-NLS-1$
+		ONE_ARGUMENT_OPTIONS.add("-target");//$NON-NLS-1$
+		ONE_ARGUMENT_OPTIONS.add("-processor");//$NON-NLS-1$
+		ONE_ARGUMENT_OPTIONS.add("-classNames");//$NON-NLS-1$
+	}
+	public static int processOptionsFileManager(String option) {
+		if (option == null) return -1;
+		if (FILE_MANAGER_OPTIONS.contains(option)) {
+			return 1;
+		}
+		return -1;
+	}
+
+	public static int processOptions(String option) {
+		if (option == null) return -1;
+		if (ZERO_ARGUMENT_OPTIONS.contains(option)) {
+			return 0;
+		}
+		if (ONE_ARGUMENT_OPTIONS.contains(option)) {
+			return 1;
+		}
+		if (option.startsWith("-g")) { //$NON-NLS-1$
+			int length = option.length();
+			if (length > 3) {
+				StringTokenizer tokenizer =
+					new StringTokenizer(option.substring(3, option.length()), ",");//$NON-NLS-1$
+				while (tokenizer.hasMoreTokens()) {
+					String token = tokenizer.nextToken();
+					if ("vars".equals(token) || "lines".equals(token) || "source".equals(token)) {//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+						continue;
+					}
+					return -1;
+				}
+				return 0;
+			}
+			return -1;
+		}
+		if (option.startsWith("-warn")) {//$NON-NLS-1$
+			int length = option.length();
+			if (length <= 6) {
+				return -1;
+			}
+			int warnTokenStart;
+			switch (option.charAt(6)) {
+				case '+' : 
+					warnTokenStart = 7;
+					break;
+				case '-' :
+					warnTokenStart = 7;
+					break;
+				default:
+					warnTokenStart = 6;
+			}
+		
+			StringTokenizer tokenizer =
+				new StringTokenizer(option.substring(warnTokenStart, option.length()), ","); //$NON-NLS-1$
+			int tokenCounter = 0;
+
+			while (tokenizer.hasMoreTokens()) {
+				String token = tokenizer.nextToken();
+				tokenCounter++;
+				if ("constructorName".equals(token)//$NON-NLS-1$
+						|| token.equals("pkgDefaultMethod")//$NON-NLS-1$
+						|| token.equals("packageDefaultMethod")//$NON-NLS-1$
+						|| token.equals("maskedCatchBlock")//$NON-NLS-1$
+						|| token.equals("maskedCatchBlocks")//$NON-NLS-1$
+						|| token.equals("deprecation")//$NON-NLS-1$
+						|| token.equals("allDeprecation")//$NON-NLS-1$
+						|| token.equals("unusedLocal")//$NON-NLS-1$
+						|| token.equals("unusedLocals")//$NON-NLS-1$
+						|| token.equals("unusedArgument")//$NON-NLS-1$
+						|| token.equals("unusedArguments")//$NON-NLS-1$
+						|| token.equals("unusedImport")//$NON-NLS-1$
+						|| token.equals("unusedImports")//$NON-NLS-1$
+						|| token.equals("unusedPrivate")//$NON-NLS-1$
+						|| token.equals("unusedLabel")//$NON-NLS-1$
+						|| token.equals("localHiding")//$NON-NLS-1$
+						|| token.equals("fieldHiding")//$NON-NLS-1$
+						|| token.equals("specialParamHiding")//$NON-NLS-1$
+						|| token.equals("conditionAssign")//$NON-NLS-1$
+						|| token.equals("syntheticAccess")//$NON-NLS-1$
+						|| token.equals("synthetic-access")//$NON-NLS-1$
+						|| token.equals("nls")//$NON-NLS-1$
+						|| token.equals("staticReceiver")//$NON-NLS-1$
+						|| token.equals("indirectStatic")//$NON-NLS-1$
+						|| token.equals("noEffectAssign")//$NON-NLS-1$
+						|| token.equals("intfNonInherited")//$NON-NLS-1$
+						|| token.equals("interfaceNonInherited")//$NON-NLS-1$
+						|| token.equals("charConcat")//$NON-NLS-1$
+						|| token.equals("noImplicitStringConversion")//$NON-NLS-1$
+						|| token.equals("semicolon")//$NON-NLS-1$
+						|| token.equals("serial")//$NON-NLS-1$
+						|| token.equals("emptyBlock")//$NON-NLS-1$
+						|| token.equals("uselessTypeCheck")//$NON-NLS-1$
+						|| token.equals("unchecked")//$NON-NLS-1$
+						|| token.equals("unsafe")//$NON-NLS-1$
+						|| token.equals("raw")//$NON-NLS-1$
+						|| token.equals("finalBound")//$NON-NLS-1$
+						|| token.equals("suppress")//$NON-NLS-1$
+						|| token.equals("warningToken")//$NON-NLS-1$
+						|| token.equals("unnecessaryElse")//$NON-NLS-1$
+						|| token.equals("javadoc")//$NON-NLS-1$
+						|| token.equals("allJavadoc")//$NON-NLS-1$
+						|| token.equals("assertIdentifier")//$NON-NLS-1$
+						|| token.equals("enumIdentifier")//$NON-NLS-1$
+						|| token.equals("finally")//$NON-NLS-1$
+						|| token.equals("unusedThrown")//$NON-NLS-1$
+						|| token.equals("unqualifiedField")//$NON-NLS-1$
+						|| token.equals("unqualified-field-access")//$NON-NLS-1$
+						|| token.equals("typeHiding")//$NON-NLS-1$
+						|| token.equals("varargsCast")//$NON-NLS-1$
+						|| token.equals("null")//$NON-NLS-1$
+						|| token.equals("boxing")//$NON-NLS-1$
+						|| token.equals("over-ann")//$NON-NLS-1$
+						|| token.equals("dep-ann")//$NON-NLS-1$
+						|| token.equals("intfAnnotation")//$NON-NLS-1$
+						|| token.equals("enumSwitch")//$NON-NLS-1$
+						|| token.equals("incomplete-switch")//$NON-NLS-1$
+						|| token.equals("hiding")//$NON-NLS-1$
+						|| token.equals("static-access")//$NON-NLS-1$
+						|| token.equals("unused")//$NON-NLS-1$
+						|| token.equals("paramAssign")//$NON-NLS-1$
+						|| token.equals("discouraged")//$NON-NLS-1$
+						|| token.equals("forbidden")//$NON-NLS-1$
+						|| token.equals("fallthrough")) {//$NON-NLS-1$
+					continue;
+    			} else if (token.equals("tasks")) {//$NON-NLS-1$
+    				String taskTags = "";//$NON-NLS-1$
+    				int start = token.indexOf('(');
+    				int end = token.indexOf(')');
+    				if (start >= 0 && end >= 0 && start < end){
+    					taskTags = token.substring(start+1, end).trim();
+    					taskTags = taskTags.replace('|',',');
+    				}
+    				if (taskTags.length() == 0){
+    					return -1;
+    				}
+    				continue;
+    			} else {
+    				return -1;
+    			}
+			}
+			if (tokenCounter == 0) {
+				return -1;
+			} else {
+				return 0;
+			}
+		}
+		if (option.startsWith("-J")//$NON-NLS-1$
+				|| option.startsWith("-X")//$NON-NLS-1$
+				|| option.startsWith("-A")) {//$NON-NLS-1$
+			return 0;
+		}
+		return -1;
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util.java
new file mode 100644
index 0000000..98a0994
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/apt/util/Util.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.apt.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CoderResult;
+import java.nio.charset.CodingErrorAction;
+import java.nio.charset.IllegalCharsetNameException;
+import java.nio.charset.UnsupportedCharsetException;
+import java.util.ArrayList;
+
+import javax.tools.FileObject;
+
+/**
+ * Util class that defines helper methods to read class contents with handling of wrong encoding
+ *
+ */
+public final class Util {
+	public static String LINE_SEPARATOR = System.getProperty("line.separator"); //$NON-NLS-1$
+
+	public static class EncodingError {
+		int position;
+		int length;
+		public EncodingError(int position, int length) {
+			this.position = position;
+			this.length = length;
+		}
+		
+		public String getSource(char[] unitSource) {
+			//extra from the source the innacurate     token
+			//and "highlight" it using some underneath ^^^^^
+			//put some context around too.
+
+			//this code assumes that the font used in the console is fixed size
+
+			//sanity .....
+			int startPosition = this.position;
+			int endPosition = this.position + this.length - 1;
+			
+			if ((startPosition > endPosition)
+				|| ((startPosition < 0) && (endPosition < 0))
+				|| unitSource.length == 0)
+				return "No source available"; //$NON-NLS-1$
+
+			StringBuffer errorBuffer = new StringBuffer();
+			errorBuffer.append('\t');
+			
+			char c;
+			final char SPACE = ' ';
+			final char MARK = '^';
+			final char TAB = '\t';
+			//the next code tries to underline the token.....
+			//it assumes (for a good display) that token source does not
+			//contain any \r \n. This is false on statements ! 
+			//(the code still works but the display is not optimal !)
+
+			// expand to line limits
+			int length = unitSource.length, begin, end;
+			for (begin = startPosition >= length ? length - 1 : startPosition; begin > 0; begin--) {
+				if ((c = unitSource[begin - 1]) == '\n' || c == '\r') break;
+			}
+			for (end = endPosition >= length ? length - 1 : endPosition ; end+1 < length; end++) {
+				if ((c = unitSource[end + 1]) == '\r' || c == '\n') break;
+			}
+			
+			// trim left and right spaces/tabs
+			while ((c = unitSource[begin]) == ' ' || c == '\t') begin++;
+			//while ((c = unitSource[end]) == ' ' || c == '\t') end--; TODO (philippe) should also trim right, but all tests are to be updated
+			
+			// copy source
+			errorBuffer.append(unitSource, begin, end-begin+1);
+			errorBuffer.append(Util.LINE_SEPARATOR).append("\t"); //$NON-NLS-1$
+
+			// compute underline
+			for (int i = begin; i <startPosition; i++) {
+				errorBuffer.append((unitSource[i] == TAB) ? TAB : SPACE);
+			}
+			for (int i = startPosition; i <= (endPosition >= length ? length - 1 : endPosition); i++) {
+				errorBuffer.append(MARK);
+			}
+			return errorBuffer.toString();
+		}
+	}
+	public static class EncodingErrorCollector {
+		ArrayList<EncodingError> encodingErrors = new ArrayList<EncodingError>();
+		FileObject fileObject;
+		String encoding;
+		
+		public EncodingErrorCollector(FileObject fileObject, String encoding) {
+			this.fileObject = fileObject;
+			this.encoding = encoding;
+		}
+		public void collect(int position, int length) {
+			this.encodingErrors.add(new EncodingError(position, length));
+		}
+		public void reportAllEncodingErrors(String string) {
+			// this is where the encoding errors should be reported
+			char[] unitSource = string.toCharArray();
+			for (EncodingError error : this.encodingErrors) {
+				System.err.println(this.fileObject.getName() + " Unmappable character for encoding " + this.encoding);//$NON-NLS-1$
+				System.err.println(error.getSource(unitSource));
+			}
+		}
+	}
+
+	public static char[] getInputStreamAsCharArray(InputStream stream, int length, String encoding) throws IOException {
+		Charset charset = null;
+		try {
+			charset = Charset.forName(encoding);
+		} catch (IllegalCharsetNameException e) {
+			System.err.println("Illegal charset name : " + encoding); //$NON-NLS-1$
+			return null;
+		} catch(UnsupportedCharsetException e) {
+			System.err.println("Unsupported charset : " + encoding); //$NON-NLS-1$
+			return null;
+		}
+		CharsetDecoder charsetDecoder = charset.newDecoder();
+		charsetDecoder.onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE);
+		byte[] contents = org.aspectj.org.eclipse.jdt.internal.compiler.util.Util.getInputStreamAsByteArray(stream, length);
+		ByteBuffer byteBuffer = ByteBuffer.allocate(contents.length);
+		byteBuffer.put(contents);
+		byteBuffer.flip();
+		return charsetDecoder.decode(byteBuffer).array();
+	}
+	
+	public static CharSequence getCharContents(FileObject fileObject, boolean ignoreEncodingErrors, byte[] contents, String encoding) throws IOException {
+		if (contents == null) return null;
+		Charset charset = null;
+		try {
+			charset = Charset.forName(encoding);
+		} catch (IllegalCharsetNameException e) {
+			System.err.println("Illegal charset name : " + encoding); //$NON-NLS-1$
+			return null;
+		} catch(UnsupportedCharsetException e) {
+			System.err.println("Unsupported charset : " + encoding); //$NON-NLS-1$
+			return null;
+		}
+		CharsetDecoder charsetDecoder = charset.newDecoder();
+		ByteBuffer byteBuffer = ByteBuffer.allocate(contents.length);
+		byteBuffer.put(contents);
+		byteBuffer.flip();
+		if (ignoreEncodingErrors) {
+			charsetDecoder.onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE);
+			return charsetDecoder.decode(byteBuffer);
+		} else {
+			charsetDecoder.onMalformedInput(CodingErrorAction.REPORT).onUnmappableCharacter(CodingErrorAction.REPORT);
+			CharBuffer out = CharBuffer.allocate(contents.length);
+			CoderResult result = null;
+			String replacement = charsetDecoder.replacement();
+			int replacementLength = replacement.length();
+			EncodingErrorCollector collector = null;
+			while (true) {
+				result = charsetDecoder.decode(byteBuffer, out, true);
+				if (result.isMalformed() || result.isUnmappable()) {
+					/* treat the error
+					 * The wrong input character is at out.position
+					 */
+					if (collector == null) {
+						collector = new EncodingErrorCollector(fileObject, encoding);
+					}
+					reportEncodingError(collector, out.position(), result.length());
+					if ((out.position() + replacementLength) >= out.capacity()) {
+						// resize
+						CharBuffer temp = CharBuffer.allocate(out.capacity() * 2);
+						out.flip();
+						temp.put(out);
+						out = temp;
+					}
+					out.append(replacement);
+					byteBuffer.position(byteBuffer.position() + result.length());
+					continue;
+				}
+				if (result.isOverflow()) {
+					CharBuffer temp = CharBuffer.allocate(out.capacity() * 2);
+					out.flip();
+					temp.put(out);
+					out = temp;
+				} else {
+					break;
+				}
+			}
+			out.flip();
+			if (collector != null) {
+				collector.reportAllEncodingErrors(out.toString());
+			}
+			return out;
+		}
+	}
+	
+	private static void reportEncodingError(EncodingErrorCollector collector, int position, int length) {
+		collector.collect(position, -length);
+	}
+}
+
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ASTNode.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
index f6ec9dc..7a88ab2 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
@@ -29,6 +29,7 @@
  *								Bug 428352 - [1.8][compiler] Resolution errors don't always surface
  *								Bug 427163 - [1.8][null] bogus error "Contradictory null specification" on varags
  *								Bug 432348 - [1.8] Internal compiler error (NPE) after upgrade to 1.8
+ *								Bug 440143 - [1.8][null] one more case of contradictory null annotations regarding type variables
  *     Jesper S Moller - Contributions for
  *								bug 382721 - [1.8][compiler] Effectively final variables needs special treatment
  *								bug 412153 - [1.8][compiler] Check validity of annotations which may be repeatable
@@ -978,7 +979,7 @@
 			}
 		}
 		if (copySE8AnnotationsToType)
-			copySE8AnnotationsToType(scope, recipient, sourceAnnotations, true);
+			copySE8AnnotationsToType(scope, recipient, sourceAnnotations, false);
 		return annotations;
 	}
 	
@@ -1004,7 +1005,7 @@
 	}
 
 	// When SE8 annotations feature in SE7 locations, they get attributed to the declared entity. Copy/move these to the type of the declared entity (field, local, argument etc.)
-	public static void copySE8AnnotationsToType(BlockScope scope, Binding recipient, Annotation[] annotations, boolean isLegalLocation) {
+	public static void copySE8AnnotationsToType(BlockScope scope, Binding recipient, Annotation[] annotations, boolean annotatingEnumerator) {
 		
 		if (annotations == null || annotations.length == 0 || recipient == null)
 			return;
@@ -1028,15 +1029,20 @@
 		int se8count = 0;
 		long se8nullBits = 0;
 		Annotation se8NullAnnotation = null;
-		int firstSE8 = -1, lastSE8 = 0;
+		int firstSE8 = -1;
 		for (int i = 0, length = annotations.length; i < length; i++) {
 			AnnotationBinding annotation = annotations[i].getCompilerAnnotation();
 			if (annotation == null) continue;
 			final ReferenceBinding annotationType = annotation.getAnnotationType();
 			long metaTagBits = annotationType.getAnnotationTagBits();
 			if ((metaTagBits & TagBits.AnnotationForTypeUse) != 0) {
+				if (annotatingEnumerator) {
+					if ((metaTagBits & recipientTargetMask) == 0) {
+						scope.problemReporter().misplacedTypeAnnotations(annotations[i], annotations[i]);
+					}
+					continue;
+				}
 				if (firstSE8 == -1) firstSE8 = i;
-				lastSE8 = i;
 				if (se8Annotations == null) {
 					se8Annotations = new AnnotationBinding[] { annotation };
 					se8count = 1;
@@ -1054,10 +1060,6 @@
 			}
 		}
 		if (se8Annotations != null) {
-			if (!isLegalLocation) {
-				scope.problemReporter().misplacedTypeAnnotations(annotations[firstSE8], annotations[lastSE8]);
-				return;
-			}
 			switch (recipient.kind()) {
 				case Binding.LOCAL:
 					LocalVariableBinding local = (LocalVariableBinding) recipient;
@@ -1118,7 +1120,12 @@
 		// for arrays: @T X[] SE7 associates @T to the type, but in SE8 it affects the leaf component type
 		long prevNullBits = existingType.leafComponentType().tagBits & TagBits.AnnotationNullMASK;
 		if (se8nullBits != 0 && prevNullBits != se8nullBits && ((prevNullBits | se8nullBits) == TagBits.AnnotationNullMASK)) {
-			scope.problemReporter().contradictoryNullAnnotations(se8NullAnnotation);
+			if (existingType instanceof TypeVariableBinding) {
+				// let type-use annotations override annotations on the type parameter declaration
+				existingType = existingType.unannotated(true);
+			} else {
+				scope.problemReporter().contradictoryNullAnnotations(se8NullAnnotation);
+			}
 		}
 		TypeBinding oldLeafType = (unionRef == null) ? existingType.leafComponentType() : unionRef.resolvedType;
 		AnnotationBinding [][] goodies = new AnnotationBinding[typeRef.getAnnotatableLevels()][];
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.java
index 2450c9d..879b671 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.java
@@ -22,6 +22,7 @@
  *								Bug 403216 - [1.8][null] TypeReference#captureTypeAnnotations treats type annotations as type argument annotations
  *								Bug 417295 - [1.8[[null] Massage type annotated null analysis to gel well with deep encoded type bindings.
  *								Bug 392238 - [1.8][compiler][null] Detect semantically invalid null type annotations
+ *								Bug 435570 - [1.8][null] @NonNullByDefault illegally tries to affect "throws E"
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.ast;
 
@@ -588,7 +589,7 @@
 			this.scope.problemReporter().illegalTypeForExplicitThis(this.receiver, enclosingReceiver);
 		}
 
-		if (resolvedReceiverType.hasNullTypeAnnotations()) {
+		if (this.receiver.type.hasNullTypeAnnotation()) {
 			this.scope.problemReporter().nullAnnotationUnsupportedLocation(this.receiver.type);
 		}
 	}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
index 048930b..cebbf82 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
@@ -287,7 +287,7 @@
 
 	// perform some emulation work in case there is some and we are inside a local type only
 	if (allocatedTypeErasure.isNestedType()
-		&& currentScope.enclosingSourceType().isLocalType()) {
+		&& (currentScope.enclosingSourceType().isLocalType() || currentScope.isLambdaScope())) {
 
 		if (allocatedTypeErasure.isLocalType()) {
 			((LocalTypeBinding) allocatedTypeErasure).addInnerEmulationDependent(currentScope, false);
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Annotation.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Annotation.java
index 2c57407..93d3278 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Annotation.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Annotation.java
@@ -799,7 +799,7 @@
 		this.resolvedType = typeBinding;
 		// ensure type refers to an annotation type
 		if (!typeBinding.isAnnotationType() && typeBinding.isValidBinding()) {
-			scope.problemReporter().typeMismatchError(typeBinding, scope.getJavaLangAnnotationAnnotation(), this.type, null);
+			scope.problemReporter().notAnnotationType(typeBinding, this.type);
 			return null;
 		}
 
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Argument.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Argument.java
index 941eaf2..f9b47b6 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Argument.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Argument.java
@@ -12,6 +12,8 @@
  *								bug 365519 - editorial cleanup after bug 186342 and bug 365387
  *								Bug 417295 - [1.8[[null] Massage type annotated null analysis to gel well with deep encoded type bindings.
  *								Bug 392238 - [1.8][compiler][null] Detect semantically invalid null type annotations
+ *								Bug 435570 - [1.8][null] @NonNullByDefault illegally tries to affect "throws E"
+ *								Bug 438012 - [1.8][null] Bogus Warning: The nullness annotation is redundant with a default that applies to this location
  *        Andy Clement (GoPivotal, Inc) aclement@gopivotal.com - Contributions for
  *                          Bug 409246 - [1.8][compiler] Type annotations on catch parameters not handled properly
  *******************************************************************************/
@@ -126,6 +128,12 @@
 		return (this.bits & IsTypeElided) != 0;
 	}
 
+	public boolean hasNullTypeAnnotation() {
+		// parser associates SE8 annotations to the declaration
+		return TypeReference.containsNullAnnotation(this.annotations) || 
+				(this.type != null && this.type.hasNullTypeAnnotation()); // just in case
+	}
+
 	public StringBuffer print(int indent, StringBuffer output) {
 
 		printIndent(indent, output);
@@ -196,7 +204,9 @@
 		}
 		resolveAnnotations(scope, this.annotations, this.binding, true);
 		Annotation.isTypeUseCompatible(this.type, scope, this.annotations);
-		if (this.type.resolvedType != null && this.type.resolvedType.hasNullTypeAnnotations()) {
+		if (scope.compilerOptions().isAnnotationBasedNullAnalysisEnabled && 
+				(this.type.hasNullTypeAnnotation() || TypeReference.containsNullAnnotation(this.annotations)))
+		{
 			scope.problemReporter().nullAnnotationUnsupportedLocation(this.type);
 		}
 
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ArrayTypeReference.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ArrayTypeReference.java
index 129ccd1..9a35544 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ArrayTypeReference.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ArrayTypeReference.java
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Stephan Herrmann - Contribution for
  *								Bug 429958 - [1.8][null] evaluate new DefaultLocation attribute of @NonNullByDefault
+ *								Bug 435570 - [1.8][null] @NonNullByDefault illegally tries to affect "throws E"
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.ast;
 
@@ -179,4 +180,20 @@
 		TypeBinding internalResolveType = super.internalResolveType(scope, location);
 		return internalResolveType;
 	}
+	
+	@Override
+	public boolean hasNullTypeAnnotation() {
+    	if (super.hasNullTypeAnnotation())
+    		return true;
+    	if (this.resolvedType != null && !this.resolvedType.hasNullTypeAnnotations())
+    		return false; // shortcut
+    	if (this.annotationsOnDimensions != null) {
+    		for (int i = 0; i < this.annotationsOnDimensions.length; i++) {
+				Annotation[] innerAnnotations = this.annotationsOnDimensions[i];
+				if (containsNullAnnotation(innerAnnotations))
+					return true;
+			}
+    	}
+    	return false;
+	}
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression.java
index 0f379d6..21f4db5 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/FunctionalExpression.java
@@ -264,14 +264,14 @@
 		VisibilityInspector inspector = new VisibilityInspector(this, scope, shouldChatter);
 		
 		boolean status = true;
-		
 		if (!inspector.visible(sam.returnType))
 			status = false;
 		if (!inspector.visible(sam.parameters))
 			status = false;
 		if (!inspector.visible(sam.thrownExceptions))
 			status = false;
-		
+		if (!inspector.visible(sam.declaringClass))
+			status = false;
 		return status;
 	}
 
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java
index 251066d..032a84c 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java
@@ -14,6 +14,7 @@
  *								Bug 392099 - [1.8][compiler][null] Apply null annotation on types for null analysis
  *								Bug 417295 - [1.8[[null] Massage type annotated null analysis to gel well with deep encoded type bindings.
  *								Bug 392238 - [1.8][compiler][null] Detect semantically invalid null type annotations
+ *								Bug 435570 - [1.8][null] @NonNullByDefault illegally tries to affect "throws E"
  *        Andy Clement - Contributions for
  *                          Bug 383624 - [1.8][compiler] Revive code generation support for type annotations (from Olivier's work)
  *******************************************************************************/
@@ -89,7 +90,7 @@
 	this.constant = Constant.NotAConstant;
 	TypeBinding expressionType = this.expression.resolveType(scope);
 	TypeBinding checkedType = this.type.resolveType(scope, true /* check bounds*/);
-	if (expressionType != null && checkedType != null && checkedType.hasNullTypeAnnotations()) {
+	if (expressionType != null && checkedType != null && this.type.hasNullTypeAnnotation()) {
 		// don't complain if the entire operation is redundant anyway
 		if (!expressionType.isCompatibleWith(checkedType) || NullAnnotationMatching.analyse(checkedType, expressionType, -1).isAnyMismatch())
 			scope.problemReporter().nullAnnotationUnsupportedLocation(this.type);
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression.java
index e7d386a..d72ca10 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/LambdaExpression.java
@@ -31,6 +31,7 @@
  *							Bug 428980 - [1.8][null] simple expression as lambda body doesn't leverage null annotation on argument
  *							Bug 429430 - [1.8] Lambdas and method reference infer wrong exception type with generics (RuntimeException instead of IOException)
  *							Bug 432110 - [1.8][compiler] nested lambda type incorrectly inferred vs javac
+ *							Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
  *     Andy Clement (GoPivotal, Inc) aclement@gopivotal.com - Contributions for
  *                          Bug 405104 - [1.8][compiler][codegen] Implement support for serializeable lambdas
  *******************************************************************************/
@@ -52,6 +53,7 @@
 import org.aspectj.org.eclipse.jdt.internal.compiler.IErrorHandlingPolicy;
 import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.aspectj.org.eclipse.jdt.internal.compiler.codegen.CodeStream;
+import org.aspectj.org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
 import org.aspectj.org.eclipse.jdt.internal.compiler.flow.ExceptionHandlingFlowContext;
 import org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowContext;
 import org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowInfo;
@@ -114,6 +116,7 @@
 	private ReferenceBinding classType;
 	public int ordinal;
 	private Set thrownExceptions;
+	public char[] text;  // source representation of the lambda.
 	private static final SyntheticArgumentBinding [] NO_SYNTHETIC_ARGUMENTS = new SyntheticArgumentBinding[0];
 	private static final Block NO_BODY = new Block(0, true);
 
@@ -333,9 +336,6 @@
 					}
 				}
 
-				TypeBinding leafType = parameterType.leafComponentType();
-				if (leafType instanceof ReferenceBinding && (((ReferenceBinding) leafType).modifiers & ExtraCompilerModifiers.AccGenericSignature) != 0)
-					this.binding.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
 				newParameters[i] = argument.bind(this.scope, parameterType, false);				
 				if (argument.annotations != null) {
 					this.binding.tagBits |= TagBits.HasParameterAnnotations;
@@ -371,7 +371,6 @@
 			if ((exception.tagBits & TagBits.HasMissingType) != 0) {
 				this.binding.tagBits |= TagBits.HasMissingType;
 			}
-			this.binding.modifiers |= (exception.modifiers & ExtraCompilerModifiers.AccGenericSignature);
 		}
 		
 		TypeBinding returnType = this.binding.returnType;
@@ -379,9 +378,6 @@
 			if ((returnType.tagBits & TagBits.HasMissingType) != 0) {
 				this.binding.tagBits |= TagBits.HasMissingType;
 			}
-			TypeBinding leafType = returnType.leafComponentType();
-			if (leafType instanceof ReferenceBinding && (((ReferenceBinding) leafType).modifiers & ExtraCompilerModifiers.AccGenericSignature) != 0)
-				this.binding.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
 		} // TODO (stephan): else? (can that happen?)
 
 		if (haveDescriptor && !buggyArguments && blockScope.compilerOptions().isAnnotationBasedNullAnalysisEnabled) {
@@ -514,7 +510,7 @@
 			int length = this.binding.parameters.length;
 			for (int i=0; i<length; i++) {
 				if (!this.scope.validateNullAnnotation(this.binding.returnType.tagBits, this.arguments[i].type, this.arguments[i].annotations))
-					this.binding.returnType = this.binding.returnType.unannotated();
+					this.binding.returnType = this.binding.returnType.unannotated(true);
 			}
 		}
 	}
@@ -943,8 +939,9 @@
 
 	LambdaExpression copy() {
 		final Parser parser = new Parser(this.enclosingScope.problemReporter(), false);
-		final char[] source = this.compilationResult.getCompilationUnit().getContents();
-		LambdaExpression copy =  (LambdaExpression) parser.parseLambdaExpression(source, this.sourceStart, this.sourceEnd - this.sourceStart + 1, 
+		final ICompilationUnit compilationUnit = this.compilationResult.getCompilationUnit();
+		char[] source = compilationUnit != null ? compilationUnit.getContents() : this.text;
+		LambdaExpression copy =  (LambdaExpression) parser.parseLambdaExpression(source, compilationUnit != null ? this.sourceStart : 0, this.sourceEnd - this.sourceStart + 1, 
 										this.enclosingScope.referenceCompilationUnit(), false /* record line separators */);
 
 		if (copy != null) { // ==> syntax errors == null
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java
index 179acae..1038e73 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java
@@ -17,6 +17,7 @@
  *								Bug 392099 - [1.8][compiler][null] Apply null annotation on types for null analysis
  *								Bug 392238 - [1.8][compiler][null] Detect semantically invalid null type annotations
  *								Bug 416176 - [1.8][compiler][null] null type annotations cause grief on type variables
+ *								Bug 438012 - [1.8][null] Bogus Warning: The nullness annotation is redundant with a default that applies to this location
  *     Jesper S Moller <jesper@selskabet.org> - Contributions for
  *								bug 378674 - "The method can be declared as static" is wrong
  *******************************************************************************/
@@ -170,6 +171,12 @@
 			annotation.traverse(collector, (BlockScope) null);
 		}
 	}
+	
+	public boolean hasNullTypeAnnotation() {
+		// parser associates SE8 annotations to the declaration
+		return TypeReference.containsNullAnnotation(this.annotations) || 
+				(this.returnType != null && this.returnType.hasNullTypeAnnotation()); // just in case
+	}
 
 	public boolean isDefaultMethod() {
 		return (this.modifiers & ExtraCompilerModifiers.AccDefaultMethod) != 0;
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching.java
index f4c9823..ff95f88 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/NullAnnotationMatching.java
@@ -175,18 +175,16 @@
 					int dims = requiredType.dimensions();
 					if (requiredType.dimensions() == providedType.dimensions()) {
 						long[] providedDimsTagBits = ((ArrayBinding)providedType).nullTagBitsPerDimension;
-						if (providedDimsTagBits == null) {
-							severity = 1; // required is annotated, provided not, need unchecked conversion
-						} else {
-							for (int i=0; i<=dims; i++) {
-								long requiredBits = validNullTagBits(requiredDimsTagBits[i]);
-								long providedBits = validNullTagBits(providedDimsTagBits[i]);
-								if (i > 0)
-									nullStatus = -1; // don't use beyond the outermost dimension
-								severity = Math.max(severity, computeNullProblemSeverity(requiredBits, providedBits, nullStatus, mode == CheckMode.OVERRIDE));
-								if (severity == 2)
-									return NullAnnotationMatching.NULL_ANNOTATIONS_MISMATCH;
-							}
+						if (providedDimsTagBits == null)
+							providedDimsTagBits = new long[dims+1]; // set to unspec'd at all dimensions
+						for (int i=0; i<=dims; i++) {
+							long requiredBits = validNullTagBits(requiredDimsTagBits[i]);
+							long providedBits = validNullTagBits(providedDimsTagBits[i]);
+							if (i > 0)
+								nullStatus = -1; // don't use beyond the outermost dimension
+							severity = Math.max(severity, computeNullProblemSeverity(requiredBits, providedBits, nullStatus, mode == CheckMode.OVERRIDE && nullStatus == -1));
+							if (severity == 2)
+								return NullAnnotationMatching.NULL_ANNOTATIONS_MISMATCH;
 						}
 					} else if (providedType.id == TypeIds.T_null) {
 						if (dims > 0 && requiredDimsTagBits[0] == TagBits.AnnotationNonNull)
@@ -389,13 +387,25 @@
 		return one;
 	}
 
-	private static int computeNullProblemSeverity(long requiredBits, long providedBits, int nullStatus, boolean strict) {
-		if ((requiredBits != 0 || strict) && requiredBits != providedBits) {
+	/**
+	 * Evaluate problem severity from the given details:
+	 * @param requiredBits null tagBits of the required type
+	 * @param providedBits null tagBits of the provided type
+	 * @param nullStatus -1 means: don't use, other values see constants in FlowInfo
+	 * @param overrideDetailChecking true enables strictest mode during override analysis when checking type details (type argument, array content)
+	 * @return see {@link #severity} for interpretation of values
+	 */
+	private static int computeNullProblemSeverity(long requiredBits, long providedBits, int nullStatus, boolean overrideDetailChecking) {
+		// nullStatus: 
+		// overrideDetailChecking: 
+		if ((requiredBits != 0 || overrideDetailChecking) && requiredBits != providedBits) {
 			if (requiredBits == TagBits.AnnotationNonNull && nullStatus == FlowInfo.NON_NULL) {
 				return 0; // OK by flow analysis
 			}
 			if (requiredBits == TagBits.AnnotationNullMASK)
 				return 0; // OK since LHS accepts either
+			if (nullStatus != -1 && !overrideDetailChecking && requiredBits == TagBits.AnnotationNullable)
+				return 0; // when using flow info, everything is compatible to nullable
 			if (providedBits != 0) {
 				return 2; // mismatching annotations
 			} else {
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java
index 2dfd5a8..a12edf9 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java
@@ -11,9 +11,10 @@
  *								bug 342671 - ClassCastException: org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding cannot be cast to org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ArrayBinding
  *								bug 392099 - [1.8][compiler][null] Apply null annotation on types for null analysis
  *								Bug 415043 - [1.8][null] Follow-up re null type annotations after bug 392099
- *								Bug 416181 – [1.8][compiler][null] Invalid assignment is not rejected by the compiler
+ *								Bug 416181 - [1.8][compiler][null] Invalid assignment is not rejected by the compiler
  *								Bug 429958 - [1.8][null] evaluate new DefaultLocation attribute of @NonNullByDefault
  *								Bug 434600 - Incorrect null analysis error reporting on type parameters
+ *								Bug 435570 - [1.8][null] @NonNullByDefault illegally tries to affect "throws E"
  *        Andy Clement - Contributions for
  *                          Bug 383624 - [1.8][compiler] Revive code generation support for type annotations (from Olivier's work)
  *******************************************************************************/
@@ -98,6 +99,24 @@
 		return true;
 	}
 
+	@Override
+    public boolean hasNullTypeAnnotation() {
+    	if (super.hasNullTypeAnnotation())
+    		return true;
+    	if (this.resolvedType != null && !this.resolvedType.hasNullTypeAnnotations())
+    		return false; // shortcut
+    	if (this.typeArguments != null) {
+    		for (int i = 0; i < this.typeArguments.length; i++) {
+    			TypeReference[] arguments = this.typeArguments[i];
+    			for (int j = 0; j < arguments.length; j++) {				
+    				if (arguments[i].hasNullTypeAnnotation())
+    					return true;
+				}
+			}
+    	}
+    	return false;
+    }
+
 	/**
 	 * @return char[][]
 	 */
@@ -229,8 +248,7 @@
 				return null;
 			}
 			ReferenceBinding currentType = (ReferenceBinding) this.resolvedType;
-			if (qualifyingType == null
-					|| (currentType.isMemberType() && TypeBinding.notEquals(qualifyingType,currentType.enclosingType()))) { // AspectJ Extension - pr235829
+			if (qualifyingType == null) {
 				qualifyingType = currentType.enclosingType(); // if member type
 				if (qualifyingType != null) {
 					qualifyingType = currentType.isStatic()
@@ -324,7 +342,7 @@
 					if (((ClassScope) scope).detectHierarchyCycle(currentOriginal, this))
 						return null;
 				if (currentOriginal.isGenericType()) {
-	   			    if (typeIsConsistent && qualifyingType != null && qualifyingType.isParameterizedType()) {
+	   			    if (typeIsConsistent && qualifyingType != null && qualifyingType.isParameterizedType() && !currentOriginal.isStatic()) {
 						scope.problemReporter().parameterizedMemberTypeMissingArguments(this, scope.environment().createParameterizedType(currentOriginal, null, qualifyingType), i);
 						typeIsConsistent = false;
 					}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java
index 7aeb88e..fdb2ffb 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java
@@ -14,6 +14,7 @@
  *								Bug 415043 - [1.8][null] Follow-up re null type annotations after bug 392099
  *								Bug 429958 - [1.8][null] evaluate new DefaultLocation attribute of @NonNullByDefault
  *								Bug 434600 - Incorrect null analysis error reporting on type parameters
+ *								Bug 435570 - [1.8][null] @NonNullByDefault illegally tries to affect "throws E"
  *        Andy Clement - Contributions for
  *                          Bug 383624 - [1.8][compiler] Revive code generation support for type annotations (from Olivier's work)
  *******************************************************************************/
@@ -119,6 +120,21 @@
     	return true;
     }
 
+    @Override
+    public boolean hasNullTypeAnnotation() {
+    	if (super.hasNullTypeAnnotation())
+    		return true;
+    	if (this.resolvedType != null && !this.resolvedType.hasNullTypeAnnotations())
+    		return false; // shortcut
+    	if (this.typeArguments != null) {
+    		for (int i = 0; i < this.typeArguments.length; i++) {
+				if (this.typeArguments[i].hasNullTypeAnnotation())
+					return true;
+			}
+    	}
+    	return false;
+    }
+
     /*
      * No need to check for reference to raw type per construction
      */
@@ -150,20 +166,20 @@
 			this.resolvedType = createArrayType(scope, this.resolvedType);
 			resolveAnnotations(scope, 0); // no defaultNullness for buggy type
 			if (checkBounds)
-			checkNullConstraints(scope, this.typeArguments);
+				checkNullConstraints(scope, this.typeArguments);
 			return null;							// (1) no useful type, but still captured dimensions into this.resolvedType
 		} else {
 			type = createArrayType(scope, type);
 			if (!this.resolvedType.isValidBinding() && this.resolvedType.dimensions() == type.dimensions()) {
 				resolveAnnotations(scope, 0); // no defaultNullness for buggy type
 				if (checkBounds)
-				checkNullConstraints(scope, this.typeArguments);
+					checkNullConstraints(scope, this.typeArguments);
 				return type;						// (2) found some error, but could recover useful type (like closestMatch)
 			} else {
 				this.resolvedType = type; 			// (3) no complaint, keep fully resolved type (incl. dimensions)
 				resolveAnnotations(scope, location);
 				if (checkBounds)
-				checkNullConstraints(scope, this.typeArguments);
+					checkNullConstraints(scope, this.typeArguments);
 				return this.resolvedType; // pick up any annotated type.
 			}
 		}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
index 651ca4d..6ad6c2a 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
@@ -253,7 +253,7 @@
 
 		// perform some extra emulation work in case there is some and we are inside a local type only
 		if (allocatedTypeErasure.isNestedType()
-			&& currentScope.enclosingSourceType().isLocalType()) {
+			&& (currentScope.enclosingSourceType().isLocalType() || currentScope.isLambdaScope())) {
 
 			if (allocatedTypeErasure.isLocalType()) {
 				((LocalTypeBinding) allocatedTypeErasure).addInnerEmulationDependent(currentScope, this.enclosingInstance != null);
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.java
index d058e84..448d361 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.java
@@ -26,6 +26,9 @@
  *							Bug 428264 - [1.8] method reference of generic class causes problems (wrong inference result or NPE)
  *							Bug 392238 - [1.8][compiler][null] Detect semantically invalid null type annotations
  *							Bug 426537 - [1.8][inference] Eclipse compiler thinks I<? super J> is compatible with I<J<?>> - raw type J involved
+ *							Bug 435570 - [1.8][null] @NonNullByDefault illegally tries to affect "throws E"
+ *							Bug 435689 - [1.8][inference] Type inference not occurring with lambda expression and method reference
+ *							Bug 438383 - [1.8][null] Bogus warning: Null type safety at method return type
  *        Andy Clement (GoPivotal, Inc) aclement@gopivotal.com - Contribution for
  *                          Bug 383624 - [1.8][compiler] Revive code generation support for type annotations (from Olivier's work)
  *******************************************************************************/
@@ -385,9 +388,10 @@
 				return this.resolvedType = null;
     	}
 
+    	if (lhsType != null && !lhsType.isRawType()) // RawType::m and RawType::new are not exact method references
+    		this.exactMethodBinding = isMethodReference() ? scope.getExactMethod(lhsType, this.selector, this) : scope.getExactConstructor(lhsType, this);
+
     	if (this.expectedType == null && this.expressionContext == INVOCATION_CONTEXT) {
-    		if (lhsType != null && !lhsType.isRawType()) // RawType::m and RawType::new are not exact method references
-    			this.exactMethodBinding = isMethodReference() ? scope.getExactMethod(lhsType, this.selector, this) : scope.getExactConstructor(lhsType, this);
     		return new PolyTypeBinding(this);
 		}
 		super.resolveType(scope);
@@ -409,7 +413,7 @@
 			return this.resolvedType = null;
 		}
 		
-		if (this.lhs instanceof TypeReference && lhsType.hasNullTypeAnnotations()) {
+		if (this.lhs instanceof TypeReference && ((TypeReference)this.lhs).hasNullTypeAnnotation()) {
 			scope.problemReporter().nullAnnotationUnsupportedLocation((TypeReference) this.lhs);
 		}
 
@@ -602,7 +606,8 @@
     				scope.problemReporter().referenceExpressionArgumentNullityMismatch(this, bindingParameter, descriptorParameter, this.descriptor, i, annotationStatus);
     			}
     		}
-        	if ((this.descriptor.returnType.tagBits & TagBits.AnnotationNonNull) != 0) {
+        	if (!this.binding.isConstructor() && (this.descriptor.returnType.tagBits & TagBits.AnnotationNonNull) != 0) {
+        		// since constructors never return null we don't have to check those anyway.
         		if ((this.binding.returnType.tagBits & TagBits.AnnotationNonNull) == 0) {
         			char[][] providedAnnotationName = ((this.binding.returnType.tagBits & TagBits.AnnotationNullable) != 0) ?
         					scope.environment().getNullableAnnotationName() : null;
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TryStatement.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TryStatement.java
index 6091690..c827a92 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TryStatement.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TryStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1145,6 +1145,8 @@
 		int totalCount = 0;
 		ReferenceBinding[][] allExceptionTypes = new ReferenceBinding[length][];
 		for (int i = 0; i < length; i++) {
+			if (argumentTypes[i] instanceof ArrayBinding)
+				continue;
 			ReferenceBinding currentExceptionType = (ReferenceBinding) argumentTypes[i];
 			TypeReference catchArgumentType = this.catchArguments[i].type;
 			if ((catchArgumentType.bits & ASTNode.IsUnionType) != 0) {
@@ -1165,6 +1167,7 @@
 		this.caughtExceptionsCatchBlocks  = new int[totalCount];
 		for (int i = 0, l = 0; i < length; i++) {
 			ReferenceBinding[] currentExceptions = allExceptionTypes[i];
+			if (currentExceptions == null) continue;
 			loop: for (int j = 0, max = currentExceptions.length; j < max; j++) {
 				ReferenceBinding exception = currentExceptions[j];
 				this.caughtExceptionTypes[l] = exception;
@@ -1172,6 +1175,7 @@
 				// now iterate over all previous exceptions
 				for (int k = 0; k < i; k++) {
 					ReferenceBinding[] exceptions = allExceptionTypes[k];
+					if (exceptions == null) continue;
 					for (int n = 0, max2 = exceptions.length; n < max2; n++) {
 						ReferenceBinding currentException = exceptions[n];
 						if (exception.isCompatibleWith(currentException)) {
@@ -1192,6 +1196,8 @@
 	} else {
 		this.caughtExceptionTypes = new ReferenceBinding[length];
 		for (int i = 0; i < length; i++) {
+			if (argumentTypes[i] instanceof ArrayBinding)
+				continue;
 			this.caughtExceptionTypes[i] = (ReferenceBinding) argumentTypes[i];
 			for (int j = 0; j < i; j++) {
 				if (this.caughtExceptionTypes[i].isCompatibleWith(argumentTypes[j])) {
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java
index f92ad85..9ac0e41 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java
@@ -807,8 +807,8 @@
 		ReferenceBinding superclassBinding = (ReferenceBinding)nestedType.superclass.erasure();
 		if (superclassBinding.enclosingType() != null && !superclassBinding.isStatic()) {
 			if (!superclassBinding.isLocalType()
-					|| ((NestedTypeBinding)superclassBinding).getSyntheticField(superclassBinding.enclosingType(), true) != null){
-
+					|| ((NestedTypeBinding)superclassBinding).getSyntheticField(superclassBinding.enclosingType(), true) != null
+					|| superclassBinding.isMemberType()){
 				nestedType.addSyntheticArgument(superclassBinding.enclosingType());
 			}
 		}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference.java
index 8a4a1b1..8cad7d4 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/TypeReference.java
@@ -18,6 +18,9 @@
  *								Bug 429958 - [1.8][null] evaluate new DefaultLocation attribute of @NonNullByDefault
  *								Bug 434570 - Generic type mismatch for parametrized class annotation attribute with inner class
  *								Bug 434600 - Incorrect null analysis error reporting on type parameters
+ *								Bug 439516 - [1.8][null] NonNullByDefault wrongly applied to implicit type bound of binary type
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
+ *								Bug 435570 - [1.8][null] @NonNullByDefault illegally tries to affect "throws E"
  *        Andy Clement (GoPivotal, Inc) aclement@gopivotal.com - Contributions for
  *                          Bug 383624 - [1.8][compiler] Revive code generation support for type annotations (from Olivier's work)
  *                          Bug 409236 - [1.8][compiler] Type annotations on intersection cast types dropped by code generator
@@ -639,12 +642,16 @@
 			&& (this.resolvedType.tagBits & TagBits.AnnotationNullMASK) == 0
 			&& !this.resolvedType.isTypeVariable()
 			&& !this.resolvedType.isWildcard()
-			&& location != 0 
+			&& location != 0
 			&& scope.hasDefaultNullnessFor(location)) 
 	{
-		LookupEnvironment environment = scope.environment();
-		AnnotationBinding[] annots = new AnnotationBinding[]{environment.getNonNullAnnotation()};
-		this.resolvedType = environment.createAnnotatedType(this.resolvedType, annots);
+		if (location == Binding.DefaultLocationTypeBound && this.resolvedType.id == TypeIds.T_JavaLangObject) {
+			scope.problemReporter().implicitObjectBoundNoNullDefault(this);
+		} else {
+			LookupEnvironment environment = scope.environment();
+			AnnotationBinding[] annots = new AnnotationBinding[]{environment.getNonNullAnnotation()};
+			this.resolvedType = environment.createAnnotatedType(this.resolvedType, annots);
+		}
 	}
 }
 public int getAnnotatableLevels() {
@@ -660,12 +667,12 @@
 		TypeVariableBinding[] typeVariables = this.resolvedType.original().typeVariables();
 		for (int i = 0; i < typeArguments.length; i++) {
 			TypeReference arg = typeArguments[i];
-			if (arg.resolvedType != null && arg.resolvedType.hasNullTypeAnnotations())
+			if (arg.resolvedType != null)
 				arg.checkNullConstraints(scope, typeVariables, i);
 		}
 	}
 }
-/** Check whether this type reference conforms to all null constraints defined for any of the given type variables. */
+/** Check whether this type reference conforms to the null constraints defined for the corresponding type variable. */
 protected void checkNullConstraints(Scope scope, TypeBinding[] variables, int rank) {
 	if (variables != null && variables.length > rank) {
 		TypeBinding variable = variables[rank];
@@ -691,6 +698,26 @@
 	}
 	return null;
 }
+public boolean hasNullTypeAnnotation() {
+	if (this.annotations != null) {
+		Annotation[] innerAnnotations = this.annotations[this.annotations.length-1];
+		if (containsNullAnnotation(innerAnnotations))
+			return true;
+	}
+	return false;
+}
+public static boolean containsNullAnnotation(Annotation[] annotations) {
+	if (annotations != null) {
+		for (int i = 0; i < annotations.length; i++) {
+			if (annotations[i] != null 
+					&& annotations[i].resolvedType != null 
+					&& (annotations[i].resolvedType.id == TypeIds.T_ConfiguredAnnotationNonNull
+						|| annotations[i].resolvedType.id == TypeIds.T_ConfiguredAnnotationNullable))
+				return true;
+		}
+	}
+	return false;	
+}
 public TypeReference[] getTypeReferences() {
 	return new TypeReference [] { this };
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Wildcard.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Wildcard.java
index 2fa0b96..fe78e6b 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Wildcard.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/ast/Wildcard.java
@@ -13,6 +13,7 @@
  *							Bug 415043 - [1.8][null] Follow-up re null type annotations after bug 392099
  *							Bug 417295 - [1.8[[null] Massage type annotated null analysis to gel well with deep encoded type bindings.
  *							Bug 429958 - [1.8][null] evaluate new DefaultLocation attribute of @NonNullByDefault
+ *							Bug 440462 - [null][compiler]NPE in EJC for erroneous null annotations
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.ast;
 
@@ -75,7 +76,13 @@
 		if (boundType != null && boundType.hasNullTypeAnnotations() && this.resolvedType.hasNullTypeAnnotations()) {
 			if (((boundType.tagBits | this.resolvedType.tagBits) & TagBits.AnnotationNullMASK) == TagBits.AnnotationNullMASK) { // are both set?
 				Annotation annotation = this.bound.findAnnotation(boundType.tagBits & TagBits.AnnotationNullMASK);
-				scope.problemReporter().contradictoryNullAnnotationsOnBounds(annotation, this.resolvedType.tagBits);
+				if (annotation == null) { // false alarm, implicit annotation is no conflict, but should be removed:
+					TypeBinding newBound = boundType.unannotated(true);
+					((WildcardBinding)this.resolvedType).bound = newBound;
+					this.bound.resolvedType = newBound;
+				} else {
+					scope.problemReporter().contradictoryNullAnnotationsOnBounds(annotation, this.resolvedType.tagBits);
+				}
 			}
 		}
 		return this.resolvedType;
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker.java
index 1d4c8a9..db18317 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker.java
@@ -16,6 +16,7 @@
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.IBinaryTypeAnnotation;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeIds;
 
 /**
  * A type annotation walker that adds missing NonNull annotations according to the current default.
@@ -25,6 +26,8 @@
 	private int defaultNullness;
 	private boolean atDefaultLocation;
 	private boolean nextIsDefaultLocation;
+	private boolean atTypeBound;
+	private boolean nextIsTypeBound;
 	private boolean isEmpty;
 	IBinaryAnnotation nonNullAnnotation;
 
@@ -38,24 +41,26 @@
 	
 	/** Create an initial walker without 'real' type annotations, but with a nonnull default. */
 	public NonNullDefaultAwareTypeAnnotationWalker(int defaultNullness, LookupEnvironment environment) {
-		this(defaultNullness, getNonNullAnnotation(environment), false);
+		this(defaultNullness, getNonNullAnnotation(environment), false, false);
 	}
 
 	/** Get restricted walker, still with non-empty type annotations. */
 	NonNullDefaultAwareTypeAnnotationWalker(IBinaryTypeAnnotation[] typeAnnotations, long newMatches, int newPathPtr,
-						int defaultNullness, IBinaryAnnotation nonNullAnnotation, boolean atDefaultLocation) {
+						int defaultNullness, IBinaryAnnotation nonNullAnnotation, boolean atDefaultLocation, boolean atTypeBound) {
 		super(typeAnnotations, newMatches, newPathPtr);
 		this.defaultNullness = defaultNullness;
 		this.nonNullAnnotation = nonNullAnnotation;
 		this.atDefaultLocation = atDefaultLocation;
+		this.atTypeBound = atTypeBound;
 	}
 
 	/** Create a restricted walker without 'real' type annotations, but with a nonnull default. */
-	NonNullDefaultAwareTypeAnnotationWalker(int defaultNullness, IBinaryAnnotation nonNullAnnotation, boolean atDefaultLocation) {
+	NonNullDefaultAwareTypeAnnotationWalker(int defaultNullness, IBinaryAnnotation nonNullAnnotation, boolean atDefaultLocation, boolean atTypeBound) {
 		super(null, 0, 0);
 		this.nonNullAnnotation = nonNullAnnotation;
 		this.defaultNullness = defaultNullness;
 		this.atDefaultLocation = atDefaultLocation;
+		this.atTypeBound = atTypeBound;
 		this.isEmpty = true;
 	}
 	
@@ -79,16 +84,19 @@
 		// considers nextIsDefaultLocation as the new atDefaultLocation
 		try {
 			// do we have any change at all?
-			if (this.matches == newMatches && this.pathPtr == newPathPtr && this.atDefaultLocation == this.nextIsDefaultLocation)
+			if (this.matches == newMatches && this.pathPtr == newPathPtr
+					&& this.atDefaultLocation == this.nextIsDefaultLocation && this.atTypeBound == this.nextIsTypeBound)
 				return this;
 			// are we running out of real type annotations?
 			if (newMatches == 0 || this.typeAnnotations == null || this.typeAnnotations.length == 0)
-				return new NonNullDefaultAwareTypeAnnotationWalker(this.defaultNullness, this.nonNullAnnotation, this.nextIsDefaultLocation);
+				return new NonNullDefaultAwareTypeAnnotationWalker(this.defaultNullness, this.nonNullAnnotation, 
+												this.nextIsDefaultLocation, this.nextIsTypeBound);
 			// proceed as normal, but pass on our specific fields, too:
 			return new NonNullDefaultAwareTypeAnnotationWalker(this.typeAnnotations, newMatches, newPathPtr,
-																this.defaultNullness, this.nonNullAnnotation, this.nextIsDefaultLocation);
+												this.defaultNullness, this.nonNullAnnotation, this.nextIsDefaultLocation, this.nextIsTypeBound);
 		} finally {
 			this.nextIsDefaultLocation = false; // expire
+			this.nextIsTypeBound = false;
 		}
 	}
 	
@@ -109,6 +117,7 @@
 	@Override
 	public TypeAnnotationWalker toTypeBound(short boundIndex) {
 		this.nextIsDefaultLocation = (this.defaultNullness & Binding.DefaultLocationTypeBound) != 0;
+		this.nextIsTypeBound = true;
 		if (this.isEmpty) return restrict(this.matches, this.pathPtr);
 		return super.toTypeBound(boundIndex);
 	}
@@ -116,6 +125,7 @@
 	@Override
 	public TypeAnnotationWalker toTypeParameterBounds(boolean isClassTypeParameter, int parameterRank) {
 		this.nextIsDefaultLocation = (this.defaultNullness & Binding.DefaultLocationTypeBound) != 0;
+		this.nextIsTypeBound = true;
 		if (this.isEmpty) return restrict(this.matches, this.pathPtr);
 		return super.toTypeParameterBounds(isClassTypeParameter, parameterRank);
 	}
@@ -123,6 +133,7 @@
 	@Override
 	public TypeAnnotationWalker toTypeArgument(int rank) {
 		this.nextIsDefaultLocation = (this.defaultNullness & Binding.DefaultLocationTypeArgument) != 0;
+		this.nextIsTypeBound = false;
 		if (this.isEmpty) return restrict(this.matches, this.pathPtr);
 		return super.toTypeArgument(rank);
 	}
@@ -130,14 +141,17 @@
 	@Override
 	public TypeAnnotationWalker toTypeParameter(boolean isClassTypeParameter, int rank) {
 		this.nextIsDefaultLocation = (this.defaultNullness & Binding.DefaultLocationTypeParameter) != 0;
+		this.nextIsTypeBound = false;
 		if (this.isEmpty) return restrict(this.matches, this.pathPtr);
 		return super.toTypeParameter(isClassTypeParameter, rank);
 	}
 
 	@Override
-	public IBinaryAnnotation[] getAnnotationsAtCursor() {
-		IBinaryAnnotation[] normalAnnotations = this.isEmpty ? null : super.getAnnotationsAtCursor();
-		if (this.atDefaultLocation) {
+	public IBinaryAnnotation[] getAnnotationsAtCursor(int currentTypeId) {
+		IBinaryAnnotation[] normalAnnotations = this.isEmpty ? null : super.getAnnotationsAtCursor(currentTypeId);
+		if (this.atDefaultLocation && 
+				!(this.atTypeBound && currentTypeId == TypeIds.T_JavaLangObject)) // for CLIMB-to-top consider a j.l.Object type bound as no explicit type bound
+		{
 			if (normalAnnotations == null || normalAnnotations.length == 0)
 				return new IBinaryAnnotation[] { this.nonNullAnnotation };
 			int len = normalAnnotations.length;
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker.java
index e1cbab6..3544c65 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker.java
@@ -41,7 +41,7 @@
 		public TypeAnnotationWalker toTypeBound(short boundIndex) { return this; }
 		public TypeAnnotationWalker toTypeParameter(boolean isClassTypeParameter, int rank) { return this; }
 		public TypeAnnotationWalker toNextDetail(int detailKind) { return this; }
-		public IBinaryAnnotation[] getAnnotationsAtCursor() { return NO_ANNOTATIONS; }
+		public IBinaryAnnotation[] getAnnotationsAtCursor(int currentTypeId) { return NO_ANNOTATIONS; }
 	};
 	
 	final protected IBinaryTypeAnnotation[] typeAnnotations;	// the actual material we're managing here
@@ -298,7 +298,7 @@
 	 * Retrieve the type annotations at the current position
 	 * reached by invocations of toXYZ() methods.
 	 */
-	public IBinaryAnnotation[] getAnnotationsAtCursor() {
+	public IBinaryAnnotation[] getAnnotationsAtCursor(int currentTypeId) {
 		int length = this.typeAnnotations.length;
 		IBinaryAnnotation[] filtered = new IBinaryAnnotation[length];
 		long ptr = 1;
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java
index 30885a2..e8eaffe 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java
@@ -14,6 +14,7 @@
  *							Bug 412153 - [1.8][compiler] Check validity of annotations which may be repeatable
  *     Andy Clement (GoPivotal, Inc) aclement@gopivotal.com - Contributions for
  *                          Bug 405104 - [1.8][compiler][codegen] Implement support for serializeable lambdas
+ *                          Bug 439889 - [1.8][compiler] [lambda] Deserializing lambda fails with IllegalArgumentException: "Invalid lambda deserialization"
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.codegen;
 
@@ -786,6 +787,7 @@
 			isInterface ? binding.isStatic() ? MethodHandleRefKindInvokeStatic : binding.isPrivate() ? MethodHandleRefKindInvokeSpecial : MethodHandleRefKindInvokeInterface
 			: binding.isConstructor() ? MethodHandleRefKindNewInvokeSpecial
 			: binding.isStatic() ? MethodHandleRefKindInvokeStatic
+			: binding.isPrivate() ? MethodHandleRefKindInvokeSpecial
 			: MethodHandleRefKindInvokeVirtual;
 		
 		return literalIndexForMethodHandle(referenceKind, binding.declaringClass, binding.selector, binding.signature(), isInterface);
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptBinaryLocalVariableBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptBinaryLocalVariableBinding.java
new file mode 100644
index 0000000..101de45
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptBinaryLocalVariableBinding.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
+
+public class AptBinaryLocalVariableBinding extends LocalVariableBinding {
+	AnnotationBinding[] annotationBindings;
+	// enclosing element
+	public MethodBinding methodBinding;
+	
+	public AptBinaryLocalVariableBinding(char[] name, TypeBinding type, int modifiers, AnnotationBinding[] annotationBindings, MethodBinding methodBinding) {
+		super(name, type, modifiers, true);
+		this.annotationBindings = annotationBindings == null ? Binding.NO_ANNOTATIONS : annotationBindings;
+		this.methodBinding = methodBinding;
+	}
+
+	public AnnotationBinding[] getAnnotations() {
+		return this.annotationBindings;
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptSourceLocalVariableBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptSourceLocalVariableBinding.java
new file mode 100644
index 0000000..3678f6b
--- /dev/null
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/AptSourceLocalVariableBinding.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
+
+public class AptSourceLocalVariableBinding extends LocalVariableBinding {
+
+	// enclosing element
+	public MethodBinding methodBinding;
+	private LocalVariableBinding local;
+	
+	public AptSourceLocalVariableBinding(LocalVariableBinding localVariableBinding, MethodBinding methodBinding) {
+		super(localVariableBinding.name, localVariableBinding.type, localVariableBinding.modifiers, true);
+		this.constant = localVariableBinding.constant;
+		this.declaration = localVariableBinding.declaration;
+		this.declaringScope = localVariableBinding.declaringScope;
+		this.id = localVariableBinding.id;
+		this.resolvedPosition = localVariableBinding.resolvedPosition;
+		this.tagBits = localVariableBinding.tagBits;
+		this.useFlag = localVariableBinding.useFlag;
+		this.initializationCount = localVariableBinding.initializationCount;
+		this.initializationPCs = localVariableBinding.initializationPCs;
+		this.methodBinding = methodBinding;
+		this.local = localVariableBinding;
+	}
+	
+	@Override
+	public AnnotationBinding[] getAnnotations() {
+		return this.local.getAnnotations();
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.java
index 945289b..871b3da 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.java
@@ -20,6 +20,8 @@
  *								Bug 425460 - [1.8] [inference] Type not inferred on stream.toArray
  *								Bug 426792 - [1.8][inference][impl] generify new type inference engine
  *								Bug 428019 - [1.8][compiler] Type inference failure with nested generic invocation.
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
+ *								Bug 440759 - [1.8][null] @NonNullByDefault should never affect wildcards and uses of a type variable
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -451,8 +453,17 @@
 public String toString() {
 	return this.leafComponentType != null ? debugName() : "NULL TYPE ARRAY"; //$NON-NLS-1$
 }
-public TypeBinding unannotated() {
-	return this.hasTypeAnnotations() ? this.environment.getUnannotatedType(this) : this;
+public TypeBinding unannotated(boolean removeOnlyNullAnnotations) {
+	if (!hasTypeAnnotations())
+		return this;
+	if (removeOnlyNullAnnotations) {
+		if (!hasNullTypeAnnotations())
+			return this;
+		AnnotationBinding[] newAnnotations = this.environment.filterNullTypeAnnotations(this.typeAnnotations);
+		if (newAnnotations.length > 0)
+			return this.environment.createArrayType(this.leafComponentType.unannotated(false), this.dimensions, newAnnotations);
+	}
+	return this.environment.getUnannotatedType(this);
 }
 @Override
 public TypeBinding uncapture(Scope scope) {
@@ -461,5 +472,8 @@
 	TypeBinding leafType = this.leafComponentType.uncapture(scope);
 	return scope.environment().createArrayType(leafType, this.dimensions, this.typeAnnotations);
 }
-
+@Override
+public boolean acceptsNonNullDefault() {
+	return true;
+}
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BaseTypeBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BaseTypeBinding.java
index 2b0ae3d..f6d4e60 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BaseTypeBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BaseTypeBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *     Stephan Herrmann - Contribution for
  *								bug 395002 - Self bound generic class doesn't resolve bounds properly for wildcards for certain parametrisation.
  *								Bug 417295 - [1.8[[null] Massage type annotated null analysis to gel well with deep encoded type bindings.
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -172,7 +173,7 @@
 		super.setTypeAnnotations(annotations, false); // never set nullTagBits on base types
 	}
 
-	public TypeBinding unannotated() {
+	public TypeBinding unannotated(boolean removeOnlyNullAnnotations) {
 		if (!this.hasTypeAnnotations())
 			return this;
 		switch (this.id) {
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
index 0de63e1..639bdd7 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
@@ -26,6 +26,9 @@
  *								Bug 392245 - [1.8][compiler][null] Define whether / how @NonNullByDefault applies to TYPE_USE locations
  *								Bug 429958 - [1.8][null] evaluate new DefaultLocation attribute of @NonNullByDefault
  *								Bug 390889 - [1.8][compiler] Evaluate options to support 1.7- projects against 1.8 JRE.
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
+ *								Bug 439516 - [1.8][null] NonNullByDefault wrongly applied to implicit type bound of binary type
+ *								Bug 434602 - Possible error with inferred null annotations leading to contradictory null annotations
  *    Jesper Steen Moller - Contributions for
  *								Bug 412150 [1.8] [compiler] Enable reflected parameter names during annotation processing
  *								Bug 412153 - [1.8][compiler] Check validity of annotations which may be repeatable
@@ -798,7 +801,7 @@
 		? new MethodBinding(methodModifiers, parameters, exceptions, this)
 		: new MethodBinding(methodModifiers, method.getSelector(), returnType, parameters, exceptions, this);
 	
-	IBinaryAnnotation[] receiverAnnotations = walker.toReceiver().getAnnotationsAtCursor();
+	IBinaryAnnotation[] receiverAnnotations = walker.toReceiver().getAnnotationsAtCursor(0);
 	if (receiverAnnotations != null && receiverAnnotations.length > 0) {
 		result.receiver = this.environment.createAnnotatedType(this, createAnnotations(receiverAnnotations, this.environment, missingTypeNames));
 	}
@@ -807,7 +810,7 @@
 		IBinaryAnnotation[] annotations = method.getAnnotations();
 	    if (annotations == null || annotations.length == 0)
 	    	if (method.isConstructor())
-	    		annotations = walker.toMethodReturn().getAnnotationsAtCursor(); // FIXME: When both exist, order could become an issue.
+	    		annotations = walker.toMethodReturn().getAnnotationsAtCursor(0); // FIXME: When both exist, order could become an issue.
 		result.setAnnotations(
 			createAnnotations(annotations, this.environment, missingTypeNames),
 			paramAnnotations,
@@ -820,9 +823,9 @@
 	if (use15specifics)
 		result.tagBits |= method.getTagBits();
 	result.typeVariables = typeVars;
-	// fixup the declaring element of the type variable
+	// fixup the declaring element of all type variables
 	for (int i = 0, length = typeVars.length; i < length; i++)
-		typeVars[i].declaringElement = result;
+		this.environment.typeSystem.fixTypeVariableDeclaringElement(typeVars[i], result);
 
 	return result;
 }
@@ -919,7 +922,7 @@
 						int colon = CharOperation.indexOf(Util.C_COLON, typeSignature, i);
 						char[] variableName = CharOperation.subarray(typeSignature, i, colon);
 						TypeVariableBinding typeVariable = new TypeVariableBinding(variableName, this, rank, this.environment);
-						AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.toTypeParameter(isClassTypeParameter, rank++).getAnnotationsAtCursor(), 
+						AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.toTypeParameter(isClassTypeParameter, rank++).getAnnotationsAtCursor(0), 
 																										this.environment, missingTypeNames);
 						if (annotations != null && annotations != Binding.NO_ANNOTATIONS)
 							typeVariable.setTypeAnnotations(annotations, this.environment.globalOptions.isAnnotationBasedNullAnalysisEnabled);
@@ -1524,8 +1527,15 @@
 }
 // End AspectJ Extension
 
+//pre: null annotation analysis is enabled
 private void scanFieldForNullAnnotation(IBinaryField field, FieldBinding fieldBinding, boolean isEnum) {
 	if (!isPrototype()) throw new IllegalStateException();
+
+	if (isEnum && (field.getModifiers() & ClassFileConstants.AccEnum) != 0) {
+		fieldBinding.tagBits |= TagBits.AnnotationNonNull;
+		return; // we know it's nonnull, no need to look for null *annotations* on enum constants.
+	}
+
 	if (this.environment.globalOptions.sourceLevel >= ClassFileConstants.JDK1_8) {
 		TypeBinding fieldType = fieldBinding.type;
 		if (fieldType != null
@@ -1569,11 +1579,6 @@
 	if (!explicitNullness && (this.tagBits & TagBits.AnnotationNonNullByDefault) != 0) {
 		fieldBinding.tagBits |= TagBits.AnnotationNonNull;
 	}
-	if (isEnum) {
-		if ((field.getModifiers() & ClassFileConstants.AccEnum) != 0) {
-			fieldBinding.tagBits |= TagBits.AnnotationNonNull;
-		}
-	}
 }
 
 private void scanMethodForNullAnnotation(IBinaryMethod method, MethodBinding methodBinding) {
@@ -1976,7 +1981,14 @@
 	return buffer.toString();
 }
 
-public TypeBinding unannotated() {
+public TypeBinding unannotated(boolean removeOnlyNullAnnotations) {
+	if (removeOnlyNullAnnotations) {
+		if (!hasNullTypeAnnotations())
+			return this;
+		AnnotationBinding[] newAnnotations = this.environment.filterNullTypeAnnotations(this.typeAnnotations);
+		if (newAnnotations.length > 0)
+			return this.environment.createAnnotatedType(this.prototype, newAnnotations);
+	}
 	return this.prototype;
 }
 
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BlockScope.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BlockScope.java
index b4ff78d..2f75455 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BlockScope.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BlockScope.java
@@ -249,8 +249,12 @@
 				&& (local.declaration != null) // unused (and non secret) local
 				&& ((local.declaration.bits & ASTNode.IsLocalDeclarationReachable) != 0)) { // declaration is reachable
 
-				if (!(local.declaration instanceof Argument)) // do not report unused catch arguments
+				if (local.isCatchParameter()) {
+					problemReporter().unusedExceptionParameter(local.declaration); // report unused catch arguments
+				}
+				else {
 					problemReporter().unusedLocalVariable(local.declaration);
+				}
 			}
 
 			// could be optimized out, but does need to preserve unread variables ?
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet.java
index ce29c0a..b0b014f 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/BoundSet.java
@@ -116,6 +116,7 @@
 			InferenceContext18.sortTypes(rights);
 			return rights;
 		}
+		// pre: beta is a prototype
 		public boolean hasDependency(InferenceVariable beta) {
 			if (this.superBounds != null && hasDependency(this.superBounds, beta))
 				return true;
@@ -131,11 +132,12 @@
 			}
 			return false;
 		}
+		// pre: var is a prototype
 		private boolean hasDependency(Set<TypeBound> someBounds, InferenceVariable var) {
 			Iterator<TypeBound> bIt = someBounds.iterator();
 			while (bIt.hasNext()) {
 				TypeBound bound = bIt.next();
-				if (bound.right == var || bound.right.mentionsAny(new TypeBinding[] {var}, -1)) //$IDENTITY-COMPARISON$ InferenceVariable
+				if (TypeBinding.equalsEquals(bound.right, var) || bound.right.mentionsAny(new TypeBinding[] {var}, -1))
 					return true;
 			}
 			return false;
@@ -236,7 +238,7 @@
 			if (nullHints == TagBits.AnnotationNullMASK) {
 				// on contradiction remove null type annotations
 				for (int i = 0; i < boundTypes.length; i++)
-					boundTypes[i] = boundTypes[i].unannotated();
+					boundTypes[i] = boundTypes[i].unannotated(true);
 			} else {
 				AnnotationBinding[] annot = environment.nullAnnotationsFromTagBits(nullHints);
 				if (annot != null) {
@@ -266,7 +268,7 @@
 					nullHints |= it.next().nullHints;
 			}
 			if (nullHints == TagBits.AnnotationNullMASK) // on contradiction remove null type annotations
-				return type.unannotated();
+				return type.unannotated(true);
 			AnnotationBinding[] annot = environment.nullAnnotationsFromTagBits(nullHints);
 			if (annot != null)
 				// only get here if exactly one of @NonNull or @Nullable was hinted; now apply this hint:
@@ -286,7 +288,7 @@
 					// adjust 'type' to fit the newBits
 					AnnotationBinding[] annot = environment.nullAnnotationsFromTagBits(newBits);
 					if (annot != null)
-						type = environment.createAnnotatedType(type.unannotated(), annot);
+						type = environment.createAnnotatedType(type.unannotated(true), annot);
 				}
 			}
 			this.instantiation = type;
@@ -355,19 +357,20 @@
 	}
 
 	public void addBound(TypeBound bound, LookupEnvironment environment) {
-		ThreeSets three = this.boundsPerVariable.get(bound.left);
+		InferenceVariable variable = bound.left.prototype();
+		ThreeSets three = this.boundsPerVariable.get(variable);
 		if (three == null)
-			this.boundsPerVariable.put(bound.left, (three = new ThreeSets()));
+			this.boundsPerVariable.put(variable, (three = new ThreeSets()));
 		three.addBound(bound);
 		// check if this makes the inference variable instantiated:
 		TypeBinding typeBinding = bound.right;
 		if (bound.relation == ReductionResult.SAME && typeBinding.isProperType(true))
-			three.setInstantiation(typeBinding, bound.left, environment);
+			three.setInstantiation(typeBinding, variable, environment);
 		if (bound.right instanceof InferenceVariable) {
 			// for a dependency between two IVs make a note about the inverse bound.
 			// this should be needed to determine IV dependencies independent of direction.
 			// TODO: so far no test could be identified which actually needs it ...
-			InferenceVariable rightIV = (InferenceVariable) bound.right;
+			InferenceVariable rightIV = (InferenceVariable) bound.right.prototype();
 			three = this.boundsPerVariable.get(rightIV);
 			if (three == null)
 				this.boundsPerVariable.put(rightIV, (three = new ThreeSets()));
@@ -387,14 +390,14 @@
 	}
 
 	public boolean isInstantiated(InferenceVariable inferenceVariable) {
-		ThreeSets three = this.boundsPerVariable.get(inferenceVariable);
+		ThreeSets three = this.boundsPerVariable.get(inferenceVariable.prototype());
 		if (three != null)
 			return three.instantiation != null;
 		return false;
 	}
 
 	public TypeBinding getInstantiation(InferenceVariable inferenceVariable, LookupEnvironment environment) {
-		ThreeSets three = this.boundsPerVariable.get(inferenceVariable);
+		ThreeSets three = this.boundsPerVariable.get(inferenceVariable.prototype());
 		if (three != null) {
 			TypeBinding instantiation = three.instantiation;
 			if (environment != null && environment.globalOptions.isAnnotationBasedNullAnalysisEnabled 
@@ -531,7 +534,7 @@
 					if (ai instanceof WildcardBinding) {
 						WildcardBinding wildcardBinding = (WildcardBinding)ai;
 						TypeBinding t = wildcardBinding.bound;
-						ThreeSets three = this.boundsPerVariable.get(alpha);
+						ThreeSets three = this.boundsPerVariable.get(alpha.prototype());
 						if (three != null) {
 							Iterator<TypeBound> it;
 							if (three.sameBounds != null) {
@@ -617,7 +620,7 @@
 	private ConstraintTypeFormula combineSameSame(TypeBound boundS, TypeBound boundT) {
 		
 		// α = S and α = T imply ⟨S = T⟩
-		if (boundS.left == boundT.left) //$IDENTITY-COMPARISON$ InferenceVariable
+		if (TypeBinding.equalsEquals(boundS.left, boundT.left))
 			return ConstraintTypeFormula.create(boundS.right, boundT.right, ReductionResult.SAME, boundS.isSoft||boundT.isSoft);
 
 		// match against more shapes:
@@ -649,25 +652,25 @@
 		//  α = S and T <: α imply ⟨T <: S⟩
 		InferenceVariable alpha = boundS.left;
 		TypeBinding s = boundS.right;
-		if (alpha == boundT.left) //$IDENTITY-COMPARISON$ InferenceVariable
+		if (TypeBinding.equalsEquals(alpha,boundT.left))
 			return ConstraintTypeFormula.create(s, boundT.right, boundT.relation, boundT.isSoft||boundS.isSoft);
-		if (alpha == boundT.right) //$IDENTITY-COMPARISON$ InferenceVariable
+		if (TypeBinding.equalsEquals(alpha, boundT.right))
 			return ConstraintTypeFormula.create(boundT.right, s, boundT.relation, boundT.isSoft||boundS.isSoft);
 
 		if (boundS.right instanceof InferenceVariable) {
 			// reverse:
 			alpha = (InferenceVariable) boundS.right;
 			s = boundS.left;
-			if (alpha == boundT.left) //$IDENTITY-COMPARISON$ InferenceVariable
+			if (TypeBinding.equalsEquals(alpha, boundT.left))
 				return ConstraintTypeFormula.create(s, boundT.right, boundT.relation, boundT.isSoft||boundS.isSoft);
-			if (alpha == boundT.right) //$IDENTITY-COMPARISON$ InferenceVariable
+			if (TypeBinding.equalsEquals(alpha, boundT.right))
 				return ConstraintTypeFormula.create(boundT.right, s, boundT.relation, boundT.isSoft||boundS.isSoft);			
 		}
 		
 		//  α = U and S <: T imply ⟨S[α:=U] <: T[α:=U]⟩ 
 		TypeBinding u = boundS.right;
 		if (u.isProperType(true)) {
-			TypeBinding left = (alpha == boundT.left) ? u : boundT.left; //$IDENTITY-COMPARISON$ InferenceVariable
+			TypeBinding left = (TypeBinding.equalsEquals(alpha, boundT.left)) ? u : boundT.left;
 			TypeBinding right = boundT.right.substituteInferenceVariable(alpha, u);
 			return ConstraintTypeFormula.create(left, right, boundT.relation, boundT.isSoft||boundS.isSoft);
 		}
@@ -677,13 +680,13 @@
 	private ConstraintTypeFormula combineSuperAndSub(TypeBound boundS, TypeBound boundT) {
 		//  permutations of: S <: α and α <: T imply ⟨S <: T⟩
 		InferenceVariable alpha = boundS.left;
-		if (alpha == boundT.left) //$IDENTITY-COMPARISON$ InferenceVariable
+		if (TypeBinding.equalsEquals(alpha, boundT.left))
 			//  α >: S and α <: T imply ⟨S <: T⟩
 			return ConstraintTypeFormula.create(boundS.right, boundT.right, ReductionResult.SUBTYPE, boundT.isSoft||boundS.isSoft);
 		if (boundS.right instanceof InferenceVariable) {
 			// try reverse:
 			alpha = (InferenceVariable) boundS.right;
-			if (alpha == boundT.right) //$IDENTITY-COMPARISON$ InferenceVariable
+			if (TypeBinding.equalsEquals(alpha, boundT.right))
 				// S :> α and T <: α  imply ⟨S :> T⟩
 				return ConstraintTypeFormula.create(boundS.left, boundT.left, ReductionResult.SUPERTYPE, boundT.isSoft||boundS.isSoft);
 		}
@@ -692,10 +695,10 @@
 	
 	private ConstraintTypeFormula combineEqualSupers(TypeBound boundS, TypeBound boundT) {
 		//  more permutations of: S <: α and α <: T imply ⟨S <: T⟩
-		if (boundS.left == boundT.right) //$IDENTITY-COMPARISON$ InferenceVariable
+		if (TypeBinding.equalsEquals(boundS.left, boundT.right))
 			// came in as: α REL S and T REL α imply ⟨T REL S⟩ 
 			return ConstraintTypeFormula.create(boundT.left, boundS.right, boundS.relation, boundT.isSoft||boundS.isSoft);
-		if (boundS.right == boundT.left) //$IDENTITY-COMPARISON$ InferenceVariable
+		if (TypeBinding.equalsEquals(boundS.right, boundT.left))
 			// came in as: S REL α and α REL T imply ⟨S REL T⟩ 
 			return ConstraintTypeFormula.create(boundS.left, boundT.right, boundS.relation, boundT.isSoft||boundS.isSoft);
 		return null;
@@ -710,7 +713,7 @@
 		 */
 		if (boundS.relation != ReductionResult.SUBTYPE || boundT.relation != ReductionResult.SUBTYPE)
 			return null;
-		if (boundS.left != boundT.left) //$IDENTITY-COMPARISON$ InferenceVariable
+		if (TypeBinding.notEquals(boundS.left, boundT.left))
 			return null;
 		TypeBinding[] supers = superTypesWithCommonGenericType(boundS.right, boundT.right);
 		if (supers != null)
@@ -776,13 +779,15 @@
 	 * Does this bound set define a direct dependency between the two given inference variables? 
 	 */
 	public boolean dependsOnResolutionOf(InferenceVariable alpha, InferenceVariable beta) {
+		alpha = alpha.prototype();
+		beta = beta.prototype();
 		Iterator<Map.Entry<ParameterizedTypeBinding, ParameterizedTypeBinding>> captureIter = this.captures.entrySet().iterator();
 		boolean betaIsInCaptureLhs = false;
 		while (captureIter.hasNext()) { // TODO: optimization: consider separate index structure (by IV)
 			Entry<ParameterizedTypeBinding, ParameterizedTypeBinding> entry = captureIter.next();
 			ParameterizedTypeBinding g = entry.getKey();
 			for (int i = 0; i < g.arguments.length; i++) {
-				if (g.arguments[i] == alpha) { //$IDENTITY-COMPARISON$ InferenceVariable
+				if (TypeBinding.equalsEquals(g.arguments[i], alpha)) {
 					// An inference variable α appearing on the left-hand side of a bound of the form G<..., α, ...> = capture(G<...>)
 					// depends on the resolution of every other inference variable mentioned in this bound (on both sides of the = sign).
 					ParameterizedTypeBinding captured = entry.getValue();
@@ -790,7 +795,7 @@
 						return true;
 					if (g.mentionsAny(new TypeBinding[]{beta}, i)) // exclude itself 
 						return true;
-				} else if (g.arguments[i] == beta) { //$IDENTITY-COMPARISON$ InferenceVariable
+				} else if (TypeBinding.equalsEquals(g.arguments[i], beta)) {
 					betaIsInCaptureLhs = true;
 				}
 			}
@@ -840,7 +845,7 @@
 	 * Answer all upper bounds for the given inference variable as defined by any bounds in this set. 
 	 */
 	public TypeBinding[] upperBounds(InferenceVariable variable, boolean onlyProper) {
-		ThreeSets three = this.boundsPerVariable.get(variable);
+		ThreeSets three = this.boundsPerVariable.get(variable.prototype());
 		if (three == null || three.subBounds == null)
 			return Binding.NO_TYPES;
 		return three.upperBounds(onlyProper, variable);
@@ -853,7 +858,7 @@
 	 * Answer all lower bounds for the given inference variable as defined by any bounds in this set. 
 	 */
 	TypeBinding[] lowerBounds(InferenceVariable variable, boolean onlyProper) {
-		ThreeSets three = this.boundsPerVariable.get(variable);
+		ThreeSets three = this.boundsPerVariable.get(variable.prototype());
 		if (three == null || three.superBounds == null)
 			return Binding.NO_TYPES;
 		return three.lowerBounds(onlyProper, variable);
@@ -881,7 +886,7 @@
 	}
 
 	public TypeBinding findWrapperTypeBound(InferenceVariable variable) {
-		ThreeSets three = this.boundsPerVariable.get(variable);
+		ThreeSets three = this.boundsPerVariable.get(variable.prototype());
 		if (three == null) return null;
 		return three.findSingleWrapperType();
 	}
@@ -892,7 +897,7 @@
 		// i) B2 contains a bound of one of the forms α = S or S <: α, where S is a wildcard-parameterized type, or ...
 		if (targetType.isBaseType()) return false;
 		if (InferenceContext18.parameterizedWithWildcard(targetType) != null) return false;
-		ThreeSets ts = this.boundsPerVariable.get(alpha);
+		ThreeSets ts = this.boundsPerVariable.get(alpha.prototype());
 		if (ts.sameBounds != null) {
 			Iterator<TypeBound> bounds = ts.sameBounds.iterator();
 			while (bounds.hasNext()) {
@@ -933,7 +938,7 @@
 		//   where there exists no type of the form G<...> that is a supertype of S, but the raw type G is a supertype of S.
 		if (!targetType.isParameterizedType()) return false;
 		TypeBinding g = targetType.original();
-		ThreeSets ts = this.boundsPerVariable.get(alpha);
+		ThreeSets ts = this.boundsPerVariable.get(alpha.prototype());
 		Iterator<TypeBound> boundIterator;
 		if (ts.sameBounds != null) {
 			boundIterator = ts.sameBounds.iterator();
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CaptureBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CaptureBinding.java
index 3c8596e..def8c42 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CaptureBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/CaptureBinding.java
@@ -10,7 +10,6 @@
  *     Stephan Herrmann - Contribution for
  *								Bug 400874 - [1.8][compiler] Inference infrastructure should evolve to meet JLS8 18.x (Part G of JSR335 spec)
  *								Bug 429384 - [1.8][null] implement conformance rules for null-annotated lower / upper type bounds
- *								Bug 434044 - Java 8 generics thinks single method is ambiguous
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -190,14 +189,8 @@
 					} else {
 						int length = substitutedVariableInterfaces.length;
 						System.arraycopy(substitutedVariableInterfaces, 0, substitutedVariableInterfaces = new ReferenceBinding[length+1], 1, length);
-						// to properly support glb, perform capture *after* glb, so restart from the original bound:
-						substitutedVariableInterfaces[0] =  (ReferenceBinding) originalWildcardBound;
-						ReferenceBinding[] glb = Scope.greaterLowerBound(substitutedVariableInterfaces);
-						if (glb != null) {
-							for (int i = 0; i < glb.length; i++)
-								glb[i] = (ReferenceBinding) glb[i].capture(scope, this.position);
-						}
-						this.setSuperInterfaces(glb);
+						substitutedVariableInterfaces[0] =  (ReferenceBinding) capturedWildcardBound;
+						this.setSuperInterfaces(Scope.greaterLowerBound(substitutedVariableInterfaces));
 					}
 				} else {
 					// the wildcard bound should be a subtype of variable superclass
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExceptionFormula.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExceptionFormula.java
index 701d106..48ae744 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExceptionFormula.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExceptionFormula.java
@@ -104,7 +104,7 @@
 				result.add(ConstraintTypeFormula.create(ePrime[i], e[j], SUBTYPE));
 		}				
 		for (int j = 0; j < n; j++)
-			inferenceContext.currentBounds.inThrows.add(e[j]);
+			inferenceContext.currentBounds.inThrows.add(e[j].prototype());
 		return result.toArray(new ConstraintFormula[result.size()]);
 	}
 
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula.java
index 9495855..79a7014 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ConstraintExpressionFormula.java
@@ -435,7 +435,8 @@
 				if (sam.returnType != TypeBinding.VOID) {
 					// ii)
 					final TypeBinding r = sam.returnType;
-					Statement body = lambda.body();
+					LambdaExpression resolved = lambda.getResolvedCopyForInferenceTargeting(this.right);
+					Statement body = resolved != null ? resolved.body() : lambda.body();
 					if (body instanceof Expression) {
 						variables.addAll(new ConstraintExpressionFormula((Expression) body, r, COMPATIBLE).inputVariables(context));
 					} else {
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ImplicitNullAnnotationVerifier.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ImplicitNullAnnotationVerifier.java
index 61802a0..ff0742a 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ImplicitNullAnnotationVerifier.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ImplicitNullAnnotationVerifier.java
@@ -76,8 +76,11 @@
 				return;
 			}
 			long sourceLevel = scope.compilerOptions().sourceLevel;
-			boolean needToApplyNonNullDefault = currentMethod.hasNonNullDefaultFor(Binding.DefaultLocationParameter|Binding.DefaultLocationReturnType,
-																					sourceLevel >= ClassFileConstants.JDK1_8);
+			boolean needToApplyReturnNonNullDefault =
+					currentMethod.hasNonNullDefaultFor(Binding.DefaultLocationReturnType, sourceLevel >= ClassFileConstants.JDK1_8);
+			boolean needToApplyParameterNonNullDefault =
+					currentMethod.hasNonNullDefaultFor(Binding.DefaultLocationParameter, sourceLevel >= ClassFileConstants.JDK1_8);
+			boolean needToApplyNonNullDefault = needToApplyReturnNonNullDefault | needToApplyParameterNonNullDefault;
 			// compatibility & inheritance do not consider constructors / static methods:
 			boolean isInstanceMethod = !currentMethod.isConstructor() && !currentMethod.isStatic();
 			complain &= isInstanceMethod;
@@ -110,7 +113,7 @@
 						// recurse to prepare currentSuper
 						checkImplicitNullAnnotations(currentSuper, null, false, scope); // TODO (stephan) complain=true if currentSuper is source method??
 					}
-					checkNullSpecInheritance(currentMethod, srcMethod, needToApplyNonNullDefault, complain, currentSuper, scope, inheritedNonNullnessInfos);
+					checkNullSpecInheritance(currentMethod, srcMethod, needToApplyReturnNonNullDefault, needToApplyParameterNonNullDefault, complain, currentSuper, scope, inheritedNonNullnessInfos);
 					needToApplyNonNullDefault = false;
 				}
 				
@@ -206,7 +209,8 @@
 	 * The main algorithm in this class.
 	 * @param currentMethod focus method
 	 * @param srcMethod AST of 'currentMethod' if present
-	 * @param hasNonNullDefault is a @NonNull default applicable at the site of currentMethod?
+	 * @param hasReturnNonNullDefault is a @NonNull default applicable for the return type of currentMethod?
+	 * @param hasParameterNonNullDefault is a @NonNull default applicable for parameters of currentMethod?
 	 * @param shouldComplain should we report any errors found? 
 	 *   (see also comment about flows into this method, below).
 	 * @param inheritedMethod one overridden method from a super type
@@ -216,7 +220,7 @@
 	 *   Index position 0 is used for the return type, positions i+1 for argument i.
 	 */
 	void checkNullSpecInheritance(MethodBinding currentMethod, AbstractMethodDeclaration srcMethod, 
-			boolean hasNonNullDefault, boolean shouldComplain,
+			boolean hasReturnNonNullDefault, boolean hasParameterNonNullDefault, boolean shouldComplain,
 			MethodBinding inheritedMethod, Scope scope, InheritedNonNullnessInfo[] inheritedNonNullnessInfos) 
 	{
 		// Note that basically two different flows lead into this method:
@@ -247,7 +251,7 @@
 				// unspecified, may fill in either from super or from default
 				if (shouldInherit) {
 					if (inheritedNullnessBits != 0) {
-						if (hasNonNullDefault) {
+						if (hasReturnNonNullDefault) {
 							// both inheritance and default: check for conflict?
 							if (shouldComplain && inheritedNullnessBits == TagBits.AnnotationNullable)
 								scope.problemReporter().conflictingNullAnnotations(currentMethod, ((MethodDeclaration) srcMethod).returnType, inheritedMethod);
@@ -263,7 +267,7 @@
 						break returnType; // compatible by construction, skip complain phase below
 					}
 				}
-				if (hasNonNullDefault) { // conflict with inheritance already checked
+				if (hasReturnNonNullDefault && currentMethod.returnType.acceptsNonNullDefault()) { // conflict with inheritance already checked
 					currentNullnessBits = TagBits.AnnotationNonNull;
 					applyReturnNullBits(currentMethod, currentNullnessBits);
 				}
@@ -289,7 +293,10 @@
 						substituteReturnType = substitute.returnType;
 					}
 					if (NullAnnotationMatching.analyse(inheritedMethod.returnType, currentMethod.returnType, substituteReturnType, 0, CheckMode.OVERRIDE).isAnyMismatch()) {
-						scope.problemReporter().cannotImplementIncompatibleNullness(currentMethod, inheritedMethod, useTypeAnnotations);
+						if (srcMethod != null)
+							scope.problemReporter().illegalReturnRedefinition(srcMethod, inheritedMethod, null);
+						else
+							scope.problemReporter().cannotImplementIncompatibleNullness(currentMethod, inheritedMethod, useTypeAnnotations);
 						return;
 					}
 				}
@@ -330,7 +337,7 @@
 				// unspecified, may fill in either from super or from default
 				if (inheritedNonNullNess != null) {
 					if (shouldInherit) {
-						if (hasNonNullDefault) {
+						if (hasParameterNonNullDefault) {
 							// both inheritance and default: check for conflict?
 							if (shouldComplain
 									&& inheritedNonNullNess == Boolean.FALSE
@@ -353,12 +360,14 @@
 						continue; // compatible by construction, skip complain phase below
 					}
 				}
-				if (hasNonNullDefault) { // conflict with inheritance already checked
+				if (hasParameterNonNullDefault) { // conflict with inheritance already checked
 					currentNonNullNess = Boolean.TRUE;
 					if (!useTypeAnnotations)
 						recordArgNonNullness(currentMethod, length, i, currentArgument, Boolean.TRUE);
-					else
+					else if (currentMethod.parameters[i].acceptsNonNullDefault())
 						recordArgNonNullness18(currentMethod, i, currentArgument, Boolean.TRUE, this.environment);
+					else
+						currentNonNullNess = null; // cancel if parameter doesn't accept the default
 				}
 			}
 			if (shouldComplain) {
@@ -404,9 +413,13 @@
 					}
 				} 
 				if (useTypeAnnotations) {
+					TypeBinding inheritedParameter = inheritedMethod.parameters[i];
 					TypeBinding substituteParameter = substituteParameters != null ? substituteParameters[i] : null;
-					if (NullAnnotationMatching.analyse(currentMethod.parameters[i], inheritedMethod.parameters[i], substituteParameter, 0, CheckMode.OVERRIDE).isAnyMismatch()) {
-						scope.problemReporter().cannotImplementIncompatibleNullness(currentMethod, inheritedMethod, false);
+					if (NullAnnotationMatching.analyse(currentMethod.parameters[i], inheritedParameter, substituteParameter, 0, CheckMode.OVERRIDE).isAnyMismatch()) {
+						if (currentArgument != null)
+							scope.problemReporter().illegalParameterRedefinition(currentArgument, inheritedMethod.declaringClass, inheritedParameter);
+						else
+							scope.problemReporter().cannotImplementIncompatibleNullness(currentMethod, inheritedMethod, false);
 					}
 				}
 			}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java
index e042dce..ef84cea 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java
@@ -291,7 +291,8 @@
 			}
 		}
 		if (checkVararg && varArgsType instanceof ArrayBinding) {
-			TypeBinding thetaF = substitute(((ArrayBinding) varArgsType).elementsType());
+			varArgsType = ((ArrayBinding)varArgsType).elementsType();
+			TypeBinding thetaF = substitute(varArgsType);
 			for (int i = len; i < this.invocationArguments.length; i++) {
 				if (this.invocationArguments[i].isPertinentToApplicability(varArgsType, method)) {
 					this.initialConstraints[numConstraints++] = new ConstraintExpressionFormula(this.invocationArguments[i], thetaF, ReductionResult.COMPATIBLE, ARGUMENT_CONSTRAINTS_ARE_SOFT);
@@ -329,22 +330,26 @@
 	public InferenceVariable[] addTypeVariableSubstitutions(TypeBinding[] typeVariables) {
 		int len2 = typeVariables.length;
 		InferenceVariable[] newVariables = new InferenceVariable[len2];
+		InferenceVariable[] toAdd = new InferenceVariable[len2];
+		int numToAdd = 0;
 		for (int i = 0; i < typeVariables.length; i++) {
 			if (typeVariables[i] instanceof InferenceVariable)
 				newVariables[i] = (InferenceVariable) typeVariables[i]; // prevent double substitution of an already-substituted inferenceVariable
 			else
-				newVariables[i] = new InferenceVariable(typeVariables[i], this.variableCount++, this.currentInvocation, this.environment, this.object);
+				toAdd[numToAdd++] =
+					newVariables[i] = new InferenceVariable(typeVariables[i], this.variableCount++, this.currentInvocation, this.environment, this.object);
 		}
-
-		int start = 0;
-		if (this.inferenceVariables != null) {
-			int len1 = this.inferenceVariables.length;
-			System.arraycopy(this.inferenceVariables, 0, this.inferenceVariables = new InferenceVariable[len1+len2], 0, len1);
-			start = len1;
-		} else {
-			this.inferenceVariables = new InferenceVariable[len2];
+		if (numToAdd > 0) {
+			int start = 0;
+			if (this.inferenceVariables != null) {
+				int len1 = this.inferenceVariables.length;
+				System.arraycopy(this.inferenceVariables, 0, this.inferenceVariables = new InferenceVariable[len1+numToAdd], 0, len1);
+				start = len1;
+			} else {
+				this.inferenceVariables = new InferenceVariable[numToAdd];
+			}
+			System.arraycopy(toAdd, 0, this.inferenceVariables, start, numToAdd);
 		}
-		System.arraycopy(newVariables, 0, this.inferenceVariables, start, len2);
 		return newVariables;
 	}
 
@@ -354,7 +359,7 @@
 			TypeBinding parameter = parameters[i];
 			for (int j = 0; j < thrownExceptions.length; j++) {
 				if (TypeBinding.equalsEquals(parameter, thrownExceptions[j])) {
-					this.currentBounds.inThrows.add(variables[i]);
+					this.currentBounds.inThrows.add(variables[i].prototype());
 					break;
 				}
 			}
@@ -412,7 +417,8 @@
 				}
 				InferenceVariable[] variablesArray = allInputs.toArray(new InferenceVariable[allInputs.size()]);
 				//   ... is resolved
-				this.currentBounds.incorporate(this);
+				if (!this.currentBounds.incorporate(this))
+					return null;
 				BoundSet solution = resolve(variablesArray);
 				// in rare cases resolving just one set of variables doesn't suffice,
 				// don't bother with finding the necessary superset, just resolve all:
@@ -949,7 +955,7 @@
 							} else {
 								TypeBinding[] upperBounds = tmpBoundSet.upperBounds(variable, true/*onlyProper*/);
 								// check exception bounds:
-								if (tmpBoundSet.inThrows.contains(variable) && tmpBoundSet.hasOnlyTrivialExceptionBounds(variable, upperBounds)) {
+								if (tmpBoundSet.inThrows.contains(variable.prototype()) && tmpBoundSet.hasOnlyTrivialExceptionBounds(variable, upperBounds)) {
 									TypeBinding runtimeException = this.scope.getType(TypeConstants.JAVA_LANG_RUNTIMEEXCEPTION, 3);
 									tmpBoundSet.addBound(new TypeBound(variable, runtimeException, ReductionResult.SAME), this.environment);
 								} else {
@@ -996,7 +1002,7 @@
 						}
 						public TypeBinding substitute(TypeVariableBinding typeVariable) {
 							for (int j = 0; j < numVars; j++)
-								if (variables[j] == typeVariable) //$IDENTITY-COMPARISON$ InferenceVariable does not participate in type annotation encoding
+								if (TypeBinding.equalsEquals(variables[j], typeVariable))
 									return zs[j];
 							return typeVariable;
 						}
@@ -1028,7 +1034,7 @@
 							ParameterizedTypeBinding key = captureKeys.next();
 							int len = key.arguments.length;
 							for (int i = 0; i < len; i++) {
-								if (key.arguments[i] == variable) { //$IDENTITY-COMPARISON$
+								if (TypeBinding.equalsEquals(key.arguments[i], variable)) {
 									toRemove.add(key);
 									break;
 								}
@@ -1126,7 +1132,7 @@
 		if (!variableSet.add(currentVariable)) return true; // already present
 		for (int j = 0; j < this.inferenceVariables.length; j++) {
 			InferenceVariable nextVariable = this.inferenceVariables[j];
-			if (nextVariable == currentVariable) continue; //$IDENTITY-COMPARISON$ Inference variables
+			if (TypeBinding.equalsEquals(nextVariable, currentVariable)) continue;
 			if (boundSet.dependsOnResolutionOf(currentVariable, nextVariable))
 				if (!addDependencies(boundSet, variableSet, nextVariable, min))
 					return false; // abort traversal: no improvement
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceVariable.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceVariable.java
index 739df0e..adee6c8 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceVariable.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InferenceVariable.java
@@ -22,6 +22,7 @@
 	InvocationSite site;
 	TypeBinding typeParameter;
 	long nullHints;
+	private InferenceVariable prototype;
 	
 	public InferenceVariable(TypeBinding typeParameter, int variableRank, InvocationSite site, LookupEnvironment environment, ReferenceBinding object) {
 		super(CharOperation.concat(typeParameter.shortReadableName(), Integer.toString(variableRank).toCharArray(), '#'), 
@@ -40,6 +41,20 @@
 			}
 		}
 		this.superclass = object;
+		this.prototype = this;
+	}
+	
+	@Override
+	public TypeBinding clone(TypeBinding enclosingType) {
+		InferenceVariable clone = new InferenceVariable(this.typeParameter, this.rank, this.site, this.environment, this.superclass);
+		clone.tagBits = this.tagBits;
+		clone.nullHints = this.nullHints;
+		clone.prototype = this;
+		return clone;
+	}
+
+	public InferenceVariable prototype() {
+		return this.prototype;
 	}
 
 	public char[] constantPoolName() {
@@ -62,7 +77,7 @@
 	}
 
 	TypeBinding substituteInferenceVariable(InferenceVariable var, TypeBinding substituteType) {
-		if (this == var) //$IDENTITY-COMPARISON$ InferenceVariable
+		if (TypeBinding.equalsEquals(this, var))
 			return substituteType;
 		return this;
 	}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.java
index 287e655..18c1d52 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Stephan Herrmann - Contribution for
- *								bug 384380 - False positive on a « Potential null pointer access » after a continue
+ *								bug 384380 - False positive on a "Potential null pointer access" after a continue
  *								Bug 400874 - [1.8][compiler] Inference infrastructure should evolve to meet JLS8 18.x (Part G of JSR335 spec)
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
index 5756ad0..79a9480 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
@@ -24,6 +24,9 @@
  *								Bug 417295 - [1.8[[null] Massage type annotated null analysis to gel well with deep encoded type bindings.
  *								Bug 416190 - [1.8][null] detect incompatible overrides due to null type annotations
  *								Bug 424624 - [1.8][null] if a static-object with annotation @NonNull is used, a warning is shown
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
+ *								Bug 439516 - [1.8][null] NonNullByDefault wrongly applied to implicit type bound of binary type
+ *								Bug 434602 - Possible error with inferred null annotations leading to contradictory null annotations
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -68,7 +71,7 @@
 	protected int lastUnitIndex = -1;
 	// End AspectJ Extension
 
-	private TypeSystem typeSystem;
+	TypeSystem typeSystem;
 	
 	public INameEnvironment nameEnvironment;
 	public CompilerOptions globalOptions;
@@ -1269,7 +1272,7 @@
 	AnnotationBinding [][] annotationsOnDimensions = null;
 	if (dimension > 0 && walker != TypeAnnotationWalker.EMPTY_ANNOTATION_WALKER) {
 		for (int i = 0; i < dimension; i++) {
-			AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(), this, missingTypeNames);
+			AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(0), this, missingTypeNames);
 			if (annotations != Binding.NO_ANNOTATIONS) { 
 				if (annotationsOnDimensions == null)
 					annotationsOnDimensions = new AnnotationBinding[dimension][];
@@ -1354,7 +1357,7 @@
 	}
 	AnnotationBinding [][] annotations = null;
 	for (int i = 0; i < depth; i++) {
-		AnnotationBinding[] annots = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(), this, missingTypeNames);
+		AnnotationBinding[] annots = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(binding.id), this, missingTypeNames);
 		if (annots != null && annots.length > 0) {
 			if (annotations == null)
 				annotations = new AnnotationBinding[depth][];
@@ -1399,7 +1402,7 @@
 	AnnotationBinding [][] annotationsOnDimensions = null;
 	if (dimension > 0 && walker != TypeAnnotationWalker.EMPTY_ANNOTATION_WALKER) {
 		for (int i = 0; i < dimension; i++) {
-			AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(), this, missingTypeNames);
+			AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(0), this, missingTypeNames);
 			if (annotations != Binding.NO_ANNOTATIONS) { 
 				if (annotationsOnDimensions == null)
 					annotationsOnDimensions = new AnnotationBinding[dimension][];
@@ -1444,7 +1447,7 @@
 	if (actualEnclosing != null) { // convert needed if read some static member type
 		actualEnclosing = (ReferenceBinding) convertToRawType(actualEnclosing, false /*do not force conversion of enclosing types*/);
 	}
-	AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(), this, missingTypeNames);
+	AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(actualType.id), this, missingTypeNames);
 	TypeBinding[] typeArguments = getTypeArgumentsFromSignature(wrapper, staticVariables, enclosingType, actualType, missingTypeNames, walker);
 	ParameterizedTypeBinding parameterizedType = createParameterizedType(actualType, typeArguments, actualEnclosing, annotations);
 
@@ -1458,7 +1461,7 @@
 		if (memberType == null)
 			this.problemReporter.corruptedSignature(parameterizedType, wrapper.signature, memberStart); // aborts
 		walker = walker.toNextNestedType();
-		annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(), this, missingTypeNames);
+		annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(memberType.id), this, missingTypeNames);
 		if (wrapper.signature[wrapper.start] == '<') {
 			wrapper.start++; // skip '<'
 			typeArguments = getTypeArgumentsFromSignature(wrapper, staticVariables, enclosingType, memberType, missingTypeNames, walker);
@@ -1472,7 +1475,7 @@
 }
 
 private TypeBinding getTypeFromTypeVariable(TypeVariableBinding typeVariableBinding, int dimension, AnnotationBinding [][] annotationsOnDimensions, TypeAnnotationWalker walker, char [][][] missingTypeNames) {
-	AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(), this, missingTypeNames);
+	AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(0), this, missingTypeNames);
 	if (annotations != null && annotations != Binding.NO_ANNOTATIONS)
 		typeVariableBinding = (TypeVariableBinding) createAnnotatedType(typeVariableBinding, new AnnotationBinding [][] { annotations });
 
@@ -1499,18 +1502,18 @@
 			// ? super aType
 			wrapper.start++;
 			TypeBinding bound = getTypeFromTypeSignature(wrapper, staticVariables, enclosingType, missingTypeNames, walker.toWildcardBound());
-			AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(), this, missingTypeNames);
+			AnnotationBinding [] annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(0), this, missingTypeNames);
 			return this.typeSystem.getWildcard(genericType, rank, bound, null /*no extra bound*/, Wildcard.SUPER, annotations);
 		case '+' :
 			// ? extends aType
 			wrapper.start++;
 			bound = getTypeFromTypeSignature(wrapper, staticVariables, enclosingType, missingTypeNames, walker.toWildcardBound());
-			annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(), this, missingTypeNames);
+			annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(0), this, missingTypeNames);
 			return this.typeSystem.getWildcard(genericType, rank, bound, null /*no extra bound*/, Wildcard.EXTENDS, annotations);
 		case '*' :
 			// ?
 			wrapper.start++;
-			annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(), this, missingTypeNames);
+			annotations = BinaryTypeBinding.createAnnotations(walker.getAnnotationsAtCursor(0), this, missingTypeNames);
 			return this.typeSystem.getWildcard(genericType, rank, null, null /*no extra bound*/, Wildcard.UNBOUND, annotations);
 		default :
 			return getTypeFromTypeSignature(wrapper, staticVariables, enclosingType, missingTypeNames, walker);
@@ -1617,4 +1620,27 @@
 public TypeBinding[] getAnnotatedTypes(TypeBinding type) {
 	return this.typeSystem.getAnnotatedTypes(type);
 }
+
+public AnnotationBinding[] filterNullTypeAnnotations(AnnotationBinding[] typeAnnotations) {
+	if (typeAnnotations.length == 0)
+		return typeAnnotations;
+	AnnotationBinding[] filtered = new AnnotationBinding[typeAnnotations.length];
+	int count = 0;
+	for (int i = 0; i < typeAnnotations.length; i++) {
+		AnnotationBinding typeAnnotation = typeAnnotations[i];
+		if (typeAnnotation == null) {
+			count++; // sentinel in annotation sequence for array dimensions
+		} else {
+			int id = typeAnnotation.type.id;
+			if (id != TypeIds.T_ConfiguredAnnotationNonNull && id != TypeIds.T_ConfiguredAnnotationNullable)
+				filtered[count++] = typeAnnotation;
+		}
+	}
+	if (count == 0)
+		return Binding.NO_ANNOTATIONS;
+	if (count == typeAnnotations.length)
+		return typeAnnotations;
+	System.arraycopy(filtered, 0, filtered = new AnnotationBinding[count], 0, count);
+	return filtered;
+}
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
index b46f8ae..1cec657 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
@@ -20,6 +20,8 @@
  *								Bug 425152 - [1.8] [compiler] Lambda Expression not resolved but flow analyzed leading to NPE.
  *								Bug 423505 - [1.8] Implement "18.5.4 More Specific Method Inference"
  *								Bug 429958 - [1.8][null] evaluate new DefaultLocation attribute of @NonNullByDefault
+ *								Bug 438012 - [1.8][null] Bogus Warning: The nullness annotation is redundant with a default that applies to this location
+ *								Bug 440759 - [1.8][null] @NonNullByDefault should never affect wildcards and uses of a type variable
  *     Jesper Steen Moller - Contributions for
  *								Bug 412150 [1.8] [compiler] Enable reflected parameter names during annotation processing
  *******************************************************************************/
@@ -33,6 +35,7 @@
 import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
 import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Argument;
 import org.aspectj.org.eclipse.jdt.internal.compiler.ast.LambdaExpression;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.MethodDeclaration;
 import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
 import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.aspectj.org.eclipse.jdt.internal.compiler.codegen.ConstantPool;
@@ -564,7 +567,7 @@
 		int length = this.parameters.length;
 		for (int i = 0; i < length; i++) {
 			TypeBinding parameter = this.parameters[i];
-			if (parameter.isBaseType())
+			if (!parameter.acceptsNonNullDefault())
 				continue;
 			long existing = parameter.tagBits & TagBits.AnnotationNullMASK;
 			if (existing == 0L) {
@@ -574,7 +577,8 @@
 					if (sourceMethod != null)
 						sourceMethod.arguments[i].binding.type = this.parameters[i];
 				}
-			} else if (sourceMethod != null && (parameter.tagBits & TagBits.AnnotationNonNull) != 0) {
+			} else if (sourceMethod != null && (parameter.tagBits & TagBits.AnnotationNonNull) != 0
+							&& sourceMethod.arguments[i].hasNullTypeAnnotation()) {
 				sourceMethod.scope.problemReporter().nullAnnotationIsRedundant(sourceMethod, i);
 			}
 		}
@@ -582,9 +586,10 @@
 			this.tagBits |= TagBits.HasParameterAnnotations;
 	}
 	if (this.returnType != null && hasNonNullDefaultFor(DefaultLocationReturnType, true)) {
-		if (!this.returnType.isBaseType() && (this.returnType.tagBits & TagBits.AnnotationNullMASK) == 0) {
+		if (this.returnType.acceptsNonNullDefault() && (this.returnType.tagBits & TagBits.AnnotationNullMASK) == 0) {
 			this.returnType = env.createAnnotatedType(this.returnType, new AnnotationBinding[]{env.getNonNullAnnotation()});
-		} else if (sourceMethod != null && (this.returnType.tagBits & TagBits.AnnotationNonNull) != 0) {
+		} else if (sourceMethod instanceof MethodDeclaration && (this.returnType.tagBits & TagBits.AnnotationNonNull) != 0 
+						&& ((MethodDeclaration)sourceMethod).hasNullTypeAnnotation()) {
 			sourceMethod.scope.problemReporter().nullAnnotationIsRedundant(sourceMethod, -1/*signifies method return*/);
 		}
 	}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
index e36a7dd..2e809e3 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
@@ -26,6 +26,7 @@
  *								Bug 410325 - [1.7][compiler] Generified method override different between javac and eclipse compiler
  *								Bug 429958 - [1.8][null] evaluate new DefaultLocation attribute of @NonNullByDefault
  *								Bug 390889 - [1.8][compiler] Evaluate options to support 1.7- projects against 1.8 JRE.
+ *								Bug 440773 - [1.8][null]DefaultLocation.RETURN_TYPE erroneously affects method parameters in @NonNullByDefault
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -77,8 +78,9 @@
 	if (analyseNullAnnotations && this.type.equals(concreteMethod.declaringClass)) // is currentMethod from the current type?
 		srcMethod = concreteMethod.sourceMethod();
 	boolean useTypeAnnotations = this.environment.globalOptions.sourceLevel >= ClassFileConstants.JDK1_8;
-	boolean hasNonNullDefault = analyseNullAnnotations &&
-			concreteMethod.hasNonNullDefaultFor(Binding.DefaultLocationParameter|Binding.DefaultLocationReturnType, useTypeAnnotations);
+	boolean hasReturnNonNullDefault = analyseNullAnnotations && concreteMethod.hasNonNullDefaultFor(Binding.DefaultLocationReturnType, useTypeAnnotations);
+	boolean hasParameterNonNullDefault = analyseNullAnnotations && concreteMethod.hasNonNullDefaultFor(Binding.DefaultLocationParameter, useTypeAnnotations);
+
 	for (int i = 0, l = abstractMethods.length; i < l; i++) {
 		MethodBinding abstractMethod = abstractMethods[i];
 		if (concreteMethod.isVarargs() != abstractMethod.isVarargs())
@@ -100,7 +102,7 @@
 					this.type.addSyntheticBridgeMethod(originalInherited, concreteMethod.original());
 		}
 		if (analyseNullAnnotations && !concreteMethod.isStatic() && !abstractMethod.isStatic()) {
-			checkNullSpecInheritance(concreteMethod, srcMethod, hasNonNullDefault, true, abstractMethod, this.type.scope, null);
+			checkNullSpecInheritance(concreteMethod, srcMethod, hasReturnNonNullDefault, hasParameterNonNullDefault, true, abstractMethod, this.type.scope, null);
 		}
 	}
 }
@@ -393,18 +395,19 @@
 		if (this.type.equals(currentMethod.declaringClass)) // is currentMethod from the current type?
 			srcMethod = currentMethod.sourceMethod();
 		boolean useTypeAnnotations = options.sourceLevel >= ClassFileConstants.JDK1_8;
-		boolean hasNonNullDefault = currentMethod.hasNonNullDefaultFor(Binding.DefaultLocationParameter|Binding.DefaultLocationReturnType, useTypeAnnotations);
+		boolean hasReturnNonNullDefault = currentMethod.hasNonNullDefaultFor(Binding.DefaultLocationReturnType, useTypeAnnotations);
+		boolean hasParameterNonNullDefault = currentMethod.hasNonNullDefaultFor(Binding.DefaultLocationParameter, useTypeAnnotations);
 		for (int i = length; --i >= 0;)
 			if (!currentMethod.isStatic() && !methods[i].isStatic())
-				checkNullSpecInheritance(currentMethod, srcMethod, hasNonNullDefault, true, methods[i], this.type.scope, null);
+				checkNullSpecInheritance(currentMethod, srcMethod, hasReturnNonNullDefault, hasParameterNonNullDefault, true, methods[i], this.type.scope, null);
 	}
 }
 
 void checkNullSpecInheritance(MethodBinding currentMethod, AbstractMethodDeclaration srcMethod, 
-		boolean hasNonNullDefault, boolean complain, MethodBinding inheritedMethod, Scope scope, InheritedNonNullnessInfo[] inheritedNonNullnessInfos)
+		boolean hasReturnNonNullDefault, boolean hasParameterNonNullDefault, boolean complain, MethodBinding inheritedMethod, Scope scope, InheritedNonNullnessInfo[] inheritedNonNullnessInfos)
 {
 	complain &= !currentMethod.isConstructor();
-	if (!hasNonNullDefault && !complain && !this.environment.globalOptions.inheritNullAnnotations) {
+	if (!hasReturnNonNullDefault && !hasParameterNonNullDefault && !complain && !this.environment.globalOptions.inheritNullAnnotations) {
 		// nothing to be done, take the shortcut
 		currentMethod.tagBits |= TagBits.IsNullnessKnown;
 		return;
@@ -415,7 +418,7 @@
 	{
 		this.buddyImplicitNullAnnotationsVerifier.checkImplicitNullAnnotations(currentMethod, srcMethod, complain, scope);
 	}
-	super.checkNullSpecInheritance(currentMethod, srcMethod, hasNonNullDefault, complain, inheritedMethod, scope, inheritedNonNullnessInfos);
+	super.checkNullSpecInheritance(currentMethod, srcMethod, hasReturnNonNullDefault, hasParameterNonNullDefault, complain, inheritedMethod, scope, inheritedNonNullnessInfos);
 }
 
 void reportRawReferences() {
@@ -972,7 +975,7 @@
 boolean isUnsafeReturnTypeOverride(MethodBinding currentMethod, MethodBinding inheritedMethod) {
 	// called when currentMethod's return type is NOT compatible with inheritedMethod's return type
 
-	// JLS 3 �8.4.5: more are accepted, with an unchecked conversion
+	// JLS 3 §8.4.5: more are accepted, with an unchecked conversion
 	if (TypeBinding.equalsEquals(currentMethod.returnType, inheritedMethod.returnType.erasure())) {
 		TypeBinding[] currentParams = currentMethod.parameters;
 		TypeBinding[] inheritedParams = inheritedMethod.parameters;
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/NullTypeBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/NullTypeBinding.java
index d18553f..5678e93 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/NullTypeBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/NullTypeBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 IBM Corporation and others.
+ * Copyright (c) 2013, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,8 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -25,7 +27,7 @@
 		return; // reject misguided attempt.
 	}
 	
-	public TypeBinding unannotated() {
+	public TypeBinding unannotated(boolean removeOnlyNullAnnotations) {
 		return this;
 	}
 }
\ No newline at end of file
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java
index 6ff9b1c..edb7934 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java
@@ -19,6 +19,7 @@
  *								Bug 418743 - [1.8][null] contradictory annotations on invocation of generic method not reported
  *								Bug 416182 - [1.8][compiler][null] Contradictory null annotations not rejected
  *								Bug 429958 - [1.8][null] evaluate new DefaultLocation attribute of @NonNullByDefault
+ *								Bug 434602 - Possible error with inferred null annotations leading to contradictory null annotations
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -739,7 +740,7 @@
         // check this variable can be substituted given parameterized type
         if (originalVariable.rank < length && TypeBinding.equalsEquals(variables[originalVariable.rank], originalVariable)) {
         	TypeBinding substitute = this.typeArguments[originalVariable.rank];
-        	return originalVariable.hasTypeAnnotations() ? this.environment.createAnnotatedType(substitute, originalVariable.getTypeAnnotations()) : substitute;
+        	return originalVariable.combineTypeAnnotations(substitute);
         }
 	    return originalVariable;
 	}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java
index 60660c6..5d3fd36 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java
@@ -32,6 +32,8 @@
  *								Bug 428294 - [1.8][compiler] Type mismatch: cannot convert from List<Object> to Collection<Object[]>
  *								Bug 427199 - [1.8][resource] avoid resource leak warnings on Streams that have no resource
  *								Bug 416182 - [1.8][compiler][null] Contradictory null annotations not rejected
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
+ *								Bug 438179 - [1.8][null] 'Contradictory null annotations' error on type variable with explicit null-annotation.
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -873,8 +875,27 @@
 		return isRawType();
 	}
 
-	public TypeBinding unannotated() {
-		return this.hasTypeAnnotations() ? this.environment.getUnannotatedType(this) : this;
+	public TypeBinding unannotated(boolean removeOnlyNullAnnotations) {
+		if (!hasTypeAnnotations())
+			return this;
+		if (removeOnlyNullAnnotations && !hasNullTypeAnnotations())
+			return this;
+		if (removeOnlyNullAnnotations) {
+			ReferenceBinding unannotatedGenericType = (ReferenceBinding) this.environment.getUnannotatedType(this.type);
+			AnnotationBinding[] newAnnotations = this.environment.filterNullTypeAnnotations(this.typeAnnotations);
+			TypeBinding[] newArguments = null;
+			if (this.arguments != null) {
+				newArguments = new TypeBinding[this.arguments.length];
+				for (int i = 0; i < this.arguments.length; i++) {
+					newArguments[i] = this.arguments[i].unannotated(removeOnlyNullAnnotations);
+				}
+			}
+			ReferenceBinding newEnclosing = null;
+			if (this.enclosingType != null)
+				newEnclosing = (ReferenceBinding)this.enclosingType.unannotated(removeOnlyNullAnnotations);
+			return this.environment.createParameterizedType(unannotatedGenericType, newArguments, newEnclosing, newAnnotations);
+		}
+		return this.environment.getUnannotatedType(this);
 	}
 
 	public int kind() {
@@ -1188,7 +1209,7 @@
 					    	return originalVariable;
 					 }
 			    	 TypeBinding substitute = currentType.arguments[originalVariable.rank];
-			    	 return originalVariable.hasTypeAnnotations() ? this.environment.createAnnotatedType(substitute, originalVariable.getTypeAnnotations()) : substitute;
+			    	 return originalVariable.combineTypeAnnotations(substitute);
 			    }	
 			}
 			// recurse on enclosing type, as it may hold more substitutions to perform
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java
index 2b16895..8b55951 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java
@@ -13,6 +13,7 @@
  *								Bug 416176 - [1.8][compiler][null] null type annotations cause grief on type variables
  *								Bug 423504 - [1.8] Implement "18.5.3 Functional Interface Parameterization Inference"
  *								Bug 425783 - An internal error occurred during: "Requesting Java AST from selection". java.lang.StackOverflowError
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -79,6 +80,22 @@
 		return new RawTypeBinding(this.actualType(), (ReferenceBinding) outerType, this.environment);
 	}
 
+	public TypeBinding unannotated(boolean removeOnlyNullAnnotations) {
+		if (!hasTypeAnnotations())
+			return this;
+		if (removeOnlyNullAnnotations && !hasNullTypeAnnotations())
+			return this;
+		if (removeOnlyNullAnnotations) {
+			ReferenceBinding unannotatedGenericType = (ReferenceBinding) this.environment.getUnannotatedType(this.genericType());
+			AnnotationBinding[] newAnnotations = this.environment.filterNullTypeAnnotations(this.typeAnnotations);
+			ReferenceBinding newEnclosing = null;
+			if (this.enclosingType() != null)
+				newEnclosing = (ReferenceBinding)this.enclosingType().unannotated(removeOnlyNullAnnotations);
+			return this.environment.createRawType(unannotatedGenericType, newEnclosing, newAnnotations);
+		}
+		return this.environment.getUnannotatedType(this);
+	}
+
 	/**
 	 * @see org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding#createParameterizedMethod(org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding)
 	 */
@@ -225,6 +242,9 @@
 		}
 		return this.singleAbstractMethod[index];
 	}
+	public boolean mentionsAny(TypeBinding[] parameters, int idx) {
+		return false;
+	}
 	/**
 	 * @see org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding#readableName()
 	 */
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java
index 9166e3e..d0378d1 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java
@@ -31,6 +31,7 @@
  *								Bug 418743 - [1.8][null] contradictory annotations on invocation of generic method not reported
  *								Bug 429958 - [1.8][null] evaluate new DefaultLocation attribute of @NonNullByDefault
  *								Bug 431581 - Eclipse compiles what it should not
+ *								Bug 440759 - [1.8][null] @NonNullByDefault should never affect wildcards and uses of a type variable
  *      Jesper S Moller - Contributions for
  *								bug 382701 - [1.8][compiler] Implement semantic analysis of Lambda expressions & Reference expression
  *								bug 412153 - [1.8][compiler] Check validity of annotations which may be repeatable
@@ -1174,6 +1175,10 @@
 	return 0;
 }
 
+public boolean acceptsNonNullDefault() {
+	return true;
+}
+
 public final boolean hasRestrictedAccess() {
 	return (this.modifiers & ExtraCompilerModifiers.AccRestrictedAccess) != 0;
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope.java
index 265a19d..cd75d5f 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/Scope.java
@@ -1286,7 +1286,7 @@
 							if (methodVerifier.areMethodsCompatible(concreteMatch, compatibleMethod))
 								continue; // can skip this method since concreteMatch overrides it
 						}
-						if (sourceLevel18) {
+						if (sourceLevel18 || !(compatibleMethod.isVarargs() && compatibleMethod instanceof ParameterizedGenericMethodBinding)) {
 							for (int j = 0; j < startFoundSize; j++) {
 								MethodBinding classMethod = (MethodBinding) found.elementAt(j);
 								if (classMethod != null && methodVerifier.areMethodsCompatible(classMethod, compatibleMethod))
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
index 6a6e097..9013d0d 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
@@ -32,6 +32,8 @@
  *								Bug 392238 - [1.8][compiler][null] Detect semantically invalid null type annotations
  *								Bug 429958 - [1.8][null] evaluate new DefaultLocation attribute of @NonNullByDefault
  *								Bug 432348 - [1.8] Internal compiler error (NPE) after upgrade to 1.8
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
+ *								Bug 435570 - [1.8][null] @NonNullByDefault illegally tries to affect "throws E"
  *      Jesper S Moller <jesper@selskabet.org> -  Contributions for
  *								Bug 412153 - [1.8][compiler] Check validity of annotations which may be repeatable
  *      Till Brychcy - Contributions for
@@ -118,7 +120,6 @@
   }
   // End AspectJ Extension
 	
-	
 public SourceTypeBinding(char[][] compoundName, PackageBinding fPackage, ClassScope scope) {
 	this.compoundName = compoundName;
 	this.fPackage = fPackage;
@@ -1827,7 +1828,7 @@
 				Annotation [] annotations = fieldDecl.annotations;
 				if (annotations != null && annotations.length != 0) {
 					ASTNode.copySE8AnnotationsToType(initializationScope, field, annotations,
-							fieldDecl.getKind() != AbstractVariableDeclaration.ENUM_CONSTANT); // type annotation is illegal on enum constant
+							fieldDecl.getKind() == AbstractVariableDeclaration.ENUM_CONSTANT); // type annotation is illegal on enum constant
 				}
 				Annotation.isTypeUseCompatible(fieldDecl.type, this.scope, annotations);
 			}
@@ -1912,7 +1913,7 @@
 			if ((resolvedExceptionType.tagBits & TagBits.HasMissingType) != 0) {
 				method.tagBits |= TagBits.HasMissingType;
 			}
-			if (resolvedExceptionType.hasNullTypeAnnotations()) {
+			if (exceptionTypes[i].hasNullTypeAnnotation()) {
 				methodDecl.scope.problemReporter().nullAnnotationUnsupportedLocation(exceptionTypes[i]);
 			}
 			method.modifiers |= (resolvedExceptionType.modifiers & ExtraCompilerModifiers.AccGenericSignature);
@@ -2021,7 +2022,7 @@
 				if (sourceLevel >= ClassFileConstants.JDK1_8 && !method.isVoidMethod()) {
 					Annotation [] annotations = methodDecl.annotations;
 					if (annotations != null && annotations.length != 0) {
-						ASTNode.copySE8AnnotationsToType(methodDecl.scope, method, methodDecl.annotations, true);
+						ASTNode.copySE8AnnotationsToType(methodDecl.scope, method, methodDecl.annotations, false);
 					}
 					Annotation.isTypeUseCompatible(returnType, this.scope, methodDecl.annotations);
 				}
@@ -2607,7 +2608,14 @@
 		 ((SourceTypeBinding) this.memberTypes[i]).verifyMethods(verifier);
 }
 
-public TypeBinding unannotated() {
+public TypeBinding unannotated(boolean removeOnlyNullAnnotations) {
+	if (removeOnlyNullAnnotations) {
+		if (!hasNullTypeAnnotations())
+			return this;
+		AnnotationBinding[] newAnnotations = this.environment.filterNullTypeAnnotations(this.typeAnnotations);
+		if (newAnnotations.length > 0)
+			return this.environment.createAnnotatedType(this.prototype, newAnnotations);
+	}
 	return this.prototype;
 }
 
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeCollisionException.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeCollisionException.java
index 54ab5c0..199533e 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeCollisionException.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SourceTypeCollisionException.java
@@ -16,4 +16,10 @@
 	private static final long serialVersionUID = 4798247636899127380L;
 
 	public ICompilationUnit[] newAnnotationProcessorUnits;
+	/**
+	 * Javadoc on {@link javax.annotation.processing.RoundEnvironment#processingOver()} claims that
+	 * types generated by last round of annotation processing should not be subject to a subsequent rounds
+	 * of annotation processing. So this flag have to be added to handle last round of annotation processing gracefully.
+	 */
+	public boolean afterLastAnnotationProcessingRound = false;
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticFactoryMethodBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticFactoryMethodBinding.java
index 2bb21a2..1565c6f 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticFactoryMethodBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/SyntheticFactoryMethodBinding.java
@@ -36,6 +36,11 @@
 		for (MethodBinding parameterizedMethod : parameterizedType.methods()) {
 			if (parameterizedMethod.original() == this.staticFactoryFor)
 				return (ParameterizedMethodBinding) parameterizedMethod;
+			if (parameterizedMethod instanceof ProblemMethodBinding) {
+				MethodBinding closestMatch = ((ProblemMethodBinding)parameterizedMethod).closestMatch;
+				if (closestMatch instanceof ParameterizedMethodBinding && closestMatch.original() == this.staticFactoryFor)
+					return (ParameterizedMethodBinding) closestMatch;
+			}
 		}
 		throw new IllegalArgumentException("Type doesn't have its own method?"); //$NON-NLS-1$
 	}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
index 7419dc0..52f12c3 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
@@ -24,6 +24,8 @@
  *								Bug 427626 - [1.8] StackOverflow while typing new ArrayList<String>().toArray( and asking for code completion
  *								Bug 428019 - [1.8][compiler] Type inference failure with nested generic invocation.
  *								Bug 435962 - [RC2] StackOverFlowError when building
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
+ *								Bug 440759 - [1.8][null] @NonNullByDefault should never affect wildcards and uses of a type variable
  *      Jesper S Moller <jesper@selskabet.org> -  Contributions for
  *								bug 382701 - [1.8][compiler] Implement semantic analysis of Lambda expressions & Reference expression
  *******************************************************************************/
@@ -682,6 +684,13 @@
 public boolean hasNullTypeAnnotations() {
 	return (this.tagBits & TagBits.HasNullTypeAnnotation) != 0;
 }
+/**
+ * Used to implement this sentence from o.e.j.annotation.DefaultLocation:
+ * "Wildcards and the use of type variables are always excluded from NonNullByDefault."
+ */
+public boolean acceptsNonNullDefault() {
+	return false;
+}
 
 public boolean isIntersectionCastType() {
 	return false;
@@ -1393,16 +1402,17 @@
 		case Binding.PARAMETERIZED_TYPE :
 		case Binding.RAW_TYPE :
 		case Binding.ARRAY_TYPE :
-			return erasure().unannotated();
+			return erasure().unannotated(false);
 		default :
-			return this.unannotated();
+			return this.unannotated(false);
 	}
 }
 
 /** 
  * Return this type minus its type annotations
+ * @param removeOnlyNullAnnotations if true only null type annotations are removed, otherwise all type annotations.
  */
-public TypeBinding unannotated() {
+public TypeBinding unannotated(boolean removeOnlyNullAnnotations) {
 	return this;
 }
 
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBound.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBound.java
index 63a02f5..0f03295 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBound.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeBound.java
@@ -65,7 +65,7 @@
 	public boolean equals(Object obj) {
 		if (obj instanceof TypeBound) {
 			TypeBound other = (TypeBound) obj;
-			return this.left == other.left && TypeBinding.equalsEquals(this.right, other.right) && this.relation == other.relation; //$IDENTITY-COMPARISON$ InferenceVariable
+			return TypeBinding.equalsEquals(this.left, other.left) && TypeBinding.equalsEquals(this.right, other.right) && this.relation == other.relation;
 		}
 		return false;
 	}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
index 780e763..4e6f0b0 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
@@ -7,6 +7,8 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for
+ *								Bug 434602 - Possible error with inferred null annotations leading to contradictory null annotations
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -376,4 +378,20 @@
 		}
 		return cacheDerivedType(keyType, new IntersectionCastTypeBinding(intersectingTypes, this.environment));
 	}
+	
+	/**
+	 * If a TVB was created with a dummy declaring element and needs to be fixed now,
+	 * make sure that this update affects all early clones, too.
+	 */
+	public void fixTypeVariableDeclaringElement(TypeVariableBinding var, Binding declaringElement) {
+		int id = var.id;
+		if (id < this.typeid && this.types[id] != null) {
+			for (TypeBinding t : this.types[id]) {
+				if (t instanceof TypeVariableBinding)
+					((TypeVariableBinding)t).declaringElement = declaringElement;
+			}
+		} else {
+			var.declaringElement = declaringElement;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java
index 66239d5..1db63ed 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java
@@ -23,6 +23,11 @@
  *								Bug 431269 - [1.8][compiler][null] StackOverflow in nullAnnotatedReadableName
  *								Bug 431408 - Java 8 (1.8) generics bug
  *								Bug 435962 - [RC2] StackOverFlowError when building
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
+ *								Bug 438250 - [1.8][null] NPE trying to report bogus null annotation conflict
+ *								Bug 438179 - [1.8][null] 'Contradictory null annotations' error on type variable with explicit null-annotation.
+ *								Bug 440143 - [1.8][null] one more case of contradictory null annotations regarding type variables
+ *								Bug 440759 - [1.8][null] @NonNullByDefault should never affect wildcards and uses of a type variable
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -698,7 +703,16 @@
 	}
 	
 	public void setTypeAnnotations(AnnotationBinding[] annotations, boolean evalNullAnnotations) {
-		this.environment.getUnannotatedType(this); // exposes original TVB/capture to type system for id stamping purposes.
+		if (getClass() == TypeVariableBinding.class) {
+			// TVB only: if the declaration already carries type annotations,
+			// clone the unannotated binding first to ensure TypeSystem.getUnnanotatedType() will see it at position 0:
+			TypeBinding unannotated = clone(null);
+			this.environment.getUnannotatedType(unannotated); // register unannotated
+			this.id = unannotated.id; // transfer fresh id
+			this.environment.typeSystem.cacheDerivedType(this, unannotated, this); // register this
+		} else {
+			this.environment.getUnannotatedType(this); // exposes original TVB/capture to type system for id stamping purposes.
+		}
 		super.setTypeAnnotations(annotations, evalNullAnnotations);
 	}
 	/**
@@ -773,9 +787,19 @@
 	    return readableName;
 	}
 
-	// May still carry declaration site annotations.
-	public TypeBinding unannotated() {
-		return this.hasTypeAnnotations() ? this.environment.getUnannotatedType(this) : this;
+	public TypeBinding unannotated(boolean removeOnlyNullAnnotations) {
+		if (!hasTypeAnnotations())
+			return this;
+		if (removeOnlyNullAnnotations && !hasNullTypeAnnotations())
+			return this;
+		TypeBinding unannotated = this.environment.getUnannotatedType(this);
+		if (removeOnlyNullAnnotations) {
+			AnnotationBinding[] newAnnotations = this.environment.filterNullTypeAnnotations(this.typeAnnotations);
+			if (newAnnotations.length > 0)
+				return this.environment.createAnnotatedType(unannotated, newAnnotations);
+			// FIXME: selectively keep type annotations on bounds
+		}
+		return unannotated; 
 	}
 	/**
 	 * Upper bound doesn't perform erasure
@@ -795,11 +819,7 @@
 				if (nullTagBits == 0L) {
 					nullTagBits |= superNullTagBits;
 				} else if (superNullTagBits != nullTagBits) {
-					// not finding either bound or ann should be considered a compiler bug
-					TypeReference bound = findBound(this.firstBound, parameter);
-					Annotation ann = bound.findAnnotation(superNullTagBits);
-					scope.problemReporter().contradictoryNullAnnotationsOnBounds(ann, nullTagBits);
-					this.tagBits &= ~TagBits.AnnotationNullMASK;
+					this.firstBound = nullMismatchOnBound(parameter, this.firstBound, superNullTagBits, nullTagBits, scope);
 				}
 			}
 		}	
@@ -813,11 +833,7 @@
 					if (nullTagBits == 0L) {
 						nullTagBits |= superNullTagBits;
 					} else if (superNullTagBits != nullTagBits) {
-						// not finding either bound or ann should be considered a compiler bug
-						TypeReference bound = findBound(this.firstBound, parameter);
-						Annotation ann = bound.findAnnotation(superNullTagBits);
-						scope.problemReporter().contradictoryNullAnnotationsOnBounds(ann, nullTagBits);
-						this.tagBits &= ~TagBits.AnnotationNullMASK;
+						interfaces[i] = (ReferenceBinding) nullMismatchOnBound(parameter, resolveType, superNullTagBits, nullTagBits, scope);
 					}
 				}
 				interfaces[i] = resolveType;
@@ -826,6 +842,20 @@
 		if (nullTagBits != 0)
 			this.tagBits |= nullTagBits | TagBits.HasNullTypeAnnotation;
 	}
+	private TypeBinding nullMismatchOnBound(TypeParameter parameter, TypeBinding boundType, long superNullTagBits, long nullTagBits, Scope scope) {
+		// not finding bound should be considered a compiler bug
+		TypeReference bound = findBound(boundType, parameter);
+		Annotation ann = bound.findAnnotation(superNullTagBits);
+		if (ann != null) {
+			// explicit annotation: error
+			scope.problemReporter().contradictoryNullAnnotationsOnBounds(ann, nullTagBits);
+			this.tagBits &= ~TagBits.AnnotationNullMASK;
+		} else {
+			// implicit annotation: let the new one override
+			return boundType.unannotated(true);
+		}
+		return boundType;
+	}
 	private TypeReference findBound(TypeBinding bound, TypeParameter parameter) {
 		if (parameter.type != null && TypeBinding.equalsEquals(parameter.type.resolvedType, bound))
 			return parameter.type;
@@ -883,4 +913,38 @@
 		}
 		return superInterfaces;
 	}
+
+	public TypeBinding combineTypeAnnotations(TypeBinding substitute) {
+		if (hasTypeAnnotations()) {
+			// may need to merge annotations from the original variable and from substitution:
+			if (hasRelevantTypeUseNullAnnotations()) {
+				// explicit type use null annotation overrides any annots on type parameter and concrete type arguments
+				substitute = substitute.unannotated(true);
+			}
+			if (this.typeAnnotations != Binding.NO_ANNOTATIONS)
+				return this.environment.createAnnotatedType(substitute, this.typeAnnotations);
+			// annots on originalVariable not relevant, and substitute has annots, keep substitute unmodified:
+		}
+		return substitute;
+	}
+
+	private boolean hasRelevantTypeUseNullAnnotations() {
+		TypeVariableBinding[] parameters;
+		if (this.declaringElement instanceof ReferenceBinding) {
+			parameters = ((ReferenceBinding)this.declaringElement).original().typeVariables();
+		} else if (this.declaringElement instanceof MethodBinding) {
+			parameters = ((MethodBinding)this.declaringElement).original().typeVariables;
+		} else {
+			throw new IllegalStateException("Unexpected declaring element:"+String.valueOf(this.declaringElement.readableName())); //$NON-NLS-1$
+		}
+		TypeVariableBinding parameter = parameters[this.rank];
+		// recognize explicit annots by their effect on null tag bits, if there's no effect, then the annot is not considered relevant
+		long currentNullBits = this.tagBits & TagBits.AnnotationNullMASK;
+		long declarationNullBits = parameter.tagBits & TagBits.AnnotationNullMASK;
+		return (currentNullBits & ~declarationNullBits) != 0;
+	}
+
+	public boolean acceptsNonNullDefault() {
+		return false;
+	}
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/VoidTypeBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/VoidTypeBinding.java
index f22027c..2fb4a49 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/VoidTypeBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/VoidTypeBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 IBM Corporation and others.
+ * Copyright (c) 2013, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,8 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -25,7 +27,7 @@
 		return; // reject misguided attempt.
 	}
 	
-	public TypeBinding unannotated() {
+	public TypeBinding unannotated(boolean removeOnlyNullAnnotations) {
 		return this;
 	}
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/WildcardBinding.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/WildcardBinding.java
index ffdeaec..ea8892a 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/WildcardBinding.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/lookup/WildcardBinding.java
@@ -18,6 +18,8 @@
  *								Bug 427411 - [1.8][generics] JDT reports type mismatch when using method that returns generic type
  *								Bug 428019 - [1.8][compiler] Type inference failure with nested generic invocation.
  *								Bug 435962 - [RC2] StackOverFlowError when building
+ *								Bug 438458 - [1.8][null] clean up handling of null type annotations wrt type variables
+ *								Bug 440759 - [1.8][null] @NonNullByDefault should never affect wildcards and uses of a type variable
  *******************************************************************************/
 package org.aspectj.org.eclipse.jdt.internal.compiler.lookup;
 
@@ -883,8 +885,24 @@
 		return this.typeVariable;
 	}
 
-	public TypeBinding unannotated() {
-		return this.hasTypeAnnotations() ? this.environment.getUnannotatedType(this) : this;
+	public TypeBinding unannotated(boolean removeOnlyNullAnnotations) {
+		if (!hasTypeAnnotations())
+			return this;
+		if (removeOnlyNullAnnotations && !hasNullTypeAnnotations())
+			return this;
+		ReferenceBinding unannotatedGenericType = (ReferenceBinding) this.genericType.unannotated(removeOnlyNullAnnotations);
+		if (removeOnlyNullAnnotations) {
+			// cf. structure of uncapture():
+			TypeBinding unannotatedBound = this.bound != null ? this.bound.unannotated(removeOnlyNullAnnotations) : null;
+			int length = 0;
+			TypeBinding [] unannotatedOtherBounds = this.otherBounds == null ? null : new TypeBinding[length = this.otherBounds.length];
+			for (int i = 0; i < length; i++) {
+				unannotatedOtherBounds[i] = this.otherBounds[i] == null ? null : this.otherBounds[i].unannotated(removeOnlyNullAnnotations);
+			}
+			AnnotationBinding[] newAnnotations = this.environment.filterNullTypeAnnotations(getTypeAnnotations());
+			return this.environment.createWildcard(unannotatedGenericType, this.rank, unannotatedBound, unannotatedOtherBounds, this.boundKind, newAnnotations);			
+		}
+		return unannotatedGenericType;
 	}
 	@Override
 	public TypeBinding uncapture(Scope scope) {
@@ -908,15 +926,26 @@
 	}
 	@Override
 	public boolean mentionsAny(TypeBinding[] parameters, int idx) {
-		if (super.mentionsAny(parameters, idx))
-			return true;
-		if (this.bound != null && 	this.bound.mentionsAny(parameters, -1))
-			return true;
-		if (this.otherBounds != null) {
-			for (int i = 0, length = this.otherBounds.length; i < length; i++)
-				if (this.otherBounds[i].mentionsAny(parameters, -1))
-					return true;
+		if (this.inRecursiveFunction)
+			return false;
+		this.inRecursiveFunction = true;
+		try {
+			if (super.mentionsAny(parameters, idx))
+				return true;
+			if (this.bound != null && 	this.bound.mentionsAny(parameters, -1))
+				return true;
+			if (this.otherBounds != null) {
+				for (int i = 0, length = this.otherBounds.length; i < length; i++)
+					if (this.otherBounds[i].mentionsAny(parameters, -1))
+						return true;
+			}
+		} finally {
+			this.inRecursiveFunction = false;
 		}
 		return false;
 	}
+
+	public boolean acceptsNonNullDefault() {
+		return false;
+	}
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/parser/RecoveredElement.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/parser/RecoveredElement.java
index 73f79f7..7802d3c 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/parser/RecoveredElement.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/parser/RecoveredElement.java
@@ -1,349 +1,349 @@
-/*******************************************************************************

- * Copyright (c) 2000, 2012 IBM Corporation and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- * 

- * Contributors:

- *     IBM Corporation - initial API and implementation

- *******************************************************************************/

-

-package org.aspectj.org.eclipse.jdt.internal.compiler.parser;

-

-/**

- * Internal structure for parsing recovery

- */

-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode;

-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;

-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Block;

-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;

-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ImportReference;

-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.LocalDeclaration;

-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Statement;

-import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;

-import org.aspectj.org.eclipse.jdt.internal.compiler.util.Util;

-

-public class RecoveredElement {

-

-	public RecoveredElement parent;

-	public int bracketBalance;

-	public boolean foundOpeningBrace;

-	protected Parser recoveringParser;

-public RecoveredElement(RecoveredElement parent, int bracketBalance){

-	this(parent, bracketBalance, null);

-}

-public RecoveredElement(RecoveredElement parent, int bracketBalance, Parser parser){

-	this.parent = parent;

-	this.bracketBalance = bracketBalance;

-	this.recoveringParser = parser;

-}

-public RecoveredElement addAnnotationName(int identifierPtr, int identifierLengthPtr, int annotationStart, int bracketBalanceValue) {

-	/* default behavior is to delegate recording to parent if any */

-	resetPendingModifiers();

-	if (this.parent == null) return this; // ignore

-	this.updateSourceEndIfNecessary(previousAvailableLineEnd(annotationStart - 1));

-	return this.parent.addAnnotationName(identifierPtr, identifierLengthPtr, annotationStart, bracketBalanceValue);

-}

-/*

- *	Record a method declaration

- */

-public RecoveredElement add(AbstractMethodDeclaration methodDeclaration, int bracketBalanceValue) {

-

-	/* default behavior is to delegate recording to parent if any */

-	resetPendingModifiers();

-	if (this.parent == null) return this; // ignore

-	this.updateSourceEndIfNecessary(previousAvailableLineEnd(methodDeclaration.declarationSourceStart - 1));

-	return this.parent.add(methodDeclaration, bracketBalanceValue);

-}

-/*

- * Record a nested block declaration

- */

-public RecoveredElement add(Block nestedBlockDeclaration, int bracketBalanceValue) {

-

-	/* default behavior is to delegate recording to parent if any */

-	resetPendingModifiers();

-	if (this.parent == null) return this; // ignore

-	this.updateSourceEndIfNecessary(previousAvailableLineEnd(nestedBlockDeclaration.sourceStart - 1));

-	return this.parent.add(nestedBlockDeclaration, bracketBalanceValue);

-}

-/*

- * Record a field declaration

- */

-public RecoveredElement add(FieldDeclaration fieldDeclaration, int bracketBalanceValue) {

-

-	/* default behavior is to delegate recording to parent if any */

-	resetPendingModifiers();

-	if (this.parent == null) return this; // ignore

-	this.updateSourceEndIfNecessary(previousAvailableLineEnd(fieldDeclaration.declarationSourceStart - 1));

-	return this.parent.add(fieldDeclaration, bracketBalanceValue);

-}

-/*

- *	Record an import reference

- */

-public RecoveredElement add(ImportReference importReference, int bracketBalanceValue){

-

-	/* default behavior is to delegate recording to parent if any */

-	resetPendingModifiers();

-	if (this.parent == null) return this; // ignore

-	this.updateSourceEndIfNecessary(previousAvailableLineEnd(importReference.declarationSourceStart - 1));

-	return this.parent.add(importReference, bracketBalanceValue);

-}

-/*

- * Record a local declaration

- */

-public RecoveredElement add(LocalDeclaration localDeclaration, int bracketBalanceValue) {

-

-	/* default behavior is to delegate recording to parent if any */

-	resetPendingModifiers();

-	if (this.parent == null) return this; // ignore

-	this.updateSourceEndIfNecessary(previousAvailableLineEnd(localDeclaration.declarationSourceStart - 1));

-	return this.parent.add(localDeclaration, bracketBalanceValue);

-}

-/*

- * Record a statement

- */

-public RecoveredElement add(Statement statement, int bracketBalanceValue) {

-

-	/* default behavior is to delegate recording to parent if any */

-	resetPendingModifiers();

-	if (this.parent == null) return this; // ignore

-	if (this instanceof RecoveredType) {

-		TypeDeclaration typeDeclaration = ((RecoveredType) this).typeDeclaration;

-		if (typeDeclaration != null && (typeDeclaration.bits & ASTNode.IsAnonymousType) != 0) { 

-			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=291040, new X(<SelectOnMessageSend:zoo()>) { ???

-			if (statement.sourceStart > typeDeclaration.sourceStart && statement.sourceEnd < typeDeclaration.sourceEnd) {

-				return this;

-			}

-		}

-	}

-	this.updateSourceEndIfNecessary(previousAvailableLineEnd(statement.sourceStart - 1));

-	return this.parent.add(statement, bracketBalanceValue);

-}

-/*

- *	Record a type declaration

- */

-public RecoveredElement add(TypeDeclaration typeDeclaration, int bracketBalanceValue){

-

-	/* default behavior is to delegate recording to parent if any */

-	resetPendingModifiers();

-	if (this.parent == null) return this; // ignore

-	this.updateSourceEndIfNecessary(previousAvailableLineEnd(typeDeclaration.declarationSourceStart - 1));

-	return this.parent.add(typeDeclaration, bracketBalanceValue);

-}

-protected void addBlockStatement(RecoveredBlock recoveredBlock) {

-	Block block = recoveredBlock.blockDeclaration;

-	if(block.statements != null) {

-		Statement[] statements = block.statements;

-		for (int i = 0; i < statements.length; i++) {

-			recoveredBlock.add(statements[i], 0);

-		}

-	}

-}

-public void addModifier(int flag, int modifiersSourceStart) {

-	// default implementation: do nothing

-}

-/*

- * Answer the depth of this element, considering the parent link.

- */

-public int depth(){

-	int depth = 0;

-	RecoveredElement current = this;

-	while ((current = current.parent) != null) depth++;

-	return depth;

-}

-/*

- * Answer the enclosing method node, or null if none

- */

-public RecoveredInitializer enclosingInitializer(){

-	RecoveredElement current = this;

-	while (current != null){

-		if (current instanceof RecoveredInitializer){

-			return (RecoveredInitializer) current;

-		}

-		current = current.parent;

-	}

-	return null;

-}

-/*

- * Answer the enclosing method node, or null if none

- */

-public RecoveredMethod enclosingMethod(){

-	RecoveredElement current = this;

-	while (current != null){

-		if (current instanceof RecoveredMethod){

-			return (RecoveredMethod) current;

-		}

-		current = current.parent;

-	}

-	return null;

-}

-/*

- * Answer the enclosing type node, or null if none

- */

-public RecoveredType enclosingType(){

-	RecoveredElement current = this;

-	while (current != null){

-		if (current instanceof RecoveredType){

-			return (RecoveredType) current;

-		}

-		current = current.parent;

-	}

-	return null;

-}

-/*

- * Answer the closest specified parser

- */

-public Parser parser(){

-	RecoveredElement current = this;

-	while (current != null){

-		if (current.recoveringParser != null){

-			return current.recoveringParser;

-		}

-		current = current.parent;

-	}

-	return null;

-}

-/*

- * Answer the associated parsed structure

- */

-public ASTNode parseTree(){

-	return null;

-}

-public void resetPendingModifiers() {

-	// default implementation: do nothing

-	// recovered elements which have pending modifiers must override this method

-}

-/*

- * Iterate the enclosing blocks and tag them so as to preserve their content

- */

-public void preserveEnclosingBlocks(){

-	RecoveredElement current = this;

-	while (current != null){

-		if (current instanceof RecoveredBlock){

-			((RecoveredBlock)current).preserveContent = true;

-		}

-		if (current instanceof RecoveredType){ // for anonymous types

-			((RecoveredType)current).preserveContent = true;

-		}

-		current = current.parent;

-	}

-}

-/*

- * Answer the position of the previous line end if

- * there is nothing but spaces in between it and the

- * line end. Used to trim spaces on unclosed elements.

- */

-public int previousAvailableLineEnd(int position){

-

-	Parser parser = parser();

-	if (parser == null) return position;

-

-	Scanner scanner = parser.scanner;

-	if (scanner.lineEnds == null) return position;

-

-	int index = Util.getLineNumber(position, scanner.lineEnds, 0, scanner.linePtr);

-	if (index < 2) return position;

-	int previousLineEnd = scanner.lineEnds[index-2];

-

-	char[] source = scanner.source;

-	for (int i = previousLineEnd+1; i < position; i++){

-		if (!(source[i] == ' ' || source[i] == '\t')) return position;

-	}

-	return previousLineEnd;

-}

-/*

- * Answer the very source end of the corresponding parse node

- */

-public int sourceEnd(){

-	return 0;

-}

-protected String tabString(int tab) {

-	StringBuffer result = new StringBuffer();

-	for (int i = tab; i > 0; i--) {

-		result.append("  "); //$NON-NLS-1$

-	}

-	return result.toString();

-}

-/*

- * Answer the top node

- */

-public RecoveredElement topElement(){

-	RecoveredElement current = this;

-	while (current.parent != null){

-		current = current.parent;

-	}

-	return current;

-}

-public String toString() {

-	return toString(0);

-}

-public String toString(int tab) {

-	return super.toString();

-}

-/*

- * Answer the enclosing type node, or null if none

- */

-public RecoveredType type(){

-	RecoveredElement current = this;

-	while (current != null){

-		if (current instanceof RecoveredType){

-			return (RecoveredType) current;

-		}

-		current = current.parent;

-	}

-	return null;

-}

-/*

- * Update the bodyStart of the corresponding parse node

- */

-public void updateBodyStart(int bodyStart){

-	this.foundOpeningBrace = true;

-}

-/*

- * Update the corresponding parse node from parser state which

- * is about to disappear because of restarting recovery

- */

-public void updateFromParserState(){

-	// default implementation: do nothing

-}

-/*

- * A closing brace got consumed, might have closed the current element,

- * in which case both the currentElement is exited

- */

-public RecoveredElement updateOnClosingBrace(int braceStart, int braceEnd){

-	if ((--this.bracketBalance <= 0) && (this.parent != null)){

-		this.updateSourceEndIfNecessary(braceStart, braceEnd);

-		return this.parent;

-	}

-	return this;

-}

-/*

- * An opening brace got consumed, might be the expected opening one of the current element,

- * in which case the bodyStart is updated.

- */

-/*public RecoveredElement updateOnOpeningBrace(int braceEnd){return null;}*/

-public RecoveredElement updateOnOpeningBrace(int braceStart, int braceEnd){

-

-	if (this.bracketBalance++ == 0){

-		updateBodyStart(braceEnd + 1);

-		return this;

-	}

-	return null; // no update is necessary

-}

-/*

- * Final update the corresponding parse node

- */

-public void updateParseTree(){

-	// default implementation: do nothing

-}

-/*

- * Update the declarationSourceEnd of the corresponding parse node

- */

-public void updateSourceEndIfNecessary(int braceStart, int braceEnd){

-	// default implementation: do nothing

-}

-public void updateSourceEndIfNecessary(int sourceEnd){

-	this.updateSourceEndIfNecessary(sourceEnd + 1, sourceEnd);

-}

-}

+/*******************************************************************************
+ * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.aspectj.org.eclipse.jdt.internal.compiler.parser;
+
+/**
+ * Internal structure for parsing recovery
+ */
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Block;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ImportReference;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.LocalDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Statement;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.util.Util;
+
+public class RecoveredElement {
+
+	public RecoveredElement parent;
+	public int bracketBalance;
+	public boolean foundOpeningBrace;
+	protected Parser recoveringParser;
+public RecoveredElement(RecoveredElement parent, int bracketBalance){
+	this(parent, bracketBalance, null);
+}
+public RecoveredElement(RecoveredElement parent, int bracketBalance, Parser parser){
+	this.parent = parent;
+	this.bracketBalance = bracketBalance;
+	this.recoveringParser = parser;
+}
+public RecoveredElement addAnnotationName(int identifierPtr, int identifierLengthPtr, int annotationStart, int bracketBalanceValue) {
+	/* default behavior is to delegate recording to parent if any */
+	resetPendingModifiers();
+	if (this.parent == null) return this; // ignore
+	this.updateSourceEndIfNecessary(previousAvailableLineEnd(annotationStart - 1));
+	return this.parent.addAnnotationName(identifierPtr, identifierLengthPtr, annotationStart, bracketBalanceValue);
+}
+/*
+ *	Record a method declaration
+ */
+public RecoveredElement add(AbstractMethodDeclaration methodDeclaration, int bracketBalanceValue) {
+
+	/* default behavior is to delegate recording to parent if any */
+	resetPendingModifiers();
+	if (this.parent == null) return this; // ignore
+	this.updateSourceEndIfNecessary(previousAvailableLineEnd(methodDeclaration.declarationSourceStart - 1));
+	return this.parent.add(methodDeclaration, bracketBalanceValue);
+}
+/*
+ * Record a nested block declaration
+ */
+public RecoveredElement add(Block nestedBlockDeclaration, int bracketBalanceValue) {
+
+	/* default behavior is to delegate recording to parent if any */
+	resetPendingModifiers();
+	if (this.parent == null) return this; // ignore
+	this.updateSourceEndIfNecessary(previousAvailableLineEnd(nestedBlockDeclaration.sourceStart - 1));
+	return this.parent.add(nestedBlockDeclaration, bracketBalanceValue);
+}
+/*
+ * Record a field declaration
+ */
+public RecoveredElement add(FieldDeclaration fieldDeclaration, int bracketBalanceValue) {
+
+	/* default behavior is to delegate recording to parent if any */
+	resetPendingModifiers();
+	if (this.parent == null) return this; // ignore
+	this.updateSourceEndIfNecessary(previousAvailableLineEnd(fieldDeclaration.declarationSourceStart - 1));
+	return this.parent.add(fieldDeclaration, bracketBalanceValue);
+}
+/*
+ *	Record an import reference
+ */
+public RecoveredElement add(ImportReference importReference, int bracketBalanceValue){
+
+	/* default behavior is to delegate recording to parent if any */
+	resetPendingModifiers();
+	if (this.parent == null) return this; // ignore
+	this.updateSourceEndIfNecessary(previousAvailableLineEnd(importReference.declarationSourceStart - 1));
+	return this.parent.add(importReference, bracketBalanceValue);
+}
+/*
+ * Record a local declaration
+ */
+public RecoveredElement add(LocalDeclaration localDeclaration, int bracketBalanceValue) {
+
+	/* default behavior is to delegate recording to parent if any */
+	resetPendingModifiers();
+	if (this.parent == null) return this; // ignore
+	this.updateSourceEndIfNecessary(previousAvailableLineEnd(localDeclaration.declarationSourceStart - 1));
+	return this.parent.add(localDeclaration, bracketBalanceValue);
+}
+/*
+ * Record a statement
+ */
+public RecoveredElement add(Statement statement, int bracketBalanceValue) {
+
+	/* default behavior is to delegate recording to parent if any */
+	resetPendingModifiers();
+	if (this.parent == null) return this; // ignore
+	if (this instanceof RecoveredType) {
+		TypeDeclaration typeDeclaration = ((RecoveredType) this).typeDeclaration;
+		if (typeDeclaration != null && (typeDeclaration.bits & ASTNode.IsAnonymousType) != 0) { 
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=291040, new X(<SelectOnMessageSend:zoo()>) { ???
+			if (statement.sourceStart > typeDeclaration.sourceStart && statement.sourceEnd < typeDeclaration.sourceEnd) {
+				return this;
+			}
+		}
+	}
+	this.updateSourceEndIfNecessary(previousAvailableLineEnd(statement.sourceStart - 1));
+	return this.parent.add(statement, bracketBalanceValue);
+}
+/*
+ *	Record a type declaration
+ */
+public RecoveredElement add(TypeDeclaration typeDeclaration, int bracketBalanceValue){
+
+	/* default behavior is to delegate recording to parent if any */
+	resetPendingModifiers();
+	if (this.parent == null) return this; // ignore
+	this.updateSourceEndIfNecessary(previousAvailableLineEnd(typeDeclaration.declarationSourceStart - 1));
+	return this.parent.add(typeDeclaration, bracketBalanceValue);
+}
+protected void addBlockStatement(RecoveredBlock recoveredBlock) {
+	Block block = recoveredBlock.blockDeclaration;
+	if(block.statements != null) {
+		Statement[] statements = block.statements;
+		for (int i = 0; i < statements.length; i++) {
+			recoveredBlock.add(statements[i], 0);
+		}
+	}
+}
+public void addModifier(int flag, int modifiersSourceStart) {
+	// default implementation: do nothing
+}
+/*
+ * Answer the depth of this element, considering the parent link.
+ */
+public int depth(){
+	int depth = 0;
+	RecoveredElement current = this;
+	while ((current = current.parent) != null) depth++;
+	return depth;
+}
+/*
+ * Answer the enclosing method node, or null if none
+ */
+public RecoveredInitializer enclosingInitializer(){
+	RecoveredElement current = this;
+	while (current != null){
+		if (current instanceof RecoveredInitializer){
+			return (RecoveredInitializer) current;
+		}
+		current = current.parent;
+	}
+	return null;
+}
+/*
+ * Answer the enclosing method node, or null if none
+ */
+public RecoveredMethod enclosingMethod(){
+	RecoveredElement current = this;
+	while (current != null){
+		if (current instanceof RecoveredMethod){
+			return (RecoveredMethod) current;
+		}
+		current = current.parent;
+	}
+	return null;
+}
+/*
+ * Answer the enclosing type node, or null if none
+ */
+public RecoveredType enclosingType(){
+	RecoveredElement current = this;
+	while (current != null){
+		if (current instanceof RecoveredType){
+			return (RecoveredType) current;
+		}
+		current = current.parent;
+	}
+	return null;
+}
+/*
+ * Answer the closest specified parser
+ */
+public Parser parser(){
+	RecoveredElement current = this;
+	while (current != null){
+		if (current.recoveringParser != null){
+			return current.recoveringParser;
+		}
+		current = current.parent;
+	}
+	return null;
+}
+/*
+ * Answer the associated parsed structure
+ */
+public ASTNode parseTree(){
+	return null;
+}
+public void resetPendingModifiers() {
+	// default implementation: do nothing
+	// recovered elements which have pending modifiers must override this method
+}
+/*
+ * Iterate the enclosing blocks and tag them so as to preserve their content
+ */
+public void preserveEnclosingBlocks(){
+	RecoveredElement current = this;
+	while (current != null){
+		if (current instanceof RecoveredBlock){
+			((RecoveredBlock)current).preserveContent = true;
+		}
+		if (current instanceof RecoveredType){ // for anonymous types
+			((RecoveredType)current).preserveContent = true;
+		}
+		current = current.parent;
+	}
+}
+/*
+ * Answer the position of the previous line end if
+ * there is nothing but spaces in between it and the
+ * line end. Used to trim spaces on unclosed elements.
+ */
+public int previousAvailableLineEnd(int position){
+
+	Parser parser = parser();
+	if (parser == null) return position;
+
+	Scanner scanner = parser.scanner;
+	if (scanner.lineEnds == null) return position;
+
+	int index = Util.getLineNumber(position, scanner.lineEnds, 0, scanner.linePtr);
+	if (index < 2) return position;
+	int previousLineEnd = scanner.lineEnds[index-2];
+
+	char[] source = scanner.source;
+	for (int i = previousLineEnd+1; i < position; i++){
+		if (!(source[i] == ' ' || source[i] == '\t')) return position;
+	}
+	return previousLineEnd;
+}
+/*
+ * Answer the very source end of the corresponding parse node
+ */
+public int sourceEnd(){
+	return 0;
+}
+protected String tabString(int tab) {
+	StringBuffer result = new StringBuffer();
+	for (int i = tab; i > 0; i--) {
+		result.append("  "); //$NON-NLS-1$
+	}
+	return result.toString();
+}
+/*
+ * Answer the top node
+ */
+public RecoveredElement topElement(){
+	RecoveredElement current = this;
+	while (current.parent != null){
+		current = current.parent;
+	}
+	return current;
+}
+public String toString() {
+	return toString(0);
+}
+public String toString(int tab) {
+	return super.toString();
+}
+/*
+ * Answer the enclosing type node, or null if none
+ */
+public RecoveredType type(){
+	RecoveredElement current = this;
+	while (current != null){
+		if (current instanceof RecoveredType){
+			return (RecoveredType) current;
+		}
+		current = current.parent;
+	}
+	return null;
+}
+/*
+ * Update the bodyStart of the corresponding parse node
+ */
+public void updateBodyStart(int bodyStart){
+	this.foundOpeningBrace = true;
+}
+/*
+ * Update the corresponding parse node from parser state which
+ * is about to disappear because of restarting recovery
+ */
+public void updateFromParserState(){
+	// default implementation: do nothing
+}
+/*
+ * A closing brace got consumed, might have closed the current element,
+ * in which case both the currentElement is exited
+ */
+public RecoveredElement updateOnClosingBrace(int braceStart, int braceEnd){
+	if ((--this.bracketBalance <= 0) && (this.parent != null)){
+		this.updateSourceEndIfNecessary(braceStart, braceEnd);
+		return this.parent;
+	}
+	return this;
+}
+/*
+ * An opening brace got consumed, might be the expected opening one of the current element,
+ * in which case the bodyStart is updated.
+ */
+/*public RecoveredElement updateOnOpeningBrace(int braceEnd){return null;}*/
+public RecoveredElement updateOnOpeningBrace(int braceStart, int braceEnd){
+
+	if (this.bracketBalance++ == 0){
+		updateBodyStart(braceEnd + 1);
+		return this;
+	}
+	return null; // no update is necessary
+}
+/*
+ * Final update the corresponding parse node
+ */
+public void updateParseTree(){
+	// default implementation: do nothing
+}
+/*
+ * Update the declarationSourceEnd of the corresponding parse node
+ */
+public void updateSourceEndIfNecessary(int braceStart, int braceEnd){
+	// default implementation: do nothing
+}
+public void updateSourceEndIfNecessary(int sourceEnd){
+	this.updateSourceEndIfNecessary(sourceEnd + 1, sourceEnd);
+}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass.java
index 896ec5a..8ade205 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/parser/TheOriginalJDTParserClass.java
@@ -6094,6 +6094,11 @@
 	}
 	this.referenceContext.compilationResult().hasFunctionalTypes = true;
 	markEnclosingMemberWithLocalOrFunctionalType(LocalTypeKind.LAMBDA);
+	if (lexp.compilationResult.getCompilationUnit() == null) {
+	    // unit built out of model. Stash a textual representation of lambda to enable LE.copy().
+	    int length = lexp.sourceEnd - lexp.sourceStart + 1;
+	    System.arraycopy(this.scanner.getSource(), lexp.sourceStart, lexp.text = new char [length], 0, length); 
+	}
 }
 
 protected Argument typeElidedArgument() {
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
index 2bde3ba..bca665d 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
@@ -50,6 +50,9 @@
  *								Bug 390889 - [1.8][compiler] Evaluate options to support 1.7- projects against 1.8 JRE.
  *								Bug 430150 - [1.8][null] stricter checking against type variables
  *								Bug 434600 - Incorrect null analysis error reporting on type parameters
+ *								Bug 439516 - [1.8][null] NonNullByDefault wrongly applied to implicit type bound of binary type
+ *								Bug 438467 - [compiler][null] Better error position for "The method _ cannot implement the corresponding method _ due to incompatible nullness constraints"
+ *								Bug 439298 - [null] "Missing code implementation in the compiler" when using @NonNullByDefault in package-info.java
  *      Jesper S Moller <jesper@selskabet.org> -  Contributions for
  *								bug 382701 - [1.8][compiler] Implement semantic analysis of Lambda expressions & Reference expression
  *								bug 382721 - [1.8][compiler] Effectively final variables needs special treatment
@@ -226,6 +229,7 @@
 			return CompilerOptions.UnusedLocalVariable;
 
 		case IProblem.ArgumentIsNeverUsed :
+		case IProblem.ExceptionParameterIsNeverUsed:
 			return CompilerOptions.UnusedArgument;
 
 		case IProblem.NoImplicitStringConversionForCharArrayExpression :
@@ -3710,6 +3714,10 @@
 				statement.sourceStart,
 				statement.sourceEnd);
 			return;
+		case ProblemReasons.ContradictoryNullAnnotations:
+			problemConstructor = (ProblemMethodBinding) targetConstructor;
+			contradictoryNullAnnotationsInferred(problemConstructor.closestMatch, statement);
+			return;
 		case ProblemReasons.NoError : // 0
 		default :
 			needImplementation(statement); // want to fail to see why we were here...
@@ -7810,6 +7818,14 @@
 		typeParam.sourceStart,
 		typeParam.sourceEnd);
 }
+public void notAnnotationType(TypeBinding actualType, ASTNode location) {
+	this.handle(
+			IProblem.NotAnnotationType,
+			new String[] {new String(actualType.leafComponentType().readableName())},
+			new String[] {new String(actualType.leafComponentType().shortReadableName())},
+			location.sourceStart,
+			location.sourceEnd);
+}
 public void typeMismatchError(TypeBinding actualType, TypeBinding expectedType, ASTNode location, ASTNode expectingLocation) {
 	if (this.options.sourceLevel < ClassFileConstants.JDK1_5) { // don't expose type variable names, complain on erased types
 		if (actualType instanceof TypeVariableBinding)
@@ -8490,6 +8506,18 @@
 		localDecl.sourceStart,
 		localDecl.sourceEnd);
 }
+public void unusedExceptionParameter(LocalDeclaration exceptionParameter) {
+	int severity = computeSeverity(IProblem.ExceptionParameterIsNeverUsed);
+	if (severity == ProblemSeverities.Ignore) return;
+	String[] arguments = new String[] {new String(exceptionParameter.name)};
+	this.handle(
+		IProblem.ExceptionParameterIsNeverUsed,
+		arguments,
+		arguments,
+		severity,
+		exceptionParameter.sourceStart,
+		exceptionParameter.sourceEnd);
+}
 public void unusedDeclaredThrownException(ReferenceBinding exceptionType, AbstractMethodDeclaration method, ASTNode location) {
 	boolean isConstructor = method.isConstructor();
 	int severity = computeSeverity(isConstructor ? IProblem.UnusedConstructorDeclaredThrownException : IProblem.UnusedMethodDeclaredThrownException);
@@ -9286,7 +9314,28 @@
 		sourceStart,
 		sourceEnd);
 }
+public void illegalParameterRedefinition(Argument argument, ReferenceBinding declaringClass, TypeBinding inheritedParameter) {
+	int sourceStart = argument.type.sourceStart;
+	if (argument.annotations != null) {
+		for (int i=0; i<argument.annotations.length; i++) {
+			Annotation annotation = argument.annotations[i];
+			if (   annotation.resolvedType.id == TypeIds.T_ConfiguredAnnotationNullable
+				|| annotation.resolvedType.id == TypeIds.T_ConfiguredAnnotationNonNull)
+			{
+				sourceStart = annotation.sourceStart;
+				break;
+			}
+		}
+	}
+	this.handle(
+		IProblem.IllegalParameterNullityRedefinition, 
+		new String[] { new String(argument.name), new String(declaringClass.readableName()), new String(inheritedParameter.nullAnnotatedReadableName(this.options, false)) },
+		new String[] { new String(argument.name), new String(declaringClass.shortReadableName()), new String(inheritedParameter.nullAnnotatedReadableName(this.options, true))  },
+		sourceStart,
+		argument.type.sourceEnd);
+}
 public void illegalReturnRedefinition(AbstractMethodDeclaration abstractMethodDecl, MethodBinding inheritedMethod, char[][] nonNullAnnotationName) {
+	// nonNullAnnotationName is not used in 1.8-mode
 	MethodDeclaration methodDecl = (MethodDeclaration) abstractMethodDecl;
 	StringBuffer methodSignature = new StringBuffer();
 	methodSignature
@@ -9305,10 +9354,29 @@
 	if (annotation != null) {
 		sourceStart = annotation.sourceStart;
 	}
+	TypeBinding inheritedReturnType = inheritedMethod.returnType;
+	String[] arguments;
+	String[] argumentsShort;
+	if (this.options.complianceLevel < ClassFileConstants.JDK1_8) {
+		StringBuilder returnType = new StringBuilder();
+		returnType.append('@').append(CharOperation.concatWith(nonNullAnnotationName, '.'));
+		returnType.append(' ').append(inheritedReturnType.readableName());
+		arguments = new String[] { methodSignature.toString(), returnType.toString() };
+		
+		returnType = new StringBuilder();
+		returnType.append('@').append(nonNullAnnotationName[nonNullAnnotationName.length-1]);
+		returnType.append(' ').append(inheritedReturnType.shortReadableName());
+		argumentsShort = new String[] { shortSignature.toString(), returnType.toString() };
+	} else {
+		arguments = new String[] { methodSignature.toString(), 
+									String.valueOf(inheritedReturnType.nullAnnotatedReadableName(this.options, false))};
+		argumentsShort = new String[] { shortSignature.toString(),
+									String.valueOf(inheritedReturnType.nullAnnotatedReadableName(this.options, true))};
+	}
 	this.handle(
 		IProblem.IllegalReturnNullityRedefinition, 
-		new String[] { methodSignature.toString(), CharOperation.toString(nonNullAnnotationName)},
-		new String[] { shortSignature.toString(), new String(nonNullAnnotationName[nonNullAnnotationName.length-1])},
+			arguments,
+			argumentsShort,
 		sourceStart,
 		methodDecl.returnType.sourceEnd);
 }
@@ -9784,6 +9852,13 @@
 			location.sourceEnd);
 }
 
+public void implicitObjectBoundNoNullDefault(TypeReference reference) {
+	this.handle(IProblem.ImplicitObjectBoundNoNullDefault,
+			NoArgument, NoArgument,
+			ProblemSeverities.Warning,
+			reference.sourceStart, reference.sourceEnd);
+}
+
 public void dereferencingNullableExpression(Expression expression) {
 	if (expression instanceof MessageSend) {
 		MessageSend send = (MessageSend) expression;
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/problem/messages.properties b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/problem/messages.properties
index 51a6cf5..11c0127 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/problem/messages.properties
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/compiler/problem/messages.properties
@@ -39,6 +39,8 @@
 #							Bug 392245 - [1.8][compiler][null] Define whether / how @NonNullByDefault applies to TYPE_USE locations
 #							Bug 430150 - [1.8][null] stricter checking against type variables
 #							Bug 434600 - Incorrect null analysis error reporting on type parameters
+#							Bug 439516 - [1.8][null] NonNullByDefault wrongly applied to implicit type bound of binary type
+#							Bug 438467 - [compiler][null] Better error position for "The method _ cannot implement the corresponding method _ due to incompatible nullness constraints"
 #		Jesper S Moller <jesper@selskabet.org> - Contributions for
 #							bug 382701 - [1.8][compiler] Implement semantic analysis of Lambda expressions & Reference expression
 #							bug 384567 - [1.5][compiler] Compiler accepts illegal modifiers on package declaration
@@ -74,6 +76,7 @@
 31 = The member enum {0} can only be defined inside a top-level class or interface or in a static context
 32 = The member enum {0} must be defined inside a static member type
 33 = The type {0} is hiding the type {1}
+34 = {0} is not an annotation type
 
 50 = {0} cannot be resolved
 51 = The local variable {0} may not have been initialized
@@ -110,6 +113,7 @@
 82 = The final field {0} may already have been assigned
 83 = {0} cannot be resolved to a variable
 84 = This static method of interface {0} can only be accessed as {0}.{1}
+85 = The value of the exception parameter {0} is not used
 
 90 = The local variable {0} is hiding another local variable defined in an enclosing scope
 91 = The local variable {0} is hiding a field from type {1}
@@ -775,7 +779,7 @@
 911 = Null type mismatch: required ''{0}'' but the provided value is inferred as @{1}
 912 = Null type safety: The expression of type ''{0}'' needs unchecked conversion to conform to ''{1}''
 913 = A default nullness annotation has not been specified for the package {0}
-914 = The return type is incompatible with the @{1} return from {0}
+914 = The return type is incompatible with ''{1}'' returned from {0} (mismatching null constraints)
 915 = Illegal redefinition of parameter {0}, inherited method from {1} declares this parameter as @{2}
 916 = Illegal redefinition of parameter {0}, inherited method from {1} does not constrain this parameter
 917 = Missing non-null annotation: inherited method from {0} specifies this parameter as @{1}
@@ -825,6 +829,8 @@
 #968 temporary warning has been removed
 969 = Null type mismatch (type annotations): ''null'' is not compatible to the free type variable ''{0}''
 970 = Null type mismatch (type annotations): required ''{0}'' but this expression has type ''{1}'', where ''{0}'' is a free type variable
+971 = The explicit type bound 'Object' is not affected by the nullness default for DefaultLocation.TYPE_BOUND.
+972 = Illegal redefinition of parameter {0}, inherited method from {1} declares this parameter as ''{2}'' (mismatching null constraints)
 
 # Java 8
 1001 = Syntax error, modifiers and annotations are not allowed for the lambda parameter {0} as its type is elided
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/TypeVector.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/TypeVector.java
index 6cef065..f821165 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/TypeVector.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/TypeVector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,9 +52,25 @@
 	this.size += newElements.length;
 }
 public boolean contains(IType element) {
-	for (int i = this.size; --i >= 0;)
-		if (element.equals(this.elements[i]))
+	for (int i = this.size; --i >= 0;) {
+		/* Note: When creating new subtypes of RST, need to check whether this code
+		 * which gives special treatment to lambda needs modification or not - refer to bug 436139
+		 * An alternate could have been the following:
+		 * if (element.equals(this.elements[i) && this.elements[i].equals(element)) return true;
+		 * but the above has the issue of repeating the steps in most of the cases.
+		 */
+		IType firstElement = null;
+		IType secondElement = null;
+		if (element.isLambda()) {
+			firstElement = element;
+			secondElement = this.elements[i];
+		} else {
+			firstElement = this.elements[i];
+			secondElement = element;
+		}
+		if (firstElement.equals(secondElement))
 			return true;
+	}
 	return false;
 }
 public TypeVector copy() {
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/dom/SourceRangeVerifier.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/dom/SourceRangeVerifier.java
index 5d8a631..e154fa0 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/dom/SourceRangeVerifier.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/dom/SourceRangeVerifier.java
@@ -1,114 +1,114 @@
-/*******************************************************************************

- * Copyright (c) 2013 IBM Corporation and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *     IBM Corporation - initial API and implementation

- *******************************************************************************/

-package org.aspectj.org.eclipse.jdt.internal.core.dom;

-

-import java.util.List;

-

-import org.aspectj.org.eclipse.jdt.core.dom.ASTNode;

-import org.aspectj.org.eclipse.jdt.core.dom.ASTParser;

-import org.aspectj.org.eclipse.jdt.core.dom.ASTVisitor;

-import org.aspectj.org.eclipse.jdt.core.dom.ArrayCreation;

-import org.aspectj.org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;

-

-@SuppressWarnings("rawtypes")

-public class SourceRangeVerifier extends ASTVisitor {

-

-	public static boolean DEBUG = false;

-	public static boolean DEBUG_THROW = false;

-	

-	private StringBuffer bugs; 

-	

-	/**

-	 * Verifies proper node nesting as specified in {@link ASTParser#setKind(int)}:

-	 * <p>

-	 * Source ranges nest properly: the source range for a child is always

-	 * within the source range of its parent, and the source ranges of sibling

-	 * nodes never overlap.

-	 * </p>

-	 * 

-	 * @param node

-	 * @return <code>null</code> if everything is OK; a list of errors otherwise

-	 */

-	public String process(ASTNode node) {

-		StringBuffer buffer = new StringBuffer();

-		this.bugs = buffer;

-		node.accept(this);

-		this.bugs = null;

-		if (buffer.length() == 0)

-			return null;

-		return buffer.toString();

-	}

-	

-	public boolean preVisit2(ASTNode node) {

-		ASTNode previous = null;

-		

-		List properties = node.structuralPropertiesForType();

-		for (int i = 0; i < properties.size(); i++) {

-			StructuralPropertyDescriptor property = (StructuralPropertyDescriptor) properties.get(i);

-			if (property.isChildProperty()) {

-				ASTNode child = (ASTNode) node.getStructuralProperty(property);

-				if (child != null) {

-					boolean ok = checkChild(node, previous, child);

-					if (ok) {

-						previous = child;

-					} else {

-						return false;

-					}

-				}

-			} else if (property.isChildListProperty()) {

-				List children = (List) node.getStructuralProperty(property);

-				for (int j= 0; j < children.size(); j++) {

-					ASTNode child = (ASTNode) children.get(j);

-					boolean ok = checkChild(node, previous, child);

-					if (ok) {

-						previous = child;

-					} else {

-						return false;

-					}

-				}

-			}

-		}

-		return true;

-	}

-

-	private boolean checkChild(ASTNode parent, ASTNode previous, ASTNode child) {

-		if ((parent.getFlags() & (ASTNode.RECOVERED | ASTNode.MALFORMED)) != 0

-				|| (child.getFlags() & (ASTNode.RECOVERED | ASTNode.MALFORMED)) != 0)

-			return false; 

-		

-		int parentStart = parent.getStartPosition();

-		int parentEnd = parentStart + parent.getLength();

-		

-		int childStart = child.getStartPosition();

-		int childEnd = childStart + child.getLength();

-		

-		if (previous != null) {

-			// Turn a blind eye on a known problem ... see https://bugs.eclipse.org/391894#c4

-			if (child.getLocationInParent() == ArrayCreation.DIMENSIONS_PROPERTY)

-				return false;

-			

-			int previousStart = previous.getStartPosition();

-			int previousEnd = previousStart + previous.getLength();

-			if (childStart < previousEnd) {

-				String bug = "- parent [" + parentStart + ", " + parentEnd + "] " + parent.getClass().getName() + '\n' //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

-						+ "   previous [" + previousStart + ", " + previousEnd + "] "  + previous.getClass().getName() + '\n'//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

-						+ "   " + child.getLocationInParent().getId() + " [" + childStart + ", " + childEnd + "] " + child.getClass().getName() + '\n'; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$

-				this.bugs.append(bug);

-			}

-		}

-		if (!(parentStart <= childStart && childEnd <= parentEnd)) {

-			String bug = "- parent [" + parentStart + ", " + parentEnd + "] " + parent.getClass().getName() + '\n' //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

-					   + "   " + child.getLocationInParent().getId() + " [" + childStart + ", " + childEnd + "] " + child.getClass().getName() + '\n'; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$

-			this.bugs.append(bug);

-		}

-		return true;

-	}

-}

+/*******************************************************************************
+ * Copyright (c) 2013 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.org.eclipse.jdt.internal.core.dom;
+
+import java.util.List;
+
+import org.aspectj.org.eclipse.jdt.core.dom.ASTNode;
+import org.aspectj.org.eclipse.jdt.core.dom.ASTParser;
+import org.aspectj.org.eclipse.jdt.core.dom.ASTVisitor;
+import org.aspectj.org.eclipse.jdt.core.dom.ArrayCreation;
+import org.aspectj.org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
+
+@SuppressWarnings("rawtypes")
+public class SourceRangeVerifier extends ASTVisitor {
+
+	public static boolean DEBUG = false;
+	public static boolean DEBUG_THROW = false;
+	
+	private StringBuffer bugs; 
+	
+	/**
+	 * Verifies proper node nesting as specified in {@link ASTParser#setKind(int)}:
+	 * <p>
+	 * Source ranges nest properly: the source range for a child is always
+	 * within the source range of its parent, and the source ranges of sibling
+	 * nodes never overlap.
+	 * </p>
+	 * 
+	 * @param node
+	 * @return <code>null</code> if everything is OK; a list of errors otherwise
+	 */
+	public String process(ASTNode node) {
+		StringBuffer buffer = new StringBuffer();
+		this.bugs = buffer;
+		node.accept(this);
+		this.bugs = null;
+		if (buffer.length() == 0)
+			return null;
+		return buffer.toString();
+	}
+	
+	public boolean preVisit2(ASTNode node) {
+		ASTNode previous = null;
+		
+		List properties = node.structuralPropertiesForType();
+		for (int i = 0; i < properties.size(); i++) {
+			StructuralPropertyDescriptor property = (StructuralPropertyDescriptor) properties.get(i);
+			if (property.isChildProperty()) {
+				ASTNode child = (ASTNode) node.getStructuralProperty(property);
+				if (child != null) {
+					boolean ok = checkChild(node, previous, child);
+					if (ok) {
+						previous = child;
+					} else {
+						return false;
+					}
+				}
+			} else if (property.isChildListProperty()) {
+				List children = (List) node.getStructuralProperty(property);
+				for (int j= 0; j < children.size(); j++) {
+					ASTNode child = (ASTNode) children.get(j);
+					boolean ok = checkChild(node, previous, child);
+					if (ok) {
+						previous = child;
+					} else {
+						return false;
+					}
+				}
+			}
+		}
+		return true;
+	}
+
+	private boolean checkChild(ASTNode parent, ASTNode previous, ASTNode child) {
+		if ((parent.getFlags() & (ASTNode.RECOVERED | ASTNode.MALFORMED)) != 0
+				|| (child.getFlags() & (ASTNode.RECOVERED | ASTNode.MALFORMED)) != 0)
+			return false; 
+		
+		int parentStart = parent.getStartPosition();
+		int parentEnd = parentStart + parent.getLength();
+		
+		int childStart = child.getStartPosition();
+		int childEnd = childStart + child.getLength();
+		
+		if (previous != null) {
+			// Turn a blind eye on a known problem ... see https://bugs.eclipse.org/391894#c4
+			if (child.getLocationInParent() == ArrayCreation.DIMENSIONS_PROPERTY)
+				return false;
+			
+			int previousStart = previous.getStartPosition();
+			int previousEnd = previousStart + previous.getLength();
+			if (childStart < previousEnd) {
+				String bug = "- parent [" + parentStart + ", " + parentEnd + "] " + parent.getClass().getName() + '\n' //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						+ "   previous [" + previousStart + ", " + previousEnd + "] "  + previous.getClass().getName() + '\n'//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						+ "   " + child.getLocationInParent().getId() + " [" + childStart + ", " + childEnd + "] " + child.getClass().getName() + '\n'; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+				this.bugs.append(bug);
+			}
+		}
+		if (!(parentStart <= childStart && childEnd <= parentEnd)) {
+			String bug = "- parent [" + parentStart + ", " + parentEnd + "] " + parent.getClass().getName() + '\n' //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					   + "   " + child.getLocationInParent().getId() + " [" + childStart + ", " + childEnd + "] " + child.getClass().getName() + '\n'; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			this.bugs.append(bug);
+		}
+		return true;
+	}
+}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex.java
index a17f074..2e93330 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/index/DiskIndex.java
@@ -56,6 +56,7 @@
 private static final int CHUNK_SIZE = 100;
 
 private static final SimpleSetOfCharArray INTERNED_CATEGORY_NAMES = new SimpleSetOfCharArray(20);
+private static final String TMP_EXT = ".tmp"; //$NON-NLS-1$
 
 static class IntList {
 
@@ -248,6 +249,7 @@
 		throw e;
 	} finally {
 		stream.close();
+		this.indexLocation.close();
 		this.streamBuffer = null;
 		BUFFER_READ_SIZE = DEFAULT_BUFFER_SIZE;
 	}
@@ -394,6 +396,7 @@
 				}
 			} finally {
 				stream.close();
+				this.indexLocation.close();
 			}
 			return;
 		}
@@ -520,8 +523,16 @@
 		newDiskIndex.initialize(false);
 		return newDiskIndex;
 	}
+	boolean usingTmp = false;
 	File oldIndexFile = this.indexLocation.getIndexFile();
-	DiskIndex newDiskIndex = new DiskIndex(new FileIndexLocation(new File(oldIndexFile.getPath() + ".tmp"))); //$NON-NLS-1$
+	String indexFilePath = oldIndexFile.getPath();
+	if (indexFilePath.endsWith(TMP_EXT)) { // the tmp file could not be renamed last time
+		indexFilePath = indexFilePath.substring(0, indexFilePath.length()-TMP_EXT.length());
+		usingTmp = true;
+	} else {
+		indexFilePath += TMP_EXT;
+	}
+	DiskIndex newDiskIndex = new DiskIndex(new FileIndexLocation(new File(indexFilePath)));
 	File newIndexFile = newDiskIndex.indexLocation.getIndexFile();
 	try {
 		newDiskIndex.initializeFrom(this, newIndexFile);
@@ -562,10 +573,18 @@
 				System.out.println("mergeWith - Failed to delete " + this.indexLocation); //$NON-NLS-1$
 			throw new IOException("Failed to delete index file " + this.indexLocation); //$NON-NLS-1$
 		}
-		if (!newIndexFile.renameTo(oldIndexFile)) {
-			if (DEBUG)
-				System.out.println("mergeWith - Failed to rename " + this.indexLocation); //$NON-NLS-1$
-			throw new IOException("Failed to rename index file " + this.indexLocation); //$NON-NLS-1$
+		if (!usingTmp && !newIndexFile.renameTo(oldIndexFile)) {
+			// try again after waiting for two milli secs
+			try {
+				Thread.sleep(2);
+			} catch (InterruptedException e) {
+				//ignore
+			}
+			if (!newIndexFile.renameTo(oldIndexFile)) {
+				if (DEBUG)
+					System.out.println("mergeWith - Failed to rename " + this.indexLocation); //$NON-NLS-1$
+				usingTmp = true;
+			}
 		}
 	} catch (IOException e) {
 		if (newIndexFile.exists() && !newIndexFile.delete())
@@ -574,7 +593,8 @@
 		throw e;
 	}
 
-	newDiskIndex.indexLocation = this.indexLocation;
+	if (!usingTmp) // rename done, use the new file
+		newDiskIndex.indexLocation = this.indexLocation;
 	return newDiskIndex;
 }
 private synchronized String[] readAllDocumentNames() throws IOException {
@@ -595,6 +615,7 @@
 		return docNames;
 	} finally {
 		stream.close();
+		this.indexLocation.close();
 		this.streamBuffer = null;
 	}
 }
@@ -683,6 +704,7 @@
 		throw ioe;
 	} finally {
 		stream.close();
+		this.indexLocation.close();
 	}
 
 	if (matchingWords != null && count > 0) {
@@ -699,6 +721,7 @@
 			throw ioe;
 		} finally {
 			stream.close();
+			this.indexLocation.close();
 		}
 	}
 	this.streamBuffer = null;
@@ -752,6 +775,7 @@
 			throw ioe;
 		} finally {
 			file.close();
+			this.indexLocation.close();
 		}
 		int numberOfNames = isLastChunk ? this.sizeOfLastChunk : CHUNK_SIZE;
 		chunk = new String[numberOfNames];
@@ -781,6 +805,7 @@
 		return readStreamDocumentArray(stream, readStreamInt(stream));
 	} finally {
 		stream.close();
+		this.indexLocation.close();
 		this.streamBuffer = null;
 	}
 }
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/index/JarIndexLocation.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/index/JarIndexLocation.java
index 06b106a..7b2067f 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/index/JarIndexLocation.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/index/JarIndexLocation.java
@@ -59,6 +59,7 @@
 		try {
 			if (this.jarFile == null) {
 				JarURLConnection connection = (JarURLConnection) this.localUrl.openConnection();
+				connection.setUseCaches(false);
 				JarFile file = connection.getJarFile();
 				if (file == null)
 					return false;
@@ -81,6 +82,7 @@
 	InputStream getInputStream() throws IOException {
 		if (this.jarFile == null) {
 			JarURLConnection connection = (JarURLConnection) this.localUrl.openConnection();
+			connection.setUseCaches(false);
 			this.jarFile = connection.getJarFile();
 			this.jarEntry = connection.getJarEntry();
 		}
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java
index 6fa4072..cb24cd1 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java
@@ -377,7 +377,9 @@
 }
 protected void consumeMemberValuePair() {
 	super.consumeMemberValuePair();
-	this.patternLocator.match((MemberValuePair) this.astStack[this.astPtr], this.nodeSet);
+	if ((this.patternFineGrain & ~IJavaSearchConstants.METHOD_REFERENCE_EXPRESSION) != 0) {
+		this.patternLocator.match((MemberValuePair) this.astStack[this.astPtr], this.nodeSet);
+	}
 }
 
 protected void consumeMethodHeaderName(boolean isAnnotationMethod) {
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/util/Disassembler.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/util/Disassembler.java
index 33bdd92..c826479 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/util/Disassembler.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/core/util/Disassembler.java
@@ -1575,14 +1575,14 @@
 	private String bootstrapMethodDescription(IBootstrapMethodsEntry entry, IConstantPool constantPool) {
 		// http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html
 		// The BootstrapMethods attribute records bootstrap method specifiers referenced by invokedynamic instructions.
-		// The value of the bootstrap_method_ref item must be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_MethodHandle_info structure (�4.4.8).
+		// The value of the bootstrap_method_ref item must be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_MethodHandle_info structure (§4.4.8).
 		// http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4.8
 		// constantpoolentry.getKind() = IConstantPoolConstant.CONSTANT_MethodHandle
 
 		ConstantPoolEntry2 constantPoolEntry2 =  (ConstantPoolEntry2) constantPool.decodeEntry(entry.getBootstrapMethodReference());
 
 		// The reference_kind item of the CONSTANT_MethodHandle_info structure should have the value 6 (REF_invokeStatic) or 8 (REF_newInvokeSpecial)
-		// (�5.4.3.5) or else invocation of the bootstrap method handle during call site specifier resolution for an invokedynamic instruction will complete abruptly.
+		// (§5.4.3.5) or else invocation of the bootstrap method handle during call site specifier resolution for an invokedynamic instruction will complete abruptly.
 		// If the value of the reference_kind item is 5 (REF_invokeVirtual), 6 (REF_invokeStatic), 7 (REF_invokeSpecial),
 		// or 9 (REF_invokeInterface), the name of the method represented by a CONSTANT_Methodref_info structure must not be <init> or <clinit>.
 
@@ -1601,7 +1601,7 @@
 		// 	    Each entry in the bootstrap_arguments array must be a valid index into the constant_pool table.
 		//      The constant_pool entry at that index must be a CONSTANT_String_info, CONSTANT_Class_info, CONSTANT_Integer_info
 		//      CONSTANT_Long_info, CONSTANT_Float_info, CONSTANT_Double_info, CONSTANT_MethodHandle_info, or
-		//      CONSTANT_MethodType_info structure (�4.4.3, �4.4.1, �4.4.4, �4.4.5), �4.4.8, �4.4.9).
+		//      CONSTANT_MethodType_info structure (§4.4.3, §4.4.1, §4.4.4, §4.4.5), §4.4.8, §4.4.9).
 		if (entry.getBootstrapArguments().length == 0)
 			return null;
 		int[] bootstrapArguments = entry.getBootstrapArguments();
@@ -1616,8 +1616,8 @@
 					// http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4.8
 					// If the value of the reference_kind item is 5 (REF_invokeVirtual), 6 (REF_invokeStatic),
 					// 7 (REF_invokeSpecial), or 8 (REF_newInvokeSpecial), then the constant_pool entry at that
-					// index must be a CONSTANT_Methodref_info structure (�4.4.2) representing a class's method or
-					// constructor (�2.9) for which a method handle is to be created.
+					// index must be a CONSTANT_Methodref_info structure (§4.4.2) representing a class's method or
+					// constructor (§2.9) for which a method handle is to be created.
 					ConstantPoolEntry2 constantPoolEntry2 = (ConstantPoolEntry2) constantPoolEntry;
 					StringBuilder builder = new StringBuilder(10);
 					switch(constantPoolEntry2.getReferenceKind()) {
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.java
index b7e6117..0e5e022 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.java
@@ -2041,9 +2041,9 @@
 			try {
 				this.page_width = Integer.parseInt((String) pageWidthOption);
 			} catch (NumberFormatException e) {
-				this.page_width = 80;
+				this.page_width = 120;
 			} catch(ClassCastException e) {
-				this.page_width = 80;
+				this.page_width = 120;
 			}
 		}
 		final Object useTabOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR);
@@ -2474,7 +2474,7 @@
 		this.join_wrapped_lines = true;
 		this.put_empty_statement_on_new_line = false;
 		this.tab_size = 4;
-		this.page_width = 80;
+		this.page_width = 120;
 		this.tab_char = TAB; // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=49081
 		this.use_tabs_only_for_leading_indentations = false;
 		this.wrap_before_binary_operator = true;
@@ -2765,7 +2765,7 @@
 		this.join_wrapped_lines = true;
 		this.put_empty_statement_on_new_line = true;
 		this.tab_size = 8;
-		this.page_width = 80;
+		this.page_width = 120;
 		this.tab_char = MIXED;
 		this.use_tabs_only_for_leading_indentations = false;
 		this.wrap_before_binary_operator = true;
diff --git a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/formatter/Scribe.java b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/formatter/Scribe.java
index d9444f6..a637ed9 100644
--- a/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/formatter/Scribe.java
+++ b/org.aspectj.ajde/source/org/aspectj/org/eclipse/jdt/internal/formatter/Scribe.java
@@ -1138,14 +1138,17 @@
 		if (linesCount > length) {
 			System.arraycopy(this.newEmptyLines, 0, this.newEmptyLines = new String[linesCount+10], 0, length);
 		}
-		String newLineString = this.newEmptyLines[linesCount-1];
-		if (newLineString == null) {
-			this.tempBuffer.setLength(0);
-			for (int j=0; j<linesCount; j++) {
-				this.tempBuffer.append(this.lineSeparator);
+		String newLineString = Util.EMPTY_STRING;
+		if (linesCount > 0) {
+			newLineString = this.newEmptyLines[linesCount-1];
+			if (newLineString == null) {
+				this.tempBuffer.setLength(0);
+				for (int j=0; j<linesCount; j++) {
+					this.tempBuffer.append(this.lineSeparator);
+				}
+				newLineString = this.tempBuffer.toString();
+				this.newEmptyLines[linesCount-1] = newLineString;
 			}
-			newLineString = this.tempBuffer.toString();
-			this.newEmptyLines[linesCount-1] = newLineString;
 		}
 		return newLineString;
 	}
diff --git a/org.aspectj.ajde/source/org/aspectj/tools/ajdoc/StructureUtil.java b/org.aspectj.ajde/source/org/aspectj/tools/ajdoc/StructureUtil.java
index e38538f..6f9ad77 100644
--- a/org.aspectj.ajde/source/org/aspectj/tools/ajdoc/StructureUtil.java
+++ b/org.aspectj.ajde/source/org/aspectj/tools/ajdoc/StructureUtil.java
@@ -148,7 +148,7 @@
 		if (node.getParameterTypes() != null) {
 			sb.append('(');
 			for (int i = 0; i < node.getParameterTypes().size(); i++) {
-				sb.append((String) node.getParameterTypes().get(i));
+				sb.append(String.valueOf(node.getParameterTypes().get(i)));
 				sb.append(' ');
 				sb.append((String) node.getParameterNames().get(i));
 				if (i < node.getParameterTypes().size() - 1) {
diff --git a/org.aspectj.ajde/source/org/aspectj/tools/ant/taskdefs/AjcTask.java b/org.aspectj.ajde/source/org/aspectj/tools/ant/taskdefs/AjcTask.java
index 043830c..0b36599 100644
--- a/org.aspectj.ajde/source/org/aspectj/tools/ant/taskdefs/AjcTask.java
+++ b/org.aspectj.ajde/source/org/aspectj/tools/ant/taskdefs/AjcTask.java
@@ -461,6 +461,48 @@
 		return (0 == result.length() ? null : result.toString());
 	}
 
+  /**
+   * Controls whether annotation processing and/or compilation is done.
+   * -proc:none means that compilation takes place without annotation processing.
+   * -proc:only means that only annotation processing is done, without any subsequent compilation.
+   */
+  public void setProc(String proc) {
+    if (proc.equals("none")) {
+      cmd.addFlag("-proc:none", true);
+    } else if (proc.equals("only")) {
+      cmd.addFlag("-proc:only", true);
+    }
+  }
+
+  /**
+   * -processor class1[,class2,class3...]
+   *  Names of the annotation processors to run. This bypasses the default discovery process.
+   */
+  public void setProcessor(String processors) {
+    cmd.addFlagged("-processor", processors);
+  }
+
+  /**
+   * -processorpath path
+   * Specify where to find annotation processors; if this option is not used, the class path will be searched for processors.
+   */
+  public void setProcessorpath(String processorpath) {
+    cmd.addFlagged("-processorpath", processorpath);
+  }
+
+  /**
+   * -s dir
+   * Specify the directory where to place generated source files. The directory must already exist; javac will not create it.
+   * If a class is part of a package, the compiler puts the source file in a subdirectory reflecting the package name,
+   * creating directories as needed.
+   *
+   * For example, if you specify -s C:\mysrc and the class is called com.mypackage.MyClass,
+   * then the source file will be placed in C:\mysrc\com\mypackage\MyClass.java.
+   */
+  public void setS(String s) {
+    cmd.addFlagged("-s", s);
+  }
+
 	public void setIncremental(boolean incremental) {
 		cmd.addFlag("-incremental", incremental);
 		inIncrementalMode = incremental;
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AdviceImpl$1.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AdviceImpl$1.class
index 7198c77..2c8bd0d 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AdviceImpl$1.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AdviceImpl$1.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AdviceImpl.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AdviceImpl.class
index 15e4296..b9cf44b 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AdviceImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AdviceImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AjTypeImpl.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AjTypeImpl.class
index bbb9d73..240b827 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AjTypeImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/AjTypeImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareAnnotationImpl$1.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareAnnotationImpl$1.class
index 1e549d6..70432cb 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareAnnotationImpl$1.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareAnnotationImpl$1.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareAnnotationImpl.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareAnnotationImpl.class
index 07ee884..4737325 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareAnnotationImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareAnnotationImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareParentsImpl.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareParentsImpl.class
index ed0f459..ddb3d6a 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareParentsImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareParentsImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareSoftImpl.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareSoftImpl.class
index 560d139..f7d26e1 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareSoftImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/DeclareSoftImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/InterTypeFieldDeclarationImpl.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/InterTypeFieldDeclarationImpl.class
index e76ee5c..fd87619 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/InterTypeFieldDeclarationImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/InterTypeFieldDeclarationImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/InterTypeMethodDeclarationImpl.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/InterTypeMethodDeclarationImpl.class
index 3c51d23..c70e8c6 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/InterTypeMethodDeclarationImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/InterTypeMethodDeclarationImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/PointcutBasedPerClauseImpl$1.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/PointcutBasedPerClauseImpl$1.class
index 3254202..504c0e0 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/PointcutBasedPerClauseImpl$1.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/PointcutBasedPerClauseImpl$1.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/PointcutBasedPerClauseImpl.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/PointcutBasedPerClauseImpl.class
index 3faad36..cef29ff 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/PointcutBasedPerClauseImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/PointcutBasedPerClauseImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/StringToType$1.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/StringToType$1.class
index fada9fa..f83e9ed 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/StringToType$1.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/StringToType$1.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/StringToType.class b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/StringToType.class
index 0e2a458..2f078bd 100644
--- a/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/StringToType.class
+++ b/org.aspectj.runtime/classes/org/aspectj/internal/lang/reflect/StringToType.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/lang/Aspects.class b/org.aspectj.runtime/classes/org/aspectj/lang/Aspects.class
index fa311ba..fe4a900 100644
--- a/org.aspectj.runtime/classes/org/aspectj/lang/Aspects.class
+++ b/org.aspectj.runtime/classes/org/aspectj/lang/Aspects.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/lang/Aspects14.class b/org.aspectj.runtime/classes/org/aspectj/lang/Aspects14.class
index 8aa23a9..2de8949 100644
--- a/org.aspectj.runtime/classes/org/aspectj/lang/Aspects14.class
+++ b/org.aspectj.runtime/classes/org/aspectj/lang/Aspects14.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/lang/reflect/AdviceKind.class b/org.aspectj.runtime/classes/org/aspectj/lang/reflect/AdviceKind.class
index ae1e3ae..6ba7a16 100644
--- a/org.aspectj.runtime/classes/org/aspectj/lang/reflect/AdviceKind.class
+++ b/org.aspectj.runtime/classes/org/aspectj/lang/reflect/AdviceKind.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/lang/reflect/AjTypeSystem.class b/org.aspectj.runtime/classes/org/aspectj/lang/reflect/AjTypeSystem.class
index 2f05678..25bee06 100644
--- a/org.aspectj.runtime/classes/org/aspectj/lang/reflect/AjTypeSystem.class
+++ b/org.aspectj.runtime/classes/org/aspectj/lang/reflect/AjTypeSystem.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/lang/reflect/DeclareAnnotation$Kind.class b/org.aspectj.runtime/classes/org/aspectj/lang/reflect/DeclareAnnotation$Kind.class
index 097fee7..b8608ef 100644
--- a/org.aspectj.runtime/classes/org/aspectj/lang/reflect/DeclareAnnotation$Kind.class
+++ b/org.aspectj.runtime/classes/org/aspectj/lang/reflect/DeclareAnnotation$Kind.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/lang/reflect/PerClauseKind.class b/org.aspectj.runtime/classes/org/aspectj/lang/reflect/PerClauseKind.class
index 2c9facf..0335110 100644
--- a/org.aspectj.runtime/classes/org/aspectj/lang/reflect/PerClauseKind.class
+++ b/org.aspectj.runtime/classes/org/aspectj/lang/reflect/PerClauseKind.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadCounterImpl11.class b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadCounterImpl11.class
index 115de5a..812875c 100644
--- a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadCounterImpl11.class
+++ b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadCounterImpl11.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$1.class b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$1.class
index 9f609c9..6909fc7 100644
--- a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$1.class
+++ b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$1.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$ThreadCounterImpl.class b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$ThreadCounterImpl.class
index 15c0019..bd7230b 100644
--- a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$ThreadCounterImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$ThreadCounterImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$ThreadStackImpl.class b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$ThreadStackImpl.class
index 240ec7b..0438762 100644
--- a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$ThreadStackImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl$ThreadStackImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl.class b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl.class
index a010b82..b41cbfe 100644
--- a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackImpl11.class b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackImpl11.class
index 6f96738..051e2e8 100644
--- a/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackImpl11.class
+++ b/org.aspectj.runtime/classes/org/aspectj/runtime/internal/cflowstack/ThreadStackImpl11.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/AdviceSignatureImpl.class b/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/AdviceSignatureImpl.class
index 6e0e436..cc03444 100644
--- a/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/AdviceSignatureImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/AdviceSignatureImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/Factory.class b/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/Factory.class
index 7e529df..dfd6ec5 100644
--- a/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/Factory.class
+++ b/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/Factory.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/LockSignatureImpl.class b/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/LockSignatureImpl.class
index 8c8408c..e9e087d 100644
--- a/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/LockSignatureImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/LockSignatureImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/SignatureImpl.class b/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/SignatureImpl.class
index ef9ade5..df30d4d 100644
--- a/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/SignatureImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/SignatureImpl.class
Binary files differ
diff --git a/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/UnlockSignatureImpl.class b/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/UnlockSignatureImpl.class
index 58bd4e9..454b532 100644
--- a/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/UnlockSignatureImpl.class
+++ b/org.aspectj.runtime/classes/org/aspectj/runtime/reflect/UnlockSignatureImpl.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/META-INF/MANIFEST.MF b/org.aspectj.weaver/classes/META-INF/MANIFEST.MF
index dbb0ab3..665c09a 100644
--- a/org.aspectj.weaver/classes/META-INF/MANIFEST.MF
+++ b/org.aspectj.weaver/classes/META-INF/MANIFEST.MF
@@ -1,10 +1,10 @@
 Manifest-Version: 1.0
 Name: org/aspectj/weaver/
 Specification-Title: AspectJ Weaver Classes
-Specification-Version: 1.8.1
+Specification-Version: DEVELOPMENT
 Specification-Vendor: aspectj.org
 Implementation-Title: org.aspectj.weaver
-Implementation-Version: 1.8.1
+Implementation-Version: DEVELOPMENT
 Implementation-Vendor: aspectj.org
 Premain-Class: org.aspectj.weaver.loadtime.Agent
 Can-Redefine-Classes: true
diff --git a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/Attribute.class b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/Attribute.class
index f38f95e..38c8a5d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/Attribute.class
+++ b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/Attribute.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/BootstrapMethods$BootstrapMethod.class b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/BootstrapMethods$BootstrapMethod.class
index 04c28e2..5481bf4 100644
--- a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/BootstrapMethods$BootstrapMethod.class
+++ b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/BootstrapMethods$BootstrapMethod.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/BootstrapMethods.class b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/BootstrapMethods.class
index 4a53342..c07c1e1 100644
--- a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/BootstrapMethods.class
+++ b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/BootstrapMethods.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/ConstantMethodHandle.class b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/ConstantMethodHandle.class
index a4f5025..cfcd4d4 100644
--- a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/ConstantMethodHandle.class
+++ b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/ConstantMethodHandle.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/annotation/RuntimeInvisTypeAnnos.class b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/annotation/RuntimeInvisTypeAnnos.class
index 6ca23ed..1c3861c 100644
--- a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/annotation/RuntimeInvisTypeAnnos.class
+++ b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/annotation/RuntimeInvisTypeAnnos.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/annotation/RuntimeVisTypeAnnos.class b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/annotation/RuntimeVisTypeAnnos.class
index 5302bd0..f1b275a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/annotation/RuntimeVisTypeAnnos.class
+++ b/org.aspectj.weaver/classes/org/aspectj/apache/bcel/classfile/annotation/RuntimeVisTypeAnnos.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$1.class b/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$1.class
index 7413acd..decd5c5 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$CanonicalFilePathMap.class b/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$CanonicalFilePathMap.class
index b66c82a..2670b81 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$CanonicalFilePathMap.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$CanonicalFilePathMap.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$ModelInfo.class b/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$ModelInfo.class
index 0b40509..5a5b682 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$ModelInfo.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager$ModelInfo.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager.class b/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager.class
index 5d83360..775349e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/AsmManager.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/internal/AspectJElementHierarchy.class b/org.aspectj.weaver/classes/org/aspectj/asm/internal/AspectJElementHierarchy.class
index e032a7e..43e0359 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/internal/AspectJElementHierarchy.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/internal/AspectJElementHierarchy.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/internal/HandleProviderDelimiter.class b/org.aspectj.weaver/classes/org/aspectj/asm/internal/HandleProviderDelimiter.class
index 0a7bedf..4461bf4 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/internal/HandleProviderDelimiter.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/internal/HandleProviderDelimiter.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/internal/JDTLikeHandleProvider.class b/org.aspectj.weaver/classes/org/aspectj/asm/internal/JDTLikeHandleProvider.class
index 55e4e93..40c817c 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/internal/JDTLikeHandleProvider.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/internal/JDTLikeHandleProvider.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/internal/NameConvertor.class b/org.aspectj.weaver/classes/org/aspectj/asm/internal/NameConvertor.class
index 6793cc9..a3c60bb 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/internal/NameConvertor.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/internal/NameConvertor.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/internal/ProgramElement$1.class b/org.aspectj.weaver/classes/org/aspectj/asm/internal/ProgramElement$1.class
index ee1a2fb..b51ac8f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/internal/ProgramElement$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/internal/ProgramElement$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/internal/ProgramElement.class b/org.aspectj.weaver/classes/org/aspectj/asm/internal/ProgramElement.class
index 950c62a..5d780c2 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/internal/ProgramElement.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/internal/ProgramElement.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/internal/Relationship.class b/org.aspectj.weaver/classes/org/aspectj/asm/internal/Relationship.class
index 5c2bbaf..df21426 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/internal/Relationship.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/internal/Relationship.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/asm/internal/RelationshipMap.class b/org.aspectj.weaver/classes/org/aspectj/asm/internal/RelationshipMap.class
index f1b36d3..e6b565a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/asm/internal/RelationshipMap.class
+++ b/org.aspectj.weaver/classes/org/aspectj/asm/internal/RelationshipMap.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/AbortException.class b/org.aspectj.weaver/classes/org/aspectj/bridge/AbortException.class
index 1b69059..c73dd30 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/AbortException.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/AbortException.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler$1.class b/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler$1.class
index dc1574b..6dc9d2c 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler$IntHolder.class b/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler$IntHolder.class
index d41a0c3..6360beb 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler$IntHolder.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler$IntHolder.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler.class b/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler.class
index 5c349f0..4020722 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/CountingMessageHandler.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$1.class b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$1.class
index 7ed45cd..4492f5a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$Kind$1.class b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$Kind$1.class
index 272a4d9..b987c5f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$Kind$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$Kind$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$Kind.class b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$Kind.class
index b61175a..ade252f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$Kind.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage$Kind.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage.class b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage.class
index 3ad9f72..2ecee3f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessage.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessageHandler$1.class b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessageHandler$1.class
index 56a82af..62315d9 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessageHandler$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessageHandler$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessageHandler.class b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessageHandler.class
index 46c4ee6..9f91613 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/IMessageHandler.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/IMessageHandler.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageHandler.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageHandler.class
index 6de955c..819a111 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageHandler.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageHandler.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$1.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$1.class
index e1df40e..e091dce 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$10.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$10.class
index 8f7f1fe..d32a2a2 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$10.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$10.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$11.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$11.class
index 0e0ad90..422da0c 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$11.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$11.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$2.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$2.class
index caa83e8..15b7a9f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$2.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$2.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$3.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$3.class
index 332ebd5..047583a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$3.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$3.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$4.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$4.class
index bd6d129..f86d50b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$4.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$4.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$5.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$5.class
index a97bf9f..189c3f0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$5.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$5.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$6.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$6.class
index 504f68b..4dda91b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$6.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$6.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$7.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$7.class
index d579cc2..5738e37 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$7.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$7.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$8.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$8.class
index af71314..a0ceda6 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$8.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$8.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$9.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$9.class
index b6e4868..f946a16 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$9.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil$9.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil.class
index 07042c9..0bbde6b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageUtil.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageWriter.class b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageWriter.class
index b785764..a752827 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/MessageWriter.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/MessageWriter.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/ReflectionFactory.class b/org.aspectj.weaver/classes/org/aspectj/bridge/ReflectionFactory.class
index 205acec..5e6be22 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/ReflectionFactory.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/ReflectionFactory.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/SourceLocation.class b/org.aspectj.weaver/classes/org/aspectj/bridge/SourceLocation.class
index c7b65fa..5b84847 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/SourceLocation.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/SourceLocation.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/Version.class b/org.aspectj.weaver/classes/org/aspectj/bridge/Version.class
index 976130b..efe1df7 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/Version.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/Version.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext$1.class b/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext$1.class
index ddbb287..ca5eafa 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext$DefaultFormatter.class b/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext$DefaultFormatter.class
index ddcfeed..bb27987 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext$DefaultFormatter.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext$DefaultFormatter.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext.class b/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext.class
index 04c7226..7423933 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/context/CompilationAndWeavingContext.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler$1.class b/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler$1.class
index 4cb0402..477d6ca 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler$MessageIssued.class b/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler$MessageIssued.class
index 537a60f..f5a2a62 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler$MessageIssued.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler$MessageIssued.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler.class b/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler.class
index 3a3af9f..2716c1a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler.class
+++ b/org.aspectj.weaver/classes/org/aspectj/bridge/context/PinpointingMessageHandler.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$1.class b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$1.class
index 1389981..b62d57e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$2.class b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$2.class
index d4877c0..f771522 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$2.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$2.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$3.class b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$3.class
index a1657a0..38fccdd 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$3.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$3.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$4.class b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$4.class
index 651a273..0113e66 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$4.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$4.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$5.class b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$5.class
index 920493f..7052620 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$5.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$5.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$Pipe.class b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$Pipe.class
index 8a72dc2..169a08c 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$Pipe.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil$Pipe.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil.class b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil.class
index 54d44d7..23778e2 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FileUtil.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FileUtil.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$1.class b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$1.class
index b6ce2b0..4e01901 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$MaybeFuzzyBoolean.class b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$MaybeFuzzyBoolean.class
index 4125c86..7a5483f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$MaybeFuzzyBoolean.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$MaybeFuzzyBoolean.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$NeverFuzzyBoolean.class b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$NeverFuzzyBoolean.class
index ef8eeed..22f336b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$NeverFuzzyBoolean.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$NeverFuzzyBoolean.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$NoFuzzyBoolean.class b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$NoFuzzyBoolean.class
index 7665eab..4e84e72 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$NoFuzzyBoolean.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$NoFuzzyBoolean.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$YesFuzzyBoolean.class b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$YesFuzzyBoolean.class
index 1f1842d..966dfad 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$YesFuzzyBoolean.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean$YesFuzzyBoolean.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean.class b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean.class
index 9ea75b0..d1532dc 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/FuzzyBoolean.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$ClassSignature.class b/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$ClassSignature.class
index af6f1ef..5490230 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$ClassSignature.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$ClassSignature.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$MethodTypeSignature.class b/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$MethodTypeSignature.class
index 476ce05..6f90071 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$MethodTypeSignature.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$MethodTypeSignature.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$SimpleClassTypeSignature.class b/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$SimpleClassTypeSignature.class
index a8cbc18..dd76e38 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$SimpleClassTypeSignature.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/GenericSignature$SimpleClassTypeSignature.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/GenericSignatureParser.class b/org.aspectj.weaver/classes/org/aspectj/util/GenericSignatureParser.class
index 67e289a..56f4219 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/GenericSignatureParser.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/GenericSignatureParser.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$1.class b/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$1.class
index acceb62..ed6d958 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController$1.class b/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController$1.class
index 2045234..cf5c432 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController$Thrown.class b/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController$Thrown.class
index 3348391..52209c3 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController$Thrown.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController$Thrown.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController.class b/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController.class
index 424736c..08a0669 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/LangUtil$ProcessController.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/LangUtil.class b/org.aspectj.weaver/classes/org/aspectj/util/LangUtil.class
index 0c03390..a7b71d0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/LangUtil.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/LangUtil.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/Reflection.class b/org.aspectj.weaver/classes/org/aspectj/util/Reflection.class
index f948adc..8aac118 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/Reflection.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/Reflection.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/TypeSafeEnum.class b/org.aspectj.weaver/classes/org/aspectj/util/TypeSafeEnum.class
index 1140178..7d45d69 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/TypeSafeEnum.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/TypeSafeEnum.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/util/UtilClassLoader.class b/org.aspectj.weaver/classes/org/aspectj/util/UtilClassLoader.class
index 9f169d9..a14cf71 100644
--- a/org.aspectj.weaver/classes/org/aspectj/util/UtilClassLoader.class
+++ b/org.aspectj.weaver/classes/org/aspectj/util/UtilClassLoader.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AbstractReferenceTypeDelegate.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AbstractReferenceTypeDelegate.class
index 000e389..385b8c4 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AbstractReferenceTypeDelegate.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AbstractReferenceTypeDelegate.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Advice.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Advice.class
index b95f526..426a7e9 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Advice.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Advice.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$AdviceAttribute.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$AdviceAttribute.class
index 502f844..78ddafb 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$AdviceAttribute.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$AdviceAttribute.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$AjSynthetic.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$AjSynthetic.class
index 70eb894..e34630d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$AjSynthetic.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$AjSynthetic.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$Aspect.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$Aspect.class
index f23b874..f774c9d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$Aspect.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$Aspect.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$DeclareAttribute.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$DeclareAttribute.class
index fda7c0c..75743de 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$DeclareAttribute.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$DeclareAttribute.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$EffectiveSignatureAttribute.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$EffectiveSignatureAttribute.class
index fa98b98..ca80728 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$EffectiveSignatureAttribute.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$EffectiveSignatureAttribute.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$MethodDeclarationLineNumberAttribute.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$MethodDeclarationLineNumberAttribute.class
index bc2e55e..cb07cbf 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$MethodDeclarationLineNumberAttribute.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$MethodDeclarationLineNumberAttribute.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$PointcutDeclarationAttribute.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$PointcutDeclarationAttribute.class
index 3582b10..eac4dd0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$PointcutDeclarationAttribute.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$PointcutDeclarationAttribute.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$SourceContextAttribute.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$SourceContextAttribute.class
index a366d3f..45c60cd 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$SourceContextAttribute.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$SourceContextAttribute.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$TypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$TypeMunger.class
index ca13872..d6c9661 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$TypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$TypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$WeaverState.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$WeaverState.class
index e78108c..d156d97 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$WeaverState.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$WeaverState.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$WeaverVersionInfo.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$WeaverVersionInfo.class
index 33ef3c2..f2f5943 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$WeaverVersionInfo.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute$WeaverVersionInfo.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute.class
index 13d7a45..306ab22 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjAttribute.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AjcMemberMaker.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AjcMemberMaker.class
index 5e77ad9..38980d7 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AjcMemberMaker.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AjcMemberMaker.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AnnotationAnnotationValue.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AnnotationAnnotationValue.class
index badbbe1..280736e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AnnotationAnnotationValue.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AnnotationAnnotationValue.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/AnnotationTargetKind.class b/org.aspectj.weaver/classes/org/aspectj/weaver/AnnotationTargetKind.class
index 119c8a6..b5617aa 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/AnnotationTargetKind.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/AnnotationTargetKind.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ArrayAnnotationValue.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ArrayAnnotationValue.class
index 91decd4..49e12a9 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ArrayAnnotationValue.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ArrayAnnotationValue.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ArrayReferenceType.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ArrayReferenceType.class
index 08eeda0..8e30778 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ArrayReferenceType.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ArrayReferenceType.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/BCException.class b/org.aspectj.weaver/classes/org/aspectj/weaver/BCException.class
index f124a6c..0347b20 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/BCException.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/BCException.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/BindingScope.class b/org.aspectj.weaver/classes/org/aspectj/weaver/BindingScope.class
index 5aeb8d1..5404c09 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/BindingScope.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/BindingScope.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/BoundedReferenceType.class b/org.aspectj.weaver/classes/org/aspectj/weaver/BoundedReferenceType.class
index c5e3df9..771c10f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/BoundedReferenceType.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/BoundedReferenceType.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Checker.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Checker.class
index 03239dc..a68765f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Checker.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Checker.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ClassAnnotationValue.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ClassAnnotationValue.class
index 421af3d..202ea86 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ClassAnnotationValue.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ClassAnnotationValue.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ConcreteTypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ConcreteTypeMunger.class
index ea8c3d0..0c99a36 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ConcreteTypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ConcreteTypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/CrosscuttingMembers.class b/org.aspectj.weaver/classes/org/aspectj/weaver/CrosscuttingMembers.class
index 8f45f0a..1eb7a2a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/CrosscuttingMembers.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/CrosscuttingMembers.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/CrosscuttingMembersSet.class b/org.aspectj.weaver/classes/org/aspectj/weaver/CrosscuttingMembersSet.class
index 90eea90..f3f79c5 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/CrosscuttingMembersSet.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/CrosscuttingMembersSet.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Dump.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Dump.class
index 23342af..b2a3c04 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Dump.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Dump.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/EnumAnnotationValue.class b/org.aspectj.weaver/classes/org/aspectj/weaver/EnumAnnotationValue.class
index 9143e5f..724e583 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/EnumAnnotationValue.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/EnumAnnotationValue.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/IntMap.class b/org.aspectj.weaver/classes/org/aspectj/weaver/IntMap.class
index ff300bd..99f035f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/IntMap.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/IntMap.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$1$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$1$1.class
index 5737516..f7d17ce7 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$1$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$1$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$1.class
index e71db5b..9f6b6ee 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$2.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$2.class
index 4603487..a716616 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$2.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$2.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$3.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$3.class
index cefa287..6666a65 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$3.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$3.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$4$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$4$1.class
index 7565b55..0469d11 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$4$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$4$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$4.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$4.class
index 7bb5c87..31b0b69 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$4.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$4.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$5.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$5.class
index 539a646..a3b1296 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$5.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$5.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$6.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$6.class
index 27d7de0..4af486a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$6.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$6.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$7.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$7.class
index d7839e7..fe4513a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$7.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$7.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$8.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$8.class
index cbd1639..5bf1e32 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$8.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$8.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$ResolvedTypeArrayIterator.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$ResolvedTypeArrayIterator.class
index 8acc4e2..89f3b45 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$ResolvedTypeArrayIterator.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators$ResolvedTypeArrayIterator.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators.class
index ebc0054..fde6f38 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Iterators.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/JoinPointSignature.class b/org.aspectj.weaver/classes/org/aspectj/weaver/JoinPointSignature.class
index 7bae5b5..b5bac2f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/JoinPointSignature.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/JoinPointSignature.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/JoinPointSignatureIterator.class b/org.aspectj.weaver/classes/org/aspectj/weaver/JoinPointSignatureIterator.class
index 610415e..a1521d9 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/JoinPointSignatureIterator.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/JoinPointSignatureIterator.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Lint$Kind.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Lint$Kind.class
index c9b82da..c7aa961 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Lint$Kind.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Lint$Kind.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Lint.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Lint.class
index 3792376..d3c3dd8 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Lint.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Lint.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/MemberImpl.class b/org.aspectj.weaver/classes/org/aspectj/weaver/MemberImpl.class
index 7ad358e..1c6c494 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/MemberImpl.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/MemberImpl.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/MethodDelegateTypeMunger$FieldHostTypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/MethodDelegateTypeMunger$FieldHostTypeMunger.class
index c48090e..110882d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/MethodDelegateTypeMunger$FieldHostTypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/MethodDelegateTypeMunger$FieldHostTypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/MethodDelegateTypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/MethodDelegateTypeMunger.class
index 3aaebad..509d6c1 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/MethodDelegateTypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/MethodDelegateTypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature$1.class
index 011eeca..0a5d946 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature.class b/org.aspectj.weaver/classes/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature.class
index 8fe4df2..d74b9b6 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/NameMangler.class b/org.aspectj.weaver/classes/org/aspectj/weaver/NameMangler.class
index 3d419da..ca83fb6 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/NameMangler.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/NameMangler.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/NewConstructorTypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/NewConstructorTypeMunger.class
index fa25a39..ac21b23 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/NewConstructorTypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/NewConstructorTypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/NewFieldTypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/NewFieldTypeMunger.class
index b4423f9..83c0f1b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/NewFieldTypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/NewFieldTypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/NewMemberClassTypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/NewMemberClassTypeMunger.class
index 38cdcdf..4d97381 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/NewMemberClassTypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/NewMemberClassTypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/NewMethodTypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/NewMethodTypeMunger.class
index a08d4be..77c8368 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/NewMethodTypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/NewMethodTypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/PerObjectInterfaceTypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/PerObjectInterfaceTypeMunger.class
index 8d4c07e..a06c7f2 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/PerObjectInterfaceTypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/PerObjectInterfaceTypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/PerTypeWithinTargetTypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/PerTypeWithinTargetTypeMunger.class
index fc6d564..ed36f05 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/PerTypeWithinTargetTypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/PerTypeWithinTargetTypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/PoliceExtensionUse.class b/org.aspectj.weaver/classes/org/aspectj/weaver/PoliceExtensionUse.class
index ce889eb..daaa021 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/PoliceExtensionUse.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/PoliceExtensionUse.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/PrivilegedAccessMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/PrivilegedAccessMunger.class
index 308bf05..e4dfe2e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/PrivilegedAccessMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/PrivilegedAccessMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ReferenceType.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ReferenceType.class
index b433d93..f16e59f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ReferenceType.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ReferenceType.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedMemberImpl.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedMemberImpl.class
index 44a69a6..1e2b395 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedMemberImpl.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedMemberImpl.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedPointcutDefinition.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedPointcutDefinition.class
index a45cb71..63b23ff 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedPointcutDefinition.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedPointcutDefinition.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$1.class
index aef4d53..a95f37b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$2.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$2.class
index 48ce7c9..68ac8de 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$2.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$2.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$3.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$3.class
index 49d722b..4823b91 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$3.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$3.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$4.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$4.class
index 6bd2d34..b542fff 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$4.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$4.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$5.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$5.class
index 1f7730a..84f23c2 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$5.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$5.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$FieldGetter.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$FieldGetter.class
index 60f9f77..5f47813 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$FieldGetter.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$FieldGetter.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$MethodGetter.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$MethodGetter.class
index 6371496..67c43ab 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$MethodGetter.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$MethodGetter.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$MethodGetterIncludingItds.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$MethodGetterIncludingItds.class
index 269b5e0..735afb7 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$MethodGetterIncludingItds.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$MethodGetterIncludingItds.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$Missing.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$Missing.class
index de34671..d289f0e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$Missing.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$Missing.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$PointcutGetter.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$PointcutGetter.class
index 29c73f7..c574dc3 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$PointcutGetter.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$PointcutGetter.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$Primitive.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$Primitive.class
index 2f0343d..bcc4924 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$Primitive.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType$Primitive.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType.class
index 7e1205f..5fcb9ba 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedType.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedTypeMunger$Kind.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedTypeMunger$Kind.class
index f813095..9ba04a5 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedTypeMunger$Kind.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedTypeMunger$Kind.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedTypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedTypeMunger.class
index bd96ca2..2251717 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedTypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ResolvedTypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Shadow$Kind.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Shadow$Kind.class
index d0ffe7a..17f7b39 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Shadow$Kind.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Shadow$Kind.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/Shadow.class b/org.aspectj.weaver/classes/org/aspectj/weaver/Shadow.class
index 15c5c1e..c0ce773 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/Shadow.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/Shadow.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ShadowMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ShadowMunger.class
index b069d5f..eb3b2e8 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ShadowMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ShadowMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/SignatureUtils.class b/org.aspectj.weaver/classes/org/aspectj/weaver/SignatureUtils.class
index 5034511..c4021f6 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/SignatureUtils.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/SignatureUtils.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/SourceContextImpl$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/SourceContextImpl$1.class
index f6ed80a..e45314e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/SourceContextImpl$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/SourceContextImpl$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/SourceContextImpl.class b/org.aspectj.weaver/classes/org/aspectj/weaver/SourceContextImpl.class
index b92b944..0217a41 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/SourceContextImpl.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/SourceContextImpl.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/StandardAnnotation.class b/org.aspectj.weaver/classes/org/aspectj/weaver/StandardAnnotation.class
index 7a05651..7cb8862 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/StandardAnnotation.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/StandardAnnotation.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/TypeFactory.class b/org.aspectj.weaver/classes/org/aspectj/weaver/TypeFactory.class
index 2e7ec8e..52f0fa4 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/TypeFactory.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/TypeFactory.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/TypeVariable.class b/org.aspectj.weaver/classes/org/aspectj/weaver/TypeVariable.class
index a7ddcff..edb8d89 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/TypeVariable.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/TypeVariable.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/TypeVariableReferenceType.class b/org.aspectj.weaver/classes/org/aspectj/weaver/TypeVariableReferenceType.class
index f6f9e6e..b457fd8 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/TypeVariableReferenceType.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/TypeVariableReferenceType.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/UnresolvedType.class b/org.aspectj.weaver/classes/org/aspectj/weaver/UnresolvedType.class
index 72d6773..1020d4f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/UnresolvedType.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/UnresolvedType.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/WeaverStateInfo.class b/org.aspectj.weaver/classes/org/aspectj/weaver/WeaverStateInfo.class
index 434d6d1..d2eabdb 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/WeaverStateInfo.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/WeaverStateInfo.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/WildcardedUnresolvedType.class b/org.aspectj.weaver/classes/org/aspectj/weaver/WildcardedUnresolvedType.class
index ed79465..128ec07 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/WildcardedUnresolvedType.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/WildcardedUnresolvedType.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/World$AspectPrecedenceCalculator.class b/org.aspectj.weaver/classes/org/aspectj/weaver/World$AspectPrecedenceCalculator.class
index 51a16ad..6f85ef9 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/World$AspectPrecedenceCalculator.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/World$AspectPrecedenceCalculator.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/World$TimeCollector.class b/org.aspectj.weaver/classes/org/aspectj/weaver/World$TimeCollector.class
index bf291c1..fd53d59 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/World$TimeCollector.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/World$TimeCollector.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/World$TypeMap.class b/org.aspectj.weaver/classes/org/aspectj/weaver/World$TypeMap.class
index d5419c9..b8c3327 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/World$TypeMap.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/World$TypeMap.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/World.class b/org.aspectj.weaver/classes/org/aspectj/weaver/World.class
index ee33980..16a81b2 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/World.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/World.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AnnotationAccessFieldVar.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AnnotationAccessFieldVar.class
index 1100bd7..1ef9680 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AnnotationAccessFieldVar.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AnnotationAccessFieldVar.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AnnotationAccessVar.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AnnotationAccessVar.class
index 2fcdb00..8a10360 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AnnotationAccessVar.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AnnotationAccessVar.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AspectInstanceVar.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AspectInstanceVar.class
index 67540fd..d5368d8 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AspectInstanceVar.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AspectInstanceVar.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes$1.class
index 7204f33..2db536b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes$UnreadableDebugInfoException.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes$UnreadableDebugInfoException.class
index 1f009c1..744729a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes$UnreadableDebugInfoException.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes$UnreadableDebugInfoException.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes.class
index 4e162dc..abaa5c5 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/AtAjAttributes.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAccessForInlineMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAccessForInlineMunger.class
index 613bde5..bc52445 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAccessForInlineMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAccessForInlineMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAdvice.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAdvice.class
index 81a8dfe..b7a54df 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAdvice.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAdvice.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAnnotation.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAnnotation.class
index b0a2e14..9e9f7c1 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAnnotation.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelAnnotation.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowAccessVar.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowAccessVar.class
index de728a0..0477569 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowAccessVar.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowAccessVar.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowCounterFieldAdder.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowCounterFieldAdder.class
index 7beabdc..163d0ab 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowCounterFieldAdder.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowCounterFieldAdder.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowStackFieldAdder.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowStackFieldAdder.class
index 4964813..ab05047 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowStackFieldAdder.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelCflowStackFieldAdder.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelClassWeaver$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelClassWeaver$1.class
index 4ceb689..1a8f85d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelClassWeaver$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelClassWeaver$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelClassWeaver.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelClassWeaver.class
index 8b9af0a..d8abec7 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelClassWeaver.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelClassWeaver.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelField.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelField.class
index 234114e..b015f90 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelField.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelField.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelFieldRef.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelFieldRef.class
index f8d0295..a84c889 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelFieldRef.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelFieldRef.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelGenericSignatureToTypeXConverter.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelGenericSignatureToTypeXConverter.class
index b94b660..ab984ff 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelGenericSignatureToTypeXConverter.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelGenericSignatureToTypeXConverter.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelMethod.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelMethod.class
index 913b80f..5ff3a62 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelMethod.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelMethod.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelObjectType.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelObjectType.class
index 5a00801..a1f711b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelObjectType.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelObjectType.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelPerClauseAspectAdder.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelPerClauseAspectAdder.class
index ddcd58e..570e806 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelPerClauseAspectAdder.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelPerClauseAspectAdder.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelRenderer.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelRenderer.class
index 37d5f52..bb099f2 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelRenderer.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelRenderer.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$1.class
index 4a92d14..dbe4b2a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$UsesTargetVisitor.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$UsesTargetVisitor.class
index dc51499..5562966 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$UsesTargetVisitor.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$UsesTargetVisitor.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$UsesThisVisitor.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$UsesThisVisitor.class
index 4d98618..70851a0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$UsesThisVisitor.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow$UsesThisVisitor.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow.class
index 0d21f54..76c08ba 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelShadow.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelTypeMunger.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelTypeMunger.class
index ebbc703..df415fb 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelTypeMunger.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelTypeMunger.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$1.class
index 8ddfb75..62b747a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$1AdviceLocation.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$1AdviceLocation.class
index d36a95b..db5aa5d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$1AdviceLocation.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$1AdviceLocation.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$2.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$2.class
index 0be8081..7558118 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$2.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$2.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$3.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$3.class
index 078f195..1aa807a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$3.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$3.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$4$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$4$1.class
index 84e6c04..a987fce 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$4$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$4$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$4.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$4.class
index f04e082..3470ffc 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$4.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver$4.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver.class
index 3365d88..1274c09 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWeaver.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWorld$WeavingXmlConfig.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWorld$WeavingXmlConfig.class
index 4506d56..3bd60a8 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWorld$WeavingXmlConfig.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWorld$WeavingXmlConfig.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWorld.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWorld.class
index 34fe191..f135cc4 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWorld.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/BcelWorld.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$DirEntry.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$DirEntry.class
index 0259d4c..d10dfa8 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$DirEntry.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$DirEntry.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$ZipEntryClassFile.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$ZipEntryClassFile.class
index 0d96f40..a06d05b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$ZipEntryClassFile.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$ZipEntryClassFile.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$ZipFileEntry.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$ZipFileEntry.class
index a874a65..3585f4d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$ZipFileEntry.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager$ZipFileEntry.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager.class
index 3f1767c..4205c8b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ClassPathManager.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ExceptionRange.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ExceptionRange.class
index f366245..d5b11d3 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ExceptionRange.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ExceptionRange.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyClassGen$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyClassGen$1.class
index c37df63..fbeb55d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyClassGen$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyClassGen$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyClassGen.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyClassGen.class
index ff03ca8..cadd050 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyClassGen.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyClassGen.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$1.class
index 90ae2e8..3e4dfb4 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$BodyPrinter.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$BodyPrinter.class
index dc5d7f3..a8c87e9 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$BodyPrinter.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$BodyPrinter.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$LVPosition.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$LVPosition.class
index daf45e5..e6fc091 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$LVPosition.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen$LVPosition.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen.class
index 15d626f..2dbd903 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/LazyMethodGen.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/Range.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/Range.class
index c48046e..9f9da39 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/Range.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/Range.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ShadowRange.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ShadowRange.class
index 676bc01..ea5d579 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ShadowRange.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/ShadowRange.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/TypeAnnotationAccessVar.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/TypeAnnotationAccessVar.class
index 2ae60ee..eca9b04 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/TypeAnnotationAccessVar.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/TypeAnnotationAccessVar.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/UnwovenClassFile.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/UnwovenClassFile.class
index 92f2953..e6dd777 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/UnwovenClassFile.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/UnwovenClassFile.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/Utility.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/Utility.class
index 94d29fd..46225d0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/Utility.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/Utility.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJClassVisitor$AJMethodVisitor.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJClassVisitor$AJMethodVisitor.class
index 2cc4741..91f756d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJClassVisitor$AJMethodVisitor.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJClassVisitor$AJMethodVisitor.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJClassVisitor.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJClassVisitor.class
index ad74823..503547c 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJClassVisitor.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJClassVisitor.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJConnectClassWriter.class b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJConnectClassWriter.class
index e3ef8b2..bed4cd0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJConnectClassWriter.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/bcel/asm/StackMapAdder$AspectJConnectClassWriter.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutDesignatorHandlerBasedPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutDesignatorHandlerBasedPointcut.class
index ac5395f..8c71d08 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutDesignatorHandlerBasedPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutDesignatorHandlerBasedPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl$1.class
index ec0eeb9..9e9a9c6 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl$HasPossibleDynamicContentVisitor.class b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl$HasPossibleDynamicContentVisitor.class
index 882ce60..ce3cab0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl$HasPossibleDynamicContentVisitor.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl$HasPossibleDynamicContentVisitor.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl.class b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl.class
index 11cc5fb..529ed0d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/PointcutExpressionImpl.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl$1.class
index 358199f..6860579 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl$HasPossibleDynamicContentVisitor.class b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl$HasPossibleDynamicContentVisitor.class
index a9b5128..36573bd 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl$HasPossibleDynamicContentVisitor.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl$HasPossibleDynamicContentVisitor.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl.class b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl.class
index f3f91ce..d2a8eb1 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/StandardPointcutExpressionImpl.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/TypePatternMatcherImpl.class b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/TypePatternMatcherImpl.class
index 4751718..f5ee1f9 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/TypePatternMatcherImpl.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/internal/tools/TypePatternMatcherImpl.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj$AdaptorKey.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj$AdaptorKey.class
index 8a86684..eca626f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj$AdaptorKey.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj$AdaptorKey.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj$WeaverContainer.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj$WeaverContainer.class
index 592eb11..546fb1e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj$WeaverContainer.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj$WeaverContainer.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj.class
index 8f4edb7..01f8aad 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Aj.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor$SimpleGeneratedClassHandler.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor$SimpleGeneratedClassHandler.class
index b34d437..b9090b0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor$SimpleGeneratedClassHandler.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor$SimpleGeneratedClassHandler.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.class
index 35b3afa..edb3d32 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ConcreteAspectCodeGen.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ConcreteAspectCodeGen.class
index e0659be..77abf9f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ConcreteAspectCodeGen.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/ConcreteAspectCodeGen.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/DefaultWeavingContext.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/DefaultWeavingContext.class
index 660bff9..ea87d4c 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/DefaultWeavingContext.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/DefaultWeavingContext.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent$1.class
index 746f29f..848447a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent$ThreadLocalStack.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent$ThreadLocalStack.class
index a23fedf..cb8bdbd 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent$ThreadLocalStack.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent$ThreadLocalStack.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent.class
index 7fbba26..b6505ab 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/JRockitAgent.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Options.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Options.class
index ebc723d..71db78e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Options.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/Options.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/WeavingURLClassLoader$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/WeavingURLClassLoader$1.class
index ecbf778..ed0b226 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/WeavingURLClassLoader$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/WeavingURLClassLoader$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/WeavingURLClassLoader.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/WeavingURLClassLoader.class
index da4f1f1..7fda19a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/WeavingURLClassLoader.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/WeavingURLClassLoader.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/Definition$AdviceKind.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/Definition$AdviceKind.class
index bd5f173..b5a9c94 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/Definition$AdviceKind.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/Definition$AdviceKind.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/Definition$DeclareAnnotationKind.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/Definition$DeclareAnnotationKind.class
index 77b8405..4fe8489 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/Definition$DeclareAnnotationKind.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/Definition$DeclareAnnotationKind.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/DocumentParser.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/DocumentParser.class
index 80f4ffa..e25c768 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/DocumentParser.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/DocumentParser.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/LightXMLParser.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/LightXMLParser.class
index c3d1fba..1640484 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/LightXMLParser.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/LightXMLParser.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/SimpleAOPParser.class b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/SimpleAOPParser.class
index 1468f14..05b409c 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/SimpleAOPParser.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/loadtime/definition/SimpleAOPParser.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/ltw/LTWWorld.class b/org.aspectj.weaver/classes/org/aspectj/weaver/ltw/LTWWorld.class
index a9e39e8..9188c6c 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/ltw/LTWWorld.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/ltw/LTWWorld.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/model/AsmRelationshipProvider.class b/org.aspectj.weaver/classes/org/aspectj/weaver/model/AsmRelationshipProvider.class
index 01386d6..b723fda 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/model/AsmRelationshipProvider.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/model/AsmRelationshipProvider.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/model/AsmRelationshipUtils.class b/org.aspectj.weaver/classes/org/aspectj/weaver/model/AsmRelationshipUtils.class
index 434e1f3..e1056b6 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/model/AsmRelationshipUtils.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/model/AsmRelationshipUtils.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AbstractSignaturePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AbstractSignaturePattern.class
index 71af18a..76a047d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AbstractSignaturePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AbstractSignaturePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndAnnotationTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndAnnotationTypePattern.class
index e4e5835..e09597f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndAnnotationTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndAnnotationTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndPointcut.class
index 27fd2c4..106f8e6 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndTypePattern.class
index e1595f8..9313628 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AndTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnnotationPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnnotationPointcut.class
index ef28b15..d9b77a2 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnnotationPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnnotationPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyAnnotationTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyAnnotationTypePattern.class
index 4fc1b39..7f659bc 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyAnnotationTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyAnnotationTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyTypePattern.class
index 4b71777..84f3be9 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyWithAnnotationTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyWithAnnotationTypePattern.class
index 907ce8d..806fa87 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyWithAnnotationTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/AnyWithAnnotationTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.class
index df2a8c9..c77b30f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ArgsPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ArgsPointcut.class
index 73a8133..93f10f0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ArgsPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ArgsPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BasicTokenSource.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BasicTokenSource.class
index 8322c40..10efeb8 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BasicTokenSource.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BasicTokenSource.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingAnnotationFieldTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingAnnotationFieldTypePattern.class
index c9e61e4..6510062 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingAnnotationFieldTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingAnnotationFieldTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingAnnotationTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingAnnotationTypePattern.class
index b5dbc25..09ab2f1 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingAnnotationTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingAnnotationTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingTypePattern.class
index 32d92aa..1d05f02 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/BindingTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Bindings.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Bindings.class
index 162fa1a..3f1b3b2 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Bindings.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Bindings.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/CflowPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/CflowPointcut.class
index 33d92d7..fb9cb3b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/CflowPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/CflowPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ConcreteCflowPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ConcreteCflowPointcut.class
index 97fa382..c82b770 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ConcreteCflowPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ConcreteCflowPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation$1.class
index c5d32c5..1eccfef 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation$Kind.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation$Kind.class
index 0702718..e684766 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation$Kind.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation$Kind.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation.class
index cdc9b8c..7bf633f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareAnnotation.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareErrorOrWarning.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareErrorOrWarning.class
index 0ca2b51..678cf1e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareErrorOrWarning.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareErrorOrWarning.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareParents.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareParents.class
index f585f60..134d7c4 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareParents.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareParents.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareParentsMixin.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareParentsMixin.class
index c26b890..3786d98 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareParentsMixin.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareParentsMixin.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclarePrecedence.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclarePrecedence.class
index 86d4fc0..fa46dfc 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclarePrecedence.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclarePrecedence.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareSoft.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareSoft.class
index d6a6442..cef5964 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareSoft.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareSoft.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareTypeErrorOrWarning.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareTypeErrorOrWarning.class
index 3435d73..618b075 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareTypeErrorOrWarning.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/DeclareTypeErrorOrWarning.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/EllipsisAnnotationTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/EllipsisAnnotationTypePattern.class
index 3c388fd..9882ca4 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/EllipsisAnnotationTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/EllipsisAnnotationTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/EllipsisTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/EllipsisTypePattern.class
index f81ec68..e38ee03 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/EllipsisTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/EllipsisTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactAnnotationFieldTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactAnnotationFieldTypePattern.class
index ac7e0cb..f04f307 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactAnnotationFieldTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactAnnotationFieldTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.class
index 01c3cb5..1cb212a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactAnnotationTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactTypePattern.class
index 018147f..eb6ecad 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ExactTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/FormalBinding.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/FormalBinding.class
index d12b17e..930f2fd 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/FormalBinding.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/FormalBinding.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/HandlerPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/HandlerPointcut.class
index 29ca057..eb0b5d2 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/HandlerPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/HandlerPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/HasMemberTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/HasMemberTypePattern.class
index 86326ab..94f0456 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/HasMemberTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/HasMemberTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut$IfFalsePointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut$IfFalsePointcut.class
index 94fdeb0..0a63ce7 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut$IfFalsePointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut$IfFalsePointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut$IfTruePointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut$IfTruePointcut.class
index f23a242..47e0c13 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut$IfTruePointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut$IfTruePointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut.class
index af0717c..57bc292 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/IfPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/KindedPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/KindedPointcut.class
index 2a264d8..d353585 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/KindedPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/KindedPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ModifiersPattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ModifiersPattern.class
index cae9e65..5e5d508 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ModifiersPattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ModifiersPattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NoTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NoTypePattern.class
index 6b00aa6..45b8628 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NoTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NoTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotAnnotationTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotAnnotationTypePattern.class
index bad9707..0d9d592 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotAnnotationTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotAnnotationTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotPointcut.class
index 6ea7102..1a54319 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotTypePattern.class
index e380104..1194f71 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/NotTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrAnnotationTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrAnnotationTypePattern.class
index 978896a..8f12488 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrAnnotationTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrAnnotationTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrPointcut.class
index 74d0147..23e391b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrTypePattern.class
index 34c03b0..2477bcb 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/OrTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PatternParser.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PatternParser.class
index a81a5cd..dd4e940 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PatternParser.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PatternParser.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerCflow.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerCflow.class
index 61fc270..5c65054 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerCflow.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerCflow.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerClause$KindAnnotationPrefix.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerClause$KindAnnotationPrefix.class
index c8f8c7b..1f77dce 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerClause$KindAnnotationPrefix.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerClause$KindAnnotationPrefix.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerClause.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerClause.class
index 24f24c3..35f36f0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerClause.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerClause.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerFromSuper.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerFromSuper.class
index e544e1e..06a0f06 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerFromSuper.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerFromSuper.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerObject.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerObject.class
index 9f23136..9c9e568 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerObject.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerObject.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor$1.class
index f3d0d8a..11e87fb 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor$TypePatternMayBe.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor$TypePatternMayBe.class
index a4df43d..fab8e0e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor$TypePatternMayBe.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor$TypePatternMayBe.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.class
index fc2f368..946d729 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerTypeWithin.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerTypeWithin.class
index 0292052..60eb790 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerTypeWithin.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PerTypeWithin.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Pointcut$MatchesNothingPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Pointcut$MatchesNothingPointcut.class
index adf61b6..6ee88b0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Pointcut$MatchesNothingPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Pointcut$MatchesNothingPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Pointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Pointcut.class
index ea1e053..d088018 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Pointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/Pointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PointcutEvaluationExpenseComparator.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PointcutEvaluationExpenseComparator.class
index f5e59ad..7b984fa 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PointcutEvaluationExpenseComparator.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PointcutEvaluationExpenseComparator.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PointcutRewriter.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PointcutRewriter.class
index 055c6d2..4e11140 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PointcutRewriter.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/PointcutRewriter.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ReferencePointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ReferencePointcut.class
index 31b5560..4ec72bf 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ReferencePointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ReferencePointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SignaturePattern$TypePatternVisitor.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SignaturePattern$TypePatternVisitor.class
index 733c1eb..0b68e87 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SignaturePattern$TypePatternVisitor.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SignaturePattern$TypePatternVisitor.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SignaturePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SignaturePattern.class
index 271b848..c1cb523 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SignaturePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SignaturePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SimpleScope.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SimpleScope.class
index fefa6f2..21e931e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SimpleScope.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/SimpleScope.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThisOrTargetAnnotationPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThisOrTargetAnnotationPointcut.class
index 40f91f4..30e32b2 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThisOrTargetAnnotationPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThisOrTargetAnnotationPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThisOrTargetPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThisOrTargetPointcut.class
index 76a71d2..6598983 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThisOrTargetPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThisOrTargetPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThrowsPattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThrowsPattern.class
index 485e63e..4252462 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThrowsPattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/ThrowsPattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypeCategoryTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypeCategoryTypePattern.class
index 325145e..86aa204 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypeCategoryTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypeCategoryTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypePattern.class
index 999653b..8b20d3d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypePatternQuestions$Question.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypePatternQuestions$Question.class
index 867fdcc..594869c 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypePatternQuestions$Question.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypePatternQuestions$Question.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypeVariablePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypeVariablePattern.class
index 94b8671..bbefbfb 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypeVariablePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/TypeVariablePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildAnnotationTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildAnnotationTypePattern.class
index a8fdafc..b62626b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildAnnotationTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildAnnotationTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildTypePattern$VerifyBoundsForTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildTypePattern$VerifyBoundsForTypePattern.class
index c1bac74..78d3af0 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildTypePattern$VerifyBoundsForTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildTypePattern$VerifyBoundsForTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildTypePattern.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildTypePattern.class
index 915a213..219452f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildTypePattern.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WildTypePattern.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinAnnotationPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinAnnotationPointcut.class
index 217bb40..6678739 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinAnnotationPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinAnnotationPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinCodeAnnotationPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinCodeAnnotationPointcut.class
index db8a0c6..d22c502 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinCodeAnnotationPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinCodeAnnotationPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinPointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinPointcut.class
index cd51e1d..0eff8cb 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinPointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithinPointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithincodePointcut.class b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithincodePointcut.class
index 9a0da29..3516ddd 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithincodePointcut.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/patterns/WithincodePointcut.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/Java15AnnotationFinder.class b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/Java15AnnotationFinder.class
index 91ca2af..35d42bf 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/Java15AnnotationFinder.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/Java15AnnotationFinder.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/Java15ReflectionBasedReferenceTypeDelegate.class b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/Java15ReflectionBasedReferenceTypeDelegate.class
index eb1a6d7..86e337f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/Java15ReflectionBasedReferenceTypeDelegate.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/Java15ReflectionBasedReferenceTypeDelegate.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegate.class b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegate.class
index b360468..0226750 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegate.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegate.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateFactory.class b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateFactory.class
index 2e1cf6c..b691f1d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateFactory.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateFactory.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedResolvedMemberImpl.class b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedResolvedMemberImpl.class
index 3e202bd..d4b15c5 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedResolvedMemberImpl.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionBasedResolvedMemberImpl.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionShadow.class b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionShadow.class
index e4c03b3..877976f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionShadow.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionShadow.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld$1.class
index 218014e..2d9b359 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld$ExceptionBasedMessageHandler.class b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld$ExceptionBasedMessageHandler.class
index 15c5882..3b1c268 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld$ExceptionBasedMessageHandler.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld$ExceptionBasedMessageHandler.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld.class b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld.class
index 172701d..f156a9f 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/ReflectionWorld.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/StandardShadow.class b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/StandardShadow.class
index b48dadc..046ccd3 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/StandardShadow.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/reflect/StandardShadow.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/DefaultTrace.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/DefaultTrace.class
index a7d000a..540ee3d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/DefaultTrace.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/DefaultTrace.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/DefaultTraceFactory.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/DefaultTraceFactory.class
index 8b2af58..008bebc 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/DefaultTraceFactory.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/DefaultTraceFactory.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutParser$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutParser$1.class
index 1b086d4..527d526 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutParser$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutParser$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutParser.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutParser.class
index 2f5b98c..730b8dc 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutParser.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutParser.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutPrimitive.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutPrimitive.class
index 81ac697..2cf89a9 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutPrimitive.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/PointcutPrimitive.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/StandardPointcutParser$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/StandardPointcutParser$1.class
index 868a677..d63e20b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/StandardPointcutParser$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/StandardPointcutParser$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/StandardPointcutParser.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/StandardPointcutParser.class
index d8c3f1b..c923143 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/StandardPointcutParser.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/StandardPointcutParser.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/TraceFactory.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/TraceFactory.class
index e308503..764646b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/TraceFactory.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/TraceFactory.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/UnsupportedPointcutPrimitiveException.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/UnsupportedPointcutPrimitiveException.class
index 7630e13..d201c87 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/UnsupportedPointcutPrimitiveException.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/UnsupportedPointcutPrimitiveException.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$1.class
index 0b7bd3c..08e73c5 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingAdaptorMessageHolder.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingAdaptorMessageHolder.class
index 38b1b72..6a3bc0c 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingAdaptorMessageHolder.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingAdaptorMessageHolder.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingAdaptorMessageWriter.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingAdaptorMessageWriter.class
index 9a9b30e..8ba1cc8 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingAdaptorMessageWriter.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingAdaptorMessageWriter.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingClassFileProvider$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingClassFileProvider$1.class
index 7ae55cf..eba32d1 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingClassFileProvider$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingClassFileProvider$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingClassFileProvider.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingClassFileProvider.class
index 108b225..a41e97a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingClassFileProvider.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor$WeavingClassFileProvider.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor.class
index cb04a5a..b59fe1d 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/WeavingAdaptor.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractFileCacheBacking.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractFileCacheBacking.class
index a50b907..3be2f60 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractFileCacheBacking.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractFileCacheBacking.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractIndexedFileCacheBacking$IndexEntry.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractIndexedFileCacheBacking$IndexEntry.class
index 05cb883..9e02159 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractIndexedFileCacheBacking$IndexEntry.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractIndexedFileCacheBacking$IndexEntry.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractIndexedFileCacheBacking.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractIndexedFileCacheBacking.class
index b827fcd..c7c5080 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractIndexedFileCacheBacking.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AbstractIndexedFileCacheBacking.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking$1.class
index 850bf34..8479a4a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking$KeyedCommand.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking$KeyedCommand.class
index befadda..976e2d7 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking$KeyedCommand.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking$KeyedCommand.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking.class
index 1c4e528..f6151b4 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/AsynchronousFileCacheBacking.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassEntry$EntryType.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassEntry$EntryType.class
index 6159885..e825f16 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassEntry$EntryType.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassEntry$EntryType.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassEntry.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassEntry.class
index de84162..86525bc 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassEntry.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassEntry.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassReference$EntryType.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassReference$EntryType.class
index f138f85..d90456e 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassReference$EntryType.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassReference$EntryType.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassReference.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassReference.class
index e29ae1d..bf8f75b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassReference.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/CachedClassReference.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultCacheKeyResolver.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultCacheKeyResolver.class
index 4b15d10..0ae045a 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultCacheKeyResolver.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultCacheKeyResolver.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultFileCacheBacking$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultFileCacheBacking$1.class
index 0f8585a..5837a8b 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultFileCacheBacking$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultFileCacheBacking$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultFileCacheBacking.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultFileCacheBacking.class
index 2067950..7505081 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultFileCacheBacking.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/DefaultFileCacheBacking.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/FlatFileCacheBacking$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/FlatFileCacheBacking$1.class
index cf38fd8..2fb6339 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/FlatFileCacheBacking$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/FlatFileCacheBacking$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/FlatFileCacheBacking.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/FlatFileCacheBacking.class
index 6b3fccd..7074797 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/FlatFileCacheBacking.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/FlatFileCacheBacking.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCache$StoreableCachingMap.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCache$StoreableCachingMap.class
index 55b1f57..16dc5cf 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCache$StoreableCachingMap.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCache$StoreableCachingMap.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCache.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCache.class
index 493081a..fc501b6 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCache.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCache.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCacheFactory.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCacheFactory.class
index 6d00c9b..e264e06 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCacheFactory.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/SimpleCacheFactory.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/WeavedClassCache.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/WeavedClassCache.class
index 6015453..0c013df 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/WeavedClassCache.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/WeavedClassCache.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/ZippedFileCacheBacking$1.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/ZippedFileCacheBacking$1.class
index 64050ec..537bcb5 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/ZippedFileCacheBacking$1.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/ZippedFileCacheBacking$1.class
Binary files differ
diff --git a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/ZippedFileCacheBacking.class b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/ZippedFileCacheBacking.class
index 94dc43a..0434b10 100644
--- a/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/ZippedFileCacheBacking.class
+++ b/org.aspectj.weaver/classes/org/aspectj/weaver/tools/cache/ZippedFileCacheBacking.class
Binary files differ
diff --git a/org.aspectj.weaver/source/org/aspectj/bridge/Version.java b/org.aspectj.weaver/source/org/aspectj/bridge/Version.java
index 53ba54f..6d4adcd 100644
--- a/org.aspectj.weaver/source/org/aspectj/bridge/Version.java
+++ b/org.aspectj.weaver/source/org/aspectj/bridge/Version.java
@@ -30,14 +30,14 @@
     public static final long NOTIME = 0L;
     
     /** set by build script */
-    public static final String text = "1.8.1";
+    public static final String text = "DEVELOPMENT";
     // VersionUptodate.java scans for "static final String text = "
     
     /** 
       * Time text set by build script using SIMPLE_DATE_FORMAT.
       * (if DEVELOPMENT version, invalid)
       */
-    public static final String time_text = "Saturday Jun 21, 2014 at 00:07:06 GMT";
+    public static final String time_text = "Monday Aug 11, 2014 at 17:15:33 GMT";
 
     /** 
       * time in seconds-since-... format, used by programmatic clients.
diff --git a/org.aspectj.weaver/source/org/aspectj/util/FileUtil.java b/org.aspectj.weaver/source/org/aspectj/util/FileUtil.java
index 5269b50..f3db2bd 100644
--- a/org.aspectj.weaver/source/org/aspectj/util/FileUtil.java
+++ b/org.aspectj.weaver/source/org/aspectj/util/FileUtil.java
@@ -245,7 +245,7 @@
 	/**
 	 * Extract the name of a class from the path to its file. If the basedir is null, then the class is assumed to be in the default
 	 * package unless the classFile has one of the top-level suffixes { com, org, java, javax } as a parent directory.
-	 * 
+	 *
 	 * @param basedir the File of the base directory (prefix of classFile)
 	 * @param classFile the File of the class to extract the name for
 	 * @throws IllegalArgumentException if classFile is null or does not end with ".class" or a non-null basedir is not a prefix of
@@ -288,7 +288,7 @@
 
 	/**
 	 * Normalize path for comparisons by rendering absolute, clipping basedir prefix, trimming and changing '\\' to '/'
-	 * 
+	 *
 	 * @param file the File with the path to normalize
 	 * @param basedir the File for the prefix of the file to normalize - ignored if null
 	 * @return "" if null or normalized path otherwise
@@ -310,7 +310,7 @@
 
 	/**
 	 * Render a set of files to String as a path by getting absolute paths of each and delimiting with infix.
-	 * 
+	 *
 	 * @param files the File[] to flatten - may be null or empty
 	 * @param infix the String delimiter internally between entries (if null, then use File.pathSeparator). (alias to
 	 *        <code>flatten(getAbsolutePaths(files), infix)</code>
@@ -325,7 +325,7 @@
 
 	/**
 	 * Flatten File[] to String.
-	 * 
+	 *
 	 * @param files the File[] of paths to flatten - null ignored
 	 * @param infix the String infix to use - null treated as File.pathSeparator
 	 */
@@ -352,7 +352,7 @@
 
 	/**
 	 * Normalize path for comparisons by rendering absolute trimming and changing '\\' to '/'
-	 * 
+	 *
 	 * @return "" if null or normalized path otherwise
 	 */
 	public static String normalizedPath(File file) {
@@ -372,7 +372,7 @@
 	/**
 	 * Get best File for the first-readable path in input paths, treating entries prefixed "sp:" as system property keys. Safe to
 	 * call in static initializers.
-	 * 
+	 *
 	 * @param paths the String[] of paths to check.
 	 * @return null if not found, or valid File otherwise
 	 */
@@ -410,7 +410,7 @@
 
 	/**
 	 * Render as best file, canonical or absolute.
-	 * 
+	 *
 	 * @param file the File to get the best File for (not null)
 	 * @return File of the best-available path
 	 * @throws IllegalArgumentException if file is null
@@ -430,7 +430,7 @@
 
 	/**
 	 * Render as best path, canonical or absolute.
-	 * 
+	 *
 	 * @param file the File to get the path for (not null)
 	 * @return String of the best-available path
 	 * @throws IllegalArgumentException if file is null
@@ -464,7 +464,7 @@
 
 	/**
 	 * Recursively delete the contents of dir, but not the dir itself
-	 * 
+	 *
 	 * @return the total number of files deleted
 	 */
 	public static int deleteContents(File dir) {
@@ -474,7 +474,7 @@
 	/**
 	 * Recursively delete some contents of dir, but not the dir itself. This deletes any subdirectory which is empty after its files
 	 * are deleted.
-	 * 
+	 *
 	 * @return the total number of files deleted
 	 */
 	public static int deleteContents(File dir, FileFilter filter) {
@@ -484,11 +484,12 @@
 	/**
 	 * Recursively delete some contents of dir, but not the dir itself. If deleteEmptyDirs is true, this deletes any subdirectory
 	 * which is empty after its files are deleted.
-	 * 
+	 *
 	 * @param dir the File directory (if a file, the the file is deleted)
 	 * @return the total number of files deleted
 	 */
-	public static int deleteContents(File dir, FileFilter filter, boolean deleteEmptyDirs) {
+	public static int deleteContents(File dir, FileFilter filter,
+			boolean deleteEmptyDirs) {
 		if (null == dir) {
 			throw new IllegalArgumentException("null dir");
 		}
@@ -500,6 +501,9 @@
 			return 1;
 		}
 		String[] fromFiles = dir.list();
+		if (fromFiles == null) {
+			return 0;
+		}
 		int result = 0;
 		for (int i = 0; i < fromFiles.length; i++) {
 			String string = fromFiles[i];
@@ -507,11 +511,14 @@
 			if ((null == filter) || filter.accept(file)) {
 				if (file.isDirectory()) {
 					result += deleteContents(file, filter, deleteEmptyDirs);
-					if (deleteEmptyDirs && (0 == file.list().length)) {
+					String[] fileContent = file.list();
+					if (deleteEmptyDirs && fileContent != null
+							&& 0 == fileContent.length) {
 						file.delete();
 					}
 				} else {
-					/* boolean ret = */file.delete();
+					/* boolean ret = */
+					file.delete();
 					result++;
 				}
 			}
@@ -521,7 +528,7 @@
 
 	/**
 	 * Copy contents of fromDir into toDir
-	 * 
+	 *
 	 * @param fromDir must exist and be readable
 	 * @param toDir must exist or be creatable and be writable
 	 * @return the total number of files copied
@@ -534,7 +541,7 @@
 	 * Recursively copy files in fromDir (with any fromSuffix) to toDir, replacing fromSuffix with toSuffix if any. This silently
 	 * ignores dirs and files that are not readable but throw IOException for directories that are not writable. This does not clean
 	 * out the original contents of toDir. (subdirectories are not renamed per directory rules)
-	 * 
+	 *
 	 * @param fromSuffix select files with this suffix - select all if null or empty
 	 * @param toSuffix replace fromSuffix with toSuffix in the destination file name - ignored if null or empty, appended to name if
 	 *        fromSuffix is null or empty
@@ -584,7 +591,7 @@
 	 * ignores dirs and files that are not readable but throw IOException for directories that are not writable. This does not clean
 	 * out the original contents of toDir. (subdirectories are not renamed per directory rules) This calls any delegate
 	 * FilenameFilter to collect any selected file.
-	 * 
+	 *
 	 * @param fromSuffix select files with this suffix - select all if null or empty
 	 * @param toSuffix replace fromSuffix with toSuffix in the destination file name - ignored if null or empty, appended to name if
 	 *        fromSuffix is null or empty
@@ -641,7 +648,7 @@
 
 	/**
 	 * Recursively list files in srcDir.
-	 * 
+	 *
 	 * @return ArrayList with String paths of File under srcDir (relative to srcDir)
 	 */
 	public static String[] listFiles(File srcDir) {
@@ -661,7 +668,7 @@
 
 	/**
 	 * Recursively list files in srcDir.
-	 * 
+	 *
 	 * @return ArrayList with String paths of File under srcDir (relative to srcDir)
 	 */
 	public static File[] listFiles(File srcDir, FileFilter fileFilter) {
@@ -674,7 +681,7 @@
 
 	/**
 	 * Recursively list .class files in specified directory
-	 * 
+	 *
 	 * @return List of File objects
 	 */
 	public static List<File> listClassFiles(File dir) {
@@ -687,7 +694,7 @@
 
 	/**
 	 * Convert String[] paths to File[] as offset of base directory
-	 * 
+	 *
 	 * @param basedir the non-null File base directory for File to create with paths
 	 * @param paths the String[] of paths to create
 	 * @return File[] with same length as paths
@@ -698,7 +705,7 @@
 
 	/**
 	 * Convert String[] paths to File[] as offset of base directory
-	 * 
+	 *
 	 * @param basedir the non-null File base directory for File to create with paths
 	 * @param paths the String[] of paths to create
 	 * @param suffixes the String[] of suffixes to limit sources to - ignored if null
@@ -731,7 +738,7 @@
 
 	/**
 	 * Create a new File, resolving paths ".." and "." specially.
-	 * 
+	 *
 	 * @param dir the File for the parent directory of the file
 	 * @param path the path in the parent directory (filename only?)
 	 * @return File for the new file.
@@ -755,7 +762,7 @@
 	 * Copy files from source dir into destination directory, creating any needed directories. This differs from copyDir in not
 	 * being recursive; each input with the source dir creates a full path. However, if the source is a directory, it is copied as
 	 * such.
-	 * 
+	 *
 	 * @param srcDir an existing, readable directory containing relativePaths files
 	 * @param relativePaths a set of paths relative to srcDir to readable File to copy
 	 * @param destDir an existing, writable directory to copy files to
@@ -785,7 +792,7 @@
 
 	/**
 	 * Copy fromFile to toFile, handling file-file, dir-dir, and file-dir copies.
-	 * 
+	 *
 	 * @param fromFile the File path of the file or directory to copy - must be readable
 	 * @param toFile the File path of the target file or directory - must be writable (will be created if it does not exist)
 	 */
@@ -825,7 +832,7 @@
 	/**
 	 * Ensure that the parent directory to path can be written. If the path has a null parent, DEFAULT_PARENT is tested. If the path
 	 * parent does not exist, this tries to create it.
-	 * 
+	 *
 	 * @param path the File path whose parent should be writable
 	 * @return the File path of the writable parent directory
 	 * @throws IllegalArgumentException if parent cannot be written or path is null.
@@ -845,7 +852,7 @@
 
 	/**
 	 * Copy file to file.
-	 * 
+	 *
 	 * @param fromFile the File to copy (readable, non-null file)
 	 * @param toFile the File to copy to (non-null, parent dir exists)
 	 * @throws IOException
@@ -896,7 +903,7 @@
 
 	/**
 	 * Make a new child directory of parent
-	 * 
+	 *
 	 * @param parent a File for the parent (writable)
 	 * @param child a prefix for the child directory
 	 * @return a File dir that exists with parentDir as the parent file or null
@@ -924,7 +931,7 @@
 	/**
 	 * Make a new temporary directory in the same directory that the system uses for temporary files, or if that files, in the
 	 * current directory.
-	 * 
+	 *
 	 * @param name the preferred (simple) name of the directory - may be null.
 	 * @return File of an existing new temp dir, or null if unable to create
 	 */
@@ -963,7 +970,7 @@
 
 	/**
 	 * Get URL for a File. This appends "/" for directories. prints errors to System.err
-	 * 
+	 *
 	 * @param file the File to convert to URL (not null)
 	 */
 	@SuppressWarnings("deprecation")
@@ -988,7 +995,7 @@
 	/**
 	 * Write contents to file, returning null on success or error message otherwise. This tries to make any necessary parent
 	 * directories first.
-	 * 
+	 *
 	 * @param file the File to write (not null)
 	 * @param contents the String to write (use "" if null)
 	 * @return String null on no error, error otherwise
@@ -1221,7 +1228,7 @@
 
 	/**
 	 * Do line-based search for literal text in source files, returning file:line where found.
-	 * 
+	 *
 	 * @param sought the String text to seek in the file
 	 * @param sources the List of String paths to the source files
 	 * @param listAll if false, only list first match in file
@@ -1248,7 +1255,7 @@
 	 * Do line-based search for literal text in source file, returning line where found as a String in the form
 	 * {sourcePath}:line:column submitted to the collecting parameter sink. Any error is rendered to String and returned as the
 	 * result.
-	 * 
+	 *
 	 * @param sought the String text to seek in the file
 	 * @param sources the List of String paths to the source files
 	 * @param listAll if false, only list first match in file
@@ -1305,7 +1312,7 @@
 
 	/**
 	 * Sleep until after the last last-modified stamp from the files.
-	 * 
+	 *
 	 * @param files the File[] of files to inspect for last modified times (this ignores null or empty files array and null or
 	 *        non-existing components of files array)
 	 * @return true if succeeded without 100 interrupts
@@ -1402,7 +1409,7 @@
 			return url.toURI().getPath();
 		} catch (URISyntaxException e) {
 			System.err.println("Warning!! Malformed URL may cause problems: "+url); // TODO: Better way to report this?
-			// In this case it was likely not using properly escaped 
+			// In this case it was likely not using properly escaped
 			// characters so we just use the 'bad' method that doesn't decode
 			// special chars
 			return url.getPath();
@@ -1411,7 +1418,7 @@
 
 	/**
 	 * A pipe when run reads from an input stream to an output stream, optionally sleeping between reads.
-	 * 
+	 *
 	 * @see #copyStream(InputStream, OutputStream)
 	 */
 	public static class Pipe implements Runnable {
@@ -1437,7 +1444,7 @@
 
 		/**
 		 * alias for <code>Pipe(in, out, 100l, false, false)</code>
-		 * 
+		 *
 		 * @param in the InputStream source to read
 		 * @param out the OutputStream sink to write
 		 */
@@ -1523,7 +1530,7 @@
 
 		/**
 		 * Tell the pipe to halt the next time it gains control.
-		 * 
+		 *
 		 * @param wait if true, this waits synchronously until pipe is done
 		 * @param finishStream if true, then continue until a read from the input stream returns no bytes, then halt.
 		 * @return true if <code>run()</code> will return the next time it gains control
diff --git a/org.eclipse.ajdt.releng/build.properties b/org.eclipse.ajdt.releng/build.properties
index c8e37bc..17669e9 100644
--- a/org.eclipse.ajdt.releng/build.properties
+++ b/org.eclipse.ajdt.releng/build.properties
@@ -41,9 +41,10 @@
 # 1.8.1.20140611104200
 # 1.8.1.20140612120100 - ECJ update
 # 1.8.1.20140624165800 - 1.8.1 final
+# 1.8.2.20140811101800 - 1.8.2 almost final (includes apt)
 # when updating AspectJ to the next version, also make sure to uodate
 # the MANIFEST.MF bundle-version and all package versions
-ajde.version=1.8.1.20140624165800
+ajde.version=1.8.2.20140811101800
 
 builder=.