From b313df556d9f04b343769ba336e7a66d94e6c419 Mon Sep 17 00:00:00 2001 From: Anshuman Mishra Date: Fri, 20 Dec 2024 23:50:39 -0800 Subject: [PATCH] fix: Don't alter the AST node positions of original code. --- .../javac/handlers/HandleConstructor.java | 2 +- .../javac/handlers/HandleEqualsAndHashCode.java | 2 +- .../lombok/javac/handlers/HandleGetter.java | 2 +- .../javac/handlers/HandleJacksonized.java | 2 +- .../lombok/javac/handlers/HandleSetter.java | 4 ++-- src/core/lombok/javac/handlers/HandleWith.java | 4 ++-- .../lombok/javac/handlers/HandleWithBy.java | 2 +- .../lombok/javac/handlers/JavacHandlerUtil.java | 17 +++++++++++------ .../javac/handlers/JavacSingularsRecipes.java | 4 ++-- 9 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/core/lombok/javac/handlers/HandleConstructor.java b/src/core/lombok/javac/handlers/HandleConstructor.java index 31d15445..ca885cd6 100644 --- a/src/core/lombok/javac/handlers/HandleConstructor.java +++ b/src/core/lombok/javac/handlers/HandleConstructor.java @@ -364,7 +364,7 @@ public class HandleConstructor { if (addConstructorProperties && !isLocalType(typeNode) && LombokOptionsFactory.getDelombokOptions(typeNode.getContext()).getFormatPreferences().generateConstructorProperties()) { addConstructorProperties(mods, typeNode, fieldsToParam); } - if (onConstructor != null) mods.annotations = mods.annotations.appendList(copyAnnotations(onConstructor)); + if (onConstructor != null) mods.annotations = mods.annotations.appendList(copyAnnotations(onConstructor, maker)); return recursiveSetGeneratedBy(maker.MethodDef(mods, typeNode.toName(""), null, List.nil(), params.toList(), List.nil(), maker.Block(0L, nullChecks.appendList(assigns).toList()), null), source); diff --git a/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java b/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java index 259880fa..40854a34 100644 --- a/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java +++ b/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java @@ -190,7 +190,7 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler { List copyableAnnotations = findCopyableAnnotations(field); List delegates = findDelegatesAndRemoveFromField(field); - List annsOnMethod = copyAnnotations(onMethod).appendList(copyableAnnotations); + List annsOnMethod = copyAnnotations(onMethod, field.getTreeMaker()).appendList(copyableAnnotations); if (field.isFinal()) { if (getCheckerFrameworkVersion(field).generatePure()) annsOnMethod = annsOnMethod.prepend(treeMaker.Annotation(genTypeRef(field, CheckerFrameworkVersion.NAME__PURE), List.nil())); } else { diff --git a/src/core/lombok/javac/handlers/HandleJacksonized.java b/src/core/lombok/javac/handlers/HandleJacksonized.java index 3ee0eec4..bec2d771 100644 --- a/src/core/lombok/javac/handlers/HandleJacksonized.java +++ b/src/core/lombok/javac/handlers/HandleJacksonized.java @@ -136,7 +136,7 @@ public class HandleJacksonized extends JavacAnnotationHandler { // Copy annotations from the class to the builder class. List copyableAnnotations = findJacksonAnnotationsOnClass(tdNode); - List copiedAnnotations = copyAnnotations(copyableAnnotations); + List copiedAnnotations = copyAnnotations(copyableAnnotations, maker); for (JCAnnotation anno : copiedAnnotations) { recursiveSetGeneratedBy(anno, annotationNode); } diff --git a/src/core/lombok/javac/handlers/HandleSetter.java b/src/core/lombok/javac/handlers/HandleSetter.java index 380f71ca..bdb5b1ac 100644 --- a/src/core/lombok/javac/handlers/HandleSetter.java +++ b/src/core/lombok/javac/handlers/HandleSetter.java @@ -241,7 +241,7 @@ public class HandleSetter extends JavacAnnotationHandler { List copyableAnnotations = findCopyableAnnotations(field); Name methodName = field.toName(setterName); - List annsOnParam = copyAnnotations(onParam).appendList(copyableAnnotations); + List annsOnParam = copyAnnotations(onParam, treeMaker).appendList(copyableAnnotations); long flags = JavacHandlerUtil.addFinalIfNeeded(Flags.PARAMETER, field.getContext()); JCExpression pType = cloneType(treeMaker, fieldDecl.vartype, source); @@ -274,7 +274,7 @@ public class HandleSetter extends JavacAnnotationHandler { List throwsClauses = List.nil(); JCExpression annotationMethodDefaultValue = null; - List annsOnMethod = mergeAnnotations(copyAnnotations(onMethod), findCopyableToSetterAnnotations(field)); + List annsOnMethod = mergeAnnotations(copyAnnotations(onMethod, treeMaker), findCopyableToSetterAnnotations(field)); if (isFieldDeprecated(field) || deprecate) { annsOnMethod = annsOnMethod.prepend(treeMaker.Annotation(genJavaLangTypeRef(field, "Deprecated"), List.nil())); } diff --git a/src/core/lombok/javac/handlers/HandleWith.java b/src/core/lombok/javac/handlers/HandleWith.java index c7fa0531..52f2c192 100644 --- a/src/core/lombok/javac/handlers/HandleWith.java +++ b/src/core/lombok/javac/handlers/HandleWith.java @@ -229,7 +229,7 @@ public class HandleWith extends JavacAnnotationHandler { JCBlock methodBody = null; long flags = JavacHandlerUtil.addFinalIfNeeded(Flags.PARAMETER, field.getContext()); - List annsOnParam = copyAnnotations(onParam).appendList(copyableAnnotations); + List annsOnParam = copyAnnotations(onParam, maker).appendList(copyableAnnotations); JCExpression pType = cloneType(maker, fieldDecl.vartype, source); JCVariableDecl param = maker.VarDef(maker.Modifiers(flags, annsOnParam), fieldDecl.name, pType, null); @@ -278,7 +278,7 @@ public class HandleWith extends JavacAnnotationHandler { List throwsClauses = List.nil(); JCExpression annotationMethodDefaultValue = null; - List annsOnMethod = copyAnnotations(onMethod); + List annsOnMethod = copyAnnotations(onMethod, maker); CheckerFrameworkVersion checkerFramework = getCheckerFrameworkVersion(source); if (checkerFramework.generateSideEffectFree()) annsOnMethod = annsOnMethod.prepend(maker.Annotation(genTypeRef(source, CheckerFrameworkVersion.NAME__SIDE_EFFECT_FREE), List.nil())); diff --git a/src/core/lombok/javac/handlers/HandleWithBy.java b/src/core/lombok/javac/handlers/HandleWithBy.java index ff67fd9f..7978928f 100644 --- a/src/core/lombok/javac/handlers/HandleWithBy.java +++ b/src/core/lombok/javac/handlers/HandleWithBy.java @@ -321,7 +321,7 @@ public class HandleWithBy extends JavacAnnotationHandler { List throwsClauses = List.nil(); JCExpression annotationMethodDefaultValue = null; - List annsOnMethod = copyAnnotations(onMethod); + List annsOnMethod = copyAnnotations(onMethod, maker); CheckerFrameworkVersion checkerFramework = getCheckerFrameworkVersion(source); if (checkerFramework.generateSideEffectFree()) annsOnMethod = annsOnMethod.prepend(maker.Annotation(genTypeRef(source, CheckerFrameworkVersion.NAME__SIDE_EFFECT_FREE), List.nil())); diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java index 38658bb6..15c47a93 100644 --- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java +++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java @@ -1746,7 +1746,8 @@ public class JavacHandlerUtil { } } } - return copyAnnotations(result.toList()); + + return copyAnnotations(result.toList(), node.getTreeMaker()); } /** @@ -1784,7 +1785,7 @@ public class JavacHandlerUtil { if (annoName == null) return List.nil(); if (!annoName.isEmpty()) { - for (String bn : annotationsToFind) if (typeMatches(bn, node, annoName)) return List.of(anno); + for (String bn : annotationsToFind) if (typeMatches(bn, node, annoName)) return copyAnnotations(List.of(anno), node.getTreeMaker()); } ListBuffer result = new ListBuffer(); @@ -1799,7 +1800,7 @@ public class JavacHandlerUtil { } } } - return copyAnnotations(result.toList()); + return copyAnnotations(result.toList(), node.getTreeMaker()); } /** @@ -2108,14 +2109,18 @@ public class JavacHandlerUtil { errorNode.addError(out.append(" are not allowed on builder classes.").toString()); } - static List copyAnnotations(List in) { + static List copyAnnotations(List in, JavacTreeMaker maker) { ListBuffer out = new ListBuffer(); for (JCExpression expr : in) { if (!(expr instanceof JCAnnotation)) continue; - out.append((JCAnnotation) expr.clone()); + out.append(copyAnnotation((JCAnnotation) expr, maker)); } return out.toList(); } + + static JCAnnotation copyAnnotation(JCAnnotation annotation, JavacTreeMaker maker) { + return maker.Annotation(annotation.annotationType, annotation.args); + } static List mergeAnnotations(List a, List b) { if (a == null || a.isEmpty()) return b; @@ -2266,7 +2271,7 @@ public class JavacHandlerUtil { if (JCAnnotatedTypeReflect.is(in)) { JCExpression underlyingType = cloneType0(maker, JCAnnotatedTypeReflect.getUnderlyingType(in)); - List anns = copyAnnotations(JCAnnotatedTypeReflect.getAnnotations(in)); + List anns = copyAnnotations(JCAnnotatedTypeReflect.getAnnotations(in), maker); return JCAnnotatedTypeReflect.create(anns, underlyingType); } diff --git a/src/core/lombok/javac/handlers/JavacSingularsRecipes.java b/src/core/lombok/javac/handlers/JavacSingularsRecipes.java index 4954a610..938d6e8f 100644 --- a/src/core/lombok/javac/handlers/JavacSingularsRecipes.java +++ b/src/core/lombok/javac/handlers/JavacSingularsRecipes.java @@ -315,7 +315,7 @@ public class JavacSingularsRecipes { if (!setterPrefix.isEmpty()) name = builderType.toName(HandlerUtil.buildAccessorName(source, setterPrefix, name.toString())); statements.prepend(createConstructBuilderVarIfNeeded(maker, data, builderType, source)); - List methodAnnotations = copyAnnotations(findCopyableToBuilderSingularSetterAnnotations(data.annotation.up())); + List methodAnnotations = copyAnnotations(findCopyableToBuilderSingularSetterAnnotations(data.annotation.up()), maker); finishAndInjectMethod(cfv, maker, returnType, returnStatement, data, builderType, source, deprecate, statements, name, params, methodAnnotations, access, null); } @@ -362,7 +362,7 @@ public class JavacSingularsRecipes { statements.prepend(JavacHandlerUtil.generateNullCheck(maker, null, data.getPluralName(), builderType, "%s cannot be null")); } - List methodAnnotations = copyAnnotations(findCopyableToSetterAnnotations(data.annotation.up())); + List methodAnnotations = copyAnnotations(findCopyableToSetterAnnotations(data.annotation.up()), maker); finishAndInjectMethod(cfv, maker, returnType, returnStatement, data, builderType, source, deprecate, statements, name, List.of(param), methodAnnotations, access, ignoreNullCollections); }