You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by jw...@apache.org on 2017/01/15 00:59:43 UTC

[1/2] groovy git commit: AstBrowser fix for Trait object initializers

Repository: groovy
Updated Branches:
  refs/heads/master 465b4c05b -> 048b6586b


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/master
Commit: 76f6e62c800ed9ce72a585aa83f95694011eebb3
Parents: 465b4c0
Author: John Wagenleitner <jw...@apache.org>
Authored: Sat Jan 14 13:51:06 2017 -0800
Committer: John Wagenleitner <jw...@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)
 


[2/2] groovy git commit: minor cleanup and refactoring (closes #477)

Posted by jw...@apache.org.
minor cleanup and refactoring (closes #477)


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

Branch: refs/heads/master
Commit: 048b6586b741009f5497c6bfdb7fb1aad6c607be
Parents: 76f6e62
Author: John Wagenleitner <jw...@apache.org>
Authored: Sat Jan 14 14:09:59 2017 -0800
Committer: John Wagenleitner <jw...@apache.org>
Committed: Sat Jan 14 16:57:47 2017 -0800

----------------------------------------------------------------------
 .../swingui/ScriptToTreeNodeAdapter.groovy      | 88 ++++++++++++++++----
 1 file changed, 71 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/048b6586/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 553fc1c..e39e1b0 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
@@ -20,9 +20,8 @@ package groovy.inspect.swingui
 
 import groovy.text.GStringTemplateEngine
 import groovy.text.Template
-import groovy.transform.ThreadInterrupt
+import groovy.transform.PackageScope
 import org.codehaus.groovy.classgen.asm.BytecodeHelper
-import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer
 
 import java.util.concurrent.atomic.AtomicBoolean
 import org.codehaus.groovy.GroovyBugError
@@ -77,14 +76,14 @@ class ScriptToTreeNodeAdapter {
                     classNameToStringForm.putAll(customConfig.toProperties())
                 }
             }
-        }catch(ex) {
+        } catch(ex) {
             // on restricted environments like, such calls may fail, but that should not prevent the class
             // from being loaded. Tree nodes can still get rendered with their simple names.
             classNameToStringForm = new Properties()  
         }
     }
     
-    def ScriptToTreeNodeAdapter(classLoader, showScriptFreeForm, showScriptClass, showClosureClasses, nodeMaker) {
+    ScriptToTreeNodeAdapter(classLoader, showScriptFreeForm, showScriptClass, showClosureClasses, nodeMaker) {
         this.classLoader = classLoader ?: new GroovyClassLoader(getClass().classLoader)
         this.showScriptFreeForm = showScriptFreeForm
         this.showScriptClass = showScriptClass
@@ -177,7 +176,7 @@ class ScriptToTreeNodeAdapter {
      * Handles the property file templating for node types.
      */
     private String getStringForm(node) {
-        def templateTextForNode = classNameToStringForm[node.class.name] 
+        String templateTextForNode = classNameToStringForm[node.class.name]
         if (templateTextForNode) {
             GStringTemplateEngine engine = new GStringTemplateEngine()
             Template template = engine.createTemplate(templateTextForNode)
@@ -207,11 +206,11 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
 
     final nodeMaker
 
-    def TreeNodeBuildingNodeOperation(ScriptToTreeNodeAdapter adapter, showScriptFreeForm, showScriptClass) {
+    TreeNodeBuildingNodeOperation(ScriptToTreeNodeAdapter adapter, showScriptFreeForm, showScriptClass) {
         this(adapter, showScriptFreeForm, showScriptClass, false)
     }
 
-    def TreeNodeBuildingNodeOperation(ScriptToTreeNodeAdapter adapter, showScriptFreeForm, showScriptClass, showClosureClasses) {
+    TreeNodeBuildingNodeOperation(ScriptToTreeNodeAdapter adapter, showScriptFreeForm, showScriptClass, showClosureClasses) {
         if (!adapter) throw new IllegalArgumentException('Null: adapter')
         this.adapter = adapter
         this.showScriptFreeForm = showScriptFreeForm
@@ -221,6 +220,7 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
         root = nodeMaker.makeNode('root')
     }
 
+    @Override
     void call(SourceUnit source, GeneratorContext context, ClassNode classNode) {
         // module node
         if (!sourceCollected.getAndSet(true) && showScriptFreeForm) {
@@ -270,7 +270,7 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
         }
     }
 
-    private List collectAnnotationData(parent, String name, ClassNode classNode) {
+    private void collectAnnotationData(parent, String name, ClassNode classNode) {
         def allAnnotations = nodeMaker.makeNode(name)
         if (classNode.annotations) parent.add(allAnnotations)
         classNode.annotations?.each {AnnotationNode annotationNode ->
@@ -279,7 +279,7 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
         }
     }
 
-    private def collectPropertyData(parent, String name, ClassNode classNode) {
+    private void collectPropertyData(parent, String name, ClassNode classNode) {
         def allProperties = nodeMaker.makeNode(name)
         if (classNode.properties) parent.add(allProperties)
         classNode.properties?.each {PropertyNode propertyNode ->
@@ -293,7 +293,7 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
         }
     }
 
-    private def collectFieldData(parent, String name, ClassNode classNode) {
+    private void collectFieldData(parent, String name, ClassNode classNode) {
         def allFields = nodeMaker.makeNode(name)
         if (classNode.fields) parent.add(allFields)
         classNode.fields?.each {FieldNode fieldNode ->
@@ -307,14 +307,14 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
         }
     }
 
-    private def collectMethodData(parent, String name, ClassNode classNode) {
+    private void collectMethodData(parent, String name, ClassNode classNode) {
         def allMethods = nodeMaker.makeNode(name)
         if (classNode.methods) parent.add(allMethods)
 
         doCollectMethodData(allMethods, classNode.methods)
     }
 
-    private def collectModuleNodeMethodData(String name, List methods) {
+    private void collectModuleNodeMethodData(String name, List methods) {
         if(!methods) return
         def allMethods = nodeMaker.makeNode(name)
         root.add(allMethods)
@@ -322,7 +322,7 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
         doCollectMethodData(allMethods, methods)
     }
     
-    private def doCollectMethodData(allMethods, List methods) {
+    private void doCollectMethodData(allMethods, List methods) {
         methods?.each {MethodNode methodNode ->
             def ggrandchild = adapter.make(methodNode)
             allMethods.add(ggrandchild)
@@ -347,7 +347,7 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
         }
     }
 
-    private def collectConstructorData(parent, String name, ClassNode classNode) {
+    private void collectConstructorData(parent, String name, ClassNode classNode) {
         def allCtors = nodeMaker.makeNode(name)
         if (classNode.declaredConstructors) parent.add(allCtors)
         classNode.declaredConstructors?.each {ConstructorNode ctorNode ->
@@ -386,7 +386,8 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
  *
  * @author Hamlet D'Arcy
 */
-@groovy.transform.PackageScope class TreeNodeBuildingVisitor extends CodeVisitorSupport {
+@PackageScope
+class TreeNodeBuildingVisitor extends CodeVisitorSupport {
 
     def currentNode
     private final adapter
@@ -395,7 +396,7 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
      * Creates the visitor. A file named AstBrowserProperties.groovy is located which is
      * a property files the describes how to represent ASTNode types as Strings.
      */
-    private TreeNodeBuildingVisitor(adapter) {
+    TreeNodeBuildingVisitor(adapter) {
         if (!adapter) throw new IllegalArgumentException('Null: adapter')
         this.adapter = adapter
     }
@@ -429,110 +430,137 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
         }
     }
 
+    @Override
     void visitBlockStatement(BlockStatement node) {
         addNode(node, BlockStatement, { super.visitBlockStatement(it) })
     }
 
+    @Override
     void visitForLoop(ForStatement node) {
         addNode(node, ForStatement, { super.visitForLoop(it) })
     }
 
+    @Override
     void visitWhileLoop(WhileStatement node) {
         addNode(node, WhileStatement, { super.visitWhileLoop(it) })
     }
 
+    @Override
     void visitDoWhileLoop(DoWhileStatement node) {
         addNode(node, DoWhileStatement, { super.visitDoWhileLoop(it) })
     }
 
+    @Override
     void visitIfElse(IfStatement node) {
         addNode(node, IfStatement, { super.visitIfElse(it) })
     }
 
+    @Override
     void visitExpressionStatement(ExpressionStatement node) {
         addNode(node, ExpressionStatement, { super.visitExpressionStatement(it) })
     }
 
+    @Override
     void visitReturnStatement(ReturnStatement node) {
         addNode(node, ReturnStatement, { super.visitReturnStatement(it) })
     }
 
+    @Override
     void visitAssertStatement(AssertStatement node) {
         addNode(node, AssertStatement, { super.visitAssertStatement(it) })
     }
 
+    @Override
     void visitTryCatchFinally(TryCatchStatement node) {
         addNode(node, TryCatchStatement, { super.visitTryCatchFinally(it) })
     }
-    
+
+    @Override
     protected void visitEmptyStatement(EmptyStatement node) {
         addNode(node, EmptyStatement, { super.visitEmptyStatement(it) })
     }
 
+    @Override
     void visitSwitch(SwitchStatement node) {
         addNode(node, SwitchStatement, { super.visitSwitch(it) })
     }
 
+    @Override
     void visitCaseStatement(CaseStatement node) {
         addNode(node, CaseStatement, { super.visitCaseStatement(it) })
     }
 
+    @Override
     void visitBreakStatement(BreakStatement node) {
         addNode(node, BreakStatement, { super.visitBreakStatement(it) })
     }
 
+    @Override
     void visitContinueStatement(ContinueStatement node) {
         addNode(node, ContinueStatement, { super.visitContinueStatement(it) })
     }
 
+    @Override
     void visitSynchronizedStatement(SynchronizedStatement node) {
         addNode(node, SynchronizedStatement, { super.visitSynchronizedStatement(it) })
     }
 
+    @Override
     void visitThrowStatement(ThrowStatement node) {
         addNode(node, ThrowStatement, { super.visitThrowStatement(it) })
     }
 
+    @Override
     void visitMethodCallExpression(MethodCallExpression node) {
         addNode(node, MethodCallExpression, { super.visitMethodCallExpression(it) })
     }
 
+    @Override
     void visitStaticMethodCallExpression(StaticMethodCallExpression node) {
         addNode(node, StaticMethodCallExpression, { super.visitStaticMethodCallExpression(it) })
     }
 
+    @Override
     void visitConstructorCallExpression(ConstructorCallExpression node) {
         addNode(node, ConstructorCallExpression, { super.visitConstructorCallExpression(it) })
     }
 
+    @Override
     void visitBinaryExpression(BinaryExpression node) {
         addNode(node, BinaryExpression, { super.visitBinaryExpression(it) })
     }
 
+    @Override
     void visitTernaryExpression(TernaryExpression node) {
         addNode(node, TernaryExpression, { super.visitTernaryExpression(it) })
     }
 
+    @Override
     void visitShortTernaryExpression(ElvisOperatorExpression node) {
         addNode(node, ElvisOperatorExpression, { super.visitShortTernaryExpression(it) })
     }
 
+    @Override
     void visitPostfixExpression(PostfixExpression node) {
         addNode(node, PostfixExpression, { super.visitPostfixExpression(it) })
     }
 
+    @Override
     void visitPrefixExpression(PrefixExpression node) {
         addNode(node, PrefixExpression, { super.visitPrefixExpression(it) })
     }
 
+    @Override
     void visitBooleanExpression(BooleanExpression node) {
         addNode(node, BooleanExpression, { super.visitBooleanExpression(it) })
     }
 
+    @Override
     void visitNotExpression(NotExpression node) {
         addNode(node, NotExpression, { super.visitNotExpression(it) })
     }
 
+    @Override
     void visitClosureExpression(ClosureExpression node) {
         addNode(node, ClosureExpression, { 
           it.parameters?.each { parameter -> visitParameter(parameter) }
@@ -551,66 +579,82 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
         })
     }
 
+    @Override
     void visitTupleExpression(TupleExpression node) {
         addNode(node, TupleExpression, { super.visitTupleExpression(it) })
     }
 
+    @Override
     void visitListExpression(ListExpression node) {
         addNode(node, ListExpression, { super.visitListExpression(it) })
     }
 
+    @Override
     void visitArrayExpression(ArrayExpression node) {
         addNode(node, ArrayExpression, { super.visitArrayExpression(it) })
     }
 
+    @Override
     void visitMapExpression(MapExpression node) {
         addNode(node, MapExpression, { super.visitMapExpression(it) })
     }
 
+    @Override
     void visitMapEntryExpression(MapEntryExpression node) {
         addNode(node, MapEntryExpression, { super.visitMapEntryExpression(it) })
     }
 
+    @Override
     void visitRangeExpression(RangeExpression node) {
         addNode(node, RangeExpression, { super.visitRangeExpression(it) })
     }
 
+    @Override
     void visitSpreadExpression(SpreadExpression node) {
         addNode(node, SpreadExpression, { super.visitSpreadExpression(it) })
     }
 
+    @Override
     void visitSpreadMapExpression(SpreadMapExpression node) {
         addNode(node, SpreadMapExpression, { super.visitSpreadMapExpression(it) })
     }
 
+    @Override
     void visitMethodPointerExpression(MethodPointerExpression node) {
         addNode(node, MethodPointerExpression, { super.visitMethodPointerExpression(it) })
     }
 
+    @Override
     void visitUnaryMinusExpression(UnaryMinusExpression node) {
         addNode(node, UnaryMinusExpression, { super.visitUnaryMinusExpression(it) })
     }
 
+    @Override
     void visitUnaryPlusExpression(UnaryPlusExpression node) {
         addNode(node, UnaryPlusExpression, { super.visitUnaryPlusExpression(it) })
     }
 
+    @Override
     void visitBitwiseNegationExpression(BitwiseNegationExpression node) {
         addNode(node, BitwiseNegationExpression, { super.visitBitwiseNegationExpression(it) })
     }
 
+    @Override
     void visitCastExpression(CastExpression node) {
         addNode(node, CastExpression, { super.visitCastExpression(it) })
     }
 
+    @Override
     void visitConstantExpression(ConstantExpression node) {
         addNode(node, ConstantExpression, { super.visitConstantExpression(it) })
     }
 
+    @Override
     void visitClassExpression(ClassExpression node) {
         addNode(node, ClassExpression, { super.visitClassExpression(it) })
     }
 
+    @Override
     void visitVariableExpression(VariableExpression node) {
         addNode(node, VariableExpression, { VariableExpression it ->
             if (it.accessedVariable) {
@@ -623,26 +667,32 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
         })
     }
 
+    @Override
     void visitDeclarationExpression(DeclarationExpression node) {
         addNode(node, DeclarationExpression, { super.visitDeclarationExpression(it) })
     }
 
+    @Override
     void visitPropertyExpression(PropertyExpression node) {
         addNode(node, PropertyExpression, { super.visitPropertyExpression(it) })
     }
 
+    @Override
     void visitAttributeExpression(AttributeExpression node) {
         addNode(node, AttributeExpression, { super.visitAttributeExpression(it) })
     }
 
+    @Override
     void visitFieldExpression(FieldExpression node) {
         addNode(node, FieldExpression, { super.visitFieldExpression(it) })
     }
 
+    @Override
     void visitGStringExpression(GStringExpression node) {
         addNode(node, GStringExpression, { super.visitGStringExpression(it) })
     }
 
+    @Override
     void visitCatchStatement(CatchStatement node) {
         addNode(node, CatchStatement, { 
             if (it.variable) visitParameter(it.variable) 
@@ -650,18 +700,22 @@ class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
         })
     }
 
+    @Override
     void visitArgumentlistExpression(ArgumentListExpression node) {
         addNode(node, ArgumentListExpression, { super.visitArgumentlistExpression(it) })
     }
 
+    @Override
     void visitClosureListExpression(ClosureListExpression node) {
         addNode(node, ClosureListExpression, { super.visitClosureListExpression(it) })
     }
 
+    @Override
     void visitBytecodeExpression(BytecodeExpression node) {
         addNode(node, BytecodeExpression, { super.visitBytecodeExpression(it) })
     }
 
+    @Override
     protected void visitListOfExpressions(List<? extends Expression> list) {
         list.each { Expression node ->
             if (node instanceof NamedArgumentListExpression ) {