From d9740f5bbbce76b5e5db887e5bac2958be4b515e Mon Sep 17 00:00:00 2001 From: Pim van der Loos Date: Thu, 12 Jan 2023 22:24:41 +0100 Subject: [PATCH] Fix incorrect javac recursiveSetGeneratedBy usage - The javac handler for the Locked annotations applied recursiveSetGeneratedBy to too many things, which could cause issues in certain situations. Reducing the scope on which it is used and using setGeneratedBy for the rest resolved the problems. --- src/core/lombok/javac/handlers/HandleLockedUtil.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/core/lombok/javac/handlers/HandleLockedUtil.java b/src/core/lombok/javac/handlers/HandleLockedUtil.java index a001e984..f5e60eba 100644 --- a/src/core/lombok/javac/handlers/HandleLockedUtil.java +++ b/src/core/lombok/javac/handlers/HandleLockedUtil.java @@ -160,7 +160,6 @@ public final class HandleLockedUtil { } else { lockNode = maker.Select(maker.Ident(methodNode.toName("this")), methodNode.toName(lockName)); } - recursiveSetGeneratedBy(lockNode, annotationNode); final JCExpression lockable; @@ -168,15 +167,17 @@ public final class HandleLockedUtil { lockable = lockNode; } else { lockable = maker.Apply(NIL_EXPRESSION, maker.Select(lockNode, methodNode.toName(lockableMethodName)), NIL_EXPRESSION); + recursiveSetGeneratedBy(lockable, annotationNode); } JCExpressionStatement acquireLock = maker.Exec(maker.Apply(NIL_EXPRESSION, maker.Select(lockable, typeNode.toName("lock")), NIL_EXPRESSION)); JCExpressionStatement releaseLock = maker.Exec(maker.Apply(NIL_EXPRESSION, maker.Select(lockable, typeNode.toName("unlock")), NIL_EXPRESSION)); - JCTry tryBlock = recursiveSetGeneratedBy(maker.Try(maker.Block(0L, method.body.stats), List.nil(), - maker.Block(0L, List.of(releaseLock))), annotationNode); + JCBlock finallyBlock = setGeneratedBy(maker.Block(0, List.of(recursiveSetGeneratedBy(releaseLock, annotationNode))), annotationNode); + JCTry tryBlock = setGeneratedBy(maker.Try(method.body, List.nil(), finallyBlock), annotationNode); + + method.body = setGeneratedBy(maker.Block(0, List.of(recursiveSetGeneratedBy(acquireLock, annotationNode), tryBlock)), annotationNode); - method.body.stats = List.of(tryBlock).prepend(recursiveSetGeneratedBy(acquireLock, annotationNode)); methodNode.rebuild(); } }