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"))));
