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.