This is an automated email from the ASF dual-hosted git repository. paulk pushed a commit to branch GROOVY_2_5_X in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_2_5_X by this push: new ad88d2c GROOVY-8238: multiple-catch statement behaves strangely ad88d2c is described below commit ad88d2c9c2bd184e5bddc3a1747ddba582fb343a Author: Paul King <pa...@asert.com.au> AuthorDate: Mon Jan 28 11:26:34 2019 +1000 GROOVY-8238: multiple-catch statement behaves strangely --- .../java/org/codehaus/groovy/antlr/AntlrParserPlugin.java | 6 ++---- src/test/groovy/MultiCatchTest.groovy | 11 +++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java b/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java index 9b3981a..02e3e49 100644 --- a/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java +++ b/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java @@ -1748,16 +1748,14 @@ public class AntlrParserPlugin extends ASTHelper implements ParserPlugin, Groovy protected List<CatchStatement> catchStatement(AST catchNode) { AST node = catchNode.getFirstChild(); List<CatchStatement> catches = new LinkedList<CatchStatement>(); - Statement code = statement(node.getNextSibling()); if (MULTICATCH == node.getType()) { - AST variableNode = node.getNextSibling(); final AST multicatches = node.getFirstChild(); if (multicatches.getType() != MULTICATCH_TYPES) { // catch (e) // catch (def e) String variable = identifier(multicatches); Parameter catchParameter = new Parameter(ClassHelper.DYNAMIC_TYPE, variable); - CatchStatement answer = new CatchStatement(catchParameter, code); + CatchStatement answer = new CatchStatement(catchParameter, statement(node.getNextSibling())); configureAST(answer, catchNode); catches.add(answer); } else { @@ -1768,7 +1766,7 @@ public class AntlrParserPlugin extends ASTHelper implements ParserPlugin, Groovy while (exceptionNodes != null) { ClassNode exceptionType = buildName(exceptionNodes); Parameter catchParameter = new Parameter(exceptionType, variable); - CatchStatement answer = new CatchStatement(catchParameter, code); + CatchStatement answer = new CatchStatement(catchParameter, statement(node.getNextSibling())); configureAST(answer, catchNode); catches.add(answer); exceptionNodes = exceptionNodes.getNextSibling(); diff --git a/src/test/groovy/MultiCatchTest.groovy b/src/test/groovy/MultiCatchTest.groovy index d23829f..ac4eb71 100644 --- a/src/test/groovy/MultiCatchTest.groovy +++ b/src/test/groovy/MultiCatchTest.groovy @@ -18,6 +18,8 @@ */ package groovy +import groovy.cli.CliBuilderException + /** * Test for the multi-catch exception from JDK 7 (Project Coin) */ @@ -116,4 +118,13 @@ class MultiCatchTest extends GroovyTestCase { } assert catched } + + // GROOVY-8238 + void testMultipleCatchGroovyAndJavaExceptions() { + try { + throw new RuntimeException('boom') + } catch ( RuntimeException | CliBuilderException e ) { + assert e.message == 'boom' + } + } }