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: "<n>", 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=.