]> source.dussan.org Git - aspectj.git/commitdiff
Add release notes for 1.9.19 (Java 19) 187/head
authorAlexander Kriegisch <Alexander@Kriegisch.name>
Wed, 21 Dec 2022 12:00:37 +0000 (13:00 +0100)
committerAlexander Kriegisch <Alexander@Kriegisch.name>
Wed, 21 Dec 2022 12:00:37 +0000 (13:00 +0100)
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
docs/dist/doc/README-1919.html [new file with mode: 0644]
docs/dist/doc/index.html

diff --git a/docs/dist/doc/README-1919.html b/docs/dist/doc/README-1919.html
new file mode 100644 (file)
index 0000000..a146c53
--- /dev/null
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+
+<head>
+<title>AspectJ 1.9.19 Readme</title>
+<style type="text/css">
+  <!--
+  P   { margin-left:  20px; }
+  PRE { margin-left:  20px; }
+  LI  { margin-left:  20px; }
+  H4  { margin-left:  20px; }
+  H3  { margin-left:  10px; }
+  -->
+</style>
+</head>
+
+<body>
+<div align="right"><small>&copy; Copyright 2022 Contributors. All rights reserved.</small></div>
+
+<h1>AspectJ 1.9.19</h1>
+
+<p>
+  Please note that Bugzilla for issue management is deprecated and new issues should be filed as
+  <a href="https://github.com/eclipse/org.aspectj/issues/new">GitHub issues</a>.
+  The list of issues addressed for 1.9.19 can be found here:
+  <ul>
+    <li><a href="https://github.com/eclipse/org.aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.19">GitHub 1.9.19</a></li>
+    <li><a href="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</a></li>
+  </ul>
+</p>
+
+<h2>New features</h2>
+
+<p>
+  AspectJ 1.9.19 supports <a href="https://openjdk.java.net/projects/jdk/19/">Java 19</a> and its final, preview and
+  incubator features, such as:
+</p>
+<ul>
+  <li>Record patterns (preview)</li>
+  <li>Virtual threads (preview)</li>
+  <li>Pattern matching for <tt>switch</tt> (preview 3)</li>
+  <li>Structured concurrency (incubator)</li>
+</ul>
+
+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
+<a href="https://github.com/eclipse/org.aspectj/issues/184#issuecomment-1272254940">this comment</a>. AJC therefore
+inherits the same problems for the specific cases described in the linked issues.
+
+<h2>Improvements</h2>
+
+<p>
+  In annotation style aspects, asynchronous <tt>proceed()</tt> calls in <tt>@Around</tt> advice now works in threads
+  created from within the advice. Previously, this was only working in native syntax aspects. There is still a
+  limitation with regard to asynchronous proceed, if you do not create the thread in the advice but want to use e.g.
+  an <tt>ExecutorService</tt> with its own thread pool. This still is not working in annotation style aspects, only in
+  native syntax ones.
+</p>
+<p>
+  See <a href="https://github.com/eclipse/org.aspectj/issues/128">issue #128</a> and
+  <a href="https://github.com/eclipse/org.aspectj/pull/132">pull request #132</a> for more details.
+</p>
+<h2>Code examples</h2>
+
+<p>
+  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):
+</p>
+<ul>
+  <li>
+    <a href="https://github.com/eclipse/org.aspectj/tree/master/tests/features198/java17">
+      Pattern matching for switch (preview 1)
+    </a>
+  </li>
+  <li>
+    <a href="https://github.com/eclipse/org.aspectj/tree/master/tests/features199/java18">
+      Pattern matching for switch (preview 2)
+    </a>
+  </li>
+  <li>
+    <a href="https://github.com/eclipse/org.aspectj/tree/master/tests/features199/java18">
+      Pattern matching for switch (preview 3), record patterns (preview 1)
+    </a>
+  </li>
+  <li>
+    <a href="https://github.com/eclipse/org.aspectj/tree/master/tests/bugs199/github_128">
+      Asynchronous proceed in native vs. annotation style syntax
+    </a>
+  </li>
+  <li>
+    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
+    concurrency features elsewhere, e.g. in the corresponding JEPs. In AspectJ, they should just work transparently
+    like any other Java API.
+  </li>
+</ul>
+
+<h2>Other changes and bug fixes</h2>
+
+<ul>
+  <li>
+    Fix a bug which led to <tt>NullPointerException</tt>s if too many JAR archives were on the classpath. Too many here
+    means the value system property <tt>org.aspectj.weaver.openarchives</tt> (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, now the compiler works reliably even for cache sizes as small as 20. See issue
+    <a href="https://github.com/eclipse/org.aspectj/issues/125">#125</a>.
+  </li>
+  <li>
+    Improvements for <tt>if()</tt> pointcuts in annotation syntax, see issues
+    <a href="https://github.com/eclipse/org.aspectj/issues/115">#115</a>,
+    <a href="https://github.com/eclipse/org.aspectj/issues/120">#120</a>,
+    <a href="https://github.com/eclipse/org.aspectj/issues/122">#122</a>.
+  </li>
+  <li>
+    Thanks to Andrey Turbanov for several clean code contributions.
+  </li>
+</ul>
+
+<h2>AspectJ usage hints</h2>
+
+<h3>AspectJ compiler build system requirements</h3>
+
+<p>
+  Since 1.9.7, the AspectJ compiler <tt>ajc</tt> (contained in the <tt>aspectjtools</tt> library) no longer works on
+  JDKs 8 to 10. The minimum compile-time requirement is now JDK 11 due to upstream changes in the Eclipse Java Compiler
+  (subset of JDT Core), which AspectJ is a fork of. You can still compile to legacy target versions as low as Java 1.3
+  when compiling plain Java code or using plain Java ITD constructs which do not require the AspectJ runtime
+  <tt>aspectjrt</tt>, but the compiler itself needs JDK 11+. Just like in previous AspectJ versions, both the runtime
+  <tt>aspectjrt</tt> and the load-time weaver <tt>aspectjweaver</tt> still only require JRE 8+.
+</p>
+
+<h3>Use LTW on Java 16+</h3>
+
+<p>
+  Please note that if you want to use load-time weaving on Java 16+, the weaving agent collides with
+  <a href="https://openjdk.java.net/jeps/396">JEP 396 (Strongly Encapsulate JDK Internals by Default)</a> and related
+  subsequent JEPs. Therefore, you need to set the JVM parameter <tt>--add-opens java.base/java.lang=ALL-UNNAMED</tt> in
+  order to enable aspect weaving. This is due to the fact that the weaver uses internal APIs for which we have not found
+  an adequate replacement yet when defining classes in different classloaders.
+</p>
+
+<h3>Compile with Java preview features</h3>
+
+<p>
+  For features marked as preview on a given JDK, you need to compile with <tt>ajc --enable-preview</tt> and run with
+  <tt>java --enable-preview</tt> on that JDK.
+</p>
+<p>
+  Please note that you cannot run code compiled with preview features on any other JDK than the one used for
+  compilation. For example, records compiled with preview on JDK 15 cannot be used on JDK 16 without recompilation. This
+  is a JVM limitation unrelated to AspectJ. Also, e.g. sealed classes are preview-1 on JDK 15 and preview-2 on JDK 16.
+  You still need to recompile, no matter what.
+</p>
+
+<hr>
+
+<p>
+  <b>Available:</b> 1.9.19 on DD-MMM-2022
+</p>
+
+</body>
+
+</html>
index 371961da2b5a0d3b44845e16097179e4dd992498..84d4f79ad37adbc82b5e6fb0654e374ed61f5abf 100644 (file)
 <tr> <td>README's
      </td>
      <td>Changes and porting guide for AspectJ
+        <a href="README-1919.html">1.9.19</a>,
+        <a href="README-199.html">1.9.9 and 1.9.9.1</a>,
         <a href="README-198.html">1.9.8</a>,
         <a href="README-197.html">1.9.7</a>,
         <a href="README-196.html">1.9.6</a>,