You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/03/10 02:44:13 UTC
[groovy] 01/03: GROOVY-9447: Add a parse tree viewer to groovy
console
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 <su...@apache.org>
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)
}
}