= AspectJ 1.9.23
:doctype: book
:leveloffset: +1

= AspectJ 1.9.23

_© Copyright 2025 Contributors. All rights reserved._

_Release info: 1.9.23 available 7-Mar-2025_

Please note that Bugzilla for issue management is deprecated and new issues should be filed as
https://github.com/eclipse-aspectj/aspectj/issues/new[GitHub issues]. The list of issues addressed for 1.9.23 can be
found here:

* https://github.com/eclipse-aspectj/aspectj/issues?q=is%3Aissue+is%3Aclosed++milestone%3A1.9.23[GitHub 1.9.23]
* 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.23[Bugzilla 1.9.23]

== New features

AspectJ 1.9.23 supports https://openjdk.java.net/projects/jdk/23/[Java 23], its final and preview features:

* 455:	Primitive Types in Patterns, instanceof, and switch (Preview)
* 466:	Class-File API (Second Preview)
* 467:	Markdown Documentation Comments
* 469:	Vector API (Eighth Incubator)
* 473:	Stream Gatherers (Second Preview)
* 471:	Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal
* 474:	ZGC: Generational Mode by Default
* 476:	Module Import Declarations (Preview)
* 477:	Implicitly Declared Classes and Instance Main Methods (Third Preview)
* 480:	Structured Concurrency (Third Preview)
* 481:	Scoped Values (Third Preview)
* 482:	Flexible Constructor Bodies (Second Preview)

Some of these are API/JVM only so don't affect the compiler and should just work on Java 23 runtimes.

== Improvements

* No major improvements

== Other changes and bug fixes

Importantly with the adoption of the JDT Compiler for Java 23, the versions of Java 1.1 > 1.7 are considered no longer
supported so any attempt to specify a build for any of those Java versions will now fail immediately.

== AspectJ usage hints

[[ajc_build_system_requirements]]
=== AspectJ compiler build system requirements

Since 1.9.21, the AspectJ compiler `ajc` (contained in the `aspectjtools` library) no longer works on JDKs 11 to 16. The
minimum compile-time requirement is now JDK 17 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 `aspectjrt`, but the
compiler itself needs JDK 17+. Just like in previous AspectJ versions, both the runtime `aspectjrt` and the load-time
weaver `aspectjweaver` still only require JRE 8+.

History: Since 1.9.8, the AspectJ compiler ajc needed JDK 11+, before then JDK 8+.

[[ltw_java_16]]
=== Use LTW on Java 16+

**Since AspectJ 1.9.21.1, using `--add-opens` is no longer necessary!** The additional JVM command-line option was
necessary for LTW on JRE 16+ in all AspectJ versions up to 1.9.21. Since AspectJ 1.9.21.1, the LTW agent uses an
alternative approach for defining new classes during weaving, which works without `--add-opens` - at least for now, i.e.
JDKs 8 to 22. There still is no canonical solution, because link:https://bugs.openjdk.org/browse/JDK-8200559[JDK-8200559]
is still unresolved since 2018.

[[compile_with_preview]]
=== Compile with Java preview features

For features marked as preview on a given JDK, you need to compile with `ajc --enable-preview` and run with
`java --enable-preview` on that JDK.

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.
