From 67e4018dae9d4319c4c8dd7a6b1b7d7198ab0e03 Mon Sep 17 00:00:00 2001 From: Stephan Schroevers Date: Thu, 26 Oct 2023 15:52:57 +0200 Subject: [PATCH] Support JDK 20 and JDK 21 (#177) From JDK 20 onwards the `LAMBDA` feature enum constant is no longer recognized. Falling back to the `RECORDS` enum constant should guarantee support for the next few JDK releases. Upgrading Byte Buddy from 1.12.18 to 1.14.9 introduces Java 21 byte code support. --- example/build.gradle | 2 +- jabel-javac-plugin/build.gradle | 2 +- .../com/github/bsideup/jabel/JabelCompilerPlugin.java | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/example/build.gradle b/example/build.gradle index ad4994c..73d4c1d 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -7,7 +7,7 @@ configure([tasks.compileJava]) { options.release = 8 javaCompiler = javaToolchains.compilerFor { - languageVersion = JavaLanguageVersion.of(19) + languageVersion = JavaLanguageVersion.of(21) } } diff --git a/jabel-javac-plugin/build.gradle b/jabel-javac-plugin/build.gradle index 7e09ee0..77d76ff 100644 --- a/jabel-javac-plugin/build.gradle +++ b/jabel-javac-plugin/build.gradle @@ -6,7 +6,7 @@ plugins { sourceCompatibility = targetCompatibility = 8 dependencies { - implementation platform('net.bytebuddy:byte-buddy-parent:1.12.18') + implementation platform('net.bytebuddy:byte-buddy-parent:1.14.9') implementation 'net.bytebuddy:byte-buddy' implementation 'net.bytebuddy:byte-buddy-agent' implementation 'net.java.dev.jna:jna:5.12.1' diff --git a/jabel-javac-plugin/src/main/java/com/github/bsideup/jabel/JabelCompilerPlugin.java b/jabel-javac-plugin/src/main/java/com/github/bsideup/jabel/JabelCompilerPlugin.java index 4315e1e..b9b123a 100644 --- a/jabel-javac-plugin/src/main/java/com/github/bsideup/jabel/JabelCompilerPlugin.java +++ b/jabel-javac-plugin/src/main/java/com/github/bsideup/jabel/JabelCompilerPlugin.java @@ -173,8 +173,13 @@ static void checkSourceLevel( @Advice.Argument(value = 1, readOnly = false) Source.Feature feature ) { if (feature.allowedInSource(Source.JDK8)) { - //noinspection UnusedAssignment - feature = Source.Feature.LAMBDA; + if (Source.MIN.compareTo(Source.JDK8) < 0) { + //noinspection UnusedAssignment + feature = Source.Feature.LAMBDA; + } else { + //noinspection UnusedAssignment + feature = Source.Feature.RECORDS; + } } } }