You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2021/11/14 16:21:40 UTC

[groovy] branch master updated: Attach `@CompileStatic` to some transformation classes

This is an automated email from the ASF dual-hosted git repository.

sunlan 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 31965a1  Attach `@CompileStatic` to some transformation classes
31965a1 is described below

commit 31965a1d2f460a188e7b0d5bc8229f2b3e4894a3
Author: Daniel Sun <su...@apache.org>
AuthorDate: Mon Nov 15 00:21:12 2021 +0800

    Attach `@CompileStatic` to some transformation classes
---
 .../ConditionalInterruptibleASTTransformation.groovy   |  4 +++-
 .../TimedInterruptibleASTTransformation.groovy         | 18 +++++++++++-------
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/main/groovy/org/codehaus/groovy/transform/ConditionalInterruptibleASTTransformation.groovy b/src/main/groovy/org/codehaus/groovy/transform/ConditionalInterruptibleASTTransformation.groovy
index dd97512..187ed93 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/ConditionalInterruptibleASTTransformation.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/ConditionalInterruptibleASTTransformation.groovy
@@ -18,6 +18,7 @@
  */
 package org.codehaus.groovy.transform
 
+import groovy.transform.CompileStatic
 import groovy.transform.ConditionalInterrupt
 import org.codehaus.groovy.ast.AnnotatedNode
 import org.codehaus.groovy.ast.AnnotationNode
@@ -42,6 +43,7 @@ import org.codehaus.groovy.control.CompilePhase
  *
  * @see groovy.transform.ConditionalInterrupt* @since 1.8.0
  */
+@CompileStatic
 @GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
 class ConditionalInterruptibleASTTransformation extends AbstractInterruptibleASTTransformation {
 
@@ -59,7 +61,7 @@ class ConditionalInterruptibleASTTransformation extends AbstractInterruptibleAST
     @SuppressWarnings('Instanceof')
     protected void setupTransform(AnnotationNode node) {
         super.setupTransform(node)
-        def member = node.getMember('value')
+        ClosureExpression member = (ClosureExpression) node.getMember('value')
         if (!member || !(member instanceof ClosureExpression)) internalError("Expected closure value for annotation parameter 'value'. Found $member")
         conditionNode = member
         conditionMethod = 'conditionalTransform' + node.hashCode() + '$condition'
diff --git a/src/main/groovy/org/codehaus/groovy/transform/TimedInterruptibleASTTransformation.groovy b/src/main/groovy/org/codehaus/groovy/transform/TimedInterruptibleASTTransformation.groovy
index 4cf9168..592d9e6 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/TimedInterruptibleASTTransformation.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/TimedInterruptibleASTTransformation.groovy
@@ -19,6 +19,7 @@
 package org.codehaus.groovy.transform
 
 import groovy.transform.AutoFinal
+import groovy.transform.CompileStatic
 import groovy.transform.TimedInterrupt
 import org.codehaus.groovy.ast.ASTNode
 import org.codehaus.groovy.ast.AnnotatedNode
@@ -36,6 +37,7 @@ import org.codehaus.groovy.ast.expr.Expression
 import org.codehaus.groovy.ast.stmt.BlockStatement
 import org.codehaus.groovy.ast.stmt.DoWhileStatement
 import org.codehaus.groovy.ast.stmt.ForStatement
+import org.codehaus.groovy.ast.stmt.LoopingStatement
 import org.codehaus.groovy.ast.stmt.Statement
 import org.codehaus.groovy.ast.stmt.WhileStatement
 import org.codehaus.groovy.control.CompilePhase
@@ -68,7 +70,9 @@ import static org.objectweb.asm.Opcodes.ACC_PRIVATE
  * @see groovy.transform.ThreadInterrupt
  * @since 1.8.0
  */
-@AutoFinal @GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
+@CompileStatic
+@AutoFinal
+@GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
 class TimedInterruptibleASTTransformation extends AbstractASTTransformation {
 
     private static final ClassNode MY_TYPE = make(TimedInterrupt)
@@ -80,8 +84,8 @@ class TimedInterruptibleASTTransformation extends AbstractASTTransformation {
     @SuppressWarnings('Instanceof')
     void visit(ASTNode[] nodes, SourceUnit source) {
         init(nodes, source)
-        AnnotationNode node = nodes[0]
-        AnnotatedNode annotatedNode = nodes[1]
+        AnnotationNode node = (AnnotationNode) nodes[0]
+        AnnotatedNode annotatedNode = (AnnotatedNode) nodes[1]
         if (!MY_TYPE.equals(node.classNode)) {
             internalError("Transformation called from wrong annotation: $node.classNode.name")
         }
@@ -167,7 +171,7 @@ class TimedInterruptibleASTTransformation extends AbstractASTTransformation {
         private final String basename
 
         @SuppressWarnings('ParameterCount')
-        TimedInterruptionVisitor(SourceUnit source, checkOnMethodStart, applyToAllClasses, applyToAllMembers, maximum, unit, thrown, hash) {
+        TimedInterruptionVisitor(SourceUnit source, checkOnMethodStart, applyToAllClasses, applyToAllMembers, maximum, Expression unit, ClassNode thrown, hash) {
             this.sourceUnit = source
             this.checkOnMethodStart = checkOnMethodStart
             this.applyToAllClasses = applyToAllClasses
@@ -213,7 +217,7 @@ class TimedInterruptibleASTTransformation extends AbstractASTTransformation {
          * @return a {@link BlockStatement block statement}    which first element is for checking interruption, and the
          * second one the statement to be wrapped.
          */
-        private wrapBlock(statement) {
+        private BlockStatement wrapBlock(Statement statement) {
             block().tap {
                 addStatement(createInterruptStatement())
                 addStatement(statement)
@@ -286,8 +290,8 @@ class TimedInterruptibleASTTransformation extends AbstractASTTransformation {
          * Shortcut method which avoids duplicating code for every type of loop.
          * Actually wraps the loopBlock of different types of loop statements.
          */
-        private visitLoop(loopStatement) {
-            def statement = loopStatement.loopBlock
+        private visitLoop(LoopingStatement loopStatement) {
+            Statement statement = loopStatement.loopBlock
             loopStatement.loopBlock = wrapBlock(statement)
         }