github.com/eclipse/org.aspectj -> github.com/eclipse-aspectj/aspectj Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>tags/V1_9_21_1
# Contributing to AspectJ | # Contributing to AspectJ | ||||
AspectJ is a maven project, as such it should import cleanly into your IDE. The project uses github for issue tracking ( https://github.com/eclipse/org.aspectj/issues ). | |||||
AspectJ is a maven project, as such it should import cleanly into your IDE. The project uses github for issue tracking ( https://github.com/eclipse-aspectj/aspectj/issues ). | |||||
## Working on the codebase | ## Working on the codebase | ||||
Please contribute via Pull Request against the GitHub repository. | Please contribute via Pull Request against the GitHub repository. | ||||
Contributors should ensure they have signed the [Eclipse Contributor Agreement](https://accounts.eclipse.org/user/7644/eca/3.1.0), this will be verified by automatic validation that occurs against any Pull Requests. | |||||
Contributors should ensure they have signed the [Eclipse Contributor Agreement](https://accounts.eclipse.org/user/7644/eca/3.1.0), this will be verified by automatic validation that occurs against any Pull Requests. |
/* This section of code handles errors that occur during compilation */ | /* This section of code handles errors that occur during compilation */ | ||||
static final String internalErrorMessage = " \n" | static final String internalErrorMessage = " \n" | ||||
+ "If this has not already been logged as a bug raised please raise \n" | + "If this has not already been logged as a bug raised please raise \n" | ||||
+ "a new AspectJ bug at https://github.com/eclipse/org.aspectj/issues \n" | |||||
+ "a new AspectJ bug at https://github.com/eclipse-aspectj/aspectj/issues \n" | |||||
+ "including the text below. To make the bug a priority, please also \n" | + "including the text below. To make the bug a priority, please also \n" | ||||
+ "include a test program that can reproduce this problem.\n "; | + "include a test program that can reproduce this problem.\n "; | ||||
generator `ajdoc` (similar to Javadoc) from the command line. | generator `ajdoc` (similar to Javadoc) from the command line. | ||||
You can find older installer versions until 1.9.6 on the [AspectJ website](https://www.eclipse.org/aspectj/downloads.php), | You can find older installer versions until 1.9.6 on the [AspectJ website](https://www.eclipse.org/aspectj/downloads.php), | ||||
more recent ones are attached to AspectJ [GitHub releases](https://github.com/eclipse/org.aspectj/releases) as | |||||
more recent ones are attached to AspectJ [GitHub releases](https://github.com/eclipse-aspectj/aspectj/releases) as | |||||
_aspectj-*jar_. | _aspectj-*jar_. | ||||
## Biased recommendation | ## Biased recommendation |
= AspectJ Java version compatibility | = AspectJ Java version compatibility | ||||
For reasons described e.g. in https://github.com/eclipse/org.aspectj/issues/139#issuecomment-1072946123[this comment], | |||||
For reasons described e.g. in https://github.com/eclipse-aspectj/aspectj/issues/139#issuecomment-1072946123[this comment], | |||||
for AspectJ users it has become a little challenging to find out which minimum AspectJ version is required in order to | for AspectJ users it has become a little challenging to find out which minimum AspectJ version is required in order to | ||||
process byte code or compile source code using features of a certain Java language version. Since Java 10, this cannot | process byte code or compile source code using features of a certain Java language version. Since Java 10, this cannot | ||||
be easily concluded from the AspectJ version number anymore, and we are sorry for that. So here is a little overview: | be easily concluded from the AspectJ version number anymore, and we are sorry for that. So here is a little overview: |
_Release info: 1.9.19 available 21-Dec-2022_ | _Release info: 1.9.19 available 21-Dec-2022_ | ||||
Please note that Bugzilla for issue management is deprecated and new issues should be filed as | Please note that Bugzilla for issue management is deprecated and new issues should be filed as | ||||
https://github.com/eclipse/org.aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.19 can be found | |||||
https://github.com/eclipse-aspectj/aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.19 can be found | |||||
here: | here: | ||||
* https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.19[GitHub 1.9.19] | |||||
* https://github.com/eclipse-aspectj/aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.19[GitHub 1.9.19] | |||||
* https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.19[Bugzilla 1.9.19] | * https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.19[Bugzilla 1.9.19] | ||||
== New features | == New features | ||||
Please note that the upstream Eclipse Java Compiler (ECJ) which the AspectJ Compiler (AJC) is a fork of still has some | Please note that the upstream Eclipse Java Compiler (ECJ) which the AspectJ Compiler (AJC) is a fork of still has some | ||||
open issues concerning Java 19 preview feature support, see the list in | open issues concerning Java 19 preview feature support, see the list in | ||||
https://github.com/eclipse/org.aspectj/issues/184#issuecomment-1272254940[this comment]. AJC therefore inherits the same | |||||
https://github.com/eclipse-aspectj/aspectj/issues/184#issuecomment-1272254940[this comment]. AJC therefore inherits the same | |||||
problems for the specific cases described in the linked issues. | problems for the specific cases described in the linked issues. | ||||
== Improvements | == Improvements | ||||
* Improve condy (constant dynamic) support. Together with some custom compilation or weaving options, this helps to | * Improve condy (constant dynamic) support. Together with some custom compilation or weaving options, this helps to | ||||
avoid a problem when using JaCoCo together with AspectJ, see | avoid a problem when using JaCoCo together with AspectJ, see | ||||
https://github.com/eclipse/org.aspectj/issues/170#issuecomment-1214163297[this comment in #170] for more details. | |||||
https://github.com/eclipse-aspectj/aspectj/issues/170#issuecomment-1214163297[this comment in #170] for more details. | |||||
== Code examples | == Code examples | ||||
You can find some sample code in the AspectJ test suite under the respective AspectJ version in which the features were | You can find some sample code in the AspectJ test suite under the respective AspectJ version in which the features were | ||||
first supported (possibly as JVM preview features): | first supported (possibly as JVM preview features): | ||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features198/java17[Pattern matching for switch (preview 1)] | |||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features199/java18[Pattern matching for switch (preview 2)] | |||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features1919/java19[Pattern matching for switch (preview 3), | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features198/java17[Pattern matching for switch (preview 1)] | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features199/java18[Pattern matching for switch (preview 2)] | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features1919/java19[Pattern matching for switch (preview 3), | |||||
record patterns (preview 1)] | record patterns (preview 1)] | ||||
* Please note that presently there is no specific sample code for virtual threads and structured concurrency in the | * Please note that presently there is no specific sample code for virtual threads and structured concurrency in the | ||||
AspectJ code base, because these are just new APIs, no Java language features. You can find sample code for these | AspectJ code base, because these are just new APIs, no Java language features. You can find sample code for these | ||||
`SOURCE` retention on types, methods, constructors or fields. While declaring such annotations does not make sense to | `SOURCE` retention on types, methods, constructors or fields. While declaring such annotations does not make sense to | ||||
begin with, at least the AspectJ weaver or compiler should handle the situation gracefully, which now it does by | begin with, at least the AspectJ weaver or compiler should handle the situation gracefully, which now it does by | ||||
simply ignoring errors caused by it. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=366085[Bugzilla #366085] and | simply ignoring errors caused by it. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=366085[Bugzilla #366085] and | ||||
https://github.com/eclipse/org.aspectj/pull/196[pull request #196]. Better than this workaround would be for the | |||||
https://github.com/eclipse-aspectj/aspectj/pull/196[pull request #196]. Better than this workaround would be for the | |||||
compiler or weaver to actually print a warning when meeting source level annotations in declare statements. Hence, | compiler or weaver to actually print a warning when meeting source level annotations in declare statements. Hence, | ||||
follow-up issue https://github.com/eclipse/org.aspectj/issues/201[#201] was created. | |||||
follow-up issue https://github.com/eclipse-aspectj/aspectj/issues/201[#201] was created. | |||||
* Remove legacy AspectJ Browser code and documentation. | * Remove legacy AspectJ Browser code and documentation. | ||||
* Thanks to Andrey Turbanov for several clean code contributions. | * Thanks to Andrey Turbanov for several clean code contributions. | ||||
https://github.com/eclipse-aspectj/aspectj/issues/256[AspectJ tracker issue 256]). | https://github.com/eclipse-aspectj/aspectj/issues/256[AspectJ tracker issue 256]). | ||||
The list of issues addressed for 1.9.20.1 can be found | The list of issues addressed for 1.9.20.1 can be found | ||||
https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.20.1[here]. | |||||
https://github.com/eclipse-aspectj/aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.20.1[here]. | |||||
= AspectJ 1.9.20 | = AspectJ 1.9.20 | ||||
_Release info: 1.9.20 available 16-Aug-2023_ | _Release info: 1.9.20 available 16-Aug-2023_ | ||||
Please note that Bugzilla for issue management is deprecated and new issues should be filed as | Please note that Bugzilla for issue management is deprecated and new issues should be filed as | ||||
https://github.com/eclipse/org.aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.20 can be found | |||||
https://github.com/eclipse-aspectj/aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.20 can be found | |||||
here: | here: | ||||
* https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.20[GitHub 1.9.20] | |||||
* https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.20.1[GitHub 1.9.20.1] | |||||
* https://github.com/eclipse-aspectj/aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.20[GitHub 1.9.20] | |||||
* https://github.com/eclipse-aspectj/aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.20.1[GitHub 1.9.20.1] | |||||
* https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.20[Bugzilla 1.9.20] | * https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.20[Bugzilla 1.9.20] | ||||
== New features | == New features | ||||
Please note, that the upstream Eclipse Java Compiler (ECJ), which the AspectJ Compiler (AJC) is a fork of, still has | Please note, that the upstream Eclipse Java Compiler (ECJ), which the AspectJ Compiler (AJC) is a fork of, still has | ||||
some open issues concerning Java 20 preview feature support, see the list in | some open issues concerning Java 20 preview feature support, see the list in | ||||
https://github.com/eclipse/org.aspectj/issues/184#issuecomment-1272254940[this comment]. AJC therefore inherits the same | |||||
https://github.com/eclipse-aspectj/aspectj/issues/184#issuecomment-1272254940[this comment]. AJC therefore inherits the same | |||||
problems for the specific cases described in the linked issues. | problems for the specific cases described in the linked issues. | ||||
== Improvements | == Improvements | ||||
You can find some sample code in the AspectJ test suite under the respective AspectJ version in which the features were | You can find some sample code in the AspectJ test suite under the respective AspectJ version in which the features were | ||||
first supported (possibly as JVM preview features): | first supported (possibly as JVM preview features): | ||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features198/java17[Pattern matching for switch (preview 1)] | |||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features199/java18[Pattern matching for switch (preview 2)] | |||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features1919/java19[Pattern matching for switch (preview 3), | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features198/java17[Pattern matching for switch (preview 1)] | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features199/java18[Pattern matching for switch (preview 2)] | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features1919/java19[Pattern matching for switch (preview 3), | |||||
record patterns (preview 1)] | record patterns (preview 1)] | ||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features1920/java20[Pattern matching for switch (preview 4), | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features1920/java20[Pattern matching for switch (preview 4), | |||||
record patterns (preview 2)] | record patterns (preview 2)] | ||||
* Please note that presently there is no specific sample code for virtual threads and structured concurrency in the | * Please note that presently there is no specific sample code for virtual threads and structured concurrency in the | ||||
AspectJ code base, because these are just new APIs, no Java language features. You can find sample code for these | AspectJ code base, because these are just new APIs, no Java language features. You can find sample code for these |
_Release info: 1.9.21 available 11-Dec-2023_ | _Release info: 1.9.21 available 11-Dec-2023_ | ||||
Please note that Bugzilla for issue management is deprecated and new issues should be filed as | Please note that Bugzilla for issue management is deprecated and new issues should be filed as | ||||
https://github.com/eclipse/org.aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.21 can be found | |||||
https://github.com/eclipse-aspectj/aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.21 can be found | |||||
here: | here: | ||||
* https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.21[GitHub 1.9.21] | |||||
* https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.21.1[GitHub 1.9.21.1] | |||||
* https://github.com/eclipse-aspectj/aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.21[GitHub 1.9.21] | |||||
* https://github.com/eclipse-aspectj/aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.21.1[GitHub 1.9.21.1] | |||||
* https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.21[Bugzilla 1.9.21] | * https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.21[Bugzilla 1.9.21] | ||||
== New features | == New features |
Please note, that going forward Bugzilla for issue management is | Please note, that going forward Bugzilla for issue management is | ||||
deprecated, and new issues should be filed as | deprecated, and new issues should be filed as | ||||
https://github.com/eclipse/org.aspectj/issues/new[GitHub issues]. The | |||||
https://github.com/eclipse-aspectj/aspectj/issues/new[GitHub issues]. The | |||||
list of issues addressed for 1.9.7 can be found | list of issues addressed for 1.9.7 can be found | ||||
https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.7[here | https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.7[here | ||||
for Bugzilla] and | for Bugzilla] and | ||||
https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.7[here | |||||
https://github.com/eclipse-aspectj/aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.7[here | |||||
for GitHub issues]. | for GitHub issues]. | ||||
== New features | == New features | ||||
respective AspectJ version in which the features were first supported | respective AspectJ version in which the features were first supported | ||||
(possibly as JVM preview features): | (possibly as JVM preview features): | ||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features195/textblock[AspectJ | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features195/textblock[AspectJ | |||||
1.9.5: text blocks] | 1.9.5: text blocks] | ||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features196/java14[AspectJ | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features196/java14[AspectJ | |||||
1.9.6: records, instanceof patterns] | 1.9.6: records, instanceof patterns] | ||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features197/java15[AspectJ | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features197/java15[AspectJ | |||||
1.9.7: hidden classes, sealed classes] | 1.9.7: hidden classes, sealed classes] | ||||
== Using LTW on Java 16+ | == Using LTW on Java 16+ |
_Release info: 1.9.8 available 11-Feb-2022_ | _Release info: 1.9.8 available 11-Feb-2022_ | ||||
Please note, that Bugzilla for issue management is deprecated, and new issues should be filed as | Please note, that Bugzilla for issue management is deprecated, and new issues should be filed as | ||||
https://github.com/eclipse/org.aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.8 can be found | |||||
https://github.com/eclipse-aspectj/aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.8 can be found | |||||
https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.8[here for Bugzilla] and | https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.8[here for Bugzilla] and | ||||
https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.8[here for GitHub issues]. | |||||
https://github.com/eclipse-aspectj/aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.8[here for GitHub issues]. | |||||
== New features | == New features | ||||
For now, they all default to `false` for backward compatibility. This might change in a future Aspect release, if user | For now, they all default to `false` for backward compatibility. This might change in a future Aspect release, if user | ||||
feedback is positive and no negative side effects are found. Please try using them as much as you can and report back | feedback is positive and no negative side effects are found. Please try using them as much as you can and report back | ||||
questions (to the AspectJ users mailing list) or problems (as a GitHub issue), if any. Thanks to Stefan Starke for his | questions (to the AspectJ users mailing list) or problems (as a GitHub issue), if any. Thanks to Stefan Starke for his | ||||
contribution. See also https://github.com/eclipse/org.aspectj/pull/37[PR #37]. | |||||
contribution. See also https://github.com/eclipse-aspectj/aspectj/pull/37[PR #37]. | |||||
== Code examples | == Code examples | ||||
You can find some sample code in the AspectJ test suite under the respective AspectJ version in which the features were | You can find some sample code in the AspectJ test suite under the respective AspectJ version in which the features were | ||||
first supported (possibly as JVM preview features): | first supported (possibly as JVM preview features): | ||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features198/compiler_release[Cross-compilation to legacy JDK]: | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features198/compiler_release[Cross-compilation to legacy JDK]: | |||||
An example class which only works correctly on JDK 8 when compiled with `--release 8` due to API changes in | An example class which only works correctly on JDK 8 when compiled with `--release 8` due to API changes in | ||||
the JDK. Simply `-source 8 -target 8` would not be enough in this case. | the JDK. Simply `-source 8 -target 8` would not be enough in this case. | ||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features198/java17[Pattern matching for `switch`] | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features198/java17[Pattern matching for `switch`] | |||||
== Other changes and bug fixes | == Other changes and bug fixes | ||||
`aspectjweaver` still only require JRE 8+. | `aspectjweaver` still only require JRE 8+. | ||||
* Document build profiles and properties in _docs/developer/BUILD.md_ | * Document build profiles and properties in _docs/developer/BUILD.md_ | ||||
* Add a guide for setting up an AspectJ development environment in _docs/developer/IDE.md_ | * Add a guide for setting up an AspectJ development environment in _docs/developer/IDE.md_ | ||||
* Fix https://github.com/eclipse/org.aspectj/issues/105[issue #105]: Compilation fails when using an aspect library via | |||||
* Fix https://github.com/eclipse-aspectj/aspectj/issues/105[issue #105]: Compilation fails when using an aspect library via | |||||
`-aspectpath` in combination with introducing an annotation via ITD. This was broken since version 1.9.5 and fixed in | `-aspectpath` in combination with introducing an annotation via ITD. This was broken since version 1.9.5 and fixed in | ||||
1.9.8.RC3. | 1.9.8.RC3. | ||||
* Fix https://github.com/eclipse/org.aspectj/issues/68[issue #68]: Correctly process class files containing | |||||
* Fix https://github.com/eclipse-aspectj/aspectj/issues/68[issue #68]: Correctly process class files containing | |||||
https://openjdk.java.net/jeps/309[dynamic class-file constants (JEP 309)], which were introduced in Java 11 and broken | https://openjdk.java.net/jeps/309[dynamic class-file constants (JEP 309)], which were introduced in Java 11 and broken | ||||
in AspectJ ever since their introduction in 1.9.2. Java itself currently does not use "condy" and neither do other | in AspectJ ever since their introduction in 1.9.2. Java itself currently does not use "condy" and neither do other | ||||
widespread JVM languages. Byte code engineering libraries like ASM or Byte Buddy and some instrumentation tools like | widespread JVM languages. Byte code engineering libraries like ASM or Byte Buddy and some instrumentation tools like | ||||
JaCoCo can however produce condy code. Therefore, in order to create a regression test, we actually had to | JaCoCo can however produce condy code. Therefore, in order to create a regression test, we actually had to | ||||
https://github.com/eclipse/org.aspectj/blob/de63b63d/tests/bugs198/github_68/Generator.java#L50-L61[craft a condy | |||||
https://github.com/eclipse-aspectj/aspectj/blob/de63b63d/tests/bugs198/github_68/Generator.java#L50-L61[craft a condy | |||||
class with ASM]. | class with ASM]. | ||||
* Thanks to Andrey Turbanov for several clean code contributions and to Dmitry Mikhaylov for fixing a potential | * Thanks to Andrey Turbanov for several clean code contributions and to Dmitry Mikhaylov for fixing a potential | ||||
concurrency problem. | concurrency problem. |
Bugfix release for some compiler options related to the Java Platform Module System (JPMS) which were not working, most | Bugfix release for some compiler options related to the Java Platform Module System (JPMS) which were not working, most | ||||
importantly `--add-modules`, `--add-exports` and `--add-reads`. See | importantly `--add-modules`, `--add-exports` and `--add-reads`. See | ||||
https://github.com/eclipse/org.aspectj/issues/145[issue #145]. | |||||
https://github.com/eclipse-aspectj/aspectj/issues/145[issue #145]. | |||||
This probably was broken for a long time. AspectJ still is not boasting extensive JPMS support or test coverage, but | This probably was broken for a long time. AspectJ still is not boasting extensive JPMS support or test coverage, but | ||||
this improvement seems substantial enough to justify a minor release, instead of keeping users waiting for the next | this improvement seems substantial enough to justify a minor release, instead of keeping users waiting for the next | ||||
_Release info: 1.9.9 available 24-Mar-2022_ | _Release info: 1.9.9 available 24-Mar-2022_ | ||||
Please note that Bugzilla for issue management is deprecated and new issues should be filed as | Please note that Bugzilla for issue management is deprecated and new issues should be filed as | ||||
https://github.com/eclipse/org.aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.9 can be found | |||||
https://github.com/eclipse-aspectj/aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.9 can be found | |||||
here: | here: | ||||
* https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.9[GitHub 1.9.9] | |||||
* https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.9.1[GitHub 1.9.9.1] | |||||
* https://github.com/eclipse-aspectj/aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.9[GitHub 1.9.9] | |||||
* https://github.com/eclipse-aspectj/aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.9.1[GitHub 1.9.9.1] | |||||
* https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.9[Bugzilla 1.9.9] | * https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.9[Bugzilla 1.9.9] | ||||
== New features | == New features | ||||
asynchronous proceed, if you do not create the thread in the advice but want to use e.g. an `ExecutorService` with its | asynchronous proceed, if you do not create the thread in the advice but want to use e.g. an `ExecutorService` with its | ||||
own thread pool. This still is not working in annotation style aspects, only in native syntax ones. | own thread pool. This still is not working in annotation style aspects, only in native syntax ones. | ||||
See https://github.com/eclipse/org.aspectj/issues/128[issue #128] and | |||||
https://github.com/eclipse/org.aspectj/pull/132[pull request #132] for more details. | |||||
See https://github.com/eclipse-aspectj/aspectj/issues/128[issue #128] and | |||||
https://github.com/eclipse-aspectj/aspectj/pull/132[pull request #132] for more details. | |||||
== Code examples | == Code examples | ||||
You can find some sample code in the AspectJ test suite under the respective AspectJ version in which the features were | You can find some sample code in the AspectJ test suite under the respective AspectJ version in which the features were | ||||
first supported (possibly as JVM preview features): | first supported (possibly as JVM preview features): | ||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features198/java17[Pattern matching for switch, preview 1] | |||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/features199/java18[Pattern matching for switch, preview 2] | |||||
* https://github.com/eclipse/org.aspectj/tree/master/tests/bugs199/github_128[Asynchronous proceed in native vs. | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features198/java17[Pattern matching for switch, preview 1] | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/features199/java18[Pattern matching for switch, preview 2] | |||||
* https://github.com/eclipse-aspectj/aspectj/tree/master/tests/bugs199/github_128[Asynchronous proceed in native vs. | |||||
annotation style syntax] | annotation style syntax] | ||||
== Other changes and bug fixes | == Other changes and bug fixes | ||||
the value of system property `org.aspectj.weaver.openarchives` (1,000 by default). The AspectJ compiler is meant to | the value of system property `org.aspectj.weaver.openarchives` (1,000 by default). The AspectJ compiler is meant to | ||||
close archives upon cache exhaustion and then re-open them, if it needs them again later. Re-opening was broken, but | close archives upon cache exhaustion and then re-open them, if it needs them again later. Re-opening was broken, but | ||||
now the compiler works reliably even for cache sizes as small as 20. See | now the compiler works reliably even for cache sizes as small as 20. See | ||||
https://github.com/eclipse/org.aspectj/issues/125[issue #125]. | |||||
https://github.com/eclipse-aspectj/aspectj/issues/125[issue #125]. | |||||
* Improvements for `if()` pointcuts in annotation syntax, see issues | * Improvements for `if()` pointcuts in annotation syntax, see issues | ||||
https://github.com/eclipse/org.aspectj/issues/115[#115], https://github.com/eclipse/org.aspectj/issues/120[#120], | |||||
https://github.com/eclipse/org.aspectj/issues/122[#122]. | |||||
https://github.com/eclipse-aspectj/aspectj/issues/115[#115], https://github.com/eclipse-aspectj/aspectj/issues/120[#120], | |||||
https://github.com/eclipse-aspectj/aspectj/issues/122[#122]. | |||||
* Thanks to Andrey Turbanov for several clean code contributions. | * Thanks to Andrey Turbanov for several clean code contributions. | ||||
== AspectJ usage hints | == AspectJ usage hints |
if ( | if ( | ||||
!Modifier.isStatic(modifiers) && | !Modifier.isStatic(modifiers) && | ||||
// Inner classes/aspects of interfaces are implicitly static, | // Inner classes/aspects of interfaces are implicitly static, | ||||
// see https://github.com/eclipse/org.aspectj/issues/162 | |||||
// see https://github.com/eclipse-aspectj/aspectj/issues/162 | |||||
(this.enclosingType.modifiers & ClassFileConstants.AccInterface) == 0 | (this.enclosingType.modifiers & ClassFileConstants.AccInterface) == 0 | ||||
) { | ) { | ||||
scope.problemReporter().signalError(sourceStart, sourceEnd, "inner aspects must be static"); | scope.problemReporter().signalError(sourceStart, sourceEnd, "inner aspects must be static"); |
if ( | if ( | ||||
!Modifier.isStatic(typeDecl.modifiers) && | !Modifier.isStatic(typeDecl.modifiers) && | ||||
// Inner classes/aspects of interfaces are implicitly static, | // Inner classes/aspects of interfaces are implicitly static, | ||||
// see https://github.com/eclipse/org.aspectj/issues/162 | |||||
// see https://github.com/eclipse-aspectj/aspectj/issues/162 | |||||
(typeDecl.enclosingType.modifiers & ClassFileConstants.AccInterface) == 0 | (typeDecl.enclosingType.modifiers & ClassFileConstants.AccInterface) == 0 | ||||
) { | ) { | ||||
typeDecl.scope.problemReporter().signalError(typeDecl.sourceStart, typeDecl.sourceEnd, | typeDecl.scope.problemReporter().signalError(typeDecl.sourceStart, typeDecl.sourceEnd, |
FileSystem fileSystem = getLibraryAccess(classpaths, filenames); | FileSystem fileSystem = getLibraryAccess(classpaths, filenames); | ||||
// Use upstream method to generate '--add-reads', '--add-exports' info and copy it into our FileSystem instance. | // Use upstream method to generate '--add-reads', '--add-exports' info and copy it into our FileSystem instance. | ||||
// See https://github.com/eclipse/org.aspectj/issues/145. | |||||
// See https://github.com/eclipse-aspectj/aspectj/issues/145. | |||||
FileSystem fileSystemTemp = buildConfig.getBuildArgParser().getLibraryAccess(); | FileSystem fileSystemTemp = buildConfig.getBuildArgParser().getLibraryAccess(); | ||||
fileSystem.moduleUpdates = fileSystemTemp.moduleUpdates; | fileSystem.moduleUpdates = fileSystemTemp.moduleUpdates; | ||||
fileSystemTemp.cleanup(); | fileSystemTemp.cleanup(); |
import org.aspectj.lang.JoinPoint; | import org.aspectj.lang.JoinPoint; | ||||
/** | /** | ||||
* https://github.com/eclipse/org.aspectj/issues/162 | |||||
* https://github.com/eclipse-aspectj/aspectj/issues/162 | |||||
*/ | */ | ||||
public interface InterfaceWithInnerClass { | public interface InterfaceWithInnerClass { | ||||
public class ImplicitlyStatic { | public class ImplicitlyStatic { |
/** | /** | ||||
* https://github.com/eclipse/org.aspectj/issues/20 | |||||
* https://github.com/eclipse-aspectj/aspectj/issues/20 | |||||
*/ | */ | ||||
public class ParenthesisedAJKeywords { | public class ParenthesisedAJKeywords { | ||||
public static void main(String[] args) { | public static void main(String[] args) { |
* This fails in AspectJ 1.9.5 to 1.9.8.RC2 due to a removed safeguard in JDT Core, | * This fails in AspectJ 1.9.5 to 1.9.8.RC2 due to a removed safeguard in JDT Core, | ||||
* if the aspect is in a separate library on the aspectpath. | * if the aspect is in a separate library on the aspectpath. | ||||
* <p> | * <p> | ||||
* See https://github.com/eclipse/org.aspectj/issues/105 | |||||
* See https://github.com/eclipse-aspectj/aspectj/issues/105 | |||||
*/ | */ | ||||
@FooAnnotation | @FooAnnotation | ||||
public class Application { | public class Application { |
// TESTING: multiple instances causing factory invocation multiple times (but is cached correctly) | // TESTING: multiple instances causing factory invocation multiple times (but is cached correctly) | ||||
// Concurrency fix regression test for https://github.com/eclipse/org.aspectj/issues/198 | |||||
// Concurrency fix regression test for https://github.com/eclipse-aspectj/aspectj/issues/198 | |||||
import org.aspectj.lang.annotation.*; | import org.aspectj.lang.annotation.*; | ||||
import java.util.concurrent.atomic.AtomicInteger; | import java.util.concurrent.atomic.AtomicInteger; | ||||
} | } | ||||
// Helper methods 'doSomething' and 'callMe' help to produce byte code similar to what we need in order to fix | // Helper methods 'doSomething' and 'callMe' help to produce byte code similar to what we need in order to fix | ||||
// https://github.com/eclipse/org.aspectj/issues/198. If necessary, just temporarily uncomment, compile and analyse | |||||
// https://github.com/eclipse-aspectj/aspectj/issues/198. If necessary, just temporarily uncomment, compile and analyse | |||||
// the byte code, e.g. with JDK tool 'javap -v'. | // the byte code, e.g. with JDK tool 'javap -v'. | ||||
/* | /* | ||||
public void doSomething() { | public void doSomething() { |
} | } | ||||
// multiple instances causing factory invocation multiple times (but is cached), concurrent case | // multiple instances causing factory invocation multiple times (but is cached), concurrent case | ||||
// see https://github.com/eclipse/org.aspectj/issues/198 | |||||
// see https://github.com/eclipse-aspectj/aspectj/issues/198 | |||||
public void testCaseEConcurrent() { | public void testCaseEConcurrent() { | ||||
runTest("casee_concurrent"); | runTest("casee_concurrent"); | ||||
} | } |
} | } | ||||
public void testAsyncProceedNestedAroundAdviceThreadPool_gh128() { | public void testAsyncProceedNestedAroundAdviceThreadPool_gh128() { | ||||
// TODO: future improvement, see https://github.com/eclipse/org.aspectj/issues/141 | |||||
// TODO: future improvement, see https://github.com/eclipse-aspectj/aspectj/issues/141 | |||||
// runTest("asynchronous proceed for nested around-advice (@AspectJ, thread pool)"); | // runTest("asynchronous proceed for nested around-advice (@AspectJ, thread pool)"); | ||||
} | } | ||||
<run class="CaseEConcurrent"> | <run class="CaseEConcurrent"> | ||||
<stdout ordered="no"> | <stdout ordered="no"> | ||||
<!-- | <!-- | ||||
Without the concurrency fix from https://github.com/eclipse/org.aspectj/issues/198, each delegate factory | |||||
Without the concurrency fix from https://github.com/eclipse-aspectj/aspectj/issues/198, each delegate factory | |||||
would be invoked twice | would be invoked twice | ||||
--> | --> | ||||
<line text="Delegate factory invoked for CaseEConcurrent instance: a"/> | <line text="Delegate factory invoked for CaseEConcurrent instance: a"/> |
</run> | </run> | ||||
</ajc-test> | </ajc-test> | ||||
<!-- RuntimeException in BcelWeaver, see https://github.com/eclipse/org.aspectj/issues/190 --> | |||||
<!-- RuntimeException in BcelWeaver, see https://github.com/eclipse-aspectj/aspectj/issues/190 --> | |||||
<ajc-test dir="bugs1920/github_190" vm="1.5" title="switch with Integer.MAX_VALUE case"> | <ajc-test dir="bugs1920/github_190" vm="1.5" title="switch with Integer.MAX_VALUE case"> | ||||
<compile files="SwitchCaseWith_Integer_MAX_VALUE.java" options="-1.5 -showWeaveInfo"> | <compile files="SwitchCaseWith_Integer_MAX_VALUE.java" options="-1.5 -showWeaveInfo"> | ||||
<message kind="weave" text="Join point 'method-execution(java.lang.String SwitchCaseWith_Integer_MAX_VALUE.switchTest(int))'"/> | <message kind="weave" text="Join point 'method-execution(java.lang.String SwitchCaseWith_Integer_MAX_VALUE.switchTest(int))'"/> | ||||
<!-- | <!-- | ||||
'Syntax error, insert "Expression" to complete Expression' when compiling parenthesised expressions | 'Syntax error, insert "Expression" to complete Expression' when compiling parenthesised expressions | ||||
containing AspectJ keywords, e.g. '(before)', see https://github.com/eclipse/org.aspectj/issues/20 | |||||
containing AspectJ keywords, e.g. '(before)', see https://github.com/eclipse-aspectj/aspectj/issues/20 | |||||
--> | --> | ||||
<ajc-test dir="bugs1920/github_20" vm="1.5" title="parenthesised expression with AspectJ keyword"> | <ajc-test dir="bugs1920/github_20" vm="1.5" title="parenthesised expression with AspectJ keyword"> | ||||
<compile files="ParenthesisedAJKeywords.java" options="-1.5 -showWeaveInfo"/> | <compile files="ParenthesisedAJKeywords.java" options="-1.5 -showWeaveInfo"/> | ||||
<!-- | <!-- | ||||
'inner aspects must be static' when compiling an interface with an inner aspect which was not explicitly declared | 'inner aspects must be static' when compiling an interface with an inner aspect which was not explicitly declared | ||||
static, see https://github.com/eclipse/org.aspectj/issues/162 | |||||
static, see https://github.com/eclipse-aspectj/aspectj/issues/162 | |||||
--> | --> | ||||
<ajc-test dir="bugs1920/github_162" vm="1.5" title="inner aspect of interface is implicitly static"> | <ajc-test dir="bugs1920/github_162" vm="1.5" title="inner aspect of interface is implicitly static"> | ||||
<compile files="InterfaceWithInnerClass.java" options="-1.5 -showWeaveInfo"> | <compile files="InterfaceWithInnerClass.java" options="-1.5 -showWeaveInfo"> | ||||
<!-- | <!-- | ||||
When compiling aspect and target class together, matching works as expected, | When compiling aspect and target class together, matching works as expected, | ||||
see https://github.com/eclipse/org.aspectj/issues/24 | |||||
see https://github.com/eclipse-aspectj/aspectj/issues/24 | |||||
--> | --> | ||||
<ajc-test dir="bugs1920/github_24" vm="1.5" title="exact array type matching, aspect compiled together with target class"> | <ajc-test dir="bugs1920/github_24" vm="1.5" title="exact array type matching, aspect compiled together with target class"> | ||||
<compile files="ExactlyMatchingAspect.aj MaybeMissingClass.java" options="-1.5 -showWeaveInfo"> | <compile files="ExactlyMatchingAspect.aj MaybeMissingClass.java" options="-1.5 -showWeaveInfo"> | ||||
<!-- | <!-- | ||||
When compiling aspect and target class separately, too many joinpoints are matched, | When compiling aspect and target class separately, too many joinpoints are matched, | ||||
see https://github.com/eclipse/org.aspectj/issues/24 | |||||
see https://github.com/eclipse-aspectj/aspectj/issues/24 | |||||
--> | --> | ||||
<ajc-test dir="bugs1920/github_24" vm="1.5" title="exact array type matching, aspect compiled separately from target class"> | <ajc-test dir="bugs1920/github_24" vm="1.5" title="exact array type matching, aspect compiled separately from target class"> | ||||
<compile files="ExactlyMatchingAspect.aj" options="-1.5 -showWeaveInfo" outjar="aspect.jar"> | <compile files="ExactlyMatchingAspect.aj" options="-1.5 -showWeaveInfo" outjar="aspect.jar"> | ||||
<!-- | <!-- | ||||
When compiling aspect and target class together, too many joinpoints are matched, | When compiling aspect and target class together, too many joinpoints are matched, | ||||
see https://github.com/eclipse/org.aspectj/issues/24 | |||||
see https://github.com/eclipse-aspectj/aspectj/issues/24 | |||||
--> | --> | ||||
<ajc-test dir="bugs1920/github_24" vm="1.5" title="fuzzy array type matching, aspect compiled together with target class"> | <ajc-test dir="bugs1920/github_24" vm="1.5" title="fuzzy array type matching, aspect compiled together with target class"> | ||||
<compile files="FuzzilyMatchingAspect.aj MaybeMissingClass.java" options="-1.5 -showWeaveInfo"> | <compile files="FuzzilyMatchingAspect.aj MaybeMissingClass.java" options="-1.5 -showWeaveInfo"> | ||||
<!-- | <!-- | ||||
When compiling aspect and target class separately, too many joinpoints are matched, | When compiling aspect and target class separately, too many joinpoints are matched, | ||||
see https://github.com/eclipse/org.aspectj/issues/24 | |||||
see https://github.com/eclipse-aspectj/aspectj/issues/24 | |||||
--> | --> | ||||
<ajc-test dir="bugs1920/github_24" vm="1.5" title="fuzzy array type matching, aspect compiled separately from target class"> | <ajc-test dir="bugs1920/github_24" vm="1.5" title="fuzzy array type matching, aspect compiled separately from target class"> | ||||
<compile files="FuzzilyMatchingAspect.aj" options="-1.5 -showWeaveInfo" outjar="aspect.jar"> | <compile files="FuzzilyMatchingAspect.aj" options="-1.5 -showWeaveInfo" outjar="aspect.jar"> | ||||
</ajc-test> | </ajc-test> | ||||
<!-- | <!-- | ||||
https://github.com/eclipse/org.aspectj/issues/214 | |||||
https://github.com/eclipse-aspectj/aspectj/issues/214 | |||||
https://github.com/mojohaus/aspectj-maven-plugin/issues/164 | https://github.com/mojohaus/aspectj-maven-plugin/issues/164 | ||||
Problem with multiple, subsequent weaving steps and '-Xlint:warning' or '-Xlint:unorderedAdviceAtShadow=warning' | Problem with multiple, subsequent weaving steps and '-Xlint:warning' or '-Xlint:unorderedAdviceAtShadow=warning' | ||||
java.lang.ArrayIndexOutOfBoundsException: 1 | java.lang.ArrayIndexOutOfBoundsException: 1 |
<suite> | <suite> | ||||
<!-- https://github.com/eclipse/org.aspectj/issues/68 --> | |||||
<!-- https://github.com/eclipse-aspectj/aspectj/issues/68 --> | |||||
<ajc-test dir="bugs198/github_68" vm="11" title="correctly weave code using constant-dynamic"> | <ajc-test dir="bugs198/github_68" vm="11" title="correctly weave code using constant-dynamic"> | ||||
<compile files="Application.java MyAspect.aj" options="-11" inpath="condy.jar"/> | <compile files="Application.java MyAspect.aj" options="-11" inpath="condy.jar"/> | ||||
<run class="Application"> | <run class="Application"> | ||||
</run> | </run> | ||||
</ajc-test> | </ajc-test> | ||||
<!-- https://github.com/eclipse/org.aspectj/issues/105 --> | |||||
<!-- https://github.com/eclipse-aspectj/aspectj/issues/105 --> | |||||
<ajc-test dir="bugs198/github_105" vm="8" title="ITD annotation with mandatory parameter via aspectpath"> | <ajc-test dir="bugs198/github_105" vm="8" title="ITD annotation with mandatory parameter via aspectpath"> | ||||
<compile files="FooAnnotation.java BarAnnotation.java FooAspect.aj" options="-8" outjar="aspect.jar"/> | <compile files="FooAnnotation.java BarAnnotation.java FooAspect.aj" options="-8" outjar="aspect.jar"/> | ||||
<compile files="Application.java" options="-8" aspectpath="aspect.jar"/> | <compile files="Application.java" options="-8" aspectpath="aspect.jar"/> |