Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package byte-buddy for openSUSE:Factory 
checked in at 2024-09-27 17:11:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/byte-buddy (Old)
 and      /work/SRC/openSUSE:Factory/.byte-buddy.new.29891 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "byte-buddy"

Fri Sep 27 17:11:51 2024 rev:7 rq:1204132 version:1.15.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/byte-buddy/byte-buddy.changes    2024-09-26 
18:55:16.890042787 +0200
+++ /work/SRC/openSUSE:Factory/.byte-buddy.new.29891/byte-buddy.changes 
2024-09-27 17:12:37.349483371 +0200
@@ -1,0 +2,11 @@
+Thu Sep 26 22:46:31 UTC 2024 - Anton Shvetz <shvetz.an...@gmail.com>
+
+- Update to v1.15.3
+  * Changes of v1.15.3
+    + Treat multi-release class files that are newer than the
+      supported version as regular resources.
+    + Allow overriding the multi-release class file version from
+      Maven and Gradle plugin.
+    + Correctly resolve multi-release class files in Android.
+
+-------------------------------------------------------------------

Old:
----
  byte-buddy-1.15.2.tar.gz

New:
----
  byte-buddy-1.15.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ byte-buddy.spec ++++++
--- /var/tmp/diff_new_pack.bXzjzy/_old  2024-09-27 17:12:37.893506085 +0200
+++ /var/tmp/diff_new_pack.bXzjzy/_new  2024-09-27 17:12:37.893506085 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           byte-buddy
-Version:        1.15.2
+Version:        1.15.3
 Release:        0
 Summary:        Runtime code generation for the Java virtual machine
 License:        Apache-2.0

++++++ byte-buddy-1.15.2.tar.gz -> byte-buddy-1.15.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/byte-buddy-byte-buddy-1.15.2/.mvn/checksums.sha256 
new/byte-buddy-byte-buddy-1.15.3/.mvn/checksums.sha256
--- old/byte-buddy-byte-buddy-1.15.2/.mvn/checksums.sha256      2024-09-25 
09:39:00.000000000 +0200
+++ new/byte-buddy-byte-buddy-1.15.3/.mvn/checksums.sha256      2024-09-27 
00:13:05.000000000 +0200
@@ -647,6 +647,7 @@
 net.bytebuddy:byte-buddy-agent:jar:1.14.9 
11ed107d4b78e55f8c3d34250494375081a29bc125a1f5c56db582ccdd48835f
 net.bytebuddy:byte-buddy-agent:jar:1.15.0 
3399a0fdf7ba3f1386ebf831a706037428f1b1af81d653c25cf8a8fde2e4d2ea
 net.bytebuddy:byte-buddy-agent:jar:1.15.1 
77a39846b42110eb50e49e4ff6137e3f0a92eb3bb6f59ce52dc4095c8b901005
+net.bytebuddy:byte-buddy-agent:jar:1.15.2 
f8673a2dec2a4c2b0a910d92b4b332bb9622890332138e4c401364cba74eda77
 net.bytebuddy:byte-buddy-android:jar:1.12.19 
bb73d3b9ace5a60a9a9aa1701761073b3df3baf79ff463aed6cd94b724fd3ba9
 net.bytebuddy:byte-buddy-android:jar:1.12.20 
f43b8b7eb840f6140135066224f0e6b565b9becb05345fdc572a66bfb92df0aa
 net.bytebuddy:byte-buddy-android:jar:1.12.21 
bf4ad1405c2fcaa8b179929f9a64c8ee66d04f34b0e3fe8a90b28c738f883fe9
@@ -675,6 +676,7 @@
 net.bytebuddy:byte-buddy-android:jar:1.14.9 
3cdbdaaf439bce36b94dd27782b86fb1d92bbbedcd527dbf2ee14e0412f6b80e
 net.bytebuddy:byte-buddy-android:jar:1.15.0 
3874728750cd8917f70190eb0d004ccef4c3e00652b42d89d97e5d890e97c5af
 net.bytebuddy:byte-buddy-android:jar:1.15.1 
b8724a3372f76dbbe01ea3385baad0c325c583f637a87d32428b612be70b5b32
+net.bytebuddy:byte-buddy-android:jar:1.15.2 
a19d628dee90c74e96a321e9814e2c5f3fe4e6404b05a7b25ec407e227e25e7e
 net.bytebuddy:byte-buddy-dep:jar:1.12.19 
a85bb853ec6ec156b10ea0b5b0e38ac0f89c6c2bc89dd0358772a0dff2eb85c9
 net.bytebuddy:byte-buddy-dep:jar:1.12.20 
d7e15d3ccc0508e78a146f1be420779eb3e2e9a537e3c8add3cd6d802c9a615e
 net.bytebuddy:byte-buddy-dep:jar:1.12.21 
116b320c1f3f8539978ea67989d94e9bfed3e9422beb5a76749d967439ec8f9d
@@ -703,6 +705,7 @@
 net.bytebuddy:byte-buddy-dep:jar:1.14.9 
e9affd66effe9857856b5948463893c02ad7a91e37cf3d8c07930e73cc8c282f
 net.bytebuddy:byte-buddy-dep:jar:1.15.0 
5b4840406be9f761d39f314bc1b5d0574b55c163140fcfe7b6f670e82fb0738c
 net.bytebuddy:byte-buddy-dep:jar:1.15.1 
ade2ebcc897db4ecc13ab61188d8251665314cbf8f3268e558e75f9728380fc6
+net.bytebuddy:byte-buddy-dep:jar:1.15.2 
50f05dad8a626e588b2f89de7eefc9212515d45d6a03fb87870f946f0bab56f7
 net.bytebuddy:byte-buddy-maven-plugin:jar:1.12.19 
3419e2afbfac4f21ef709ee3f8f08fc1d71001e07ba2524a0bb2a3c28f3e1087
 net.bytebuddy:byte-buddy-maven-plugin:jar:1.12.20 
48a36e2e8c2dbe2b3673ef8bf6be22b021cfca35d6205a3d5e722f74db42d52b
 net.bytebuddy:byte-buddy-maven-plugin:jar:1.12.21 
cb3332f89cc6502e3637dbe509c08c55cb5ad528c675131858dda89eabf7c9fc
@@ -728,6 +731,7 @@
 net.bytebuddy:byte-buddy-maven-plugin:jar:1.14.9 
2bc8809f83aed11a531f093da593c52e3b572b7ee7359c1e3eff3796061db44e
 net.bytebuddy:byte-buddy-maven-plugin:jar:1.15.0 
e14df4a925a628f3f7b937005eba803b1e9d320ee7a8172f734691dfa58bd432
 net.bytebuddy:byte-buddy-maven-plugin:jar:1.15.1 
9cb4a37d5bb17cd55ea52e9f660a87b7b9fdae56bfe886f9588b09929207f7e3
+net.bytebuddy:byte-buddy-maven-plugin:jar:1.15.2 
1cda61087db3b8159f77be5f74e04f816a24ea1d9cd54ba0b537c6573c6d118e
 net.bytebuddy:byte-buddy-maven-plugin:pom:1.12.19 
c2051f8cbdf328692f36077627be07168334ee9167b72e5bf608eae624163b4f
 net.bytebuddy:byte-buddy-maven-plugin:pom:1.12.20 
2d112ff342e7db7da484d038807749c1a87c81419b789a86b950a37bdd65b207
 net.bytebuddy:byte-buddy-maven-plugin:pom:1.12.21 
13576ca6b9c44ab9789ada11ee400dcd3f4bcc22a7cab6f7052aeeb49a8c02e1
@@ -753,6 +757,7 @@
 net.bytebuddy:byte-buddy-maven-plugin:pom:1.14.9 
75c6d50a8cf6d528eb09b198e54035b6bbc10d0653655194ae697b971334fdd2
 net.bytebuddy:byte-buddy-maven-plugin:pom:1.15.0 
cc233d43805a7e9756c8a94c4751a18cb938ac3ccf83f0691604206157130bd0
 net.bytebuddy:byte-buddy-maven-plugin:pom:1.15.1 
d8f649ffa066009efc71e967a45cca915c6ffb1c4a4508b0718f4a51d4437197
+net.bytebuddy:byte-buddy-maven-plugin:pom:1.15.2 
11d71812ac7ea9f397967f984750d4484dd9c027a4a64f5730d840bb3542aa15
 net.bytebuddy:byte-buddy-parent:pom:1.12.19 
72ab6fef409e812921f4728b3c4b6ef4fa53bc25fabb0488fc2cae367368b54d
 net.bytebuddy:byte-buddy-parent:pom:1.12.20 
ac59dd7bc0316c51ab29e7c44ae7941ba8c7bf84789edb1dc8fbef2f16535b99
 net.bytebuddy:byte-buddy-parent:pom:1.12.21 
ff66d886607137e2095f20c90ee093f3c80329164eff091a0688bdce37e3e6b2
@@ -778,6 +783,7 @@
 net.bytebuddy:byte-buddy-parent:pom:1.14.9 
66b8342251d35f2063e69316f63bafcb056342fe75e921c0f465c2d96593535e
 net.bytebuddy:byte-buddy-parent:pom:1.15.0 
8ec247e077cdf76e72ad2b9919576cf2a477811935b56c8a27958e7297b4f18b
 net.bytebuddy:byte-buddy-parent:pom:1.15.1 
7bb21259d04796865f0d83dd3344fcffdd34c94515c00a6525a8996acb1c413f
+net.bytebuddy:byte-buddy-parent:pom:1.15.2 
3be68060e65990669555e02f4cf7826e10122462c14cb14c1b2db78447795bfd
 net.bytebuddy:byte-buddy:jar:1.12.19 
030704139e46f32c38d27060edee9e0676b0a0fff8a8be53461515154ba8a7be
 net.bytebuddy:byte-buddy:jar:1.12.20 
0a9b2795e0e2391117062f0fc7f6ae98fa3c2a7c927847ff1e01bb7cffcd9167
 net.bytebuddy:byte-buddy:jar:1.12.21 
f6f45c2237a7f132c16745ad2a52c4cdde58028b11ee80b09f0d422f4930d685
@@ -803,6 +809,7 @@
 net.bytebuddy:byte-buddy:jar:1.14.9 
377352e253282bf86f731ac90ed88348e8f40a63ce033c00a85982de7e790e6f
 net.bytebuddy:byte-buddy:jar:1.15.0 
c743cfb4db1e6c67af6297fbe32a3ad94710884cde4c7eecb1bad7d820d4f2ba
 net.bytebuddy:byte-buddy:jar:1.15.1 
cc5f178f37ef83339b7ec93e8d0bed6b0730871cdb39c663527ddeae4a54a825
+net.bytebuddy:byte-buddy:jar:1.15.2 
c754a34c3bf9cc7efbe9c229a2ad185504f017b1c255100a4d3023b38e1e14d5
 net.bytebuddy:byte-buddy:pom:1.12.19 
435fb8664aa9b7e120c8dd6c707d4eafa642fa262dff6d5e3f71dc25c69e89eb
 net.bytebuddy:byte-buddy:pom:1.12.20 
46353d5c52659c40f0f54d05c757665552e492be36087c19307598d1bf07bbfb
 net.bytebuddy:byte-buddy:pom:1.12.21 
95eb42c89fd04f62187dd33b9cdf04d2df1b876b375c16ad32c0a5a1cc1a070b
@@ -828,6 +835,7 @@
 net.bytebuddy:byte-buddy:pom:1.14.9 
2d6772910d16169bd4c9229e8a365cf54e192bc620cbcfa7f84271f5d115e815
 net.bytebuddy:byte-buddy:pom:1.15.0 
ed4d27216401c5cb6e8f16c09fbfd460679b90c43a033d8d0e7b11e45cfb4e58
 net.bytebuddy:byte-buddy:pom:1.15.1 
e358152bf7abff7b763a9670c79e798e14aed9a1b07f83476a909e3eaa222f21
+net.bytebuddy:byte-buddy:pom:1.15.2 
2d72568104ae6c61368aede1864519a2a233ecf0a7aee3c52eed2d046fc4fb2f
 net.i2p.crypto:eddsa:jar:0.3.0 
4dda1120db856640dbec04140ed23242215a075fe127bdefa0dcfa29fb31267d
 net.i2p.crypto:eddsa:pom:0.3.0 
b6b13878e4bae8b768d7ea5732cb4d66ab2f5e9fe707c0a1a776cde9de52051b
 net.java.dev.jna:jna-platform:jar:5.12.1 
8ce969116cac95bd61b07a8d5e07174b352e63301473caac72c395e3c08488d2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/byte-buddy-byte-buddy-1.15.2/byte-buddy/pom.xml 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy/pom.xml
--- old/byte-buddy-byte-buddy-1.15.2/byte-buddy/pom.xml 2024-09-25 
09:39:00.000000000 +0200
+++ new/byte-buddy-byte-buddy-1.15.3/byte-buddy/pom.xml 2024-09-27 
00:13:05.000000000 +0200
@@ -5,7 +5,7 @@
     <parent>
         <groupId>net.bytebuddy</groupId>
         <artifactId>byte-buddy-parent</artifactId>
-        <version>1.15.2</version>
+        <version>1.15.3</version>
     </parent>
 
     <artifactId>byte-buddy</artifactId>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-agent/pom.xml 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-agent/pom.xml
--- old/byte-buddy-byte-buddy-1.15.2/byte-buddy-agent/pom.xml   2024-09-25 
09:39:00.000000000 +0200
+++ new/byte-buddy-byte-buddy-1.15.3/byte-buddy-agent/pom.xml   2024-09-27 
00:13:05.000000000 +0200
@@ -5,7 +5,7 @@
     <parent>
         <groupId>net.bytebuddy</groupId>
         <artifactId>byte-buddy-parent</artifactId>
-        <version>1.15.2</version>
+        <version>1.15.3</version>
     </parent>
 
     <artifactId>byte-buddy-agent</artifactId>
@@ -69,7 +69,7 @@
         <dependency>
             <groupId>net.bytebuddy</groupId>
             <artifactId>byte-buddy</artifactId>
-            <version>1.15.1</version>
+            <version>1.15.2</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-android/pom.xml 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-android/pom.xml
--- old/byte-buddy-byte-buddy-1.15.2/byte-buddy-android/pom.xml 2024-09-25 
09:39:00.000000000 +0200
+++ new/byte-buddy-byte-buddy-1.15.3/byte-buddy-android/pom.xml 2024-09-27 
00:13:05.000000000 +0200
@@ -5,7 +5,7 @@
     <parent>
         <groupId>net.bytebuddy</groupId>
         <artifactId>byte-buddy-parent</artifactId>
-        <version>1.15.2</version>
+        <version>1.15.3</version>
     </parent>
 
     <artifactId>byte-buddy-android</artifactId>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-android-test/pom.xml 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-android-test/pom.xml
--- old/byte-buddy-byte-buddy-1.15.2/byte-buddy-android-test/pom.xml    
2024-09-25 09:39:00.000000000 +0200
+++ new/byte-buddy-byte-buddy-1.15.3/byte-buddy-android-test/pom.xml    
2024-09-27 00:13:05.000000000 +0200
@@ -5,7 +5,7 @@
     <parent>
         <groupId>net.bytebuddy</groupId>
         <artifactId>byte-buddy-parent</artifactId>
-        <version>1.15.2</version>
+        <version>1.15.3</version>
     </parent>
 
     <artifactId>byte-buddy-android-test</artifactId>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-benchmark/pom.xml 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-benchmark/pom.xml
--- old/byte-buddy-byte-buddy-1.15.2/byte-buddy-benchmark/pom.xml       
2024-09-25 09:39:00.000000000 +0200
+++ new/byte-buddy-byte-buddy-1.15.3/byte-buddy-benchmark/pom.xml       
2024-09-27 00:13:05.000000000 +0200
@@ -5,7 +5,7 @@
     <parent>
         <groupId>net.bytebuddy</groupId>
         <artifactId>byte-buddy-parent</artifactId>
-        <version>1.15.2</version>
+        <version>1.15.3</version>
     </parent>
 
     <artifactId>byte-buddy-benchmark</artifactId>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/pom.xml 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/pom.xml
--- old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/pom.xml     2024-09-25 
09:39:00.000000000 +0200
+++ new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/pom.xml     2024-09-27 
00:13:05.000000000 +0200
@@ -5,7 +5,7 @@
     <parent>
         <groupId>net.bytebuddy</groupId>
         <artifactId>byte-buddy-parent</artifactId>
-        <version>1.15.2</version>
+        <version>1.15.3</version>
     </parent>
 
     <!--
@@ -127,7 +127,7 @@
             <plugin>
                 <groupId>net.bytebuddy</groupId>
                 <artifactId>byte-buddy-maven-plugin</artifactId>
-                <version>1.15.1</version>
+                <version>1.15.2</version>
                 <executions>
                     <execution>
                         <phase>compile</phase>
@@ -142,7 +142,7 @@
                                 <transformation>
                                     <groupId>net.bytebuddy</groupId>
                                     <artifactId>byte-buddy</artifactId>
-                                    <version>1.15.1</version>
+                                    <version>1.15.2</version>
                                     
<plugin>net.bytebuddy.build.HashCodeAndEqualsPlugin$WithNonNullableFields</plugin>
                                     <arguments>
                                         <argument>
@@ -154,13 +154,13 @@
                                 <transformation>
                                     <groupId>net.bytebuddy</groupId>
                                     <artifactId>byte-buddy</artifactId>
-                                    <version>1.15.1</version>
+                                    <version>1.15.2</version>
                                     
<plugin>net.bytebuddy.build.CachedReturnPlugin</plugin>
                                 </transformation>
                                 <transformation>
                                     <groupId>net.bytebuddy</groupId>
                                     <artifactId>byte-buddy</artifactId>
-                                    <version>1.15.1</version>
+                                    <version>1.15.2</version>
                                     
<plugin>net.bytebuddy.build.AccessControllerPlugin</plugin>
                                     <arguments>
                                         <argument>
@@ -172,13 +172,13 @@
                                 <transformation>
                                     <groupId>net.bytebuddy</groupId>
                                     <artifactId>byte-buddy</artifactId>
-                                    <version>1.15.1</version>
+                                    <version>1.15.2</version>
                                     
<plugin>net.bytebuddy.build.DispatcherAnnotationPlugin</plugin>
                                 </transformation>
                                 <transformation>
                                     <groupId>net.bytebuddy</groupId>
                                     <artifactId>byte-buddy</artifactId>
-                                    <version>1.15.1</version>
+                                    <version>1.15.2</version>
                                     
<plugin>net.bytebuddy.build.RepeatedAnnotationPlugin</plugin>
                                 </transformation>
                             </transformations>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/main/java/net/bytebuddy/ClassFileVersion.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/main/java/net/bytebuddy/ClassFileVersion.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/main/java/net/bytebuddy/ClassFileVersion.java
   2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/main/java/net/bytebuddy/ClassFileVersion.java
   2024-09-27 00:13:05.000000000 +0200
@@ -20,7 +20,6 @@
 import net.bytebuddy.build.HashCodeAndEqualsPlugin;
 import net.bytebuddy.description.type.TypeDescription;
 import net.bytebuddy.dynamic.ClassFileLocator;
-import net.bytebuddy.utility.OpenedClassReader;
 import net.bytebuddy.utility.nullability.MaybeNull;
 import org.objectweb.asm.Opcodes;
 
@@ -161,6 +160,33 @@
     public static final ClassFileVersion JAVA_V23 = new 
ClassFileVersion(Opcodes.V23);
 
     /**
+     * An array of class file versions in their sorting order.
+     */
+    private static final ClassFileVersion[] CLASS_FILE_VERSIONS = new 
ClassFileVersion[] {ClassFileVersion.JAVA_V1,
+            ClassFileVersion.JAVA_V2,
+            ClassFileVersion.JAVA_V3,
+            ClassFileVersion.JAVA_V4,
+            ClassFileVersion.JAVA_V5,
+            ClassFileVersion.JAVA_V6,
+            ClassFileVersion.JAVA_V7,
+            ClassFileVersion.JAVA_V8,
+            ClassFileVersion.JAVA_V9,
+            ClassFileVersion.JAVA_V10,
+            ClassFileVersion.JAVA_V11,
+            ClassFileVersion.JAVA_V12,
+            ClassFileVersion.JAVA_V13,
+            ClassFileVersion.JAVA_V14,
+            ClassFileVersion.JAVA_V15,
+            ClassFileVersion.JAVA_V16,
+            ClassFileVersion.JAVA_V17,
+            ClassFileVersion.JAVA_V18,
+            ClassFileVersion.JAVA_V19,
+            ClassFileVersion.JAVA_V20,
+            ClassFileVersion.JAVA_V21,
+            ClassFileVersion.JAVA_V22,
+            ClassFileVersion.JAVA_V23};
+
+    /**
      * A version locator for the executing JVM.
      */
     private static final VersionLocator VERSION_LOCATOR = 
doPrivileged(VersionLocator.Resolver.INSTANCE);
@@ -212,76 +238,20 @@
      * @return The appropriate class file version.
      */
     public static ClassFileVersion ofJavaVersionString(String 
javaVersionString) {
-        return ofJavaVersionString(javaVersionString, 
OpenedClassReader.EXPERIMENTAL);
-    }
-
-    /**
-     * Returns the Java class file by its representation by a version string 
in accordance to the formats known to <i>javac</i>.
-     *
-     * @param javaVersionString The Java version string.
-     * @param experimental      {@code true} if unknown version strings should 
be parsed as if they were known.
-     * @return The appropriate class file version.
-     */
-    public static ClassFileVersion ofJavaVersionString(String 
javaVersionString, boolean experimental) {
-        if (javaVersionString.equals("1.1")) {
-            return JAVA_V1;
-        } else if (javaVersionString.equals("1.2")) {
-            return JAVA_V2;
-        } else if (javaVersionString.equals("1.3")) {
-            return JAVA_V3;
-        } else if (javaVersionString.equals("1.4")) {
-            return JAVA_V4;
-        } else if (javaVersionString.equals("1.5") || 
javaVersionString.equals("5")) {
-            return JAVA_V5;
-        } else if (javaVersionString.equals("1.6") || 
javaVersionString.equals("6")) {
-            return JAVA_V6;
-        } else if (javaVersionString.equals("1.7") || 
javaVersionString.equals("7")) {
-            return JAVA_V7;
-        } else if (javaVersionString.equals("1.8") || 
javaVersionString.equals("8")) {
-            return JAVA_V8;
-        } else if (javaVersionString.equals("1.9") || 
javaVersionString.equals("9")) {
-            return JAVA_V9;
-        } else if (javaVersionString.equals("1.10") || 
javaVersionString.equals("10")) {
-            return JAVA_V10;
-        } else if (javaVersionString.equals("1.11") || 
javaVersionString.equals("11")) {
-            return JAVA_V11;
-        } else if (javaVersionString.equals("1.12") || 
javaVersionString.equals("12")) {
-            return JAVA_V12;
-        } else if (javaVersionString.equals("1.13") || 
javaVersionString.equals("13")) {
-            return JAVA_V13;
-        } else if (javaVersionString.equals("1.14") || 
javaVersionString.equals("14")) {
-            return JAVA_V14;
-        } else if (javaVersionString.equals("1.15") || 
javaVersionString.equals("15")) {
-            return JAVA_V15;
-        } else if (javaVersionString.equals("1.16") || 
javaVersionString.equals("16")) {
-            return JAVA_V16;
-        } else if (javaVersionString.equals("1.17") || 
javaVersionString.equals("17")) {
-            return JAVA_V17;
-        } else if (javaVersionString.equals("1.18") || 
javaVersionString.equals("18")) {
-            return JAVA_V18;
-        } else if (javaVersionString.equals("1.19") || 
javaVersionString.equals("19")) {
-            return JAVA_V19;
-        } else if (javaVersionString.equals("1.20") || 
javaVersionString.equals("20")) {
-            return JAVA_V20;
-        } else if (javaVersionString.equals("1.21") || 
javaVersionString.equals("21")) {
-            return JAVA_V21;
-        } else if (javaVersionString.equals("1.22") || 
javaVersionString.equals("22")) {
-            return JAVA_V22;
-        } else if (javaVersionString.equals("1.23") || 
javaVersionString.equals("23")) {
-            return JAVA_V23;
-        } else {
-            if (experimental) {
-                try {
-                    int version = 
Integer.parseInt(javaVersionString.startsWith("1.")
-                            ? javaVersionString.substring(2)
-                            : javaVersionString);
-                    if (version > 0) {
-                        return new ClassFileVersion(BASE_VERSION + version);
-                    }
-                } catch (NumberFormatException ignored) {
+        int index = javaVersionString.indexOf('.');
+        try {
+            int javaVersion;
+            if (index == -1) {
+                javaVersion = Integer.parseInt(javaVersionString);
+            } else {
+                javaVersion = 
Integer.parseInt(javaVersionString.substring(index + 1));
+                if (Integer.parseInt(javaVersionString.substring(0, index)) != 
1 || javaVersion > 8) {
+                    throw new IllegalArgumentException("Java versions with 
minor version must be of format 1.[1-7]: " + javaVersionString);
                 }
             }
-            throw new IllegalArgumentException("Unknown Java version string: " 
+ javaVersionString);
+            return ofJavaVersion(javaVersion);
+        } catch (NumberFormatException exception) {
+            throw new IllegalStateException("Failed to read Java version from: 
" + javaVersionString, exception);
         }
     }
 
@@ -293,71 +263,12 @@
      * @return A wrapper for the given Java class file version.
      */
     public static ClassFileVersion ofJavaVersion(int javaVersion) {
-        return ofJavaVersion(javaVersion, OpenedClassReader.EXPERIMENTAL);
-    }
-
-    /**
-     * Creates a class file version for a given major release of Java. 
Currently, all versions reaching from
-     * Java 1 to Java 9 are supported.
-     *
-     * @param javaVersion  The Java version.
-     * @param experimental {@code true} if unknown Java versions should also 
be considered.
-     * @return A wrapper for the given Java class file version.
-     */
-    public static ClassFileVersion ofJavaVersion(int javaVersion, boolean 
experimental) {
-        switch (javaVersion) {
-            case 1:
-                return JAVA_V1;
-            case 2:
-                return JAVA_V2;
-            case 3:
-                return JAVA_V3;
-            case 4:
-                return JAVA_V4;
-            case 5:
-                return JAVA_V5;
-            case 6:
-                return JAVA_V6;
-            case 7:
-                return JAVA_V7;
-            case 8:
-                return JAVA_V8;
-            case 9:
-                return JAVA_V9;
-            case 10:
-                return JAVA_V10;
-            case 11:
-                return JAVA_V11;
-            case 12:
-                return JAVA_V12;
-            case 13:
-                return JAVA_V13;
-            case 14:
-                return JAVA_V14;
-            case 15:
-                return JAVA_V15;
-            case 16:
-                return JAVA_V16;
-            case 17:
-                return JAVA_V17;
-            case 18:
-                return JAVA_V18;
-            case 19:
-                return JAVA_V19;
-            case 20:
-                return JAVA_V20;
-            case 21:
-                return JAVA_V21;
-            case 22:
-                return JAVA_V22;
-            case 23:
-                return JAVA_V23;
-            default:
-                if (experimental && javaVersion > 0) {
-                    return new ClassFileVersion(BASE_VERSION + javaVersion);
-                } else {
-                    throw new IllegalArgumentException("Unknown Java version: 
" + javaVersion);
-                }
+        if (javaVersion < 1) {
+            throw new IllegalArgumentException("Java version must be positive: 
" + javaVersion);
+        } else if (javaVersion - 1 < CLASS_FILE_VERSIONS.length) {
+            return CLASS_FILE_VERSIONS[javaVersion - 1];
+        } else {
+            return new ClassFileVersion(BASE_VERSION + javaVersion);
         }
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/main/java/net/bytebuddy/build/Plugin.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/main/java/net/bytebuddy/build/Plugin.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/main/java/net/bytebuddy/build/Plugin.java
       2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/main/java/net/bytebuddy/build/Plugin.java
       2024-09-27 00:13:05.000000000 +0200
@@ -28,6 +28,7 @@
 import net.bytebuddy.pool.TypePool;
 import net.bytebuddy.utility.CompoundList;
 import net.bytebuddy.utility.FileSystem;
+import net.bytebuddy.utility.StreamDrainer;
 import net.bytebuddy.utility.nullability.AlwaysNull;
 import net.bytebuddy.utility.nullability.MaybeNull;
 
@@ -808,10 +809,11 @@
         /**
          * Uses the supplied {@link ClassFileVersion} as a base for resolving 
multi-release jars, or {@code null}
          * if multi-release jars should not be resolved but be treated as 
regular jar files. This property might
-         * not be applied if the underlying location mechanism does not supply 
manual resource resolution.
+         * not be applied if the underlying location mechanism does not supply 
manual resource resolution. Note that
+         * classes that are of newer class file versions than the specified 
version are not resolved and simply copied.
          *
-         * @param classFileVersion The class file version to use or {@code 
null}.
-         * @return A new plugin engine that is equal to this engine but with 
the supplied class file verion being used.
+         * @param classFileVersion The class file version to use or {@code 
null} if multi-release jars should be ignored.
+         * @return A new plugin engine that is equal to this engine but with 
the supplied class file version being used.
          */
         Engine with(@MaybeNull ClassFileVersion classFileVersion);
 
@@ -2420,15 +2422,15 @@
                     /**
                      * {@inheritDoc}
                      */
-                    public void close() throws IOException {
-                        delegate.close();
+                    public Iterator<Element> iterator() {
+                        return new FilteringIterator(delegate.iterator(), 
matcher);
                     }
 
                     /**
                      * {@inheritDoc}
                      */
-                    public Iterator<Element> iterator() {
-                        return new FilteringIterator(delegate.iterator(), 
matcher);
+                    public void close() throws IOException {
+                        delegate.close();
                     }
 
                     /**
@@ -2959,7 +2961,7 @@
                 /**
                  * Represents a collection of types as an in-memory source.
                  *
-                 * @param types The types to represent.
+                 * @param types          The types to represent.
                  * @param versionedTypes A versioned mapping of types to 
represent.
                  * @return A source representing the supplied types.
                  */
@@ -3006,7 +3008,11 @@
                     }
                     for (Map.Entry<ClassFileVersion, Map<TypeDescription, 
byte[]>> versioned : versionedBinaryRepresentations.entrySet()) {
                         for (Map.Entry<TypeDescription, byte[]> entry : 
versioned.getValue().entrySet()) {
-                            storage.put(ClassFileLocator.META_INF_VERSIONS + 
versioned.getKey().getJavaVersion() + "/" + entry.getKey().getInternalName() + 
ClassFileLocator.CLASS_FILE_EXTENSION, entry.getValue());
+                            storage.put(ClassFileLocator.META_INF_VERSIONS
+                                    + versioned.getKey().getJavaVersion()
+                                    + "/"
+                                    + entry.getKey().getInternalName()
+                                    + ClassFileLocator.CLASS_FILE_EXTENSION, 
entry.getValue());
                         }
                     }
                     return new InMemory(storage);
@@ -3300,11 +3306,68 @@
                 }
 
                 /**
+                 * Wraps a source to exclude elements that are above the 
specified Java version.
+                 *
+                 * @param delegate         The delegate source.
+                 * @param classFileVersion The latest multi-release Java 
version to retain from the source.
+                 * @return A source that applies an appropriate filter.
+                 */
+                public static Source dropMultiReleaseClassFilesAbove(Source 
delegate, ClassFileVersion classFileVersion) {
+                    return new Filtering(delegate, new 
MultiReleaseVersionMatcher(classFileVersion), true);
+                }
+
+                /**
                  * {@inheritDoc}
                  */
                 public Origin read() throws IOException {
                     return new Origin.Filtering(delegate.read(), matcher, 
manifest);
                 }
+
+                /**
+                 * An element matcher that filters multi-release files above a 
given version.
+                 */
+                @HashCodeAndEqualsPlugin.Enhance
+                protected static class MultiReleaseVersionMatcher implements 
ElementMatcher<Element> {
+
+                    /**
+                     * The latest version to consider.
+                     */
+                    private final ClassFileVersion classFileVersion;
+
+                    /**
+                     * Creates a multi-release version matcher.
+                     *
+                     * @param classFileVersion The latest class file version 
to consider.
+                     */
+                    protected MultiReleaseVersionMatcher(ClassFileVersion 
classFileVersion) {
+                        this.classFileVersion = classFileVersion;
+                    }
+
+                    /**
+                     * {@inheritDoc}
+                     */
+                    public boolean matches(@MaybeNull Element target) {
+                        if (target == null) {
+                            return true;
+                        }
+                        String name = target.getName();
+                        if (name.startsWith("/")) {
+                            name = name.substring(1);
+                        }
+                        if 
(name.startsWith(ClassFileLocator.META_INF_VERSIONS)) {
+                            int version;
+                            try {
+                                version = Integer.parseInt(name.substring(
+                                        
ClassFileLocator.META_INF_VERSIONS.length(),
+                                        name.indexOf('/', 
ClassFileLocator.META_INF_VERSIONS.length())));
+                            } catch (NumberFormatException ignored) {
+                                return true;
+                            }
+                            return version <= 
classFileVersion.getJavaVersion();
+                        }
+                        return true;
+                    }
+                }
             }
         }
 
@@ -3338,11 +3401,12 @@
                 /**
                  * Stores the supplied binary representation of types in this 
sink.
                  *
-                 * @param version               The version of the 
multi-release jar file.
+                 * @param classFileVersion      The version of the 
multi-release jar file, which should at least be {@code 8} as previous
+                 *                              versions are not recognized by 
regular class loaders.
                  * @param binaryRepresentations The binary representations to 
store.
                  * @throws IOException If an I/O error occurs.
                  */
-                void store(int version, Map<TypeDescription, byte[]> 
binaryRepresentations) throws IOException;
+                void store(ClassFileVersion classFileVersion, 
Map<TypeDescription, byte[]> binaryRepresentations) throws IOException;
 
                 /**
                  * Retains the supplied element in its original form.
@@ -3385,9 +3449,13 @@
                     /**
                      * {@inheritDoc}
                      */
-                    public void store(int version, Map<TypeDescription, 
byte[]> binaryRepresentations) throws IOException {
+                    public void store(ClassFileVersion classFileVersion, 
Map<TypeDescription, byte[]> binaryRepresentations) throws IOException {
                         for (Map.Entry<TypeDescription, byte[]> entry : 
binaryRepresentations.entrySet()) {
-                            outputStream.putNextEntry(new 
JarEntry(ClassFileLocator.META_INF_VERSIONS + version + "/" + 
entry.getKey().getInternalName() + ClassFileLocator.CLASS_FILE_EXTENSION));
+                            outputStream.putNextEntry(new 
JarEntry(ClassFileLocator.META_INF_VERSIONS
+                                    + classFileVersion.getJavaVersion()
+                                    + "/"
+                                    + entry.getKey().getInternalName()
+                                    + ClassFileLocator.CLASS_FILE_EXTENSION));
                             outputStream.write(entry.getValue());
                             outputStream.closeEntry();
                         }
@@ -3450,7 +3518,7 @@
                 /**
                  * {@inheritDoc}
                  */
-                public void store(int version, Map<TypeDescription, byte[]> 
binaryRepresentations) throws IOException {
+                public void store(ClassFileVersion classFileVersion, 
Map<TypeDescription, byte[]> binaryRepresentations) throws IOException {
                     /* do nothing */
                 }
 
@@ -3523,9 +3591,13 @@
                 /**
                  * {@inheritDoc}
                  */
-                public void store(int version, Map<TypeDescription, byte[]> 
binaryRepresentations) throws IOException {
+                public void store(ClassFileVersion classFileVersion, 
Map<TypeDescription, byte[]> binaryRepresentations) throws IOException {
                     for (Map.Entry<TypeDescription, byte[]> entry : 
binaryRepresentations.entrySet()) {
-                        storage.put(ClassFileLocator.META_INF_VERSIONS + 
version + "/" + entry.getKey().getInternalName() + 
ClassFileLocator.CLASS_FILE_EXTENSION, entry.getValue());
+                        storage.put(ClassFileLocator.META_INF_VERSIONS
+                                + classFileVersion.getJavaVersion()
+                                + "/"
+                                + entry.getKey().getInternalName()
+                                + ClassFileLocator.CLASS_FILE_EXTENSION, 
entry.getValue());
                     }
                 }
 
@@ -3699,8 +3771,8 @@
                 /**
                  * {@inheritDoc}
                  */
-                public void store(int version, Map<TypeDescription, byte[]> 
binaryRepresentations) throws IOException {
-                    doStore(new File(folder, 
ClassFileLocator.META_INF_VERSIONS + version), binaryRepresentations);
+                public void store(ClassFileVersion classFileVersion, 
Map<TypeDescription, byte[]> binaryRepresentations) throws IOException {
+                    doStore(new File(folder, 
ClassFileLocator.META_INF_VERSIONS + classFileVersion.getJavaVersion()), 
binaryRepresentations);
                 }
 
                 /**
@@ -3815,7 +3887,7 @@
                 void materialize(Target.Sink sink,
                                  List<TypeDescription> transformed,
                                  Map<TypeDescription,
-                                         List<Throwable>> failed,
+                                 List<Throwable>> failed,
                                  List<String> unresolved) throws IOException;
 
                 /**
@@ -3824,9 +3896,10 @@
                 class ForTransformedElement implements Materializable {
 
                     /**
-                     * The multi-release Java version number or {@code 0}.
+                     * The multi-release class file version number or {@code 
null} if a regular class.
                      */
-                    private final int version;
+                    @MaybeNull
+                    private final ClassFileVersion classFileVersion;
 
                     /**
                      * The type that has been transformed.
@@ -3836,11 +3909,11 @@
                     /**
                      * Creates a new materializable for a successfully 
transformed type.
                      *
-                     * @param version     The multi-release Java version 
number or {@code 0}.
-                     * @param dynamicType The type that has been transformed.
+                     * @param classFileVersion The multi-release class file 
version number or {@code null} if a regular class.
+                     * @param dynamicType      The type that has been 
transformed.
                      */
-                    protected ForTransformedElement(int version, DynamicType 
dynamicType) {
-                        this.version = version;
+                    protected ForTransformedElement(@MaybeNull 
ClassFileVersion classFileVersion, DynamicType dynamicType) {
+                        this.classFileVersion = classFileVersion;
                         this.dynamicType = dynamicType;
                     }
 
@@ -3850,12 +3923,12 @@
                     public void materialize(Target.Sink sink,
                                             List<TypeDescription> transformed,
                                             Map<TypeDescription,
-                                                    List<Throwable>> failed,
+                                            List<Throwable>> failed,
                                             List<String> unresolved) throws 
IOException {
-                        if (version == 0) {
+                        if (classFileVersion == null) {
                             sink.store(dynamicType.getAllTypes());
                         } else {
-                            sink.store(version, dynamicType.getAllTypes());
+                            sink.store(classFileVersion, 
dynamicType.getAllTypes());
                         }
                         transformed.add(dynamicType.getTypeDescription());
                     }
@@ -3886,7 +3959,7 @@
                     public void materialize(Target.Sink sink,
                                             List<TypeDescription> transformed,
                                             Map<TypeDescription,
-                                                    List<Throwable>> failed,
+                                            List<Throwable>> failed,
                                             List<String> unresolved) throws 
IOException {
                         sink.retain(element);
                     }
@@ -3931,7 +4004,7 @@
                     public void materialize(Target.Sink sink,
                                             List<TypeDescription> transformed,
                                             Map<TypeDescription,
-                                                    List<Throwable>> failed,
+                                            List<Throwable>> failed,
                                             List<String> unresolved) throws 
IOException {
                         sink.retain(element);
                         failed.put(typeDescription, errored);
@@ -3970,7 +4043,7 @@
                     public void materialize(Target.Sink sink,
                                             List<TypeDescription> transformed,
                                             Map<TypeDescription,
-                                                    List<Throwable>> failed,
+                                            List<Throwable>> failed,
                                             List<String> unresolved) throws 
IOException {
                         sink.retain(element);
                         unresolved.add(typeName);
@@ -4884,20 +4957,33 @@
                                     while (name.startsWith("/")) {
                                         name = name.substring(1);
                                     }
-                                    if 
(name.endsWith(ClassFileLocator.CLASS_FILE_EXTENSION) && 
!name.endsWith(PACKAGE_INFO) && !name.equals(MODULE_INFO)) {
+                                    if 
(name.endsWith(ClassFileLocator.CLASS_FILE_EXTENSION)
+                                            && (!name.startsWith("META-INF") 
|| name.startsWith(ClassFileLocator.META_INF_VERSIONS))
+                                            && !name.endsWith(PACKAGE_INFO)
+                                            && !name.endsWith(MODULE_INFO)) {
                                         try {
-                                            dispatcher.accept(new 
Preprocessor(element,
-                                                    
name.substring(name.startsWith(ClassFileLocator.META_INF_VERSIONS)
-                                                            ? 
name.indexOf('/', ClassFileLocator.META_INF_VERSIONS.length()) + 1
-                                                            : 0, name.length() 
- ClassFileLocator.CLASS_FILE_EXTENSION.length()).replace('/', '.'),
-                                                    
name.startsWith(ClassFileLocator.META_INF_VERSIONS)
-                                                            ? 
Integer.parseInt(name.substring(ClassFileLocator.META_INF_VERSIONS.length(), 
name.indexOf('/', ClassFileLocator.META_INF_VERSIONS.length())))
-                                                            : 0,
-                                                    classFileLocator,
-                                                    typePool,
-                                                    listener,
-                                                    plugins,
-                                                    preprocessors), 
preprocessors.isEmpty());
+                                            ClassFileVersion classFileVersion 
= name.startsWith(ClassFileLocator.META_INF_VERSIONS)
+                                                    ? 
ClassFileVersion.ofJavaVersion(Integer.parseInt(name.substring(ClassFileLocator.META_INF_VERSIONS.length(),
 name.indexOf('/', ClassFileLocator.META_INF_VERSIONS.length()))))
+                                                    : null;
+                                            if (classFileVersion == null || 
classFileVersion.isAtLeast(ClassFileVersion.JAVA_V8)
+                                                    && this.classFileVersion 
!= null
+                                                    && 
this.classFileVersion.isAtLeast(ClassFileVersion.JAVA_V9)
+                                                    && 
classFileVersion.isAtMost(this.classFileVersion)) {
+                                                String typeName = 
name.substring(name.startsWith(ClassFileLocator.META_INF_VERSIONS)
+                                                        ? name.indexOf('/', 
ClassFileLocator.META_INF_VERSIONS.length()) + 1
+                                                        : 0, name.length() - 
ClassFileLocator.CLASS_FILE_EXTENSION.length()).replace('/', '.');
+                                                dispatcher.accept(new 
Preprocessor(element,
+                                                        typeName,
+                                                        new 
SourceEntryPrependingClassFileLocator(typeName, element, classFileLocator),
+                                                        classFileVersion,
+                                                        typePool,
+                                                        listener,
+                                                        plugins,
+                                                        preprocessors), 
preprocessors.isEmpty());
+                                            } else {
+                                                listener.onResource(name);
+                                                sink.retain(element);
+                                            }
                                         } catch (NumberFormatException 
ignored) {
                                             listener.onResource(name);
                                             sink.retain(element);
@@ -4947,6 +5033,65 @@
             }
 
             /**
+             * A class file locator that shadows a given {@link 
Source.Element}'s type with the explicit element.
+             * This avoids that caching yields the wrong class file in case of 
multi-release jars.
+             */
+            @HashCodeAndEqualsPlugin.Enhance
+            protected static class SourceEntryPrependingClassFileLocator 
implements ClassFileLocator {
+
+                /**
+                 * The name of the represented type.
+                 */
+                private final String name;
+
+                /**
+                 * The corresponding source element.
+                 */
+                private final Source.Element element;
+
+                /**
+                 * The actual class file locator to query for all other types.
+                 */
+                private final ClassFileLocator delegate;
+
+                /**
+                 * Creates a class file locator that prepends a {@link 
Source.Element}.
+                 *
+                 * @param name     The name of the represented type.
+                 * @param element  The corresponding source element.
+                 * @param delegate The actual class file locator to query for 
all other types.
+                 */
+                protected SourceEntryPrependingClassFileLocator(String name, 
Source.Element element, ClassFileLocator delegate) {
+                    this.name = name;
+                    this.element = element;
+                    this.delegate = delegate;
+                }
+
+                /**
+                 * {@inheritDoc}
+                 */
+                public Resolution locate(String name) throws IOException {
+                    if (name.endsWith(this.name)) {
+                        InputStream inputStream = element.getInputStream();
+                        try {
+                            return new 
Resolution.Explicit(StreamDrainer.DEFAULT.drain(inputStream));
+                        } finally {
+                            inputStream.close();
+                        }
+                    } else {
+                        return delegate.locate(name);
+                    }
+                }
+
+                /**
+                 * {@inheritDoc}
+                 */
+                public void close() throws IOException {
+                    delegate.close();
+                }
+            }
+
+            /**
              * A preprocessor for a parallel plugin engine.
              */
             private class Preprocessor implements Callable<Callable<? extends 
Dispatcher.Materializable>> {
@@ -4962,14 +5107,16 @@
                 private final String typeName;
 
                 /**
-                 * The multi-release Java version number or {@code 0}.
+                 * The class file locator to use.
                  */
-                private final int version;
+                private final ClassFileLocator classFileLocator;
 
                 /**
-                 * The class file locator to use.
+                 * The multi-release class file version or {@code null} for a 
regular class.
                  */
-                private final ClassFileLocator classFileLocator;
+                @MaybeNull
+                
@HashCodeAndEqualsPlugin.ValueHandling(HashCodeAndEqualsPlugin.ValueHandling.Sort.REVERSE_NULLABILITY)
+                private final ClassFileVersion classFileVersion;
 
                 /**
                  * The type pool to use.
@@ -4996,8 +5143,8 @@
                  *
                  * @param element          The processed element.
                  * @param typeName         The name of the processed type.
-                 * @param version          The multi-release Java version 
number or {@code 0}.
                  * @param classFileLocator The class file locator to use.
+                 * @param classFileVersion The multi-release class file 
version or {@code null} for a regular class.
                  * @param typePool         The type pool to use.
                  * @param listener         The listener to notify.
                  * @param plugins          The plugins to apply.
@@ -5005,16 +5152,16 @@
                  */
                 private Preprocessor(Source.Element element,
                                      String typeName,
-                                     int version,
                                      ClassFileLocator classFileLocator,
+                                     @MaybeNull ClassFileVersion 
classFileVersion,
                                      TypePool typePool,
                                      Listener listener,
                                      List<Plugin> plugins,
                                      List<WithPreprocessor> preprocessors) {
                     this.element = element;
                     this.typeName = typeName;
-                    this.version = version;
                     this.classFileLocator = classFileLocator;
+                    this.classFileVersion = classFileVersion;
                     this.typePool = typePool;
                     this.listener = listener;
                     this.plugins = plugins;
@@ -5034,7 +5181,7 @@
                                 for (WithPreprocessor preprocessor : 
preprocessors) {
                                     preprocessor.onPreprocess(typeDescription, 
classFileLocator);
                                 }
-                                return new Resolved(version, typeDescription);
+                                return new Resolved(classFileVersion, 
typeDescription);
                             } else {
                                 return new Ignored(typeDescription);
                             }
@@ -5059,9 +5206,10 @@
                 private class Resolved implements 
Callable<Dispatcher.Materializable> {
 
                     /**
-                     * The multi-release Java version number or {@code 0}.
+                     * The multi-release Java version number or {@code null} 
if a regular class.
                      */
-                    private final int version;
+                    @MaybeNull
+                    private final ClassFileVersion classFileVersion;
 
                     /**
                      * A description of the resolved type.
@@ -5071,11 +5219,11 @@
                     /**
                      * Creates a new resolved materializable.
                      *
-                     * @param version         The multi-release Java version 
number or {@code 0}.
-                     * @param typeDescription A description of the resolved 
type.
+                     * @param classFileVersion The multi-release Java version 
number or {@code null} if a regular class.
+                     * @param typeDescription  A description of the resolved 
type.
                      */
-                    private Resolved(int version, TypeDescription 
typeDescription) {
-                        this.version = version;
+                    private Resolved(@MaybeNull ClassFileVersion 
classFileVersion, TypeDescription typeDescription) {
+                        this.classFileVersion = classFileVersion;
                         this.typeDescription = typeDescription;
                     }
 
@@ -5114,7 +5262,7 @@
                                             
listener.onLiveInitializer(typeDescription, entry.getKey());
                                         }
                                     }
-                                    return new 
Dispatcher.Materializable.ForTransformedElement(version, dynamicType);
+                                    return new 
Dispatcher.Materializable.ForTransformedElement(classFileVersion, dynamicType);
                                 } catch (Throwable throwable) {
                                     errored.add(throwable);
                                     listener.onError(typeDescription, errored);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/test/java/net/bytebuddy/ClassFileVersionOtherTest.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/test/java/net/bytebuddy/ClassFileVersionOtherTest.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/test/java/net/bytebuddy/ClassFileVersionOtherTest.java
  2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/test/java/net/bytebuddy/ClassFileVersionOtherTest.java
  2024-09-27 00:13:05.000000000 +0200
@@ -89,6 +89,16 @@
     }
 
     @Test(expected = IllegalArgumentException.class)
+    public void testNegativeVersion() throws Exception {
+        ClassFileVersion.ofJavaVersion(0);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testOneDotTooNew() throws Exception {
+        ClassFileVersion.ofJavaVersionString("1.9");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
     public void testIllegalClassFile() throws Exception {
         ClassFileVersion.ofClassFile(new byte[0]);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/test/java/net/bytebuddy/ClassFileVersionTest.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/test/java/net/bytebuddy/ClassFileVersionTest.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/test/java/net/bytebuddy/ClassFileVersionTest.java
       2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/test/java/net/bytebuddy/ClassFileVersionTest.java
       2024-09-27 00:13:05.000000000 +0200
@@ -66,21 +66,21 @@
                 {6, 6, Arrays.asList("1.6", "6"), Opcodes.V1_6, (short) 50, 
(short) 0, true, false, false},
                 {7, 7, Arrays.asList("1.7", "7"), Opcodes.V1_7, (short) 51, 
(short) 0, true, true, false},
                 {8, 8, Arrays.asList("1.8", "8"), Opcodes.V1_8, (short) 52, 
(short) 0, true, true, true},
-                {9, 9, Arrays.asList("1.9", "9"), Opcodes.V9, (short) 53, 
(short) 0, true, true, true},
-                {10, 10, Arrays.asList("1.10", "10"), Opcodes.V10, (short) 54, 
(short) 0, true, true, true},
-                {11, 11, Arrays.asList("1.11", "11"), Opcodes.V11, (short) 55, 
(short) 0, true, true, true},
-                {12, 12, Arrays.asList("1.12", "12"), Opcodes.V12, (short) 56, 
(short) 0, true, true, true},
-                {13, 13, Arrays.asList("1.13", "13"), Opcodes.V13, (short) 57, 
(short) 0, true, true, true},
-                {14, 14, Arrays.asList("1.14", "14"), Opcodes.V14, (short) 58, 
(short) 0, true, true, true},
-                {15, 15, Arrays.asList("1.15", "15"), Opcodes.V15, (short) 59, 
(short) 0, true, true, true},
-                {16, 16, Arrays.asList("1.16", "16"), Opcodes.V16, (short) 60, 
(short) 0, true, true, true},
-                {17, 17, Arrays.asList("1.17", "17"), Opcodes.V17, (short) 61, 
(short) 0, true, true, true},
-                {18, 18, Arrays.asList("1.18", "18"), Opcodes.V18, (short) 62, 
(short) 0, true, true, true},
-                {19, 19, Arrays.asList("1.19", "19"), Opcodes.V19, (short) 63, 
(short) 0, true, true, true},
-                {20, 20, Arrays.asList("1.20", "20"), Opcodes.V20, (short) 64, 
(short) 0, true, true, true},
-                {21, 21, Arrays.asList("1.21", "21"), Opcodes.V21, (short) 65, 
(short) 0, true, true, true},
-                {22, 22, Arrays.asList("1.22", "22"), Opcodes.V22, (short) 66, 
(short) 0, true, true, true},
-                {23, 23, Arrays.asList("1.23", "23"), Opcodes.V23, (short) 67, 
(short) 0, true, true, true}
+                {9, 9, Collections.singletonList("9"), Opcodes.V9, (short) 53, 
(short) 0, true, true, true},
+                {10, 10, Collections.singletonList("10"), Opcodes.V10, (short) 
54, (short) 0, true, true, true},
+                {11, 11, Collections.singletonList("11"), Opcodes.V11, (short) 
55, (short) 0, true, true, true},
+                {12, 12, Collections.singletonList("12"), Opcodes.V12, (short) 
56, (short) 0, true, true, true},
+                {13, 13, Collections.singletonList("13"), Opcodes.V13, (short) 
57, (short) 0, true, true, true},
+                {14, 14, Collections.singletonList("14"), Opcodes.V14, (short) 
58, (short) 0, true, true, true},
+                {15, 15, Collections.singletonList("15"), Opcodes.V15, (short) 
59, (short) 0, true, true, true},
+                {16, 16, Collections.singletonList("16"), Opcodes.V16, (short) 
60, (short) 0, true, true, true},
+                {17, 17, Collections.singletonList("17"), Opcodes.V17, (short) 
61, (short) 0, true, true, true},
+                {18, 18, Collections.singletonList("18"), Opcodes.V18, (short) 
62, (short) 0, true, true, true},
+                {19, 19, Collections.singletonList("19"), Opcodes.V19, (short) 
63, (short) 0, true, true, true},
+                {20, 20, Collections.singletonList("20"), Opcodes.V20, (short) 
64, (short) 0, true, true, true},
+                {21, 21, Collections.singletonList("21"), Opcodes.V21, (short) 
65, (short) 0, true, true, true},
+                {22, 22, Collections.singletonList("22"), Opcodes.V22, (short) 
66, (short) 0, true, true, true},
+                {23, 23, Collections.singletonList("23"), Opcodes.V23, (short) 
67, (short) 0, true, true, true}
         });
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineSourceFilteringTest.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineSourceFilteringTest.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineSourceFilteringTest.java
      2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineSourceFilteringTest.java
      2024-09-27 00:13:05.000000000 +0200
@@ -1,5 +1,6 @@
 package net.bytebuddy.build;
 
+import net.bytebuddy.ClassFileVersion;
 import net.bytebuddy.dynamic.ClassFileLocator;
 import net.bytebuddy.matcher.ElementMatcher;
 import org.junit.Rule;
@@ -84,4 +85,22 @@
 
         assertThat(new Plugin.Engine.Source.Filtering(source, 
matcher).read().toClassFileLocator(null), is(classFileLocator));
     }
+
+    @Test
+    public void testMultiReleaseFilter() throws Exception {
+        when(source.read()).thenReturn(origin);
+        when(origin.iterator()).thenReturn(Arrays.asList(first, second, 
third).iterator());
+
+        when(first.getName()).thenReturn("foo/Bar.class");
+        when(second.getName()).thenReturn(ClassFileLocator.META_INF_VERSIONS + 
"17/foo/Bar.class");
+        when(third.getName()).thenReturn(ClassFileLocator.META_INF_VERSIONS + 
"11/foo/Bar.class");
+
+        Plugin.Engine.Source.Origin origin = 
Plugin.Engine.Source.Filtering.dropMultiReleaseClassFilesAbove(this.source, 
ClassFileVersion.JAVA_V11).read();
+        Iterator<Plugin.Engine.Source.Element> iterator = origin.iterator();
+        assertThat(iterator.hasNext(), is(true));
+        assertThat(iterator.next(), is(first));
+        assertThat(iterator.hasNext(), is(true));
+        assertThat(iterator.next(), is(third));
+        assertThat(iterator.hasNext(), is(false));
+    }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineTargetInMemoryTest.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineTargetInMemoryTest.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineTargetInMemoryTest.java
       2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineTargetInMemoryTest.java
       2024-09-27 00:13:05.000000000 +0200
@@ -75,8 +75,8 @@
         Plugin.Engine.Target.InMemory target = new 
Plugin.Engine.Target.InMemory();
         Plugin.Engine.Target.Sink sink = 
target.write(Plugin.Engine.Source.Origin.NO_MANIFEST);
         
sink.store(Collections.singletonMap(TypeDescription.ForLoadedType.of(Object.class),
 new byte[]{1, 2, 3}));
-        sink.store(11, 
Collections.singletonMap(TypeDescription.ForLoadedType.of(Object.class), new 
byte[]{4, 5, 6}));
-        sink.store(17, 
Collections.singletonMap(TypeDescription.ForLoadedType.of(Object.class), new 
byte[]{7, 8, 9}));
+        sink.store(ClassFileVersion.JAVA_V11, 
Collections.singletonMap(TypeDescription.ForLoadedType.of(Object.class), new 
byte[]{4, 5, 6}));
+        sink.store(ClassFileVersion.JAVA_V17, 
Collections.singletonMap(TypeDescription.ForLoadedType.of(Object.class), new 
byte[]{7, 8, 9}));
         sink.close();
         assertThat(target.getStorage().size(), is(3));
         
assertThat(target.getStorage().get(TypeDescription.ForLoadedType.of(Object.class).getInternalName()
 + ClassFileLocator.CLASS_FILE_EXTENSION), is(new byte[]{1, 2, 3}));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyAndroidService.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyAndroidService.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyAndroidService.java
      2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyAndroidService.java
      2024-09-27 00:13:05.000000000 +0200
@@ -99,6 +99,10 @@
                 return;
             }
             try {
+                ClassFileVersion classFileVersion = 
ClassFileVersion.ofJavaVersionString(getParameters()
+                        .getJavaTargetCompatibilityVersion()
+                        .get()
+                        .toString());
                 List<ClassFileLocator> classFileLocators = new 
ArrayList<ClassFileLocator>();
                 
classFileLocators.add(ClassFileLocator.ForClassLoader.of(ByteBuddy.class.getClassLoader()));
                 for (File artifact : parameters.getRuntimeClasspath()
@@ -106,13 +110,9 @@
                         .plus(parameters.getByteBuddyClasspath())
                         .getFiles()) {
                     classFileLocators.add(artifact.isFile()
-                            ? ClassFileLocator.ForJarFile.of(artifact)
-                            : new ClassFileLocator.ForFolder(artifact));
+                            ? ClassFileLocator.ForJarFile.of(artifact, 
classFileVersion)
+                            : ClassFileLocator.ForFolder.of(artifact, 
classFileVersion));
                 }
-                ClassFileVersion classFileVersion = 
ClassFileVersion.ofJavaVersionString(getParameters()
-                        .getJavaTargetCompatibilityVersion()
-                        .get()
-                        .toString());
                 ClassFileLocator classFileLocator = new 
ClassFileLocator.Compound(classFileLocators);
                 TypePool typePool = 
Plugin.Engine.PoolStrategy.Default.FAST.typePool(classFileLocator);
                 ClassLoader classLoader = new URLClassLoader(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyLocalClassesEnhancerTask.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyLocalClassesEnhancerTask.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyLocalClassesEnhancerTask.java
    2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyLocalClassesEnhancerTask.java
    2024-09-27 00:13:05.000000000 +0200
@@ -235,6 +235,7 @@
                 Iterable.class,
                 EntryPoint.class,
                 ClassFileVersion.class,
+                ClassFileVersion.class,
                 Plugin.Factory.UsingReflection.ArgumentResolver.class,
                 String.class,
                 int.class,
@@ -253,6 +254,7 @@
                     getDiscoverySet().getFiles(),
                     getEntryPoint().get(),
                     classFileVersion,
+                    classFileVersion,
                     
Plugin.Factory.UsingReflection.ArgumentResolver.ForType.of(AndroidDescriptor.class,
 androidDescriptor),
                     getSuffix().get(),
                     getThreads().get(),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/LegacyByteBuddyLocalClassesEnhancerTask.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/LegacyByteBuddyLocalClassesEnhancerTask.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/LegacyByteBuddyLocalClassesEnhancerTask.java
      2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/LegacyByteBuddyLocalClassesEnhancerTask.java
      2024-09-27 00:13:05.000000000 +0200
@@ -130,8 +130,8 @@
             List<ClassFileLocator> classFileLocators = new 
ArrayList<ClassFileLocator>();
             for (File file : 
getRuntimeClasspath().plus(getAndroidBootClasspath()).plus(getByteBuddyClasspath()).getFiles())
 {
                 classFileLocators.add(file.isFile()
-                        ? ClassFileLocator.ForJarFile.of(file)
-                        : new ClassFileLocator.ForFolder(file));
+                        ? ClassFileLocator.ForJarFile.of(file, 
classFileVersion)
+                        : ClassFileLocator.ForFolder.of(file, 
classFileVersion));
             }
             
classFileLocators.add(ClassFileLocator.ForClassLoader.of(ByteBuddy.class.getClassLoader()));
             ClassFileLocator classFileLocator = new 
ClassFileLocator.Compound(classFileLocators);
@@ -173,6 +173,7 @@
                                     classFileVersion,
                                     
MethodNameTransformer.Suffixing.withRandomSuffix())
                             .with(classFileLocator)
+                            .with(classFileVersion)
                             .apply(new Plugin.Engine.Source.Compound(sources), 
new Plugin.Engine.Target.ForFolder(getOutputDir().get().getAsFile()), 
factories);
                     if (!summary.getFailed().isEmpty()) {
                         throw new IllegalStateException(summary.getFailed() + 
" local type transformations have failed");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/pom.xml 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/pom.xml
--- old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/pom.xml   
2024-09-25 09:39:00.000000000 +0200
+++ new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/pom.xml   
2024-09-27 00:13:05.000000000 +0200
@@ -5,7 +5,7 @@
     <parent>
         <groupId>net.bytebuddy</groupId>
         <artifactId>byte-buddy-parent</artifactId>
-        <version>1.15.2</version>
+        <version>1.15.3</version>
     </parent>
 
     <artifactId>byte-buddy-gradle-plugin</artifactId>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/src/main/java/net/bytebuddy/build/gradle/AbstractByteBuddyTask.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/src/main/java/net/bytebuddy/build/gradle/AbstractByteBuddyTask.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/src/main/java/net/bytebuddy/build/gradle/AbstractByteBuddyTask.java
       2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/src/main/java/net/bytebuddy/build/gradle/AbstractByteBuddyTask.java
       2024-09-27 00:13:05.000000000 +0200
@@ -105,6 +105,13 @@
     private ClassFileVersion classFileVersion;
 
     /**
+     * The class file version to use for resolving multi-release jar files or 
{@code null} if
+     * {@link #classFileVersion} or the implicit version should be used.
+     */
+    @MaybeNull
+    private ClassFileVersion multiReleaseClassFileVersion;
+
+    /**
      * Creates a new abstract Byte Buddy task.
      */
     protected AbstractByteBuddyTask() {
@@ -323,6 +330,28 @@
     }
 
     /**
+     * Returns the class file version to use for resolving multi-release jar 
files or {@code null} if the
+     * explicit or implicit class file version of this task should be used.
+     *
+     * @return The class file version to use for resolving multi-release jar 
files.
+     */
+    @MaybeNull
+    @Input
+    @Optional
+    public ClassFileVersion getMultiReleaseClassFileVersion() {
+        return multiReleaseClassFileVersion;
+    }
+
+    /**
+     * Sets the class file version to use for resolving multi-release jar 
files.
+     *
+     * @param multiReleaseClassFileVersion The class file version to use for 
resolving multi-release jar files.
+     */
+    public void setMultiReleaseClassFileVersion(@MaybeNull ClassFileVersion 
multiReleaseClassFileVersion) {
+        this.multiReleaseClassFileVersion = multiReleaseClassFileVersion;
+    }
+
+    /**
      * Returns the source file or folder.
      *
      * @return The source file or folder.
@@ -379,6 +408,7 @@
                 discoverySet(),
                 getEntryPoint(),
                 classFileVersion,
+                multiReleaseClassFileVersion == null ? classFileVersion : 
multiReleaseClassFileVersion,
                 
Plugin.Factory.UsingReflection.ArgumentResolver.ForType.of(File.class, 
source()),
                 getSuffix(),
                 getThreads(),
@@ -393,24 +423,25 @@
     /**
      * Dispatches a Byte Buddy instrumentation Gradle task.
      *
-     * @param logger                The logger to use.
-     * @param rootLoader            The class loader that is used for 
searching types and applying plugins.
-     * @param transformations       The transformations to apply.
-     * @param discovery             The discovery for plugins to use.
-     * @param rootLocator           The root class file locator.
-     * @param artifacts             The artifacts to include.
-     * @param discoverySet          The source set to discover plugins from or 
{@code null} if no source set is used.
-     * @param entryPoint            The entry point to use.
-     * @param classFileVersion      The class file version to use.
-     * @param rootLocationResolver  An argument resolver for the root location 
of this build.
-     * @param suffix                The suffix to use for rebased methods or 
an empty string for using a random suffix.
-     * @param threads               The number of threads to use while 
instrumenting.
-     * @param extendedParsing       {@code true} if extended parsing should be 
used.
-     * @param failFast              {@code true} if the build should fail fast.
-     * @param failOnLiveInitializer {@code true} if the build should fail upon 
discovering a live initializer.
-     * @param warnOnEmptyTypeSet    {@code true} if a warning should be logged 
if no types are instrumented.
-     * @param source                The source to use for instrumenting.
-     * @param target                The target to use for instrumenting.
+     * @param logger                       The logger to use.
+     * @param rootLoader                   The class loader that is used for 
searching types and applying plugins.
+     * @param transformations              The transformations to apply.
+     * @param discovery                    The discovery for plugins to use.
+     * @param rootLocator                  The root class file locator.
+     * @param artifacts                    The artifacts to include.
+     * @param discoverySet                 The source set to discover plugins 
from or {@code null} if no source set is used.
+     * @param entryPoint                   The entry point to use.
+     * @param classFileVersion             The class file version to use.
+     * @param multiReleaseClassFileVersion The class file version to use for 
resolving multi-release jars.
+     * @param rootLocationResolver         An argument resolver for the root 
location of this build.
+     * @param suffix                       The suffix to use for rebased 
methods or an empty string for using a random suffix.
+     * @param threads                      The number of threads to use while 
instrumenting.
+     * @param extendedParsing              {@code true} if extended parsing 
should be used.
+     * @param failFast                     {@code true} if the build should 
fail fast.
+     * @param failOnLiveInitializer        {@code true} if the build should 
fail upon discovering a live initializer.
+     * @param warnOnEmptyTypeSet           {@code true} if a warning should be 
logged if no types are instrumented.
+     * @param source                       The source to use for instrumenting.
+     * @param target                       The target to use for instrumenting.
      * @throws IOException If an I/O error occurs.
      */
     public static void apply(Logger logger,
@@ -422,6 +453,7 @@
                              @MaybeNull Iterable<File> discoverySet,
                              EntryPoint entryPoint,
                              ClassFileVersion classFileVersion,
+                             ClassFileVersion multiReleaseClassFileVersion,
                              Plugin.Factory.UsingReflection.ArgumentResolver 
rootLocationResolver,
                              String suffix,
                              int threads,
@@ -481,8 +513,8 @@
             classFileLocators.add(rootLocator);
             for (File artifact : artifacts) {
                 classFileLocators.add(artifact.isFile()
-                        ? ClassFileLocator.ForJarFile.of(artifact, 
classFileVersion)
-                        : ClassFileLocator.ForFolder.of(artifact, 
classFileVersion));
+                        ? ClassFileLocator.ForJarFile.of(artifact, 
multiReleaseClassFileVersion)
+                        : ClassFileLocator.ForFolder.of(artifact, 
multiReleaseClassFileVersion));
             }
             ClassFileLocator classFileLocator = new 
ClassFileLocator.Compound(classFileLocators);
             try {
@@ -493,7 +525,7 @@
                                 ? Plugin.Engine.PoolStrategy.Default.EXTENDED
                                 : Plugin.Engine.PoolStrategy.Default.FAST)
                         .with(classFileLocator)
-                        .with(classFileVersion)
+                        .with(multiReleaseClassFileVersion)
                         .with(new TransformationLogger(logger))
                         
.withErrorHandlers(Plugin.Engine.ErrorHandler.Enforcing.ALL_TYPES_RESOLVED, 
failOnLiveInitializer
                                 ? 
Plugin.Engine.ErrorHandler.Enforcing.NO_LIVE_INITIALIZERS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/src/main/java/net/bytebuddy/build/gradle/AbstractByteBuddyTaskExtension.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/src/main/java/net/bytebuddy/build/gradle/AbstractByteBuddyTaskExtension.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-gradle-plugin/src/main/java/net/bytebuddy/build/gradle/AbstractByteBuddyTaskExtension.java
      2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-gradle-plugin/src/main/java/net/bytebuddy/build/gradle/AbstractByteBuddyTaskExtension.java
      2024-09-27 00:13:05.000000000 +0200
@@ -119,6 +119,13 @@
     private ClassFileVersion classFileVersion;
 
     /**
+     * The class file version to use for resolving multi-release jar files or 
{@code null} if
+     * {@link #classFileVersion} or the implicit version should be used.
+     */
+    @MaybeNull
+    private ClassFileVersion multiReleaseClassFileVersion;
+
+    /**
      * Creates a new abstract Byte Buddy task extension.
      *
      * @param project The current Gradle project.
@@ -411,6 +418,26 @@
     }
 
     /**
+     * Returns the class file version to use for resolving multi-release jar 
files or {@code null} if the
+     * explicit or implicit class file version of this task should be used.
+     *
+     * @return The class file version to use for resolving multi-release jar 
files.
+     */
+    @MaybeNull
+    public ClassFileVersion getMultiReleaseClassFileVersion() {
+        return multiReleaseClassFileVersion;
+    }
+
+    /**
+     * Sets the class file version to use for resolving multi-release jar 
files.
+     *
+     * @param multiReleaseClassFileVersion The class file version to use for 
resolving multi-release jar files.
+     */
+    public void setMultiReleaseClassFileVersion(@MaybeNull ClassFileVersion 
multiReleaseClassFileVersion) {
+        this.multiReleaseClassFileVersion = multiReleaseClassFileVersion;
+    }
+
+    /**
      * Resolves default properties and considers the contextual Java version.
      *
      * @param version The Java version to resolve as a fallback if no explicit 
version is set.
@@ -451,6 +478,7 @@
         task.setDiscovery(getDiscovery());
         task.setThreads(getThreads());
         task.setClassFileVersion(getClassFileVersion());
+        
task.setMultiReleaseClassFileVersion(getMultiReleaseClassFileVersion());
         doConfigure(task);
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-maven-plugin/pom.xml 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-maven-plugin/pom.xml
--- old/byte-buddy-byte-buddy-1.15.2/byte-buddy-maven-plugin/pom.xml    
2024-09-25 09:39:00.000000000 +0200
+++ new/byte-buddy-byte-buddy-1.15.3/byte-buddy-maven-plugin/pom.xml    
2024-09-27 00:13:05.000000000 +0200
@@ -5,7 +5,7 @@
     <parent>
         <groupId>net.bytebuddy</groupId>
         <artifactId>byte-buddy-parent</artifactId>
-        <version>1.15.2</version>
+        <version>1.15.3</version>
     </parent>
 
     <artifactId>byte-buddy-maven-plugin</artifactId>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-maven-plugin/src/main/java/net/bytebuddy/build/maven/ByteBuddyMojo.java
 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-maven-plugin/src/main/java/net/bytebuddy/build/maven/ByteBuddyMojo.java
--- 
old/byte-buddy-byte-buddy-1.15.2/byte-buddy-maven-plugin/src/main/java/net/bytebuddy/build/maven/ByteBuddyMojo.java
 2024-09-25 09:39:00.000000000 +0200
+++ 
new/byte-buddy-byte-buddy-1.15.3/byte-buddy-maven-plugin/src/main/java/net/bytebuddy/build/maven/ByteBuddyMojo.java
 2024-09-27 00:13:05.000000000 +0200
@@ -231,6 +231,13 @@
     public int staleMilliseconds;
 
     /**
+     * Defines the version to use for resolving multi-release jar files. If 
not set, the Java compile version is used.
+     */
+    @MaybeNull
+    @Parameter
+    public Integer multiReleaseVersion;
+
+    /**
      * {@inheritDoc}
      */
     @SuppressFBWarnings(value = "DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED", 
justification = "The security manager is not normally used within Maven.")
@@ -398,13 +405,16 @@
                 classFileVersion = 
ClassFileVersion.ofJavaVersionString(javaVersionString);
                 getLog().debug("Java version detected: " + javaVersionString);
             }
+            ClassFileVersion multiReleaseClassFileVersion = 
multiReleaseVersion == null
+                    ? classFileVersion
+                    : ClassFileVersion.ofJavaVersion(multiReleaseVersion);
             List<ClassFileLocator> classFileLocators = new 
ArrayList<ClassFileLocator>(classPath.size());
             
classFileLocators.add(ClassFileLocator.ForClassLoader.ofPlatformLoader());
             for (String element : classPath) {
                 File artifact = new File(element);
                 classFileLocators.add(artifact.isFile()
-                        ? ClassFileLocator.ForJarFile.of(artifact, 
classFileVersion)
-                        : ClassFileLocator.ForFolder.of(artifact, 
classFileVersion));
+                        ? ClassFileLocator.ForJarFile.of(artifact, 
multiReleaseClassFileVersion)
+                        : ClassFileLocator.ForFolder.of(artifact, 
multiReleaseClassFileVersion));
             }
             ClassFileLocator classFileLocator = new 
ClassFileLocator.Compound(classFileLocators);
             Plugin.Engine.Summary summary;
@@ -422,7 +432,7 @@
                     summary = pluginEngine
                             .with(extendedParsing ? 
Plugin.Engine.PoolStrategy.Default.EXTENDED : 
Plugin.Engine.PoolStrategy.Default.FAST)
                             .with(classFileLocator)
-                            .with(classFileVersion)
+                            .with(multiReleaseClassFileVersion)
                             .with(new TransformationLogger(getLog()))
                             
.withErrorHandlers(Plugin.Engine.ErrorHandler.Enforcing.ALL_TYPES_RESOLVED,
                                     failOnLiveInitializer ? 
Plugin.Engine.ErrorHandler.Enforcing.NO_LIVE_INITIALIZERS : 
Plugin.Engine.Listener.NoOp.INSTANCE,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/byte-buddy-byte-buddy-1.15.2/pom.xml 
new/byte-buddy-byte-buddy-1.15.3/pom.xml
--- old/byte-buddy-byte-buddy-1.15.2/pom.xml    2024-09-25 09:39:00.000000000 
+0200
+++ new/byte-buddy-byte-buddy-1.15.3/pom.xml    2024-09-27 00:13:05.000000000 
+0200
@@ -4,7 +4,7 @@
 
     <groupId>net.bytebuddy</groupId>
     <artifactId>byte-buddy-parent</artifactId>
-    <version>1.15.2</version>
+    <version>1.15.3</version>
     <packaging>pom</packaging>
 
     <inceptionYear>2014</inceptionYear>
@@ -61,7 +61,7 @@
         <bytebuddy.integration>false</bytebuddy.integration>
         <bytebuddy.experimental>false</bytebuddy.experimental>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        
<project.build.outputTimestamp>1727249841</project.build.outputTimestamp>
+        
<project.build.outputTimestamp>1727388686</project.build.outputTimestamp>
         <sourcecode.main.version>1.5</sourcecode.main.version>
         <sourcecode.test.version>1.6</sourcecode.test.version>
         <bytecode.main.version>1.5</bytecode.main.version>
@@ -154,7 +154,7 @@
         <connection>scm:git:${repository.url}</connection>
         <developerConnection>scm:git:${repository.url}</developerConnection>
         <url>${repository.url}</url>
-        <tag>byte-buddy-1.15.2</tag>
+        <tag>byte-buddy-1.15.3</tag>
     </scm>
 
     <dependencies>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/byte-buddy-byte-buddy-1.15.2/release-notes.md 
new/byte-buddy-byte-buddy-1.15.3/release-notes.md
--- old/byte-buddy-byte-buddy-1.15.2/release-notes.md   2024-09-25 
09:39:00.000000000 +0200
+++ new/byte-buddy-byte-buddy-1.15.3/release-notes.md   2024-09-27 
00:13:05.000000000 +0200
@@ -1,6 +1,13 @@
 Byte Buddy release notes
 ------------------------
 
+### 25. September 2024: version 1.15.2
+
+- Add support for multi-release JAR files in `ClassFileLocator`s and 
`Plugin.Engine.Default`.
+- Add Gradle task for transforming multiple jar files with `ByteBuddyJarsTask`.
+- Avoid validation of `JarFile` when extracting individual entries.
+- Rework discovery in `ByteBuddyMojo`.
+
 ### 29. August 2024: version 1.15.1
 
 - Revert default `EntryPoint` for Android Gradle plugin to use `DECORATE` 
unless explicitly specified due to many generic type errors in Kotlin classes. 

Reply via email to