You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2022/07/07 01:52:25 UTC

[groovy] branch GROOVY_4_0_X updated: GROOVY-10680: GroovyConsole should display record components

This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push:
     new 052892cd76 GROOVY-10680: GroovyConsole should display record components
052892cd76 is described below

commit 052892cd766e83dbb4d4962a4c24ab4791058f57
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Jul 7 09:01:18 2022 +1000

    GROOVY-10680: GroovyConsole should display record components
---
 .../groovy/console/ui/ScriptToTreeNodeAdapter.groovy       | 14 ++++++++++++++
 .../groovy/console/ui/AstBrowserProperties.groovy          |  1 +
 2 files changed, 15 insertions(+)

diff --git a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ScriptToTreeNodeAdapter.groovy b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ScriptToTreeNodeAdapter.groovy
index 426590ffd5..411af2c354 100644
--- a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ScriptToTreeNodeAdapter.groovy
+++ b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ScriptToTreeNodeAdapter.groovy
@@ -36,6 +36,7 @@ import org.codehaus.groovy.ast.MethodNode
 import org.codehaus.groovy.ast.ModuleNode
 import org.codehaus.groovy.ast.Parameter
 import org.codehaus.groovy.ast.PropertyNode
+import org.codehaus.groovy.ast.RecordComponentNode
 import org.codehaus.groovy.ast.expr.ArgumentListExpression
 import org.codehaus.groovy.ast.expr.ArrayExpression
 import org.codehaus.groovy.ast.expr.AttributeExpression
@@ -312,6 +313,7 @@ class TreeNodeBuildingNodeOperation implements CompilationUnit.IPrimaryClassNode
         collectMethodData(child, 'Methods', classNode)
         collectFieldData(child, 'Fields', classNode)
         collectPropertyData(child, 'Properties', classNode)
+        collectRecordComponentData(child, 'Record Components', classNode)
         collectAnnotationData(child, 'Annotations', classNode.annotations)
 
         if (showClosureClasses)  {
@@ -336,6 +338,7 @@ class TreeNodeBuildingNodeOperation implements CompilationUnit.IPrimaryClassNode
             collectMethodData(child, 'Methods', innerClassNode)
             collectFieldData(child, 'Fields', innerClassNode)
             collectPropertyData(child, 'Properties', innerClassNode)
+            collectRecordComponentData(child, 'Record Components', classNode)
             collectAnnotationData(child, 'Annotations', innerClassNode.annotations)
         }
     }
@@ -362,6 +365,17 @@ class TreeNodeBuildingNodeOperation implements CompilationUnit.IPrimaryClassNode
         }
     }
 
+    private void collectRecordComponentData(parent, String name, ClassNode classNode) {
+        def allProperties = nodeMaker.makeNode(name)
+        if (classNode.properties) parent.add(allProperties)
+        classNode.recordComponents?.each { RecordComponentNode recordComponentNode ->
+            def ggrandchild = adapter.make(recordComponentNode)
+            allProperties.add(ggrandchild)
+            collectTypeData(ggrandchild, 'Type', recordComponentNode.type)
+            collectAnnotationData(ggrandchild, 'Annotations', recordComponentNode.annotations)
+        }
+    }
+
     private void collectFieldData(parent, String name, ClassNode classNode) {
         if (classNode.fields) {
             def allFields = nodeMaker.makeNode(name)
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/AstBrowserProperties.groovy b/subprojects/groovy-console/src/main/resources/groovy/console/ui/AstBrowserProperties.groovy
index 2866d30aad..ae090f2e9b 100644
--- a/subprojects/groovy-console/src/main/resources/groovy/console/ui/AstBrowserProperties.groovy
+++ b/subprojects/groovy-console/src/main/resources/groovy/console/ui/AstBrowserProperties.groovy
@@ -28,6 +28,7 @@ org {
                 MethodNode          = "MethodNode - \$expression.name"
                 FieldNode           = "FieldNode - \$expression.name : \$expression.type"
                 PropertyNode        = "PropertyNode - \${expression.field?.name} : \${expression.field?.type}"
+                RecordComponentNode = "RecordComponentNode - \$expression.name : \$expression.type"
                 AnnotationNode      = "AnnotationNode - \${expression.classNode?.name}"
                 Parameter           = "Parameter - \$expression.name"
                 DynamicVariable     = "DynamicVariable - \$expression.name"