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) } }
