Return-Path: X-Original-To: apmail-groovy-commits-archive@minotaur.apache.org Delivered-To: apmail-groovy-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9E26A18BA7 for ; Wed, 7 Oct 2015 19:26:25 +0000 (UTC) Received: (qmail 3913 invoked by uid 500); 7 Oct 2015 19:26:25 -0000 Delivered-To: apmail-groovy-commits-archive@groovy.apache.org Received: (qmail 3842 invoked by uid 500); 7 Oct 2015 19:26:25 -0000 Mailing-List: contact commits-help@groovy.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@groovy.incubator.apache.org Delivered-To: mailing list commits@groovy.incubator.apache.org Received: (qmail 3826 invoked by uid 99); 7 Oct 2015 19:26:25 -0000 Received: from Unknown (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Oct 2015 19:26:25 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 1C6FC1A2366 for ; Wed, 7 Oct 2015 19:26:25 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.77 X-Spam-Level: * X-Spam-Status: No, score=1.77 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, T_RP_MATCHES_RCVD=-0.01] autolearn=disabled Received: from mx1-us-east.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id X8Gi7Hdf-G5B for ; Wed, 7 Oct 2015 19:26:23 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-us-east.apache.org (ASF Mail Server at mx1-us-east.apache.org) with SMTP id 885B9439DF for ; Wed, 7 Oct 2015 19:26:22 +0000 (UTC) Received: (qmail 3177 invoked by uid 99); 7 Oct 2015 19:26:22 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Oct 2015 19:26:22 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id AAF8EE0BB1; Wed, 7 Oct 2015 19:26:21 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: cchampeau@apache.org To: commits@groovy.incubator.apache.org Date: Wed, 07 Oct 2015 19:26:45 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [25/37] incubator-groovy git commit: ASTMatcher: Add support for if/else ASTMatcher: Add support for if/else Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/8c1f2634 Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/8c1f2634 Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/8c1f2634 Branch: refs/heads/master Commit: 8c1f263477e31f6a5339655b94734c0e5f98dd03 Parents: 817bbef Author: Cedric Champeau Authored: Fri Oct 17 13:39:20 2014 +0200 Committer: Sergei Egorov Committed: Mon Sep 28 14:33:11 2015 +0300 ---------------------------------------------------------------------- .../groovy/macro/matcher/ASTMatcher.groovy | 25 +++++++++++++++++++- .../groovy/macro/matcher/ASTMatcherTest.groovy | 22 +++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/8c1f2634/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/matcher/ASTMatcher.groovy ---------------------------------------------------------------------- diff --git a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/matcher/ASTMatcher.groovy b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/matcher/ASTMatcher.groovy index 7b5262c..d715737 100644 --- a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/matcher/ASTMatcher.groovy +++ b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/matcher/ASTMatcher.groovy @@ -20,7 +20,9 @@ import groovy.transform.TypeCheckingMode import org.codehaus.groovy.ast.* import org.codehaus.groovy.ast.expr.* import org.codehaus.groovy.ast.stmt.BlockStatement +import org.codehaus.groovy.ast.stmt.EmptyStatement import org.codehaus.groovy.ast.stmt.ExpressionStatement +import org.codehaus.groovy.ast.stmt.IfStatement import org.codehaus.groovy.ast.stmt.Statement import org.codehaus.groovy.classgen.BytecodeExpression import org.codehaus.groovy.control.SourceUnit @@ -391,8 +393,8 @@ class ASTMatcher extends ClassCodeVisitorSupport { @Override void visitExpressionStatement(final ExpressionStatement statement) { - visitStatement(statement) doWithNode(statement.expression.class, ((ExpressionStatement) current).expression) { + visitStatement(statement) statement.expression.visit(this) } } @@ -835,4 +837,25 @@ class ASTMatcher extends ClassCodeVisitorSupport { public void visitBytecodeExpression(final BytecodeExpression cle) { super.visitBytecodeExpression(cle); } + + @Override + void visitIfElse(final IfStatement ifElse) { + doWithNode(IfStatement, current) { + visitStatement(ifElse) + def cur = (IfStatement) current + def bool = ifElse.booleanExpression + def ifBlock = ifElse.ifBlock + def elseBlock = ifElse.elseBlock + doWithNode(bool.class, cur.booleanExpression) { + bool.visit(this) + } + doWithNode(ifBlock.class, cur.ifBlock) { + ifBlock.visit(this) + } + failIfNot(elseBlock && cur.elseBlock || !elseBlock && !cur.elseBlock) + doWithNode(elseBlock.class, cur.elseBlock) { + elseBlock.visit(this) + } + } + } } http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/8c1f2634/subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/matcher/ASTMatcherTest.groovy ---------------------------------------------------------------------- diff --git a/subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/matcher/ASTMatcherTest.groovy b/subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/matcher/ASTMatcherTest.groovy index ef7c489..eec19b9 100644 --- a/subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/matcher/ASTMatcherTest.groovy +++ b/subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/matcher/ASTMatcherTest.groovy @@ -26,6 +26,7 @@ import org.codehaus.groovy.ast.expr.MethodPointerExpression import org.codehaus.groovy.ast.expr.StaticMethodCallExpression import org.codehaus.groovy.ast.expr.UnaryMinusExpression import org.codehaus.groovy.ast.expr.UnaryPlusExpression +import org.codehaus.groovy.ast.stmt.IfStatement import org.codehaus.groovy.control.CompilePhase import org.codehaus.groovy.macro.transform.MacroClass @@ -515,4 +516,25 @@ class ASTMatcherTest extends GroovyTestCase { assert !ASTMatcher.matches(ast8, ast9) assert !ASTMatcher.matches(ast1, ast10) } + + void testIf() { + def ast1 = macro { if (a) b } + def ast2 = macro { if (a) b } + def ast3 = macro { if (a) c } + def ast4 = macro { if (b) b } + def ast5 = macro { if (a) { b } } + def ast6 = macro { if (a) { b } else { c }} + def ast7 = macro { if (a) { b } else { c }} + def ast8 = macro { if (a) { b } else { d }} + assert ast1 instanceof IfStatement + assert ASTMatcher.matches(ast1, ast1) + assert ASTMatcher.matches(ast1, ast2) + assert ASTMatcher.matches(ast2, ast1) + assert !ASTMatcher.matches(ast1, ast3) + assert !ASTMatcher.matches(ast1, ast4) + assert !ASTMatcher.matches(ast1, ast5) + assert !ASTMatcher.matches(ast1, ast6) + assert ASTMatcher.matches(ast6, ast7) + assert !ASTMatcher.matches(ast7, ast8) + } }