You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by cc...@apache.org on 2015/10/07 21:26:42 UTC
[22/37] incubator-groovy git commit: ASTMatcher: Add support for for
loop
ASTMatcher: Add support for for loop
Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/199187e1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/199187e1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/199187e1
Branch: refs/heads/master
Commit: 199187e1cd539eed62f1a00f70b4f5650c053255
Parents: 8c1f263
Author: Cedric Champeau <ce...@gmail.com>
Authored: Fri Oct 17 13:47:25 2014 +0200
Committer: Sergei Egorov <bs...@gmail.com>
Committed: Mon Sep 28 14:33:11 2015 +0300
----------------------------------------------------------------------
.../groovy/macro/matcher/ASTMatcher.groovy | 24 +++++++++++++++++++-
.../groovy/macro/matcher/ASTMatcherTest.groovy | 18 +++++++++++++++
2 files changed, 41 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/199187e1/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 d715737..7c3b68f 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
@@ -22,6 +22,7 @@ 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.ForStatement
import org.codehaus.groovy.ast.stmt.IfStatement
import org.codehaus.groovy.ast.stmt.Statement
import org.codehaus.groovy.classgen.BytecodeExpression
@@ -830,7 +831,12 @@ class ASTMatcher extends ClassCodeVisitorSupport {
@Override
public void visitClosureListExpression(final ClosureListExpression cle) {
- super.visitClosureListExpression(cle);
+ doWithNode(ClosureListExpression, current) {
+ def exprs = cle.expressions
+ doWithNode(exprs.class, ((ClosureListExpression)current).expressions) {
+ visitListOfExpressions(exprs)
+ }
+ }
}
@Override
@@ -858,4 +864,20 @@ class ASTMatcher extends ClassCodeVisitorSupport {
}
}
}
+
+ @Override
+ void visitForLoop(final ForStatement forLoop) {
+ doWithNode(ForStatement, current) {
+ visitStatement(forLoop)
+ def cur = (ForStatement) current
+ def col = forLoop.collectionExpression
+ def block = forLoop.loopBlock
+ doWithNode(col.class, cur.collectionExpression) {
+ col.visit(this)
+ }
+ doWithNode(block.class, cur.loopBlock) {
+ block.visit(this)
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/199187e1/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 eec19b9..75ca21c 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.ForStatement
import org.codehaus.groovy.ast.stmt.IfStatement
import org.codehaus.groovy.control.CompilePhase
import org.codehaus.groovy.macro.transform.MacroClass
@@ -537,4 +538,21 @@ class ASTMatcherTest extends GroovyTestCase {
assert ASTMatcher.matches(ast6, ast7)
assert !ASTMatcher.matches(ast7, ast8)
}
+
+ void testForLoop() {
+ def ast1 = macro { for (;;) {} }
+ def ast2 = macro { for (;;) {} }
+ def ast3 = macro { for (int i=0;i<10;i++) {} }
+ def ast4 = macro { for (long i=0;i<10;i++) {} }
+ def ast5 = macro { for (int i=0;i<100;i++) {} }
+ def ast6 = macro { for (int i=0;i<10;i++) { a } }
+ assert ast1 instanceof ForStatement
+ assert ASTMatcher.matches(ast1, ast1)
+ assert ASTMatcher.matches(ast1, ast2)
+ assert ASTMatcher.matches(ast2, ast1)
+ assert !ASTMatcher.matches(ast1, ast3)
+ assert !ASTMatcher.matches(ast3, ast4)
+ assert !ASTMatcher.matches(ast3, ast5)
+ assert !ASTMatcher.matches(ast3, ast6)
+ }
}