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.
This commit is contained in:
Pim van der Loos committed 2023-04-18 18:07:53 +02:00
1 parent 58b38dcaa5
commit d9740f5bbb
1 file changed
+5 -4
@@ -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.<JCCatch>nil(),
maker.Block(0L, List.<JCStatement>of(releaseLock))), annotationNode);
JCBlock finallyBlock = setGeneratedBy(maker.Block(0, List.<JCStatement>of(recursiveSetGeneratedBy(releaseLock, annotationNode))), annotationNode);
JCTry tryBlock = setGeneratedBy(maker.Try(method.body, List.<JCCatch>nil(), finallyBlock), annotationNode);
method.body = setGeneratedBy(maker.Block(0, List.<JCStatement>of(recursiveSetGeneratedBy(acquireLock, annotationNode), tryBlock)), annotationNode);
method.body.stats = List.<JCStatement>of(tryBlock).prepend(recursiveSetGeneratedBy(acquireLock, annotationNode));
methodNode.rebuild();
}
}