Repository: groovy
Updated Branches:
  refs/heads/parrot d3c68531e -> ad91e0e4a


AstBrowser fix for Trait object initializers

Fix to GROOVY-4636 that incorrectly handled adding statements to
the AST node tree.


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/76f6e62c
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/76f6e62c
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/76f6e62c

Branch: refs/heads/parrot
Commit: 76f6e62c800ed9ce72a585aa83f95694011eebb3
Parents: 465b4c0
Author: John Wagenleitner <jwagenleit...@apache.org>
Authored: Sat Jan 14 13:51:06 2017 -0800
Committer: John Wagenleitner <jwagenleit...@apache.org>
Committed: Sat Jan 14 16:05:59 2017 -0800

----------------------------------------------------------------------
 .../swingui/ScriptToTreeNodeAdapter.groovy      |  7 ++---
 .../swingui/ScriptToTreeNodeAdapterTest.groovy  | 29 +++++++++++++++++++-
 2 files changed, 30 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/76f6e62c/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy
 
b/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy
index be80a59..553fc1c 100644
--- 
a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy
+++ 
b/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy
@@ -371,13 +371,10 @@ class TreeNodeBuildingNodeOperation extends 
PrimaryClassNodeOperation {
         def allInitializers = nodeMaker.makeNode(name)
         parent.add(allInitializers)
         for (Statement stmt : initStatements) {
-            Statement initBlock = ((BlockStatement)stmt).statements.first()
-            def ggrandchild = adapter.make(initBlock)
-            allInitializers.add(ggrandchild)
             TreeNodeBuildingVisitor visitor = new 
TreeNodeBuildingVisitor(adapter)
-            initBlock.visit(visitor)
+            stmt.visit(visitor)
             if (visitor.currentNode) {
-                ggrandchild.add(visitor.currentNode)
+                allInitializers.add(visitor.currentNode)
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/groovy/blob/76f6e62c/subprojects/groovy-console/src/test/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapterTest.groovy
----------------------------------------------------------------------
diff --git 
a/subprojects/groovy-console/src/test/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapterTest.groovy
 
b/subprojects/groovy-console/src/test/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapterTest.groovy
index b3196cb..1a6d9c1 100644
--- 
a/subprojects/groovy-console/src/test/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapterTest.groovy
+++ 
b/subprojects/groovy-console/src/test/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapterTest.groovy
@@ -578,7 +578,34 @@ class ScriptToTreeNodeAdapterTest extends GroovyTestCase {
         assertTreeStructure(source, CompilePhase.CONVERSION,
                 [
                         startsWith('ClassNode - A'),
-                        eq('Object Initializers')
+                        eq('Object Initializers'),
+                        contains('BlockStatement'),
+                        contains('BlockStatement'),
+                        contains('ExpressionStatement')
+                ],
+                adapter)
+
+    }
+
+    void testTraitObjectInitializers() {
+        ScriptToTreeNodeAdapter adapter = createAdapter(false, true, true)
+
+        def source = '''
+            trait Interceptor {
+                final Collection<String> matchers = new ArrayList<String>()
+                void matchAll() {
+                    matchers << 'foo'
+                }
+            }
+
+            class TestInterceptor implements Interceptor { }
+            '''
+
+        assertTreeStructure(source, CompilePhase.CANONICALIZATION,
+                [
+                        startsWith('ClassNode - TestInterceptor'),
+                        eq('Object Initializers'),
+                        eq('ExpressionStatement - MethodCallExpression')
                 ],
                 adapter)
 

Reply via email to