You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2023/06/13 19:08:08 UTC
[groovy] branch master updated: minor items
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new c894dba2b4 minor items
c894dba2b4 is described below
commit c894dba2b48ee64fea69561e163d580d36a3d00a
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue Jun 13 13:42:07 2023 -0500
minor items
---
.../ThreadInterruptibleASTTransformation.groovy | 65 ++++++++++------------
1 file changed, 30 insertions(+), 35 deletions(-)
diff --git a/src/main/groovy/org/codehaus/groovy/transform/ThreadInterruptibleASTTransformation.groovy b/src/main/groovy/org/codehaus/groovy/transform/ThreadInterruptibleASTTransformation.groovy
index 396b2dd77c..d224752c10 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/ThreadInterruptibleASTTransformation.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/ThreadInterruptibleASTTransformation.groovy
@@ -18,18 +18,19 @@
*/
package org.codehaus.groovy.transform
+import groovy.transform.AutoFinal
import groovy.transform.CompileStatic
import groovy.transform.ThreadInterrupt
import org.codehaus.groovy.ast.ClassHelper
import org.codehaus.groovy.ast.ClassNode
import org.codehaus.groovy.ast.MethodNode
-import org.codehaus.groovy.ast.Parameter
-import org.codehaus.groovy.ast.expr.ArgumentListExpression
-import org.codehaus.groovy.ast.expr.ClassExpression
import org.codehaus.groovy.ast.expr.ClosureExpression
import org.codehaus.groovy.ast.expr.Expression
-import org.codehaus.groovy.ast.expr.MethodCallExpression
-import org.codehaus.groovy.control.CompilePhase
+import org.codehaus.groovy.ast.stmt.Statement
+
+import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.isGenerated
+import static org.codehaus.groovy.ast.tools.GeneralUtils.callX
+import static org.codehaus.groovy.ast.tools.GeneralUtils.classX
/**
* Allows "interrupt-safe" executions of scripts by adding Thread.currentThread().isInterrupted()
@@ -39,57 +40,51 @@ import org.codehaus.groovy.control.CompilePhase
* @see groovy.transform.ThreadInterrupt
* @since 1.8.0
*/
-@GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
-@CompileStatic
+@AutoFinal @CompileStatic @GroovyASTTransformation
class ThreadInterruptibleASTTransformation extends AbstractInterruptibleASTTransformation {
- private static final ClassNode MY_TYPE = ClassHelper.make(ThreadInterrupt)
- private static final ClassNode THREAD_TYPE = ClassHelper.make(Thread)
- private static final MethodNode CURRENTTHREAD_METHOD
- private static final MethodNode ISINTERRUPTED_METHOD
-
- static {
- CURRENTTHREAD_METHOD = THREAD_TYPE.getMethod('currentThread', Parameter.EMPTY_ARRAY)
- ISINTERRUPTED_METHOD = THREAD_TYPE.getMethod('isInterrupted', Parameter.EMPTY_ARRAY)
- }
+ private static final ClassNode TYPE = ClassHelper.make(ThreadInterrupt)
+ private static final ClassNode THREAD_TYPE = ClassHelper.makeCached(Thread)
+ private static final MethodNode CURRENTTHREAD_METHOD = THREAD_TYPE.getMethod('currentThread')
+ private static final MethodNode ISINTERRUPTED_METHOD = THREAD_TYPE.getMethod('isInterrupted')
+ @Override
protected ClassNode type() {
- MY_TYPE
+ TYPE
}
+ @Override
protected String getErrorMessage() {
'Execution interrupted. The current thread has been interrupted.'
}
+ @Override
protected Expression createCondition() {
- def currentThread = new MethodCallExpression(new ClassExpression(THREAD_TYPE),
- 'currentThread',
- ArgumentListExpression.EMPTY_ARGUMENTS)
+ def currentThread = callX(classX(THREAD_TYPE), 'currentThread')
currentThread.methodTarget = CURRENTTHREAD_METHOD
- def isInterrupted = new MethodCallExpression(
- currentThread,
- 'isInterrupted', ArgumentListExpression.EMPTY_ARGUMENTS)
+ currentThread.implicitThis = false
+
+ def isInterrupted = callX(currentThread, 'isInterrupted')
isInterrupted.methodTarget = ISINTERRUPTED_METHOD
- [currentThread, isInterrupted]*.implicitThis = false
+ isInterrupted.implicitThis = false
isInterrupted
}
-
@Override
- void visitClosureExpression(ClosureExpression closureExpr) {
- def code = closureExpr.code
- closureExpr.code = wrapBlock(code)
- super.visitClosureExpression closureExpr
+ void visitClosureExpression(ClosureExpression closure) {
+ Statement code = closure.code
+ closure.code = wrapBlock(code)
+ super.visitClosureExpression(closure)
}
@Override
- void visitMethod(MethodNode node) {
- if (checkOnMethodStart && !node.isSynthetic() && !node.isAbstract()
- && !(node.getDeclaringClass().isRecord() && node.annotations?.any(e -> 'groovy.transform.Generated' == e.classNode.name))) {
- def code = node.code
- node.code = wrapBlock(code)
+ void visitMethod(MethodNode method) {
+ if (checkOnMethodStart && !method.isAbstract() && !method.isSynthetic()
+ && !(method.getDeclaringClass().isRecord() && isGenerated(method))) {
+ Statement code = method.code
+ method.code = wrapBlock(code)
}
- super.visitMethod(node)
+ super.visitMethod(method)
}
}