Merge ~vpa1977/ubuntu/+source/lombok:java21-patches into ubuntu/+source/lombok:ubuntu/devel

Proposed by Vladimir Petko
Status: Merged
Merged at revision: 9a4e5cc63941a73043831a4bb5dc1f26cf35317e
Proposed branch: ~vpa1977/ubuntu/+source/lombok:java21-patches
Merge into: ubuntu/+source/lombok:ubuntu/devel
Diff against target: 204 lines (+170/-1)
4 files modified
debian/changelog (+7/-0)
debian/control (+2/-1)
debian/patches/java21-support.patch (+160/-0)
debian/patches/series (+1/-0)
Reviewer Review Type Date Requested Status
Zixing Liu (community) Approve
git-ubuntu import Pending
Review via email: mp+461409@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Zixing Liu (liushuyu-011) wrote :

Looks good to me.
The added patch conforms to DEP-3.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/debian/changelog b/debian/changelog
2index 3536689..48c5428 100644
3--- a/debian/changelog
4+++ b/debian/changelog
5@@ -1,3 +1,10 @@
6+lombok (1.18.24-2ubuntu1) noble; urgency=medium
7+
8+ * d/p/java21-support.patch: add upstream patch that fixes Java 21
9+ compatibility issues (LP: #2054736).
10+
11+ -- Vladimir Petko <vladimir.petko@canonical.com> Thu, 22 Feb 2024 12:04:45 +1300
12+
13 lombok (1.18.24-2) unstable; urgency=medium
14
15 * Team upload
16diff --git a/debian/control b/debian/control
17index 53267f3..08d57f8 100644
18--- a/debian/control
19+++ b/debian/control
20@@ -1,7 +1,8 @@
21 Source: lombok
22 Section: java
23 Priority: optional
24-Maintainer: Debian Java Maintainers <pkg-java-maintainers@lists.alioth.debian.org>
25+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
26+XSBC-Original-Maintainer: Debian Java Maintainers <pkg-java-maintainers@lists.alioth.debian.org>
27 Uploaders:
28 Jakub Adam <jakub.adam@ktknet.cz>,
29 Komal Sukhani <komaldsukhani@gmail.com>
30diff --git a/debian/patches/java21-support.patch b/debian/patches/java21-support.patch
31new file mode 100644
32index 0000000..c576d9f
33--- /dev/null
34+++ b/debian/patches/java21-support.patch
35@@ -0,0 +1,160 @@
36+Description: Add support for JDK21
37+ This fixes issue with java.lang.NoSuchFieldError, case guard conditions and
38+ enabling annotation processing in javac.
39+Author: Rawi01 <Rawi01@users.noreply.github.com>, Reinier Zwitserloot <r.zwitserloot@projectlombok.org>
40+Origin: upstream, https://github.com/projectlombok/lombok/commit/f6ca064d752a85ca799978b1afc87510c5e220f1
41+Bug: https://github.com/projectlombok/lombok/pull/3473
42+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1057538
43+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/lombok/+bug/2054736
44+Applied-Upstream: commit, f6ca064d752a85ca799978b1afc87510c5e220f1
45+Last-Update: 2024-02-22
46+--- a/src/core/lombok/javac/JavacImportList.java
47++++ b/src/core/lombok/javac/JavacImportList.java
48+@@ -50,7 +50,7 @@
49+ @Override public String getFullyQualifiedNameForSimpleNameNoAliasing(String unqualified) {
50+ for (JCTree def : defs) {
51+ if (!(def instanceof JCImport)) continue;
52+- JCTree qual = ((JCImport) def).qualid;
53++ JCTree qual = Javac.getQualid((JCImport) def);
54+ if (!(qual instanceof JCFieldAccess)) continue;
55+ String simpleName = ((JCFieldAccess) qual).name.toString();
56+ if (simpleName.equals(unqualified)) {
57+@@ -68,7 +68,7 @@
58+ for (JCTree def : defs) {
59+ if (!(def instanceof JCImport)) continue;
60+ if (((JCImport) def).staticImport) continue;
61+- JCTree qual = ((JCImport) def).qualid;
62++ JCTree qual = Javac.getQualid((JCImport) def);
63+ if (!(qual instanceof JCFieldAccess)) continue;
64+ String simpleName = ((JCFieldAccess) qual).name.toString();
65+ if (!"*".equals(simpleName)) continue;
66+@@ -87,7 +87,7 @@
67+ for (JCTree def : defs) {
68+ if (!(def instanceof JCImport)) continue;
69+ if (((JCImport) def).staticImport) continue;
70+- JCTree qual = ((JCImport) def).qualid;
71++ JCTree qual = Javac.getQualid((JCImport) def);
72+ if (!(qual instanceof JCFieldAccess)) continue;
73+ String simpleName = ((JCFieldAccess) qual).name.toString();
74+ if (!"*".equals(simpleName)) continue;
75+--- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java
76++++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java
77+@@ -546,7 +546,7 @@
78+ if (!(def instanceof JCImport)) continue;
79+ JCImport imp0rt = (JCImport) def;
80+ if (imp0rt.staticImport) continue;
81+- if (!imp0rt.qualid.toString().equals(name)) continue;
82++ if (!Javac.getQualid(imp0rt).toString().equals(name)) continue;
83+ JavacAugments.JCImport_deletable.set(imp0rt, true);
84+ }
85+ }
86+--- a/src/delombok/lombok/delombok/Delombok.java
87++++ b/src/delombok/lombok/delombok/Delombok.java
88+@@ -714,6 +714,7 @@
89+ }
90+
91+ if (!disablePreview && Javac.getJavaCompilerVersion() >= 11) argsList.add("--enable-preview");
92++ if (Javac.getJavaCompilerVersion() >= 21) argsList.add("-proc:full");
93+
94+ if (Javac.getJavaCompilerVersion() < 15) {
95+ String[] argv = argsList.toArray(new String[0]);
96+--- a/src/delombok/lombok/delombok/PrettyPrinter.java
97++++ b/src/delombok/lombok/delombok/PrettyPrinter.java
98+@@ -93,6 +93,7 @@
99+ import com.sun.tools.javac.util.Position;
100+
101+ import lombok.javac.CommentInfo;
102++import lombok.javac.Javac;
103+ import lombok.javac.PackageName;
104+ import lombok.permit.Permit;
105+ import lombok.javac.CommentInfo.EndConnection;
106+@@ -486,8 +487,9 @@
107+ }
108+
109+ @Override public void visitImport(JCImport tree) {
110+- if (tree.qualid instanceof JCFieldAccess) {
111+- JCFieldAccess fa = ((JCFieldAccess) tree.qualid);
112++ JCTree qualid = Javac.getQualid(tree);
113++ if (qualid instanceof JCFieldAccess) {
114++ JCFieldAccess fa = ((JCFieldAccess) qualid);
115+ if (fa.name.length() == 1 && fa.name.contentEquals("*")) {
116+ if (fa.selected instanceof JCFieldAccess) {
117+ JCFieldAccess lombokExperimental = (JCFieldAccess) fa.selected;
118+@@ -501,7 +503,7 @@
119+
120+ aPrint("import ");
121+ if (tree.staticImport) print("static ");
122+- print(tree.qualid);
123++ print(qualid);
124+ println(";", tree);
125+ }
126+
127+@@ -1347,6 +1349,12 @@
128+ } else {
129+ aPrint("case ");
130+ print(pats, ", ");
131++
132++ JCExpression guard = readObject(tree, "guard", null); // JDK 21+
133++ if (guard != null) {
134++ print(" when ");
135++ print(guard);
136++ }
137+ }
138+
139+ Enum<?> caseKind = readObject(tree, "caseKind", null); // JDK 12+
140+--- a/src/utils/lombok/javac/Javac.java
141++++ b/src/utils/lombok/javac/Javac.java
142+@@ -51,6 +51,7 @@
143+ import com.sun.tools.javac.tree.JCTree.JCExpression;
144+ import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
145+ import com.sun.tools.javac.tree.JCTree.JCIdent;
146++import com.sun.tools.javac.tree.JCTree.JCImport;
147+ import com.sun.tools.javac.tree.JCTree.JCLiteral;
148+ import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
149+ import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
150+@@ -400,6 +401,19 @@
151+ throw sneakyThrow(e.getCause());
152+ }
153+ }
154++
155++ /**
156++ * In some versions, the field's type is {@code JCTree}, in others it is {@code JCFieldAccess}, which at the JVM level are not the same.
157++ */
158++ private static final Field JCIMPORT_QUALID = Permit.permissiveGetField(JCImport.class, "qualid");
159++
160++ public static JCTree getQualid(JCImport tree) {
161++ try {
162++ return (JCTree) JCIMPORT_QUALID.get(tree);
163++ } catch (IllegalAccessException e) {
164++ throw sneakyThrow(e.getCause());
165++ }
166++ }
167+
168+ private static final Class<?> JC_VOID_TYPE, JC_NO_TYPE;
169+
170+--- a/src/utils/lombok/javac/JavacTreeMaker.java
171++++ b/src/utils/lombok/javac/JavacTreeMaker.java
172+@@ -589,9 +589,10 @@
173+ //javac versions: 6-11
174+ private static final MethodId<JCCase> Case11 = MethodId("Case", JCCase.class, JCExpression.class, com.sun.tools.javac.util.List.class);
175+ //javac version: 12+
176+- public static class Case12 {
177++ public static class Case {
178+ private static final Class<?> CASE_KIND_CLASS = classForName(TreeMaker.class, "com.sun.source.tree.CaseTree$CaseKind");
179+ static final MethodId<JCCase> Case12 = MethodId("Case", JCCase.class, CASE_KIND_CLASS, com.sun.tools.javac.util.List.class, com.sun.tools.javac.util.List.class, JCTree.class);
180++ static final MethodId<JCCase> Case21 = MethodId("Case", JCCase.class, CASE_KIND_CLASS, com.sun.tools.javac.util.List.class, JCExpression.class, com.sun.tools.javac.util.List.class, JCTree.class);
181+ static final Object CASE_KIND_STATEMENT = CASE_KIND_CLASS.getEnumConstants()[0];
182+ }
183+
184+@@ -613,7 +614,10 @@
185+ } else {
186+ labels = List.<JCTree>of(pat);
187+ }
188+- return invoke(Case12.Case12, Case12.CASE_KIND_STATEMENT, labels, stats, null);
189++ if (tryResolve(Case.Case12)) {
190++ return invoke(Case.Case12, Case.CASE_KIND_STATEMENT, labels, stats, null);
191++ }
192++ return invoke(Case.Case21, Case.CASE_KIND_STATEMENT, labels, null, stats, null);
193+ }
194+
195+ //javac versions: 17
196diff --git a/debian/patches/series b/debian/patches/series
197index 68d66ad..59b0526 100644
198--- a/debian/patches/series
199+++ b/debian/patches/series
200@@ -11,3 +11,4 @@ ignore-apt-errors.patch
201 java17-compatibility.patch
202 java21-compatibility.patch
203 reproducible-builds-spiprocessor.patch
204+java21-support.patch

Subscribers

People subscribed via source and target branches