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

sunlan pushed a commit to branch danielsun/tweak-catch-type
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit c229dd500da0937f92c869dbebbff4ef8aef4fc0
Author: Daniel Sun <[email protected]>
AuthorDate: Sun Oct 17 10:04:57 2021 +0800

    Minor refactoring: reuse `Throwable` class node
---
 .../groovy/parser/antlr4/TryWithResourcesASTTransformation.java     | 6 +++---
 src/main/java/org/codehaus/groovy/ast/ClassHelper.java              | 1 +
 .../java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java  | 2 +-
 src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java | 2 +-
 .../groovy/test/transform/NotYetImplementedASTTransformation.java   | 4 +---
 5 files changed, 7 insertions(+), 8 deletions(-)

diff --git 
a/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
 
b/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
index cd22bc3..11c2f08 100644
--- 
a/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
+++ 
b/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
@@ -194,7 +194,7 @@ public class TryWithResourcesASTTransformation {
 
         // Throwable #primaryExc = null;
         String primaryExcName = this.genPrimaryExcName();
-        VariableExpression primaryExcX = localVarX(primaryExcName, 
ClassHelper.make(Throwable.class));
+        VariableExpression primaryExcX = localVarX(primaryExcName, 
ClassHelper.THROWABLE_TYPE.getPlainNodeReference());
         ExpressionStatement primaryExcDeclarationStatement =
                 new ExpressionStatement(
                         new DeclarationExpression(
@@ -250,7 +250,7 @@ public class TryWithResourcesASTTransformation {
         astBuilder.appendStatementsToBlockStatement(blockStatement, 
throwTExcStatement);
 
         // Throwable #t
-        Parameter tExcParameter = new 
Parameter(ClassHelper.make(Throwable.class), tExcName);
+        Parameter tExcParameter = new 
Parameter(ClassHelper.THROWABLE_TYPE.getPlainNodeReference(), tExcName);
 
         return new CatchStatement(tExcParameter, blockStatement);
     }
@@ -309,7 +309,7 @@ public class TryWithResourcesASTTransformation {
         newTryCatchStatement.addCatch(
                 // catch (Throwable #suppressedExc) { .. }
                 new CatchStatement(
-                        new Parameter(ClassHelper.make(Throwable.class), 
suppressedExcName),
+                        new 
Parameter(ClassHelper.THROWABLE_TYPE.getPlainNodeReference(), 
suppressedExcName),
                         
astBuilder.createBlockStatement(this.createAddSuppressedStatement(primaryExcName,
 suppressedExcName)) // #primaryExc.addSuppressed(#suppressedExc);
                 )
         );
diff --git a/src/main/java/org/codehaus/groovy/ast/ClassHelper.java 
b/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
index 5c987e0..a4a855c 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
@@ -109,6 +109,7 @@ public class ClassHelper {
             STRING_TYPE = makeCached(String.class),
             SCRIPT_TYPE = makeCached(Script.class),
             BINDING_TYPE = makeCached(Binding.class),
+            THROWABLE_TYPE = makeCached(Throwable.class),
 
             boolean_TYPE = makeCached(boolean.class),
             char_TYPE = makeCached(char.class),
diff --git 
a/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java 
b/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
index 3544490..9f4a627 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
@@ -714,7 +714,7 @@ public class ClassCompletionVerifier extends 
ClassCodeVisitorSupport {
 
     @Override
     public void visitCatchStatement(CatchStatement cs) {
-        if 
(!(cs.getExceptionType().isDerivedFrom(ClassHelper.make(Throwable.class)))) {
+        if 
(!(cs.getExceptionType().isDerivedFrom(ClassHelper.THROWABLE_TYPE))) {
             addError("Catch statement parameter type is not a subclass of 
Throwable.", cs);
         }
         super.visitCatchStatement(cs);
diff --git 
a/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java 
b/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
index 671e928..fca5434 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
@@ -388,7 +388,7 @@ public class StatementWriter {
         }
 
         mv.visitLabel(catchAll);
-        operandStack.push(ClassHelper.make(Throwable.class));
+        operandStack.push(ClassHelper.THROWABLE_TYPE);
         int anyThrowable = compileStack.defineTemporaryVariable("throwable", 
true);
 
         finallyStatement.visit(controller.getAcg());
diff --git 
a/subprojects/groovy-test/src/main/java/org/apache/groovy/test/transform/NotYetImplementedASTTransformation.java
 
b/subprojects/groovy-test/src/main/java/org/apache/groovy/test/transform/NotYetImplementedASTTransformation.java
index 0848d9b..8abf510 100644
--- 
a/subprojects/groovy-test/src/main/java/org/apache/groovy/test/transform/NotYetImplementedASTTransformation.java
+++ 
b/subprojects/groovy-test/src/main/java/org/apache/groovy/test/transform/NotYetImplementedASTTransformation.java
@@ -51,8 +51,6 @@ import static 
org.codehaus.groovy.ast.tools.GeneralUtils.tryCatchS;
  */
 @GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
 public class NotYetImplementedASTTransformation extends 
AbstractASTTransformation {
-
-    private static final ClassNode CATCH_TYPE = 
ClassHelper.make(Throwable.class);
     private static final ClassNode DEFAULT_THROW_TYPE = 
ClassHelper.make(AssertionError.class);
 
     @Override
@@ -76,7 +74,7 @@ public class NotYetImplementedASTTransformation extends 
AbstractASTTransformatio
             TryCatchStatement tryCatchStatement = tryCatchS(
                     methodNode.getCode(),
                     EmptyStatement.INSTANCE,
-                    catchS(param(CATCH_TYPE, "ignore"), 
ReturnStatement.RETURN_NULL_OR_VOID));
+                    
catchS(param(ClassHelper.THROWABLE_TYPE.getPlainNodeReference(), "ignore"), 
ReturnStatement.RETURN_NULL_OR_VOID));
 
             ThrowStatement throwStatement = throwS(ctorX(exception, 
args(constX("Method is marked with @NotYetImplemented but passes 
unexpectedly"))));
 

Reply via email to