diff options
author | Alexander Kriegisch <Alexander@Kriegisch.name> | 2024-01-28 16:13:22 +0700 |
---|---|---|
committer | Alexander Kriegisch <Alexander@Kriegisch.name> | 2024-01-29 07:07:26 +0700 |
commit | f986c3d18386e77c974e4272ab27c3b573773c9b (patch) | |
tree | 542e0be08b7f34133dc9813cef864e5bfb75e31d /weaver | |
parent | 8b3a50e5ab8d78e96dd4401081388bc34c17edf4 (diff) | |
download | aspectj-f986c3d18386e77c974e4272ab27c3b573773c9b.tar.gz aspectj-f986c3d18386e77c974e4272ab27c3b573773c9b.zip |
Workaround for defining classes during LTW
Overhaul ClassLoaderWeavingAdaptor to use statically initialised Unsafe
instances and method handles pointing to their 'defineClass' methods.
Those now work universally on JDKs 8-21. In older JDKs, the method used
to be in sun.misc.Unsafe, in more recent ones on jdk.internal.misc.Unsafe.
It is challenging to fetch instances, especially as reflection
protection and module boundaries have been increased in the JDK
progressively. But finally, a solution was adapted from Byte Buddy (BB).
Kudos to BB author Rafael Winterhalter. The previous solution to use
ClassLoader::defineClass and require '--add-opens' is no longer
necessary for the first time since it became necessary in AspectJ 1.9.7
with Java 16 support.
Add org.ow2.asm:asm-common as a dependency everywhere org.ow2.asm:asm
was used before. Maybe that is too many places, but no worse than before.
Add missing dependency on loadtime to aspectjweaver. This kept a build
like "mvn install -am -pl aspectjweaver" from picking up changed
loadtime classes.
Fixes #117.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Diffstat (limited to 'weaver')
-rw-r--r-- | weaver/pom.xml | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/weaver/pom.xml b/weaver/pom.xml index 657813b8d..f51e590e1 100644 --- a/weaver/pom.xml +++ b/weaver/pom.xml @@ -65,5 +65,9 @@ <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> </dependency> + <dependency> + <groupId>org.ow2.asm</groupId> + <artifactId>asm-commons</artifactId> + </dependency> </dependencies> </project> |