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

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

commit 675dd0560b363b0200947d3e7bf6ced363645c0e
Author: Daniel Sun <[email protected]>
AuthorDate: Sat Mar 7 20:23:38 2020 +0800

    GROOVY-9447: Add a parse tree viewer to groovy console
---
 .../src/main/groovy/groovy/console/ui/Console.groovy   | 18 ++++++++++++++++++
 .../groovy/groovy/console/ui/ConsoleActions.groovy     |  9 ++++++++-
 .../groovy/groovy/console/ui/view/BasicMenuBar.groovy  |  1 +
 .../groovy/groovy/console/ui/view/MacOSXMenuBar.groovy |  1 +
 4 files changed, 28 insertions(+), 1 deletion(-)

diff --git 
a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy 
b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
index 22d18fd..60a91aa 100644
--- 
a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
+++ 
b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
@@ -27,8 +27,14 @@ import groovy.swing.SwingBuilder
 import groovy.transform.CompileStatic
 import groovy.transform.ThreadInterrupt
 import groovy.ui.GroovyMain
+import org.antlr.v4.gui.TestRig
+import org.antlr.v4.runtime.CharStream
+import org.antlr.v4.runtime.CharStreams
+import org.antlr.v4.runtime.CommonTokenStream
 import org.apache.groovy.antlr.LexerFrame
 import org.apache.groovy.io.StringBuilderWriter
+import org.apache.groovy.parser.antlr4.GroovyLangLexer
+import org.apache.groovy.parser.antlr4.GroovyLangParser
 import org.apache.groovy.util.SystemUtil
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.control.ErrorCollector
@@ -1041,6 +1047,18 @@ class Console implements CaretListener, 
HyperlinkListener, ComponentListener, Fo
         new AstBrowser(inputArea, rootElement, shell.getClassLoader(), 
config).run({ inputArea.getText() })
     }
 
+    void inspectCst(EventObject evt = null) {
+        String text = this.inputEditor.textEditor.text
+
+        CharStream charStream = CharStreams.fromReader(new StringReader(text))
+        GroovyLangLexer lexer = new GroovyLangLexer(charStream)
+        CommonTokenStream tokens = new CommonTokenStream(lexer)
+        GroovyLangParser parser = new GroovyLangParser(tokens)
+
+        def tr = new TestRig(new String[] { 'Groovy', 'compilationUnit', 
'-gui' })
+        tr.process(lexer, GroovyLangParser.class, parser, charStream)
+    }
+
     void inspectTokens(EventObject evt = null) {
         def content = inputArea.getText()
         def lf = new LexerFrame(new StringReader(content))
diff --git 
a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ConsoleActions.groovy
 
b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ConsoleActions.groovy
index 2b93fe8..57a3f19 100644
--- 
a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ConsoleActions.groovy
+++ 
b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ConsoleActions.groovy
@@ -257,12 +257,19 @@ inspectVariablesAction = action(
 )
 
 inspectAstAction = action(
-        name: 'Inspect Ast',
+        name: 'Inspect AST',
         closure: controller.&inspectAst,
         mnemonic: 'A',
         accelerator: shortcut('T'),
 )
 
+inspectCstAction = action(
+        name: 'Inspect CST',
+        closure: controller.&inspectCst,
+        mnemonic: 'C',
+        accelerator: KeyStroke.getKeyStroke(KeyEvent.VK_T, 
InputEvent.CTRL_DOWN_MASK + InputEvent.ALT_DOWN_MASK)
+)
+
 inspectTokensAction = action(
         name: 'Inspect Tokens',
         closure: controller.&inspectTokens,
diff --git 
a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/view/BasicMenuBar.groovy
 
b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/view/BasicMenuBar.groovy
index 84328a5..4760c66 100644
--- 
a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/view/BasicMenuBar.groovy
+++ 
b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/view/BasicMenuBar.groovy
@@ -94,6 +94,7 @@ menuBar {
         menuItem(inspectLastAction)
         menuItem(inspectVariablesAction)
         menuItem(inspectAstAction)
+        menuItem(inspectCstAction)
         menuItem(inspectTokensAction)
     }
 
diff --git 
a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/view/MacOSXMenuBar.groovy
 
b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/view/MacOSXMenuBar.groovy
index b85b4ee..58a78a7 100644
--- 
a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/view/MacOSXMenuBar.groovy
+++ 
b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/view/MacOSXMenuBar.groovy
@@ -145,6 +145,7 @@ menuBar {
         menuItem(inspectLastAction, icon:null)
         menuItem(inspectVariablesAction, icon:null)
         menuItem(inspectAstAction, icon:null)
+        menuItem(inspectCstAction, icon:null)
         menuItem(inspectTokensAction, icon:null)
     }
 }

Reply via email to